From d98b4c1343756389fc4a0d78757fe465d87f6f47 Mon Sep 17 00:00:00 2001 From: vladimir032 Date: Sat, 8 Aug 2026 00:15:48 +0300 Subject: [PATCH] first commit --- .gitignore | 7 + admin-server/card-reader.log | 0 admin-server/config.env | 17 + admin-server/config/cors.js | 12 + admin-server/config/session.js | 22 + admin-server/controllers/authController.js | 40 + admin-server/controllers/cardController.js | 70 + admin-server/controllers/healthController.js | 51 + admin-server/controllers/logsController.js | 99 + admin-server/controllers/modersController.js | 72 + .../controllers/settingsController.js | 174 + admin-server/logger.js | 53 + admin-server/logs/admin.log | 1408 + admin-server/logs/cards.log | 0 admin-server/middleware/checkAuth.js | 7 + admin-server/middleware/csrf.js | 17 + admin-server/middleware/errorHandler.js | 8 + admin-server/moders/config.env | 5 + admin-server/moders/db.js | 20 + .../moders/middleware/requireModerator.js | 6 + admin-server/moders/routes/content.js | 100 + admin-server/moders/routes/moderAuth.js | 81 + admin-server/package-lock.json | 3298 + admin-server/package.json | 36 + admin-server/public/app.js | 868 + admin-server/public/editor.html | 69 + admin-server/public/editor.js | 209 + admin-server/public/index.html | 201 + admin-server/public/login.html | 39 + admin-server/public/style.css | 557 + admin-server/routes/auth.js | 10 + admin-server/routes/card.js | 8 + admin-server/routes/health.js | 8 + admin-server/routes/logs.js | 10 + admin-server/routes/moders.js | 11 + admin-server/routes/monitoring.js | 8 + admin-server/routes/settings.js | 18 + admin-server/server.js | 114 + admin-server/services/websocket.js | 93 + admin-server/uploads/1752673443018-580872.png | Bin 0 -> 8837 bytes admin-server/uploads/1752736681880-254035.png | Bin 0 -> 8837 bytes admin-server/uploads/1752741776453-525354.png | Bin 0 -> 8837 bytes admin-server/uploads/1752742234633-995414.png | Bin 0 -> 8837 bytes admin-server/uploads/1752742255814-836795.png | Bin 0 -> 8837 bytes admin-server1/card-reader.log | 0 admin-server1/config.env | 17 + admin-server1/config/cors.js | 12 + admin-server1/config/session.js | 22 + admin-server1/controllers/authController.js | 40 + admin-server1/controllers/cardController.js | 70 + admin-server1/controllers/healthController.js | 165 + admin-server1/controllers/logsController.js | 99 + admin-server1/controllers/modersController.js | 72 + .../controllers/settingsController.js | 172 + admin-server1/logger.js | 53 + admin-server1/logs/admin.log | 1356 + admin-server1/logs/cards.log | 0 admin-server1/main.js | 41 + admin-server1/middleware/checkAuth.js | 7 + admin-server1/middleware/csrf.js | 17 + admin-server1/middleware/errorHandler.js | 8 + admin-server1/moders/config.env | 5 + admin-server1/moders/db.js | 20 + .../moders/middleware/requireModerator.js | 6 + admin-server1/moders/routes/content.js | 100 + admin-server1/moders/routes/moderAuth.js | 81 + admin-server1/package-lock.json | 3423 + admin-server1/package.json | 36 + admin-server1/public/app.js | 805 + admin-server1/public/editor.html | 69 + admin-server1/public/editor.js | 190 + admin-server1/public/index.html | 188 + admin-server1/public/login.html | 39 + admin-server1/public/style.css | 557 + admin-server1/routes/auth.js | 10 + admin-server1/routes/card.js | 8 + admin-server1/routes/health.js | 8 + admin-server1/routes/logs.js | 10 + admin-server1/routes/moders.js | 11 + admin-server1/routes/monitoring.js | 8 + admin-server1/routes/settings.js | 18 + admin-server1/server.js | 114 + admin-server1/services/websocket.js | 93 + .../uploads/1752673443018-580872.png | Bin 0 -> 8837 bytes .../uploads/1752736681880-254035.png | Bin 0 -> 8837 bytes .../uploads/1752741776453-525354.png | Bin 0 -> 8837 bytes .../uploads/1752742234633-995414.png | Bin 0 -> 8837 bytes .../uploads/1752742255814-836795.png | Bin 0 -> 8837 bytes backend/config.env | 12 + backend/config.json | 59 + backend/package-lock.json | 4013 + backend/package.json | 28 + backend/src/config/db.js | 248 + backend/src/config/logger.js | 62 + backend/src/config/logger_cards.js | 60 + backend/src/config/startArchiveApp.js | 7 + backend/src/config/startArchiveCards.js | 7 + backend/src/routes/employee.js | 280 + backend/src/routes/handbook.js | 37 + backend/src/server.js | 329 + backend/startArchive/app.bat | 3 + backend/startArchive/cards.bat | 3 + frontend/.gitignore | 23 + frontend/README.md | 46 + frontend/librgsec.dll | Bin 0 -> 436224 bytes frontend/package-lock.json | 24440 +++++ frontend/package.json | 104 + frontend/public/README.md | 7 + frontend/public/config.env | 2 + frontend/public/electron.js | 201 + frontend/public/favicon.ico | Bin 0 -> 3870 bytes frontend/public/handbook.docx | Bin 0 -> 111532 bytes frontend/public/handbook1.docx | Bin 0 -> 107177 bytes frontend/public/handbookBACK.docx | Bin 0 -> 108167 bytes frontend/public/index.html | 49 + frontend/public/logo192.png | Bin 0 -> 5347 bytes frontend/public/logo512.png | Bin 0 -> 9664 bytes frontend/public/manifest.json | 25 + frontend/public/payslips/012025/23959.pdf | Bin 0 -> 672232 bytes frontend/public/payslips/test.pdf | Bin 0 -> 672232 bytes frontend/public/pdf.worker.js | 75390 ++++++++++++++++ frontend/public/pdf.worker.min.mjs | 29 + frontend/public/preload.js | 19 + frontend/public/robots.txt | 4 + frontend/src/App.css | 38 + frontend/src/App.test.tsx | 9 + frontend/src/App.tsx | 99 + frontend/src/components/EmployeeInfo.tsx | 102 + frontend/src/components/GuestMode.tsx | 241 + frontend/src/components/LoginWindow.tsx | 105 + frontend/src/components/PayslipViewer.tsx | 45 + frontend/src/config.js | 6 + frontend/src/config.json | 6 + frontend/src/global.d.ts | 23 + frontend/src/index.css | 13 + frontend/src/index.tsx | 43 + frontend/src/librgsec.dll | Bin 0 -> 436224 bytes frontend/src/logo.svg | 1 + frontend/src/r5usb.js | 154 + frontend/src/r5usb_example.js | 209 + frontend/src/react-app-env.d.ts | 1 + frontend/src/reportWebVitals.ts | 15 + frontend/src/setupTests.ts | 5 + frontend/src/styles/main.css | 401 + frontend/src/types/textract.d.ts | 18 + frontend/tsconfig.json | 30 + 146 files changed, 122827 insertions(+) create mode 100644 .gitignore create mode 100644 admin-server/card-reader.log create mode 100644 admin-server/config.env create mode 100644 admin-server/config/cors.js create mode 100644 admin-server/config/session.js create mode 100644 admin-server/controllers/authController.js create mode 100644 admin-server/controllers/cardController.js create mode 100644 admin-server/controllers/healthController.js create mode 100644 admin-server/controllers/logsController.js create mode 100644 admin-server/controllers/modersController.js create mode 100644 admin-server/controllers/settingsController.js create mode 100644 admin-server/logger.js create mode 100644 admin-server/logs/admin.log create mode 100644 admin-server/logs/cards.log create mode 100644 admin-server/middleware/checkAuth.js create mode 100644 admin-server/middleware/csrf.js create mode 100644 admin-server/middleware/errorHandler.js create mode 100644 admin-server/moders/config.env create mode 100644 admin-server/moders/db.js create mode 100644 admin-server/moders/middleware/requireModerator.js create mode 100644 admin-server/moders/routes/content.js create mode 100644 admin-server/moders/routes/moderAuth.js create mode 100644 admin-server/package-lock.json create mode 100644 admin-server/package.json create mode 100644 admin-server/public/app.js create mode 100644 admin-server/public/editor.html create mode 100644 admin-server/public/editor.js create mode 100644 admin-server/public/index.html create mode 100644 admin-server/public/login.html create mode 100644 admin-server/public/style.css create mode 100644 admin-server/routes/auth.js create mode 100644 admin-server/routes/card.js create mode 100644 admin-server/routes/health.js create mode 100644 admin-server/routes/logs.js create mode 100644 admin-server/routes/moders.js create mode 100644 admin-server/routes/monitoring.js create mode 100644 admin-server/routes/settings.js create mode 100644 admin-server/server.js create mode 100644 admin-server/services/websocket.js create mode 100644 admin-server/uploads/1752673443018-580872.png create mode 100644 admin-server/uploads/1752736681880-254035.png create mode 100644 admin-server/uploads/1752741776453-525354.png create mode 100644 admin-server/uploads/1752742234633-995414.png create mode 100644 admin-server/uploads/1752742255814-836795.png create mode 100644 admin-server1/card-reader.log create mode 100644 admin-server1/config.env create mode 100644 admin-server1/config/cors.js create mode 100644 admin-server1/config/session.js create mode 100644 admin-server1/controllers/authController.js create mode 100644 admin-server1/controllers/cardController.js create mode 100644 admin-server1/controllers/healthController.js create mode 100644 admin-server1/controllers/logsController.js create mode 100644 admin-server1/controllers/modersController.js create mode 100644 admin-server1/controllers/settingsController.js create mode 100644 admin-server1/logger.js create mode 100644 admin-server1/logs/admin.log create mode 100644 admin-server1/logs/cards.log create mode 100644 admin-server1/main.js create mode 100644 admin-server1/middleware/checkAuth.js create mode 100644 admin-server1/middleware/csrf.js create mode 100644 admin-server1/middleware/errorHandler.js create mode 100644 admin-server1/moders/config.env create mode 100644 admin-server1/moders/db.js create mode 100644 admin-server1/moders/middleware/requireModerator.js create mode 100644 admin-server1/moders/routes/content.js create mode 100644 admin-server1/moders/routes/moderAuth.js create mode 100644 admin-server1/package-lock.json create mode 100644 admin-server1/package.json create mode 100644 admin-server1/public/app.js create mode 100644 admin-server1/public/editor.html create mode 100644 admin-server1/public/editor.js create mode 100644 admin-server1/public/index.html create mode 100644 admin-server1/public/login.html create mode 100644 admin-server1/public/style.css create mode 100644 admin-server1/routes/auth.js create mode 100644 admin-server1/routes/card.js create mode 100644 admin-server1/routes/health.js create mode 100644 admin-server1/routes/logs.js create mode 100644 admin-server1/routes/moders.js create mode 100644 admin-server1/routes/monitoring.js create mode 100644 admin-server1/routes/settings.js create mode 100644 admin-server1/server.js create mode 100644 admin-server1/services/websocket.js create mode 100644 admin-server1/uploads/1752673443018-580872.png create mode 100644 admin-server1/uploads/1752736681880-254035.png create mode 100644 admin-server1/uploads/1752741776453-525354.png create mode 100644 admin-server1/uploads/1752742234633-995414.png create mode 100644 admin-server1/uploads/1752742255814-836795.png create mode 100644 backend/config.env create mode 100644 backend/config.json create mode 100644 backend/package-lock.json create mode 100644 backend/package.json create mode 100644 backend/src/config/db.js create mode 100644 backend/src/config/logger.js create mode 100644 backend/src/config/logger_cards.js create mode 100644 backend/src/config/startArchiveApp.js create mode 100644 backend/src/config/startArchiveCards.js create mode 100644 backend/src/routes/employee.js create mode 100644 backend/src/routes/handbook.js create mode 100644 backend/src/server.js create mode 100644 backend/startArchive/app.bat create mode 100644 backend/startArchive/cards.bat create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/librgsec.dll create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/README.md create mode 100644 frontend/public/config.env create mode 100644 frontend/public/electron.js create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/public/handbook.docx create mode 100644 frontend/public/handbook1.docx create mode 100644 frontend/public/handbookBACK.docx create mode 100644 frontend/public/index.html create mode 100644 frontend/public/logo192.png create mode 100644 frontend/public/logo512.png create mode 100644 frontend/public/manifest.json create mode 100644 frontend/public/payslips/012025/23959.pdf create mode 100644 frontend/public/payslips/test.pdf create mode 100644 frontend/public/pdf.worker.js create mode 100644 frontend/public/pdf.worker.min.mjs create mode 100644 frontend/public/preload.js create mode 100644 frontend/public/robots.txt create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.test.tsx create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/components/EmployeeInfo.tsx create mode 100644 frontend/src/components/GuestMode.tsx create mode 100644 frontend/src/components/LoginWindow.tsx create mode 100644 frontend/src/components/PayslipViewer.tsx create mode 100644 frontend/src/config.js create mode 100644 frontend/src/config.json create mode 100644 frontend/src/global.d.ts create mode 100644 frontend/src/index.css create mode 100644 frontend/src/index.tsx create mode 100644 frontend/src/librgsec.dll create mode 100644 frontend/src/logo.svg create mode 100644 frontend/src/r5usb.js create mode 100644 frontend/src/r5usb_example.js create mode 100644 frontend/src/react-app-env.d.ts create mode 100644 frontend/src/reportWebVitals.ts create mode 100644 frontend/src/setupTests.ts create mode 100644 frontend/src/styles/main.css create mode 100644 frontend/src/types/textract.d.ts create mode 100644 frontend/tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d9736bb --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +/frontend/node_modules +/frontend/build +/backend/node_modules +/backend/build +/admin-server/node_modules +/backend/logs +/admin-server1/node_modules \ No newline at end of file diff --git a/admin-server/card-reader.log b/admin-server/card-reader.log new file mode 100644 index 0000000..e69de29 diff --git a/admin-server/config.env b/admin-server/config.env new file mode 100644 index 0000000..54eb9ed --- /dev/null +++ b/admin-server/config.env @@ -0,0 +1,17 @@ +PORT=3005 +DB_USER=prog +DB_PASSWORD=prog +DB_SERVER=192.168.31.34 +DB_NAME=ASU + +BACKEND_URL=http://localhost:3001 +ADMIN_URL=http://localhost:3005 +ADMIN_PASSWORD=2 +SECRET_KEY=njdsn30423423fndjjfsn34u +LOGS_DIR=../backend/logs +CARD_LOG_PATH=../backend/logs/cards.log +ADMIN_LOG=./logs/admin.log +ADMIN_LOG_DIR=../logs +ALLOWED_ORIGINS=http://localhost:3005, http://localhost:3001 +BACKEND_APP_LOG=../backend/logs/app.log +CARD_LOG=../backend/logs/cards.log \ No newline at end of file diff --git a/admin-server/config/cors.js b/admin-server/config/cors.js new file mode 100644 index 0000000..4ee5d61 --- /dev/null +++ b/admin-server/config/cors.js @@ -0,0 +1,12 @@ +const allowedOrigins = process.env.ALLOWED_ORIGINS.split(',').map(origin => origin.trim()); + +module.exports = { + origin: function(origin, callback) { + if (!origin) return callback(null, true); + if (allowedOrigins.includes(origin)) { + return callback(null, true); + } + return callback(new Error('CORS: Origin not allowed'), false); + }, + credentials: true +}; \ No newline at end of file diff --git a/admin-server/config/session.js b/admin-server/config/session.js new file mode 100644 index 0000000..d465c67 --- /dev/null +++ b/admin-server/config/session.js @@ -0,0 +1,22 @@ +const session = require('express-session'); +const MySQLStore = require('express-mysql-session')(session); + +module.exports = (session) => { + return { + secret: process.env.SECRET_KEY || 'mhmh4563463fds', + resave: false, + saveUninitialized: false, + store: new MySQLStore({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE + }), + cookie: { + secure: false, + httpOnly: true, + maxAge: 10 * 60 * 60 * 1000 + } + }; +}; \ No newline at end of file diff --git a/admin-server/controllers/authController.js b/admin-server/controllers/authController.js new file mode 100644 index 0000000..d4f0ab2 --- /dev/null +++ b/admin-server/controllers/authController.js @@ -0,0 +1,40 @@ +const logger = require('../logger'); +const bcrypt = require('bcrypt'); +const moderDb = require('../moders/db'); +require('dotenv').config({ path: __dirname + './config.env' }); +exports.login = (req, res) => { + const { password } = req.body; + if (password === process.env.ADMIN_PASSWORD) { + req.session.isAuthenticated = true; + logger.info('Login successful'); + res.status(200).send('Login successful'); + } else { + res.status(401).send('Invalid password'); + logger.warn('Неверный пароль'); + } +}; + +exports.getCsrfToken = (req, res) => { + res.json({ csrfToken: req.csrfToken() }); +}; + +exports.moderLogin = async (req, res) => { + const { username, password } = req.body; + try { + const [users] = await moderDb.query('SELECT * FROM users WHERE username = ?', [username]); + if (users.length === 0) { + return res.status(401).json({ message: 'Неверные учетные данные' }); + } + const user = users[0]; + const match = await bcrypt.compare(password, user.password_hash); + if (!match) { + return res.status(401).json({ message: 'Неверные учетные данные' }); + } + req.session.moderId = user.id; + req.session.moderName = user.username; + res.json({ message: 'Успешный вход', username: user.username }); + } catch (error) { + logger.error('Ошибка входа модератора:', error); + res.status(500).json({ message: 'Ошибка сервера' }); + } +}; \ No newline at end of file diff --git a/admin-server/controllers/cardController.js b/admin-server/controllers/cardController.js new file mode 100644 index 0000000..93edf9e --- /dev/null +++ b/admin-server/controllers/cardController.js @@ -0,0 +1,70 @@ +const fs = require('fs-extra'); +const path = require('path'); +const logger = require('../logger'); + +const CARD_LOG_PATH = path.resolve(__dirname, '..', process.env.CARD_LOG_PATH); +const initCardLogs = async () => { + try { + await fs.ensureDir(path.dirname(CARD_LOG_PATH)); + if (!(await fs.pathExists(CARD_LOG_PATH))) { + await fs.writeFile(CARD_LOG_PATH, ''); + logger.info(`Card log file created at: ${CARD_LOG_PATH}`); + } + } catch (err) { + logger.error('Failed to initialize card logs:', err); + throw err; + } +}; +initCardLogs().catch(err => { + logger.error('Card logs initialization error:', err); +}); + +const cardEvent = (req, res) => { + logger.info('[CARD EVENT] Received:', req.body); + + if (!req.body || !req.body.event) { + logger.error('Invalid request body:', req.body); + return res.status(400).json({ message: 'Missing required field: event' }); + } + + const { event, uid = 'N/A', timestamp = Date.now() } = req.body; + const logLine = `[${new Date(timestamp).toISOString()}] [${event}] UID: ${uid}\n`; + + try { + if (!fs.existsSync(CARD_LOG_PATH)) { + initCardLogs(); + } + fs.appendFileSync(CARD_LOG_PATH, logLine); + logger.info('[CARD EVENT] Log written to:', CARD_LOG_PATH); + return res.status(200).json({ message: 'OK', path: CARD_LOG_PATH }); + + } catch (err) { + logger.error('[CARD EVENT] Failed to write log:', err); + return res.status(500).json({ + message: 'Failed to write log', + error: err.message, + path: CARD_LOG_PATH + }); + } +}; +const getCardLogs = async (req, res) => { + try { + if (!(await fs.pathExists(CARD_LOG_PATH))) { + await initCardLogs(); + return res.status(200).type('text/plain').send('Card logs initialized'); + } + const logs = await fs.readFile(CARD_LOG_PATH, 'utf-8'); + res.type('text/plain').send(logs); + } catch (err) { + logger.error('Error reading card logs:', err); + res.status(500).json({ + error: err.message, + path: CARD_LOG_PATH + }); + } +}; +module.exports = { + cardEvent, + getCardLogs, + initCardLogs +}; diff --git a/admin-server/controllers/healthController.js b/admin-server/controllers/healthController.js new file mode 100644 index 0000000..6d20e46 --- /dev/null +++ b/admin-server/controllers/healthController.js @@ -0,0 +1,51 @@ +const axios = require('axios'); +const WebSocket = require('ws'); +const iconv = require('iconv-lite'); +const logger = require('../logger') +exports.checkDb = async (req, res) => { +let adminToDbStatus = { status: 'offline', message: 'Test not performed' }; + try { + const dbConfig = { + user: process.env.DB_USER, + password: process.env.DB_PASSWORD, + server: process.env.DB_SERVER, + database: process.env.DB_NAME, + options: { encrypt: false, trustServerCertificate: true }, + pool: { max: 1, min: 0, idleTimeoutMillis: 5000 }, + requestTimeout: 5000 + }; + const pool = new sql.ConnectionPool(dbConfig); + await pool.connect(); + await pool.query`SELECT 1`; + adminToDbStatus = { status: 'online', message: 'Прямое подключение успешно' }; + await pool.close(); + } catch (error) { + adminToDbStatus = { status: 'offline', message: `Ошибка прямого подключения: ${error.message}` }; + } + + let backendToDbStatus = { status: 'offline', message: 'Test not performed' }; + try { + const response = await axios.get(`${process.env.BACKEND_URL}/api/db-status`, { timeout: 3000 }); + if (response.data.status === 'ok') { + backendToDbStatus = { status: 'online', message: 'Бэкенд успешно подключен' }; + } else { + backendToDbStatus = { status: 'offline', message: 'Бэкенд сообщил об ошибке' }; + } + } catch (error) { + backendToDbStatus = { status: 'offline', message: 'Не удалось связаться с бэкендом' }; + } + + res.json({ + adminToDb: adminToDbStatus, + backendToDb: backendToDbStatus + }); +}; + +exports.checkStatus = async (req, res) => { + try { + await axios.get(`${process.env.BACKEND_URL}/api/test`, { timeout: 2000 }); + res.json({ status: 'online' }); + } catch (error) { + res.json({ status: 'offline' }); + } + }; \ No newline at end of file diff --git a/admin-server/controllers/logsController.js b/admin-server/controllers/logsController.js new file mode 100644 index 0000000..ec3ade4 --- /dev/null +++ b/admin-server/controllers/logsController.js @@ -0,0 +1,99 @@ +const fs = require('fs-extra'); +const path = require('path'); +const logger = require('../logger'); + +const ADMIN_LOG = path.resolve(__dirname, '..', process.env.ADMIN_LOG); +const BACKEND_APP_LOG = path.resolve(__dirname, '..', process.env.BACKEND_APP_LOG); +const CARD_LOG = path.resolve(__dirname, '..', process.env.CARD_LOG); + +const getLogs = async (req, res) => { + try { + const logPath = path.join(__dirname, '..', '../backend/logs/app.log'); + const logs = await fs.readFile(logPath, 'utf-8'); + res.type('text/plain'); + res.send(logs); + } catch (error) { + logger.error('Error reading log file:', error); + res.status(500).send('Could not read log file.'); + } +}; + +const clearLogs = async (req, res) => { + try { + const logPath = path.join(__dirname, '..', '../backend/logs/app.log'); + await fs.truncate(logPath, 0); + res.status(200).json({ message: 'Logs cleared successfully' }); + } catch (error) { + logger.error('Error clearing log file:', error); + res.status(500).send('Could not clear log file.'); + } +}; + +const getMonitoringLogs = async (req, res) => { + const logSources = [ + { name: 'Admin', path: ADMIN_LOG }, + { name: 'Backend', path: BACKEND_APP_LOG }, + { name: 'CardReader', path: CARD_LOG } + ]; + + let allEvents = []; + + for (const source of logSources) { + try { + if (!(await fs.pathExists(source.path))) { + logger.warn(`Log file not found: ${source.path}`); + continue; + } + + const content = await fs.readFile(source.path, 'utf-8'); + const lines = content.split(/\r?\n/); + + lines.forEach(line => { + if (!line) return; + try { + const jsonLog = JSON.parse(line); + if (['warn', 'error'].includes(jsonLog.level?.toLowerCase())) { + allEvents.push({ + timestamp: jsonLog.timestamp || new Date().toISOString(), + level: jsonLog.level.toUpperCase(), + source: source.name, + message: jsonLog.message + }); + } + return; + } catch (e) { + } + const match = line.match(/\[([^\]]+)\] \[([^\]]+)\] (.*)/); + if (match) { + const level = match[2].toLowerCase(); + if (['warn', 'error'].includes(level)) { + allEvents.push({ + timestamp: new Date(match[1]).toISOString(), + level: level.toUpperCase(), + source: source.name, + message: match[3] + }); + } + } + }); + } catch (err) { + console.error(`Error reading or parsing log file ${source.path}:`, err); + allEvents.push({ + timestamp: new Date().toISOString(), + level: 'ERROR', + source: 'Monitoring', + message: `Could not read log file: ${source.name}` + }); + } + } + + allEvents.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp)); + + res.json(allEvents); +}; + +module.exports = { + getLogs, + clearLogs, + getMonitoringLogs +}; diff --git a/admin-server/controllers/modersController.js b/admin-server/controllers/modersController.js new file mode 100644 index 0000000..09dda8b --- /dev/null +++ b/admin-server/controllers/modersController.js @@ -0,0 +1,72 @@ +const moderDb = require('../moders/db'); +const bcrypt = require('bcrypt'); +const logger = require('../logger'); + +const getModers = async (req, res) => { + try { + const [rows] = await moderDb.query('SELECT id, username FROM users ORDER BY id ASC'); + res.json(rows); + } catch (e) { + logger.error('Ошибка получения списка модераторов:', e); + res.status(500).json({ message: 'Ошибка получения списка модераторов' }); + } +}; + +const addModer = async (req, res) => { + const { username, password } = req.body; + if (!username || !password) { + return res.status(400).json({ message: 'username и password обязательны' }); + } + try { + const [exists] = await moderDb.query('SELECT id FROM users WHERE username = ?', [username]); + if (exists.length) { + return res.status(409).json({ message: 'Пользователь с таким username уже существует' }); + } + const hash = await bcrypt.hash(password, 10); + const [result] = await moderDb.query('INSERT INTO users (username, password_hash) VALUES (?, ?)', [username, hash]); + res.json({ id: result.insertId, username }); + } catch (e) { + logger.error('Ошибка добавления модератора:', e); + res.status(500).json({ message: 'Ошибка добавления модератора' }); + } +}; + +const changePassword = async (req, res) => { + const { id } = req.params; + const { password } = req.body; + if (!password) { + return res.status(400).json({ message: 'password обязателен' }); + } + try { + const hash = await bcrypt.hash(password, 10); + const [result] = await moderDb.query('UPDATE users SET password_hash = ? WHERE id = ?', [hash, id]); + if (result.affectedRows === 0) { + return res.status(404).json({ message: 'Модератор не найден' }); + } + res.json({ message: 'Пароль обновлён' }); + } catch (e) { + logger.error('Ошибка смены пароля модератора:', e); + res.status(500).json({ message: 'Ошибка смены пароля модератора' }); + } +}; + +const deleteModer = async (req, res) => { + const { id } = req.params; + try { + const [result] = await moderDb.query('DELETE FROM users WHERE id = ?', [id]); + if (result.affectedRows === 0) { + return res.status(404).json({ message: 'Модератор не найден' }); + } + res.json({ message: 'Модератор удалён' }); + } catch (e) { + logger.error('Ошибка удаления модератора:', e); + res.status(500).json({ message: 'Ошибка удаления модератора' }); + } +}; + +module.exports = { + getModers, + addModer, + changePassword, + deleteModer +}; diff --git a/admin-server/controllers/settingsController.js b/admin-server/controllers/settingsController.js new file mode 100644 index 0000000..fcf38e4 --- /dev/null +++ b/admin-server/controllers/settingsController.js @@ -0,0 +1,174 @@ +const fs = require('fs-extra'); +const path = require('path'); +const logger = require('../logger'); + +const configEnvPath = path.join(__dirname, '..', 'config.env'); +const modersEnvPath = path.join(__dirname, '..', 'moders', 'config.env'); +const backendConfigPath = path.join(__dirname, '..', '../backend/config.json'); + +const parseEnv = async (filePath) => { + const content = await fs.readFile(filePath, 'utf-8'); + const lines = content.split(/\r?\n/); + const result = {}; + for (const line of lines) { + if (!line.trim() || line.trim().startsWith('#')) continue; + const idx = line.indexOf('='); + if (idx === -1) continue; + const key = line.slice(0, idx).trim(); + const value = line.slice(idx + 1).trim(); + result[key] = value; + } + return result; +}; + +const updateEnv = async (filePath, updates) => { + const content = await fs.readFile(filePath, 'utf-8'); + const lines = content.split(/\r?\n/); + const keys = Object.keys(updates); + const updated = new Set(); + const newLines = lines.map(line => { + if (!line.trim() || line.trim().startsWith('#') || !line.includes('=')) return line; + const idx = line.indexOf('='); + const key = line.slice(0, idx).trim(); + if (keys.includes(key)) { + updated.add(key); + return `${key}=${updates[key]}`; + } + return line; + }); + for (const key of keys) { + if (!updated.has(key)) { + newLines.push(`${key}=${updates[key]}`); + } + } + await fs.writeFile(filePath, newLines.join('\n'), 'utf-8'); +}; + +const getMysqlSettings = async (req, res) => { + try { + const env = await parseEnv(modersEnvPath); + res.json({ + MYSQL_HOST: env.MYSQL_HOST || '', + MYSQL_PORT: env.MYSQL_PORT || '', + MYSQL_USER: env.MYSQL_USER || '', + MYSQL_PASSWORD: env.MYSQL_PASSWORD || '', + MYSQL_DATABASE: env.MYSQL_DATABASE || '' + }); + } catch (e) { + logger.error('Ошибка чтения moders/config.env:', e); + res.status(500).json({ message: 'Ошибка чтения moders/config.env' }); + } +}; + +const updateMysqlSettings = async (req, res) => { + const updates = req.body; + if (updates.MYSQL_PASSWORD === '') { + delete updates.MYSQL_PASSWORD; + } + if (Object.keys(updates).length === 0) { + return res.status(400).json({ message: 'Нет данных для обновления' }); + } + try { + await updateEnv(modersEnvPath, updates); + res.json({ message: 'Параметры MySQL обновлены' }); + } catch (e) { + logger.error('Ошибка записи moders/config.env:', e); + res.status(500).json({ message: 'Ошибка записи moders/config.env' }); + } +}; + +const getCorsSettings = async (req, res) => { + try { + const env = await parseEnv(configEnvPath); + const origins = (env.ALLOWED_ORIGINS || '').split(',').map(o => o.trim()).filter(Boolean); + res.json({ ALLOWED_ORIGINS: origins }); + } catch (e) { + logger.error('Ошибка чтения ALLOWED_ORIGINS:', e); + res.status(500).json({ message: 'Ошибка чтения ALLOWED_ORIGINS' }); + } +}; + +const updateCorsSettings = async (req, res) => { + const { ALLOWED_ORIGINS } = req.body; + if (!Array.isArray(ALLOWED_ORIGINS) || !ALLOWED_ORIGINS.length) { + return res.status(400).json({ message: 'Список ALLOWED_ORIGINS обязателен' }); + } + try { + await updateEnv(configEnvPath, { ALLOWED_ORIGINS: ALLOWED_ORIGINS.join(', ') }); + res.json({ message: 'ALLOWED_ORIGINS обновлён' }); + } catch (e) { + logger.error('Ошибка записи ALLOWED_ORIGINS:', e); + res.status(500).json({ message: 'Ошибка записи ALLOWED_ORIGINS' }); + } +}; + +const getAdminServerSettings = async (req, res) => { + try { + const env = await parseEnv(configEnvPath); + res.json({ + PORT: env.PORT || '', + ADMIN_URL: env.ADMIN_URL || '' + }); + } catch (e) { + logger.error('Ошибка чтения config.env (admin-server):', e); + res.status(500).json({ message: 'Ошибка чтения config.env' }); + } +}; + +const updateAdminServerSettings = async (req, res) => { + const { PORT, ADMIN_URL } = req.body; + if (!PORT || !ADMIN_URL) { + return res.status(400).json({ message: 'PORT и ADMIN_URL обязательны' }); + } + try { + await updateEnv(configEnvPath, { PORT, ADMIN_URL }); + res.json({ message: 'Параметры admin-server обновлены' }); + } catch (e) { + logger.error('Ошибка записи config.env (admin-server):', e); + res.status(500).json({ message: 'Ошибка записи config.env' }); + } +}; + +const getBackendServerSettings = async (req, res) => { + try { + const config = await fs.readJson(backendConfigPath); + res.json({ + host: config.server?.host || '', + port: config.server?.port || '' + }); + } catch (e) { + logger.error('Ошибка чтения backend/config.json:', e); + res.status(500).json({ message: 'Ошибка чтения backend/config.json' }); + } +}; + +const updateBackendServerSettings = async (req, res) => { + const { host, port } = req.body; + if (!host || !port) { + return res.status(400).json({ message: 'host и port обязательны' }); + } + try { + const config = await fs.readJson(backendConfigPath); + config.server = config.server || {}; + config.server.host = host; + config.server.port = port; + await fs.writeJson(backendConfigPath, config, { spaces: 4 }); + res.json({ message: 'Параметры backend-server обновлены' }); + } catch (e) { + logger.error('Ошибка записи backend/config.json:', e); + res.status(500).json({ message: 'Ошибка записи backend/config.json' }); + } +}; + +module.exports = { + getMssqlSettings, + updateMssqlSettings, + getMysqlSettings, + updateMysqlSettings, + getCorsSettings, + updateCorsSettings, + getAdminServerSettings, + updateAdminServerSettings, + getBackendServerSettings, + updateBackendServerSettings +}; diff --git a/admin-server/logger.js b/admin-server/logger.js new file mode 100644 index 0000000..d2bca8d --- /dev/null +++ b/admin-server/logger.js @@ -0,0 +1,53 @@ +const fs = require('fs'); +const path = require('path'); +const LOGS_DIR = path.join(__dirname, 'logs'); +const LOG_FILE = path.join(LOGS_DIR, 'admin.log'); +const MAX_SIZE = 20 * 1024 * 1024; + +if (!fs.existsSync(LOGS_DIR)) { + fs.mkdirSync(LOGS_DIR, { recursive: true }); +} + +function rotateLogIfNeeded() { + try { + if (fs.existsSync(LOG_FILE)) { + const stats = fs.statSync(LOG_FILE); + if (stats.size >= MAX_SIZE) { + const date = new Date().toISOString().replace(/[:.]/g, '-'); + const archiveName = `admin-${date}.log`; + const archivePath = path.join(LOGS_DIR, archiveName); + fs.renameSync(LOG_FILE, archivePath); + } + } + } catch (err) { + console.error('[LOGGER] Ошибка ротации лога:', err); + } +} + +function format(level, message) { + return `[${new Date().toISOString()}] [${level.toUpperCase()}] ${message}\n`; +} + +function log(level, ...args) { + const msg = args.map(a => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '); + const line = format(level, msg); + rotateLogIfNeeded(); + try { + fs.appendFileSync(LOG_FILE, line); + } catch (err) { + console.error('[LOGGER] Ошибка записи в лог:', err); + } + if (level === 'error') { + console.error(line.trim()); + } else if (level === 'warn') { + console.warn(line.trim()); + } else { + console.log(line.trim()); + } +} + +module.exports = { + info: (...args) => log('info', ...args), + warn: (...args) => log('warn', ...args), + error: (...args) => log('error', ...args), +}; \ No newline at end of file diff --git a/admin-server/logs/admin.log b/admin-server/logs/admin.log new file mode 100644 index 0000000..5782389 --- /dev/null +++ b/admin-server/logs/admin.log @@ -0,0 +1,1408 @@ +[2025-07-14T07:10:44.285Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:10:44.292Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:10:44.292Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:12:22.296Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:12:22.296Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:12:22.297Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:12:31.309Z] [INFO] Login successful +[2025-07-14T07:16:18.673Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:16:18.674Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:16:27.993Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:16:27.993Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:16:27.994Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:17:33.085Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:17:33.086Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:17:33.086Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:17:42.580Z] [INFO] Login successful +[2025-07-14T07:20:24.110Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:20:24.111Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:20:24.111Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:20:36.194Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:20:36.195Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:20:36.195Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:20:42.465Z] [INFO] Login successful +[2025-07-14T07:23:23.394Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:23:23.394Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:23:23.394Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:23:30.060Z] [INFO] Login successful +[2025-07-14T07:24:06.210Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:24:06.210Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:24:06.210Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:24:11.554Z] [INFO] Login successful +[2025-07-14T12:09:02.949Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T12:09:02.949Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T12:09:02.950Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T12:09:08.964Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T12:09:08.965Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T12:09:08.965Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T12:09:33.343Z] [WARN] Неверный пароль +[2025-07-14T12:09:36.778Z] [INFO] Login successful +[2025-07-14T12:09:51.109Z] [INFO] Good connect to Web-socket +[2025-07-14T12:10:42.272Z] [INFO] Good connect to Web-socket +[2025-07-14T12:11:26.852Z] [INFO] Good connect to Web-socket +[2025-07-14T12:14:37.428Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T12:14:37.429Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T12:14:37.429Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T12:14:48.946Z] [INFO] Login successful +[2025-07-14T12:14:59.329Z] [INFO] Good connect to Web-socket +[2025-07-14T12:15:05.885Z] [INFO] Good connect to Web-socket +[2025-07-14T12:15:16.931Z] [INFO] Good connect to Web-socket +[2025-07-15T05:27:39.692Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:27:39.693Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:27:39.693Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T05:27:47.286Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:27:47.286Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:27:47.287Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T05:28:37.739Z] [INFO] Login successful +[2025-07-15T05:38:50.151Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:38:50.151Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:38:50.152Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T05:39:01.148Z] [INFO] Login successful +[2025-07-15T05:39:10.987Z] [INFO] Good connect to Web-socket +[2025-07-15T05:54:54.149Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:54:54.150Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:54:54.150Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:15:11.786Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:15:11.786Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:15:11.787Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:22:14.382Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:22:14.382Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:22:14.383Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:50:01.617Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:50:01.618Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:50:01.618Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:50:26.699Z] [INFO] Login successful +[2025-07-15T06:55:27.910Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:55:27.911Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:55:27.911Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:55:50.182Z] [INFO] Login successful +[2025-07-16T13:04:38.889Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:04:38.891Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:04:38.892Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:05:01.409Z] [WARN] Неверный пароль +[2025-07-16T13:05:10.680Z] [WARN] Неверный пароль +[2025-07-16T13:05:13.398Z] [INFO] Login successful +[2025-07-16T13:08:49.897Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:08:49.898Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:08:49.898Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:08:56.800Z] [WARN] Неверный пароль +[2025-07-16T13:09:08.567Z] [WARN] Неверный пароль +[2025-07-16T13:09:58.540Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:09:58.541Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:09:58.541Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:10:18.777Z] [WARN] Неверный пароль +[2025-07-16T13:11:56.468Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:11:56.469Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:11:56.469Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:12:19.448Z] [WARN] Неверный пароль +[2025-07-16T13:14:16.768Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:14:16.768Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:14:16.811Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:15:31.439Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:15:31.440Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:15:31.440Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:15:46.819Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:15:46.819Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:15:46.834Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:16:09.659Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:16:09.659Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:16:09.660Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:16:16.352Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:16:16.353Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:16:16.368Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:17:29.890Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:17:29.891Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:17:29.891Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:17:37.070Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:17:37.071Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:17:37.088Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:20:13.871Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:20:13.872Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:20:13.872Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:20:26.558Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:20:26.559Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:20:26.581Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:20:26.581Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:20:26.633Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:20:26.633Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:21:07.256Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:21:07.257Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:21:07.258Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:21:07.258Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:21:07.307Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:21:07.308Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:25:02.337Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:25:02.338Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:25:02.338Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:25:13.489Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:25:13.490Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:25:13.501Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:25:13.501Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:25:13.553Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:25:13.553Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:26:33.039Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:26:33.040Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:26:33.040Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:27:20.182Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:27:20.183Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:27:20.183Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:27:31.961Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:27:31.962Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:27:31.972Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:27:31.973Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:27:32.024Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:27:32.024Z] [INFO] [LOGIN] Устанавливаю сессию... +[2025-07-16T13:27:32.025Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:28:17.737Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:28:17.738Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:28:17.738Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:28:30.681Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:28:30.682Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:28:30.693Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:28:30.693Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:28:30.744Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:28:30.744Z] [INFO] [LOGIN] Устанавливаю сессию... +[2025-07-16T13:28:30.745Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:28:39.623Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:28:39.623Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:28:39.624Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:28:39.625Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:28:39.675Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-16T13:28:39.676Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-16T13:32:32.475Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:32:32.475Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:32:32.476Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:32:50.634Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:32:50.634Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:32:50.646Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:32:50.646Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:32:50.697Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:32:50.697Z] [INFO] [LOGIN] Устанавливаю сессию... +[2025-07-16T13:32:50.698Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:33:29.957Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:33:29.959Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:33:29.959Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:33:39.449Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:33:39.450Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:33:39.461Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:33:39.461Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:33:39.512Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:33:39.513Z] [ERROR] [LOGIN] Ошибка при установке сессии или отправке ответа: {} +[2025-07-16T13:41:53.707Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:41:53.708Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:41:53.708Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:42:37.295Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:42:37.296Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:42:37.296Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:42:45.148Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:42:45.148Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:42:45.157Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:42:45.158Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:42:45.209Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:42:45.209Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-16T13:42:45.211Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-16T13:58:30.819Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:58:30.820Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:58:30.820Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T07:15:15.350Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T07:15:15.360Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T07:15:15.361Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T07:15:47.745Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T07:15:47.746Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T07:15:47.789Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T07:15:47.789Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T07:15:47.840Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T07:15:47.840Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T07:15:47.842Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:35:34.179Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T08:35:34.180Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T08:35:34.180Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T08:37:21.244Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:37:21.245Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:37:21.250Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:37:21.250Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:37:21.301Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:37:21.301Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:37:21.302Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:38:51.945Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:38:51.945Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:38:51.946Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:38:51.946Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:38:51.996Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:38:51.997Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:38:51.998Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:39:34.291Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:39:34.291Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:39:34.292Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:39:34.293Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:39:34.342Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:39:34.343Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:39:34.343Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:42:30.931Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T08:42:30.932Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T08:42:30.932Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T08:42:37.658Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:42:37.659Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:42:37.668Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:42:37.669Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:42:37.719Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:42:37.720Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:42:37.722Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:52:05.967Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T08:52:05.968Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T08:52:05.968Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:04:04.203Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:04:04.204Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:04:04.205Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:04:04.206Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:04:04.256Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:04:04.256Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:04:04.257Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:05:09.569Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:05:09.569Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:05:09.570Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:05:09.570Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:05:09.619Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:05:09.619Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:05:09.620Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:05:39.657Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:05:39.657Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:05:39.658Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:05:39.658Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:05:39.707Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:05:39.707Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:05:39.708Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:05:51.608Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:05:51.609Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:05:51.610Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:05:51.610Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:05:51.659Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:05:51.659Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:05:51.659Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:06:33.425Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:06:33.426Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:06:33.432Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:06:33.433Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:06:33.488Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:06:33.488Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:06:33.489Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:17:50.609Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:17:50.610Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:17:50.610Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:18:00.214Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:18:00.214Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:18:00.224Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:18:00.224Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:18:00.275Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:18:00.275Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:18:00.277Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:18:35.108Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:18:35.108Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:18:35.110Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:18:35.110Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:18:35.159Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:18:35.160Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:18:35.160Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:18:55.143Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:18:55.143Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:18:55.143Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:19:21.832Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:19:21.832Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:19:21.833Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:19:41.025Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:19:41.025Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:19:41.027Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:19:41.027Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:19:41.078Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:19:41.079Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:19:41.080Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:19:59.283Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:19:59.284Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:19:59.285Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:19:59.285Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:19:59.336Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:19:59.336Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:19:59.337Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:25:09.576Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:25:09.577Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:25:09.577Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:25:20.924Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:25:20.924Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:25:20.934Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:25:20.935Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:25:20.984Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T09:25:20.985Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T09:25:24.162Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:25:24.162Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:25:24.163Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:25:24.163Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:25:24.213Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:25:24.214Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:25:24.215Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:32:00.801Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:32:00.802Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:32:00.802Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:32:22.130Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:32:22.131Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:32:22.132Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:32:22.133Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:32:22.184Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:32:22.184Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:32:22.185Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:38:25.371Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:38:25.372Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:38:25.372Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:38:34.538Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:38:34.538Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:38:34.540Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:38:34.540Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:38:34.590Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:38:34.591Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:38:34.591Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:39:21.201Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:39:21.201Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:39:21.203Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:39:21.203Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:39:21.252Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:39:21.252Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:39:21.253Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:54:38.861Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:54:38.862Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:54:38.863Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:54:38.863Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:54:38.911Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:54:38.912Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:54:38.912Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:00:08.548Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:00:08.548Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:00:08.549Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:00:08.549Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:00:08.599Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:00:08.600Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:00:08.600Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:22:56.371Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:22:56.372Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:22:56.373Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:22:56.373Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:22:56.424Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:22:56.424Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:22:56.425Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:38:19.621Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T10:38:19.621Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T10:38:19.622Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T10:42:46.762Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:42:46.763Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:42:46.764Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:42:46.765Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:42:46.815Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T10:42:46.816Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T10:42:50.624Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:42:50.624Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:42:50.626Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:42:50.626Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:42:50.677Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:42:50.677Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:42:50.678Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:50:46.487Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T10:50:46.488Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T10:50:46.488Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T10:51:01.553Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:51:01.554Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:51:01.564Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:51:01.565Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:51:01.615Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:51:01.616Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:51:01.617Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T11:58:47.534Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T11:58:47.534Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T11:58:47.535Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T11:58:47.535Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T11:58:47.585Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T11:58:47.585Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T11:58:47.586Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:05:21.460Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:05:21.461Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:05:21.461Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:05:21.462Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:05:21.512Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:05:21.512Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:05:21.513Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:06:41.428Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:06:41.429Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:06:41.430Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:06:41.430Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:06:41.479Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:06:41.479Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:06:41.480Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:17:00.060Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:17:00.061Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:17:00.061Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:17:00.061Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:17:00.112Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:17:00.112Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:17:00.112Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:18:18.518Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:18:18.518Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:18:18.519Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:18:18.519Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:18:18.568Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:18:18.568Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:18:18.569Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:21:01.651Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:21:01.651Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:21:01.652Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:21:01.653Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:21:01.703Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:21:01.703Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:21:01.704Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:37:39.246Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T12:37:39.247Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T12:37:39.247Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T12:37:48.506Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:37:48.507Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:37:48.517Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:37:48.517Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:37:48.567Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:37:48.567Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:37:48.569Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:44:07.714Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:44:07.714Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:44:07.716Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:44:07.716Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:44:07.765Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:44:07.766Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:44:07.767Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:45:06.161Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:45:06.162Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:45:06.163Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:45:06.163Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:45:06.213Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T12:45:06.214Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T12:45:09.760Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:45:09.761Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:45:09.762Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:45:09.762Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:45:09.813Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T12:45:09.813Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T12:45:20.609Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:45:20.609Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:45:20.611Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:45:20.611Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:45:20.660Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:45:20.660Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:45:20.661Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:47:05.273Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:47:05.273Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:47:05.274Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:47:05.275Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:47:05.324Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:47:05.324Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:47:05.325Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:49:26.609Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:49:26.610Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:49:26.611Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:49:26.611Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:49:26.661Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:49:26.662Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:49:26.663Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T13:42:03.566Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:42:03.567Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:42:03.567Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:47:22.821Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:47:22.822Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:47:22.822Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:52:42.658Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:52:42.658Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:52:42.659Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:53:34.492Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:53:34.493Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:53:34.493Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:59:02.500Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:59:02.501Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:59:02.501Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T14:00:56.539Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T14:00:56.540Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T14:00:56.540Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T05:35:28.226Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T05:35:28.226Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T05:35:28.227Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T05:38:07.040Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T05:38:07.041Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T05:38:07.041Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T05:38:19.590Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-18T05:38:19.591Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T05:38:19.607Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T05:38:19.608Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T05:38:19.658Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T05:38:19.659Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-18T05:38:19.660Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T08:45:38.236Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:45:38.237Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:45:38.237Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T08:45:55.439Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-18T08:45:55.439Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T08:45:55.458Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T08:45:55.459Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T08:45:55.508Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T08:45:55.508Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-18T08:45:55.509Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T08:55:57.081Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:55:57.081Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:55:57.082Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T08:56:47.333Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:56:47.334Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:56:47.335Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T08:57:11.361Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:57:11.362Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:57:11.362Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T09:00:48.091Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T09:00:48.092Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T09:00:48.093Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T09:00:52.419Z] [INFO] Login successful +[2025-07-18T09:01:25.584Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-18T09:01:25.584Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T09:01:25.594Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T09:01:25.594Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T09:01:25.646Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T09:01:25.647Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-18T09:01:25.648Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T09:46:13.116Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T09:46:13.117Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T09:46:13.117Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T09:46:23.938Z] [INFO] Login successful +[2025-07-18T09:58:23.656Z] [INFO] Login successful +[2025-07-18T10:13:49.104Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T10:13:49.105Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T10:13:49.105Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T10:13:57.804Z] [INFO] Login successful +[2025-07-18T10:16:03.740Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T10:16:03.740Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T10:16:03.741Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T10:16:09.258Z] [INFO] Login successful +[2025-07-18T10:16:45.861Z] [INFO] [LOGIN] Попытка входа: test +[2025-07-18T10:16:45.861Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T10:16:45.863Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T10:16:45.864Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T10:16:45.915Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T10:16:45.915Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":2,"username":"test"} +[2025-07-18T10:16:45.916Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T10:17:08.948Z] [INFO] Login successful +[2025-07-18T10:28:57.930Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T10:28:57.931Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T10:28:57.931Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T10:29:04.485Z] [INFO] Login successful +[2025-07-18T10:29:20.080Z] [INFO] Login successful +[2025-07-18T11:12:16.575Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T11:12:16.576Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T11:12:16.576Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T11:12:20.350Z] [INFO] Login successful +[2025-07-18T11:17:55.739Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T11:17:55.739Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T11:17:55.740Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T13:17:20.354Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T13:17:20.354Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T13:17:20.355Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T13:21:14.759Z] [INFO] Login successful +[2025-07-18T13:22:02.033Z] [INFO] Good connect to Web-socket +[2025-07-21T05:43:20.819Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T05:43:20.820Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T05:43:20.820Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T05:43:43.245Z] [INFO] Login successful +[2025-07-21T05:47:37.338Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:47:37.339Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:47:37.472Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:47:37.473Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:47:37.603Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:47:37.603Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:47:48.808Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:47:48.808Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:47:48.809Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:47:48.811Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:47:48.860Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:47:48.860Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:48:17.951Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:48:17.951Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:48:17.953Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:48:17.953Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:48:18.003Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:48:18.003Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:48:26.111Z] [INFO] [LOGIN] Попытка входа: test +[2025-07-21T05:48:26.111Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:48:26.121Z] [INFO] [LOGIN] Результат поиска пользователя: не найден +[2025-07-21T05:48:26.121Z] [WARN] [LOGIN] Пользователь не найден: test +[2025-07-21T05:48:52.232Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:48:52.233Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:48:52.234Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:48:52.234Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:48:52.284Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:48:52.284Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:51:38.171Z] [INFO] Login successful +[2025-07-21T05:54:01.375Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T05:54:01.375Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T05:54:01.375Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T05:54:16.219Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:54:16.220Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:54:16.229Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:54:16.230Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:54:16.279Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:54:16.280Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:56:35.352Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:56:35.353Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:56:35.354Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:56:35.355Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:56:35.405Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:56:35.405Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:56:53.047Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-21T05:56:53.048Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:56:53.049Z] [INFO] [LOGIN] Результат поиска пользователя: не найден +[2025-07-21T05:56:53.049Z] [WARN] [LOGIN] Пользователь не найден: grivova +[2025-07-21T05:57:03.947Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-21T05:57:03.947Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:57:03.948Z] [INFO] [LOGIN] Результат поиска пользователя: не найден +[2025-07-21T05:57:03.948Z] [WARN] [LOGIN] Пользователь не найден: grivova +[2025-07-21T06:03:08.154Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-21T06:03:08.155Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T06:03:08.156Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T06:03:08.156Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T06:03:08.206Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-21T06:03:08.207Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-21T06:03:08.209Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-21T06:04:41.874Z] [INFO] Login successful +[2025-07-21T08:29:53.691Z] [INFO] Admin server running on http://localhost:3002:3002 +[2025-07-21T08:29:53.691Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:29:53.692Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:30:33.613Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T08:30:33.614Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:30:33.614Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:30:37.964Z] [INFO] Login successful +[2025-07-21T08:31:04.544Z] [INFO] Admin server running on http://localhost:3002:3002 +[2025-07-21T08:31:04.545Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:31:04.545Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:32:13.301Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T08:32:13.301Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:32:13.302Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:32:18.708Z] [INFO] Login successful +[2025-07-21T09:23:10.572Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T09:23:10.573Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T09:23:10.573Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T09:23:22.933Z] [INFO] Login successful +[2025-07-21T10:09:55.753Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T10:09:55.753Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T10:09:55.753Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T10:10:03.039Z] [INFO] Login successful +[2025-07-21T13:43:08.772Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T13:43:08.772Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T13:43:08.773Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T13:47:07.278Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T13:47:07.279Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T13:47:07.279Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T13:58:50.641Z] [INFO] Login successful +[2025-07-22T06:05:58.792Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:05:58.793Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:05:58.794Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:07:04.536Z] [INFO] Login successful +[2025-07-22T06:09:05.609Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:09:05.610Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:09:05.610Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:09:11.617Z] [INFO] Login successful +[2025-07-22T06:28:07.919Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:28:07.920Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:28:07.920Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:28:14.928Z] [INFO] Login successful +[2025-07-22T06:33:20.493Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:33:20.493Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:33:20.493Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:54:10.099Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:54:10.099Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:54:10.100Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:11:53.589Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:11:53.589Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:11:53.590Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:12:39.235Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:12:39.236Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:12:39.236Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:13:30.853Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:13:30.854Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:13:30.854Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:56:29.520Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:56:29.520Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:56:29.521Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:57:32.522Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-22T07:57:32.522Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:57:32.524Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:57:32.525Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:57:32.597Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-22T07:57:32.598Z] [WARN] [LOGIN] Неверный пароль для пользователя: grivova +[2025-07-22T07:57:43.460Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-22T07:57:43.461Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:57:43.462Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:57:43.462Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:57:43.512Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-22T07:57:43.513Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-22T07:58:02.538Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-22T07:58:02.539Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:58:02.540Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:58:02.541Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:58:02.591Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-22T07:58:02.592Z] [WARN] [LOGIN] Неверный пароль для пользователя: grivova +[2025-07-22T07:58:08.732Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-22T07:58:08.732Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:58:08.734Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:58:08.734Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:58:08.784Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-22T07:58:08.784Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-22T07:58:08.785Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-22T08:00:13.910Z] [INFO] Login successful +[2025-07-23T06:51:58.522Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:53:31.703Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:53:38.230Z] [ERROR] Error: secret option required for sessions + at session (D:\rasch\admin-server\node_modules\express-session\index.js:204:12) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at jsonParser (D:\rasch\admin-server\node_modules\body-parser\lib\types\json.js:100:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 +[2025-07-23T06:53:38.272Z] [ERROR] Error: secret option required for sessions + at session (D:\rasch\admin-server\node_modules\express-session\index.js:204:12) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at jsonParser (D:\rasch\admin-server\node_modules\body-parser\lib\types\json.js:100:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 +[2025-07-23T06:57:25.198Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:58:13.777Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:58:32.526Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-23T06:58:32.526Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-23T06:58:32.544Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-23T06:58:32.545Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-23T06:58:32.596Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-23T06:58:32.596Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-23T06:58:42.364Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-23T06:58:42.364Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-23T06:58:42.365Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-23T06:58:42.365Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-23T06:58:42.416Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-23T06:58:42.417Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-23T06:58:42.418Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-23T07:02:20.080Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:06:01.248Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:06:05.651Z] [INFO] Login successful +[2025-07-23T07:06:38.004Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.006Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.013Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.015Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.017Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.019Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:07:52.810Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:09:41.218Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:10:57.908Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:14:53.005Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:16:07.227Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:26:08.347Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:26:13.137Z] [ERROR] Error: secret option required for sessions + at session (D:\rasch\admin-server\node_modules\express-session\index.js:204:12) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at jsonParser (D:\rasch\admin-server\node_modules\body-parser\lib\types\json.js:100:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 +[2025-07-23T07:26:46.088Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:31:27.536Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:31:29.487Z] [ERROR] Error reading config file: {} +[2025-07-23T07:37:40.566Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:39:01.586Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:41:05.276Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:41:34.738Z] [INFO] Good connect to Web-socket +[2025-07-23T07:41:34.738Z] [ERROR] WebSocket error: {} +[2025-07-23T07:53:53.806Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:54:28.969Z] [INFO] Good connect to Web-socket +[2025-07-23T07:54:28.970Z] [ERROR] WebSocket error: {} +[2025-07-23T07:55:36.153Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:57:01.020Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:06:35.812Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:07:03.339Z] [INFO] Good connect to Web-socket +[2025-07-23T08:07:03.340Z] [ERROR] WebSocket error: {} +[2025-07-23T08:10:19.037Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:14:23.158Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:14:28.611Z] [ERROR] Error reading log file: {"errno":-4058,"code":"ENOENT","syscall":"open","path":"D:\\backend\\logs\\app.log"} +[2025-07-23T08:18:18.880Z] [ERROR] Error reading log file: {"errno":-4058,"code":"ENOENT","syscall":"open","path":"D:\\backend\\logs\\app.log"} +[2025-07-23T08:20:04.814Z] [ERROR] Error reading log file: {"errno":-4058,"code":"ENOENT","syscall":"open","path":"D:\\backend\\logs\\app.log"} +[2025-07-28T07:41:01.607Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T07:41:03.580Z] [INFO] Login successful +[2025-07-28T07:41:41.691Z] [INFO] Good connect to Web-socket +[2025-07-28T07:41:41.692Z] [ERROR] WebSocket error: {} +[2025-07-28T08:41:06.121Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:41:06.131Z] [INFO] Card log file created at: D:\rasch\admin-server\logs\cards.log +[2025-07-28T08:41:18.541Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:42:50.143Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:42:56.015Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:43:11.480Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:43:12.608Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:44:40.475Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:44:40.484Z] [INFO] Card log file created at: D:\rasch\admin-server\logs\cards.log +[2025-07-28T08:44:54.286Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:46:05.472Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:44:25.265Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:44:25.267Z] [INFO] Card log file created at: D:\backend\logs\cards.log +[2025-07-28T11:44:43.078Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:45:51.928Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:45:52.053Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:46:15.609Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:46:24.264Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:46:38.108Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:46:42.319Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:47:13.045Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:47:17.274Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:49:16.545Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:49:16.549Z] [INFO] Card logs initialized successfully +[2025-07-28T12:00:43.516Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:00:43.519Z] [INFO] Card logs initialized successfully +[2025-07-28T12:02:30.511Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:02:30.514Z] [INFO] Card logs initialized successfully +[2025-07-28T12:03:26.827Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:03:26.831Z] [INFO] Card logs initialized successfully +[2025-07-28T12:04:32.169Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:04:32.172Z] [INFO] Card logs initialized successfully +[2025-07-28T12:04:48.062Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:04:48.065Z] [INFO] Card logs initialized successfully +[2025-07-28T12:07:46.087Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:07:46.090Z] [INFO] Card logs initialized successfully +[2025-07-28T12:09:43.924Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:11:02.541Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:11:08.453Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:11:08.456Z] [INFO] Card logs initialized successfully +[2025-07-28T12:11:18.314Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:03.016Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:09.018Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:12:09.022Z] [INFO] Card logs initialized successfully +[2025-07-28T12:12:20.060Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:56.130Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:59.231Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:05.872Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:09.013Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:11.278Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:12.428Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:14.497Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:14.498Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:15.415Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:15.417Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:15:40.259Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:15:40.262Z] [INFO] Card logs initialized successfully +[2025-07-28T12:18:18.766Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:18:18.769Z] [INFO] Card logs initialized successfully +[2025-07-28T12:19:58.300Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:19:58.303Z] [INFO] Card logs initialized successfully +[2025-07-28T12:23:06.779Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:23:06.782Z] [INFO] Card logs initialized successfully +[2025-07-28T12:23:42.811Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:20.702Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:21.374Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:21.538Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:48.768Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:52:33.102Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:54:44.943Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:54:44.945Z] [INFO] Card logs initialized successfully +[2025-07-28T12:54:48.568Z] [WARN] Log file not found: D:\logs\admin.log +[2025-07-28T12:55:22.939Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:55:22.940Z] [INFO] Card logs initialized successfully +[2025-07-28T12:55:27.625Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:56:20.851Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:56:29.655Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:56:29.657Z] [INFO] Card logs initialized successfully +[2025-07-28T12:56:33.307Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:58:00.162Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:58:00.165Z] [INFO] Card logs initialized successfully +[2025-07-28T12:58:04.031Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:13:56.909Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:13:56.912Z] [INFO] Card logs initialized successfully +[2025-07-28T13:14:00.288Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:15:35.437Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:15:35.440Z] [INFO] Card logs initialized successfully +[2025-07-28T13:15:38.886Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:15:52.116Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:16:16.389Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:16:25.999Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:18:21.485Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:18:56.370Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:18:56.374Z] [INFO] Card logs initialized successfully +[2025-07-28T13:18:59.105Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:19:21.312Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:19:21.316Z] [INFO] Card logs initialized successfully +[2025-07-28T13:19:23.294Z] [WARN] Log file not found: D:\rasch\logs\admin.log +[2025-07-28T13:19:43.875Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:19:43.880Z] [INFO] Card logs initialized successfully +[2025-07-28T13:21:48.904Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-28T13:21:48.905Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-28T13:21:48.918Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-28T13:21:48.928Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-28T13:21:49.010Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-28T13:21:49.010Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-28T13:21:57.029Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-28T13:21:57.029Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-28T13:21:57.031Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-28T13:21:57.031Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-28T13:21:57.081Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-28T13:21:57.082Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-28T13:21:57.083Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-28T13:24:30.419Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:24:30.422Z] [INFO] Card logs initialized successfully +[2025-07-28T13:24:41.116Z] [INFO] Login successful +[2025-07-28T13:24:58.867Z] [INFO] Good connect to Web-socket +[2025-07-28T13:24:58.868Z] [ERROR] WebSocket error: {} +[2025-07-28T13:27:59.766Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:27:59.768Z] [INFO] Card logs initialized successfully +[2025-07-28T13:28:22.080Z] [INFO] Good connect to Web-socket +[2025-07-28T13:28:22.081Z] [ERROR] WebSocket error: {} +[2025-07-28T13:31:00.081Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:31:00.084Z] [INFO] Card logs initialized successfully +[2025-07-28T13:31:05.975Z] [INFO] New WebSocket connection +[2025-07-28T13:31:10.348Z] [INFO] WebSocket connection closed +[2025-07-28T13:49:29.465Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:49:29.468Z] [INFO] Card logs initialized successfully +[2025-07-28T13:50:11.012Z] [INFO] New WebSocket connection +[2025-07-28T13:50:14.243Z] [INFO] WebSocket connection closed +[2025-07-28T13:51:39.743Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:51:39.746Z] [INFO] Card logs initialized successfully +[2025-07-28T13:51:49.286Z] [INFO] New WebSocket connection +[2025-07-28T13:51:50.317Z] [INFO] WebSocket connection closed +[2025-07-29T05:47:16.690Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T05:47:16.695Z] [INFO] Card logs initialized successfully +[2025-07-29T05:48:41.648Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T05:48:41.649Z] [INFO] Card logs initialized successfully +[2025-07-29T05:49:23.926Z] [INFO] Login successful +[2025-07-29T05:50:44.165Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T05:50:44.167Z] [INFO] Card logs initialized successfully +[2025-07-29T05:50:51.082Z] [INFO] New WebSocket connection +[2025-07-29T05:50:52.399Z] [INFO] WebSocket connection closed +[2025-07-29T07:55:32.314Z] [INFO] Card log path initialized: D:\rasch\admin-server\logs\cards.log +[2025-07-29T07:55:32.317Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-29T07:55:32.317Z] [INFO] Configuration loaded from: local files +[2025-07-29T07:55:32.320Z] [INFO] Card log file created at: D:\rasch\admin-server\logs\cards.log +[2025-07-29T07:55:32.320Z] [INFO] Card logs initialized successfully +[2025-07-29T07:56:01.662Z] [INFO] Card log path initialized: D:\rasch\admin-server\logs\cards.log +[2025-07-29T07:56:01.673Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-29T07:56:01.674Z] [INFO] Configuration loaded from: local files +[2025-07-29T07:56:01.677Z] [INFO] Card logs initialized successfully +[2025-07-29T07:57:30.027Z] [ERROR] Error: Access denied for user ''@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:232:16 +[2025-07-29T07:57:30.269Z] [ERROR] Error: Access denied for user ''@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:105:5) +[2025-07-29T07:57:30.281Z] [ERROR] Error: Access denied for user ''@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:105:5) +[2025-07-29T08:04:47.293Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T08:04:47.296Z] [INFO] Card logs initialized successfully +[2025-07-29T09:10:07.396Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T09:10:07.400Z] [INFO] Card logs initialized successfully +[2025-07-29T11:18:24.828Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T11:18:24.830Z] [INFO] Card logs initialized successfully +[2025-07-29T13:15:04.688Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T13:15:04.692Z] [INFO] Card logs initialized successfully +[2025-07-29T13:16:07.735Z] [INFO] Login successful +[2025-07-29T13:16:16.719Z] [INFO] New WebSocket connection +[2025-07-29T13:16:18.138Z] [INFO] WebSocket connection closed +[2025-09-09T12:06:33.379Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T12:06:33.412Z] [INFO] Card logs initialized successfully +[2025-09-09T12:10:27.374Z] [INFO] Login successful +[2025-09-09T12:10:48.082Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T12:10:48.085Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T12:10:48.095Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T12:10:48.098Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T12:10:48.162Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T12:10:48.166Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T12:10:48.171Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T12:31:20.727Z] [INFO] New WebSocket connection +[2025-09-09T12:31:28.729Z] [INFO] WebSocket connection closed +[2025-09-09T13:20:50.475Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:20:50.485Z] [INFO] Card logs initialized successfully +[2025-09-09T13:21:10.107Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:21:10.108Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:21:10.194Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:21:10.196Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:21:10.251Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:21:10.253Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:21:10.257Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:32:11.899Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:32:11.907Z] [INFO] Card logs initialized successfully +[2025-09-09T13:32:22.699Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:32:22.701Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:32:22.727Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:32:22.728Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:32:22.781Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:32:22.784Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:32:22.787Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:32:40.387Z] [INFO] Login successful +[2025-09-09T13:34:08.895Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:34:08.897Z] [INFO] Card logs initialized successfully +[2025-09-09T13:34:22.775Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:34:22.776Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:34:22.788Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:34:22.789Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:34:22.840Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:34:22.841Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:34:22.843Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:34:47.031Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:34:47.033Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:34:47.036Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:34:47.038Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:34:47.092Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:34:47.095Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:34:47.097Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:36:28.591Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:36:28.595Z] [INFO] Card logs initialized successfully +[2025-09-09T13:36:42.579Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:36:42.580Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:36:42.593Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:36:42.593Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:36:42.645Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:36:42.646Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:36:42.647Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:37:34.106Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:37:34.109Z] [INFO] Card logs initialized successfully +[2025-09-09T13:37:39.979Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:37:39.980Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:37:39.991Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:37:39.992Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:37:40.043Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:37:40.044Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:37:40.046Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:39:58.505Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:39:58.509Z] [INFO] Card logs initialized successfully +[2025-09-09T13:40:04.823Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:40:04.824Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:40:04.835Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:40:04.836Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:40:04.888Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:40:04.889Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:40:04.891Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:40:16.154Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:40:16.155Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:40:16.156Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:40:16.157Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:40:16.208Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:40:16.209Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:40:16.210Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:42:18.627Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:42:18.630Z] [INFO] Card logs initialized successfully +[2025-09-09T13:42:24.463Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:42:24.464Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:42:24.475Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:42:24.476Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:42:24.527Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:42:24.528Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:42:24.530Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T13:49:55.460Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T13:49:55.464Z] [INFO] Card logs initialized successfully +[2025-09-09T13:50:15.955Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T13:50:15.956Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T13:50:15.957Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T13:50:15.958Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T13:50:16.009Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T13:50:16.010Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T13:50:16.012Z] [INFO] [LOGIN] Ответ отправлен +[2025-11-13T13:59:10.460Z] [INFO] Server running on http://localhost:3005 +[2025-11-13T13:59:10.527Z] [INFO] Card logs initialized successfully +[2026-04-06T12:45:26.077Z] [INFO] Server running on http://localhost:3005 +[2026-04-06T12:45:26.087Z] [INFO] Card logs initialized successfully +[2026-04-14T13:33:17.048Z] [INFO] Server running on http://localhost:3005 +[2026-04-14T13:33:17.051Z] [INFO] Card logs initialized successfully +[2026-04-14T13:35:58.986Z] [INFO] Server running on http://localhost:3005 +[2026-04-14T13:35:58.989Z] [INFO] Card logs initialized successfully +[2026-04-14T13:36:39.755Z] [INFO] Login successful +[2026-04-14T13:42:23.764Z] [INFO] Login successful +[2026-08-03T09:08:56.233Z] [INFO] Server running on http://localhost:3005 +[2026-08-03T09:08:56.244Z] [INFO] Card logs initialized successfully +[2026-08-03T12:31:58.450Z] [INFO] Server running on http://localhost:3005 +[2026-08-03T12:31:58.466Z] [INFO] Card logs initialized successfully +[2026-08-03T12:32:18.321Z] [ERROR] Error: CORS: Origin not allowed + at origin (D:\rasch\admin-server\config\cors.js:9:21) + at D:\rasch\admin-server\node_modules\cors\lib\index.js:219:13 + at optionsCallback (D:\rasch\admin-server\node_modules\cors\lib\index.js:199:9) + at corsMiddleware (D:\rasch\admin-server\node_modules\cors\lib\index.js:204:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2026-08-03T12:32:19.594Z] [ERROR] Error: CORS: Origin not allowed + at origin (D:\rasch\admin-server\config\cors.js:9:21) + at D:\rasch\admin-server\node_modules\cors\lib\index.js:219:13 + at optionsCallback (D:\rasch\admin-server\node_modules\cors\lib\index.js:199:9) + at corsMiddleware (D:\rasch\admin-server\node_modules\cors\lib\index.js:204:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2026-08-05T09:23:17.178Z] [INFO] Server running on http://localhost:3005 +[2026-08-05T09:23:17.201Z] [INFO] Card logs initialized successfully +[2026-08-05T09:24:53.833Z] [ERROR] Error: CORS: Origin not allowed + at origin (D:\rasch\admin-server\config\cors.js:9:21) + at D:\rasch\admin-server\node_modules\cors\lib\index.js:219:13 + at optionsCallback (D:\rasch\admin-server\node_modules\cors\lib\index.js:199:9) + at corsMiddleware (D:\rasch\admin-server\node_modules\cors\lib\index.js:204:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at router.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2026-08-05T09:24:54.402Z] [ERROR] Error: CORS: Origin not allowed + at origin (D:\rasch\admin-server\config\cors.js:9:21) + at D:\rasch\admin-server\node_modules\cors\lib\index.js:219:13 + at optionsCallback (D:\rasch\admin-server\node_modules\cors\lib\index.js:199:9) + at corsMiddleware (D:\rasch\admin-server\node_modules\cors\lib\index.js:204:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at router.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2026-08-05T09:24:55.080Z] [ERROR] Error: CORS: Origin not allowed + at origin (D:\rasch\admin-server\config\cors.js:9:21) + at D:\rasch\admin-server\node_modules\cors\lib\index.js:219:13 + at optionsCallback (D:\rasch\admin-server\node_modules\cors\lib\index.js:199:9) + at corsMiddleware (D:\rasch\admin-server\node_modules\cors\lib\index.js:204:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at router.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) diff --git a/admin-server/logs/cards.log b/admin-server/logs/cards.log new file mode 100644 index 0000000..e69de29 diff --git a/admin-server/middleware/checkAuth.js b/admin-server/middleware/checkAuth.js new file mode 100644 index 0000000..3f568b2 --- /dev/null +++ b/admin-server/middleware/checkAuth.js @@ -0,0 +1,7 @@ +module.exports = (req, res, next) => { + if (req.session && req.session.isAuthenticated) { + next(); + } else { + res.status(401).json({ message: 'Unauthorized' }); + } +}; diff --git a/admin-server/middleware/csrf.js b/admin-server/middleware/csrf.js new file mode 100644 index 0000000..eea6ea1 --- /dev/null +++ b/admin-server/middleware/csrf.js @@ -0,0 +1,17 @@ +// middleware/csrf.js +const csurf = require('csurf'); + +const csrfProtection = csurf({ cookie: false }); + +const csrfMiddleware = (req, res, next) => { + if ( + req.path === '/login' || + req.path === '/moders/moder-login' || + req.path === '/moders/csrf-token' + ) { + return next(); + } + return csrfProtection(req, res, next); +}; + +module.exports = csrfMiddleware; \ No newline at end of file diff --git a/admin-server/middleware/errorHandler.js b/admin-server/middleware/errorHandler.js new file mode 100644 index 0000000..048ef2c --- /dev/null +++ b/admin-server/middleware/errorHandler.js @@ -0,0 +1,8 @@ +const logger = require('../logger') +module.exports = (err, req, res, next) => { + if (err.code === 'EBADCSRFTOKEN') { + return res.status(403).json({ message: 'Invalid CSRF token' }); + } + logger.error(err.stack); + res.status(500).json({ message: 'Internal Server Error' }); +}; \ No newline at end of file diff --git a/admin-server/moders/config.env b/admin-server/moders/config.env new file mode 100644 index 0000000..e5b9052 --- /dev/null +++ b/admin-server/moders/config.env @@ -0,0 +1,5 @@ +MYSQL_HOST=localhost +MYSQL_PORT=3306 +MYSQL_USER=root +MYSQL_PASSWORD=Vova-2003. +MYSQL_DATABASE=rasch_content \ No newline at end of file diff --git a/admin-server/moders/db.js b/admin-server/moders/db.js new file mode 100644 index 0000000..e45ce81 --- /dev/null +++ b/admin-server/moders/db.js @@ -0,0 +1,20 @@ +const mysql = require('mysql2/promise'); +require('dotenv').config({ path: __dirname + './config.env' }); +console.log({ + host: process.env.MYSQL_HOST, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE +}); +const pool = mysql.createPool({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT || 3306, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/admin-server/moders/middleware/requireModerator.js b/admin-server/moders/middleware/requireModerator.js new file mode 100644 index 0000000..f78b5d4 --- /dev/null +++ b/admin-server/moders/middleware/requireModerator.js @@ -0,0 +1,6 @@ +function requireModerator(req, res, next) { + if (req.session && req.session.isModerator) return next(); + res.status(401).send('Unauthorized'); +} + +module.exports = requireModerator; \ No newline at end of file diff --git a/admin-server/moders/routes/content.js b/admin-server/moders/routes/content.js new file mode 100644 index 0000000..59c9229 --- /dev/null +++ b/admin-server/moders/routes/content.js @@ -0,0 +1,100 @@ +const express = require('express'); +const db = require('../db'); +const requireModerator = require('../middleware/requireModerator'); +const router = express.Router(); +const multer = require('multer'); +const path = require('path'); +const fs = require('fs'); + +const uploadDir = path.join(__dirname, '../../uploads'); +if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir, { recursive: true }); +const storage = multer.diskStorage({ + destination: (req, file, cb) => cb(null, uploadDir), + filename: (req, file, cb) => { + const ext = path.extname(file.originalname); + const name = Date.now() + '-' + Math.round(Math.random() * 1e6) + ext; + cb(null, name); + } +}); +const ALLOWED_MIME_TYPES = [ + 'image/jpeg', 'image/png', + 'video/mp4', 'video/quicktime' +]; +const MAX_FILE_SIZE = 20 * 1024 * 1024; // 20 МБ + +const upload = multer({ + storage, + limits: { fileSize: MAX_FILE_SIZE }, + fileFilter: (req, file, cb) => { + if (ALLOWED_MIME_TYPES.includes(file.mimetype)) { + cb(null, true); + } else { + cb(new Error('Недопустимый тип файла')); + } + } +}); + +// Получить все блоки для вкладки +router.get('/:tab', async (req, res) => { + const { tab } = req.params; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + const [rows] = await db.query('SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC', [tab]); + res.json(rows); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// Загрузка файла (image/video) +router.post('/:tab/upload', requireModerator, upload.single('file'), (req, res) => { + if (!req.file) return res.status(400).json({ message: 'Файл не загружен' }); + const relPath = '/uploads/' + req.file.filename; + res.json({ path: relPath }); +}); + +// Добавить новый блок +router.post('/:tab', requireModerator, async (req, res) => { + const { tab } = req.params; + const { content } = req.body; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + const [result] = await db.query( + 'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())', + [tab, 'text', content, req.session.userId] + ); + res.json({ id: result.insertId }); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// Обновить блок +router.put('/:tab/:id', requireModerator, async (req, res) => { + const { tab, id } = req.params; + const { content } = req.body; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + await db.query( + 'UPDATE content_blocks SET content = ?, updated_at = NOW() WHERE id = ? AND tab = ?', + [content, id, tab] + ); + res.json({ message: 'Обновлено' }); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// Удалить блок +router.delete('/:tab/:id', requireModerator, async (req, res) => { + const { tab, id } = req.params; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + await db.query('DELETE FROM content_blocks WHERE id = ? AND tab = ?', [id, tab]); + res.json({ message: 'Удалено' }); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/admin-server/moders/routes/moderAuth.js b/admin-server/moders/routes/moderAuth.js new file mode 100644 index 0000000..590f3c8 --- /dev/null +++ b/admin-server/moders/routes/moderAuth.js @@ -0,0 +1,81 @@ +const express = require('express'); +const bcrypt = require('bcrypt'); +const db = require('../db'); +const router = express.Router(); +const logger = require('../../logger'); +const rateLimit = require('express-rate-limit'); +const csurf = require('csurf'); + +const csrfProtection = csurf({ cookie: false }); + +const loginLimiter = rateLimit({ + windowMs: 30 * 60 * 1000, // 30 минут + max: 10, + message: { message: 'Слишком много попыток входа. Попробуйте позже.' }, + standardHeaders: true, + legacyHeaders: false +}); + +router.get('/csrf-token', csrfProtection, (req, res) => { + res.json({ csrfToken: req.csrfToken() }); +}); + +router.post('/moder-login', loginLimiter, async (req, res) => { + const { username, password } = req.body; + logger.info(`[LOGIN] Попытка входа: ${username}`); + try { + logger.info('[LOGIN] Проверка подключения к базе...'); + const [rows] = await db.query('SELECT * FROM users WHERE username = ?', [username]); + logger.info(`[LOGIN] Результат поиска пользователя: ${rows.length > 0 ? 'найден' : 'не найден'}`); + if (!rows.length) { + logger.warn(`[LOGIN] Пользователь не найден: ${username}`); + return res.status(401).json({ message: 'Неверный логин или пароль' }); + } + const user = rows[0]; + if (!user.password_hash) { + logger.error('[LOGIN] Отсутствует password_hash в БД'); + return res.status(500).json({ message: 'Ошибка сервера: некорректные данные пользователя' }); + } + logger.info('[LOGIN] Сравнение пароля через bcrypt...'); + const match = await bcrypt.compare(password, user.password_hash); + logger.info(`[LOGIN] Результат сравнения пароля: ${match}`); + if (!match) { + logger.warn(`[LOGIN] Неверный пароль для пользователя: ${username}`); + return res.status(401).json({ message: 'Неверный логин или пароль' }); + } + try { + req.session.isModerator = true; + req.session.userId = user.id; + req.session.username = user.username; + logger.info('[LOGIN] Сессия установлена:', { + isModerator: req.session.isModerator, + userId: req.session.userId, + username: req.session.username + }); + res.json({ message: 'OK' }); + logger.info('[LOGIN] Ответ отправлен'); + } catch (e) { + logger.error('[LOGIN] Ошибка при установке сессии или отправке ответа:', e); + res.status(500).json({ message: 'Ошибка сервера (сессия)' }); + } + } catch (err) { + logger.error('[LOGIN] Ошибка авторизации:', err); + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +router.get('/moder-logout', (req, res) => { + req.session.destroy(() => { + res.json({ message: 'OK' }); + }); +}); + +router.get('/check-session', (req, res) => { + if (req.session && req.session.isModerator) { + res.json({ ok: true }); + } else { + res.status(401).json({ ok: false }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/admin-server/package-lock.json b/admin-server/package-lock.json new file mode 100644 index 0000000..242ed04 --- /dev/null +++ b/admin-server/package-lock.json @@ -0,0 +1,3298 @@ +{ + "name": "admin-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "admin-server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.10.0", + "bcrypt": "^6.0.0", + "cors": "^2.8.5", + "csurf": "^1.11.0", + "dompurify": "^3.2.6", + "dotenv": "^17.2.1", + "electron": "^37.0.0", + "express": "^5.1.0", + "express-mysql-session": "^3.0.3", + "express-rate-limit": "^8.0.1", + "express-session": "^1.18.1", + "fs-extra": "^11.3.0", + "morgan": "^1.10.0", + "mssql": "^11.0.1", + "multer": "^2.0.1", + "mysql2": "^3.14.2", + "quill": "^2.0.3", + "ws": "^8.18.3" + } + }, + "node_modules/@azure-rest/core-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.4.0.tgz", + "integrity": "sha512-CjMFBcmnt0YNdRcxSSoZbtZNXudLlicdml7UrPsV03nHiWB+Bq5cu5ctieyaCuRtU7jm7+SOFtiE/g4pBFPKKA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.5.0", + "@azure/core-tracing": "^1.0.1", + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.4.tgz", + "integrity": "sha512-f7IxTD15Qdux30s2qFARH+JxgwxWLG2Rlr4oSkPGuLWm+1p5y1+C04XGLA0vmX6EtqfutmjvpNmAfgwVIS5hpw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.20.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-http-compat": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.0.tgz", + "integrity": "sha512-qLQujmUypBBG0gxHd0j6/Jdmul6ttl24c8WGiLXIk7IHXdBlfoBqW27hyz3Xn6xbfdyVSarl1Ttbk0AwnZBYCw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-client": "^1.3.0", + "@azure/core-rest-pipeline": "^1.20.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", + "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.21.0.tgz", + "integrity": "sha512-a4MBwe/5WKbq9MIxikzgxLBbruC5qlkFYlBdI7Ev50Y7ib5Vo/Jvt5jnJo7NaWeJ908LCHL0S1Us4UMf1VoTfg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@typespec/ts-http-runtime": "^0.2.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", + "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.12.0.tgz", + "integrity": "sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.10.2.tgz", + "integrity": "sha512-Uth4vz0j+fkXCkbvutChUj03PDCokjbC6Wk9JT8hHEUtpy/EurNKAseb3+gO6Zi9VYBvwt61pgbzn1ovk942Qg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^4.2.0", + "@azure/msal-node": "^3.5.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/keyvault-common": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz", + "integrity": "sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.5.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.10.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-keys": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.10.0.tgz", + "integrity": "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==", + "license": "MIT", + "dependencies": { + "@azure-rest/core-client": "^2.3.3", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-http-compat": "^2.2.0", + "@azure/core-lro": "^2.7.2", + "@azure/core-paging": "^1.6.2", + "@azure/core-rest-pipeline": "^1.19.0", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/keyvault-common": "^2.0.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.2.0.tgz", + "integrity": "sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.15.0.tgz", + "integrity": "sha512-+AIGTvpVz+FIx5CsM1y+nW0r/qOb/ChRdM8/Cbp+jKWC0Wdw4ldnwPdYOBi5NaALUQnYITirD9XMZX7LdklEzQ==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.8.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.8.1.tgz", + "integrity": "sha512-ltIlFK5VxeJ5BurE25OsJIfcx1Q3H/IZg2LjV9d4vmH+5t4c1UCyRQ/HgKLgXuCZShs7qfc/TC95GYZfsUsJUQ==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.6.3.tgz", + "integrity": "sha512-95wjsKGyUcAd5tFmQBo5Ug/kOj+hFh/8FsXuxluEvdfbgg6xCimhSP9qnyq6+xIg78/jREkBD1/BSqd7NIDDYQ==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.8.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.5.tgz", + "integrity": "sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tediousjs/connection-string": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz", + "integrity": "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==", + "license": "MIT" + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.33.tgz", + "integrity": "sha512-wzoocdnnpSxZ+6CjW4ADCK1jVmd1S/J3ArNWfn8FDDQtRm8dkDg7TA+mvek2wNrfCgwuZxqEOiB9B1XCJ6+dbw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/readable-stream": { + "version": "4.0.21", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.21.tgz", + "integrity": "sha512-19eKVv9tugr03IgfXlA9UVUVRbW6IuqRO5B92Dl4a6pT7K8uaGrNS0GkxiZD0BOk6PLuXl5FhWl//eX/pzYdTQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.3.tgz", + "integrity": "sha512-oRhjSzcVjX8ExyaF8hC0zzTqxlVuRlgMHL/Bh4w3xB9+wjbm0FpXylVU/lBrn+kgphwYTrOk3tp+AVShGmlYCg==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bcrypt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/bl": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.0.tgz", + "integrity": "sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^4.2.0" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "optional": true + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/csrf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz", + "integrity": "sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==", + "license": "MIT", + "dependencies": { + "rndm": "1.2.0", + "tsscmp": "1.0.6", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/csurf": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.11.0.tgz", + "integrity": "sha512-UCtehyEExKTxgiu8UHdGvHj4tnpE/Qctue03Giq5gPgMQ9cg/ciod5blZQ5a4uCEenNQjxyGuzygLdKUmee/bQ==", + "deprecated": "This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions", + "license": "MIT", + "dependencies": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "csrf": "3.1.0", + "http-errors": "~1.7.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/csurf/node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/csurf/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/csurf/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/csurf/node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/csurf/node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "license": "ISC" + }, + "node_modules/csurf/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/csurf/node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT", + "optional": true + }, + "node_modules/dompurify": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", + "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/dotenv": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.1.tgz", + "integrity": "sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron": { + "version": "37.0.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-37.0.0.tgz", + "integrity": "sha512-QhdtwF7Hq1qfnUXigYp1+bTGuLYTmYTir5KnrMXxWJoWfNhURRU2EYuTktBHoWT5mtv/GmmRjGEiR3IS2p9SSA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT", + "optional": true + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.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" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-mysql-session": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-3.0.3.tgz", + "integrity": "sha512-sEYrzFrOs3er+Ie/uk1dt93qz4AQ9SU1mpJJ0HPs0MJ4t4hE9AcDRNq0sZQUwy2F/SbXusBt1E5+FY6KzSqXNg==", + "license": "MIT", + "dependencies": { + "debug": "4.3.4", + "mysql2": "3.10.2" + } + }, + "node_modules/express-mysql-session/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/express-mysql-session/node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "license": "ISC", + "engines": { + "node": ">=16.14" + } + }, + "node_modules/express-mysql-session/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/express-mysql-session/node_modules/mysql2": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.10.2.tgz", + "integrity": "sha512-KCXPEvAkO0RcHPr362O5N8tFY2fXvbjfkPvRY/wGumh4EOemo9Hm5FjQZqv/pCmrnuxGu5OxnSENG0gTXqKMgQ==", + "license": "MIT", + "dependencies": { + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru-cache": "^8.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/express-rate-limit": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.0.1.tgz", + "integrity": "sha512-aZVCnybn7TVmxO4BtlmnvX+nuz8qHW124KKJ8dumsBsmv5ZLxE0pYu7S2nwyRBGHHCAzdmnGyrc5U/rksSPO7Q==", + "license": "MIT", + "dependencies": { + "ip-address": "10.0.1" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express-session": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.1.tgz", + "integrity": "sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "license": "Apache-2.0" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", + "license": "MIT" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC", + "optional": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mssql": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-11.0.1.tgz", + "integrity": "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w==", + "license": "MIT", + "dependencies": { + "@tediousjs/connection-string": "^0.5.0", + "commander": "^11.0.0", + "debug": "^4.3.3", + "rfdc": "^1.3.0", + "tarn": "^3.0.2", + "tedious": "^18.2.1" + }, + "bin": { + "mssql": "bin/mssql" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/multer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.1.tgz", + "integrity": "sha512-Ug8bXeTIUlxurg8xLTEskKShvcKDZALo1THEX5E41pYCD2sCVub5/kIRIGqWNoqV6szyLyQKV6mD4QUrWE5GCQ==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "mkdirp": "^0.5.6", + "object-assign": "^4.1.1", + "type-is": "^1.6.18", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">= 10.16.0" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql2": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.2.tgz", + "integrity": "sha512-YD6mZMeoypmheHT6b2BrVmQFvouEpRICuvPIREulx2OvP1xAxxeqkMQqZSTBefv0PiOBKGYFa2zQtY+gf/4eQw==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/native-duplexpair": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", + "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/parchment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==", + "license": "BSD-3-Clause" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quill": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", + "license": "BSD-3-Clause", + "dependencies": { + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" + } + }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "license": "MIT", + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==", + "license": "MIT" + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT", + "optional": true + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tedious": { + "version": "18.6.1", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-18.6.1.tgz", + "integrity": "sha512-9AvErXXQTd6l7TDd5EmM+nxbOGyhnmdbp/8c3pw+tjaiSXW9usME90ET/CRG1LN1Y9tPMtz/p83z4Q97B4DDpw==", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.7.2", + "@azure/identity": "^4.2.1", + "@azure/keyvault-keys": "^4.4.0", + "@js-joda/core": "^5.6.1", + "@types/node": ">=18", + "bl": "^6.0.11", + "iconv-lite": "^0.6.3", + "js-md4": "^0.3.2", + "native-duplexpair": "^1.0.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/admin-server/package.json b/admin-server/package.json new file mode 100644 index 0000000..73f999a --- /dev/null +++ b/admin-server/package.json @@ -0,0 +1,36 @@ +{ + "name": "admin-server", + "version": "1.0.0", + "main": "server.js", + "scripts": { + "start": "node server.js", + "electron": "electron .", + "electron-dev": "set NODE_ENV=development&& electron .", + "postinstall": "electron-builder install-app-deps", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "axios": "^1.10.0", + "bcrypt": "^6.0.0", + "cors": "^2.8.5", + "csurf": "^1.11.0", + "dompurify": "^3.2.6", + "dotenv": "^17.2.1", + "electron": "^37.0.0", + "express": "^5.1.0", + "express-mysql-session": "^3.0.3", + "express-rate-limit": "^8.0.1", + "express-session": "^1.18.1", + "fs-extra": "^11.3.0", + "morgan": "^1.10.0", + "mssql": "^11.0.1", + "multer": "^2.0.1", + "mysql2": "^3.14.2", + "quill": "^2.0.3", + "ws": "^8.18.3" + } +} diff --git a/admin-server/public/app.js b/admin-server/public/app.js new file mode 100644 index 0000000..35c791d --- /dev/null +++ b/admin-server/public/app.js @@ -0,0 +1,868 @@ +document.addEventListener('DOMContentLoaded', () => { + const statusElement = document.getElementById('server-status'); + const refreshBtn = document.getElementById('refresh-status-btn'); + const logsElement = document.getElementById('logs-content'); + const configForm = document.getElementById('config-form'); + const payslipsPathInput = document.getElementById('payslipsPath'); + const configStatus = document.getElementById('config-status'); + const browseBtn = document.getElementById('browse-btn'); + const dbStatusElement = document.getElementById('db-status'); + const checkDbBtn = document.getElementById('check-db-btn'); + const refreshLogsBtn = document.getElementById('refresh-logs-btn'); + const clearLogsBtn = document.getElementById('clear-logs-btn'); + const adminDbStatusEl = document.getElementById('admin-db-status'); + const adminDbMessageEl = document.getElementById('admin-db-message'); + const backendDbStatusEl = document.getElementById('backend-db-status'); + const backendDbMessageEl = document.getElementById('backend-db-message'); + const pingBtn = document.getElementById('ping-btn'); + const pingStopBtn = document.getElementById('ping-stop-btn'); + const pingClearBtn = document.getElementById('ping-clear-btn'); + const pingIpInput = document.getElementById('ping-ip'); + const pingOutputEl = document.getElementById('ping-output'); + let ws; + + const loginForm = document.getElementById('login-form'); + if (loginForm) { + loginForm.addEventListener('submit', async (e) => { + e.preventDefault(); + const password = loginForm.elements['password'].value; + try { + const response = await fetch('/api/auth', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }) + }); + if (response.ok) { + window.location.href = '/'; + } else { + alert('Неверный пароль'); + } + } catch (err) { + alert('Ошибка авторизации'); + } + }); + } + + function fetchStatus() { + fetch('/api/status') + .then(response => response.json()) + .then(data => { + if (data.status === 'online') { + statusElement.textContent = 'Онлайн'; + statusElement.style.color = 'green'; + } else { + statusElement.textContent = 'Оффлайн'; + statusElement.style.color = 'red'; + } + }) + .catch(err => { + console.error('Ошибка при получении статуса:', err); + statusElement.textContent = 'Ошибка'; + statusElement.style.color = 'orange'; + }); + } + + refreshBtn.addEventListener('click', fetchStatus); + function fetchLogs() { + logsElement.textContent = 'загрузка...'; + fetch('/api/logs') + .then(response => { + if (!response.ok) throw new Error('Не удалось загрузить логи'); + return response.text(); + }) + .then(data => { + logsElement.textContent = data || 'Лог-файл пуст.'; + }) + .catch(err => { + logsElement.textContent = `Ошибка при загрузке логов: ${err.message}`; + logsElement.style.color = '#ff6b6b'; + }); + } + function fetchConfig() { + fetch('/api/config') + .then(response => response.json()) + .then(config => { + payslipsPathInput.value = config.payslipsPath; + }) + .catch(err => { + console.error('Ошибка при получении конфигурации:', err); + configStatus.textContent = 'Не удалось загрузить конфигурацию.'; + configStatus.style.color = 'red'; + }); + } + +configForm.addEventListener('submit', (e) => { + e.preventDefault(); + const newConfig = { + payslipsPath: payslipsPathInput.value + }; + + apiFetch('/api/config', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(newConfig) + }) + .then(response => response.json()) + .then(data => { + configStatus.textContent = 'Конфигурация успешно сохранена!'; + configStatus.style.color = 'green'; + setTimeout(() => { configStatus.textContent = ''; }, 3000); + }) + .catch(err => { + console.error('Ошибка при сохранении конфигурации:', err); + configStatus.textContent = 'Ошибка при сохранении.'; + configStatus.style.color = 'red'; + }); +}); + browseBtn.addEventListener('click', async () => { + try { + const response = await fetch('/api/browse'); + if (response.ok) { + const data = await response.json(); + payslipsPathInput.value = data.path; + } else { + console.info('Folder selection was canceled.'); + } + } catch (error) { + console.error('Error opening folder dialog:', error); + alert('Не удалось открыть диалог выбора папки.'); + } + }); + + function renderStatus(element, messageEl, data) { + messageEl.textContent = data.message; + if (data.status === 'online') { + element.textContent = 'Онлайн'; + element.style.color = 'green'; + } else { + element.textContent = 'Оффлайн'; + element.style.color = 'red'; + } + } + function checkDbStatus() { + adminDbStatusEl.textContent = 'проверка...'; + backendDbStatusEl.textContent = 'проверка...'; + adminDbMessageEl.textContent = ''; + backendDbMessageEl.textContent = ''; + adminDbStatusEl.style.color = '#333'; + backendDbStatusEl.style.color = '#333'; + + fetch('/api/health/check-db') + .then(response => response.json()) + .then(data => { + renderStatus(adminDbStatusEl, adminDbMessageEl, data.adminToDb); + renderStatus(backendDbStatusEl, backendDbMessageEl, data.backendToDb); + }) + .catch(err => { + console.error('Ошибка при проверке статуса БД:', err); + adminDbStatusEl.textContent = 'Ошибка'; + adminDbStatusEl.style.color = 'orange'; + backendDbStatusEl.textContent = 'Ошибка'; + backendDbStatusEl.style.color = 'orange'; + }); + } + + checkDbBtn.addEventListener('click', checkDbStatus); + + function clearLogs() { + if (!confirm('Это действие удалит лог-файл полностью и навсегда. Вы уверены?')) { + return; + } + fetch('/api/logs/clear', { method: 'POST' }) + .then(response => { + if (response.ok) { + fetchLogs(); + } else { + alert('Не удалось очистить логи.'); + } + }) + .catch(err => { + console.error('Ошибка при очистке логов:', err); + alert('Произошла ошибка при очистке логов.'); + }); + } + + refreshLogsBtn.addEventListener('click', fetchLogs); + clearLogsBtn.addEventListener('click', clearLogs); + + function doPing() { + const ip = pingIpInput.value.trim(); + if (!ip) { + pingOutputEl.textContent = 'Пожалуйста, введите IP-адрес.'; + return; + } + if (ws) { + ws.close(); + } + const wsProtocol = window.location.protocol === 'https:' ? 'wss' : 'ws'; + ws = new WebSocket(`${wsProtocol}://${window.location.host}`); + + ws.onopen = () => { + pingOutputEl.textContent = ''; + pingBtn.disabled = true; + pingStopBtn.disabled = false; + ws.send(JSON.stringify({ type: 'ping', ip })); + }; + + ws.onmessage = (event) => { + const message = JSON.parse(event.data); + pingOutputEl.textContent += message.data; + pingOutputEl.scrollTop = pingOutputEl.scrollHeight; + }; + + ws.onerror = (error) => { + console.error('WebSocket Error:', error); + pingOutputEl.textContent += '\nОшибка WebSocket соединения.'; + }; + + ws.onclose = () => { + console.info('WebSocket connection closed'); + pingBtn.disabled = false; + pingStopBtn.disabled = true; + ws = null; + }; + } + + function stopPing() { + if (ws) { + ws.close(); + } + } + + function clearPingOutput() { + pingOutputEl.textContent = ''; + } + pingBtn.addEventListener('click', doPing); + pingStopBtn.addEventListener('click', stopPing); + pingClearBtn.addEventListener('click', clearPingOutput); + + const cardLogsElement = document.getElementById('card-logs-content'); + const refreshCardLogsBtn = document.getElementById('refresh-card-logs-btn'); + + function fetchCardLogs() { + cardLogsElement.textContent = 'загрузка...'; + fetch('/api/card/card-logs') + .then(response => { + if (!response.ok) throw new Error('Не удалось загрузить логи считывателя'); + return response.text(); + }) + .then(data => { + cardLogsElement.textContent = data || 'Лог-файл пуст.'; + }) + .catch(err => { + cardLogsElement.textContent = `Ошибка при загрузке логов: ${err.message}`; + cardLogsElement.style.color = '#ff6b6b'; + }); + } + refreshCardLogsBtn.addEventListener('click', fetchCardLogs); + + // --- ТАБЫ --- + const tabMainBtn = document.getElementById('tab-main'); + const tabSettingsBtn = document.getElementById('tab-settings'); + const tabMonitoringBtn = document.getElementById('tab-monitoring'); + const mainTab = document.getElementById('main-tab'); + const settingsTab = document.getElementById('settings-tab'); + const monitoringTab = document.getElementById('monitoring-tab'); + + function showTab(tab) { + mainTab.style.display = 'none'; + settingsTab.style.display = 'none'; + monitoringTab.style.display = 'none'; + tabMainBtn.classList.remove('active'); + tabSettingsBtn.classList.remove('active'); + tabMonitoringBtn.classList.remove('active'); + + if (tab === 'main') { + mainTab.style.display = ''; + tabMainBtn.classList.add('active'); + } else if (tab === 'settings') { + settingsTab.style.display = ''; + tabSettingsBtn.classList.add('active'); + initSettingsTab(); + } else if (tab === 'monitoring') { + monitoringTab.style.display = ''; + tabMonitoringBtn.classList.add('active'); + initMonitoringTab(); + } + } + tabMainBtn.addEventListener('click', () => showTab('main')); + tabSettingsBtn.addEventListener('click', () => showTab('settings')); + tabMonitoringBtn.addEventListener('click', () => showTab('monitoring')); + + // --- TOAST --- + function showToast(message, type = 'success') { + const container = document.getElementById('toast-container'); + const toast = document.createElement('div'); + toast.className = 'toast toast-' + type; + toast.textContent = message; + container.appendChild(toast); + setTimeout(() => { + toast.style.opacity = '0'; + setTimeout(() => container.removeChild(toast), 300); + }, 3000); + } + + // --- CSRF TOKEN --- + let csrfToken = null; + async function fetchCsrfToken() { + try { + const res = await fetch('/moders/csrf-token', { credentials: 'include' }); + if (res.ok) { + const data = await res.json(); + csrfToken = data.csrfToken; + } + } catch (e) { csrfToken = null; } + } + // Обёртка для fetch с CSRF и credentials + async function apiFetch(url, options = {}) { + if (!options.headers) options.headers = {}; + if (['POST','PUT','DELETE'].includes((options.method||'GET').toUpperCase())) { + if (!csrfToken) await fetchCsrfToken(); + options.headers['X-CSRF-Token'] = csrfToken; + } + options.credentials = 'include'; + return fetch(url, options); + } + + // --- Модальное окно подтверждения --- + const confirmModal = document.getElementById('confirm-modal'); + const confirmModalText = document.getElementById('confirm-modal-text'); + const confirmModalYes = document.getElementById('confirm-modal-yes'); + const confirmModalNo = document.getElementById('confirm-modal-no'); + + function showConfirm(text, onConfirm) { + confirmModalText.textContent = text; + confirmModal.style.display = 'flex'; + + const yesListener = () => { + onConfirm(); + closeConfirm(); + }; + + const closeConfirm = () => { + confirmModal.style.display = 'none'; + confirmModalYes.removeEventListener('click', yesListener); + confirmModalNo.removeEventListener('click', closeConfirm); + } + + confirmModalYes.addEventListener('click', yesListener); + confirmModalNo.addEventListener('click', closeConfirm); + } + + + // --- ВКЛАДКА МОНИТОРИНГА --- + let monitoringInitialized = false; + let allMonitoringEvents = []; // Кэш для всех событий + + async function initMonitoringTab() { + if (monitoringInitialized) return; + monitoringInitialized = true; + + const tableBody = document.querySelector('#monitoring-log-table tbody'); + const levelFilter = document.getElementById('log-level-filter'); + const sourceFilter = document.getElementById('log-source-filter'); + const refreshBtn = document.getElementById('refresh-monitoring-btn'); + + async function loadMonitoringLogs() { + tableBody.innerHTML = 'Загрузка...'; + try { + const res = await apiFetch('/api/monitoring/logs'); + if (!res.ok) throw new Error('Failed to fetch logs'); + + allMonitoringEvents = await res.json(); + renderTable(); + + } catch (e) { + tableBody.innerHTML = 'Ошибка загрузки логов.'; + console.error('Error loading monitoring logs:', e); + } + } + + function renderTable() { + const level = levelFilter.value; + const source = sourceFilter.value; + + const filteredEvents = allMonitoringEvents.filter(event => { + const levelMatch = (level === 'all') || (event.level === level); + const sourceMatch = (source === 'all') || (event.source === source); + return levelMatch && sourceMatch; + }); + + tableBody.innerHTML = ''; + if (filteredEvents.length === 0) { + tableBody.innerHTML = 'Нет событий для отображения.'; + return; + } + + filteredEvents.forEach(event => { + const tr = document.createElement('tr'); + tr.className = `log-level-${event.level.toLowerCase()}`; + tr.innerHTML = ` + ${new Date(event.timestamp).toLocaleString()} + ${event.level} + ${event.source} + ${event.message} + `; + tableBody.appendChild(tr); + }); + } + + levelFilter.addEventListener('change', renderTable); + sourceFilter.addEventListener('change', renderTable); + refreshBtn.addEventListener('click', loadMonitoringLogs); + + loadMonitoringLogs(); + } + + + // --- НАСТРОЙКИ: инициализация вкладки --- + let settingsInitialized = false; + + async function initSettingsTab() { + if(settingsInitialized) return; + settingsInitialized = true; + + initServerParamsSection(); + initDbSection(); + initCorsSection(); + initModersSection(); + + settingsTab.addEventListener('click', (e) => { + if (e.target.dataset.action === 'edit-pass') { + const targetId = e.target.dataset.target; + const input = document.getElementById(targetId); + input.readOnly = false; + input.value = ''; + input.placeholder = 'Введите новый пароль...'; + input.focus(); + e.target.remove(); + } + }); + } + + async function initServerParamsSection() { + // Загрузка текущих значений + try { + const results = await Promise.allSettled([ + apiFetch('/api/settings/admin-server'), + apiFetch('/api/settings/backend-server') + ]); + + const adminResult = results[0]; + if (adminResult.status === 'fulfilled') { + const adminData = await adminResult.value.json(); + document.getElementById('admin-port').value = adminData.PORT || ''; + document.getElementById('admin-url').value = adminData.ADMIN_URL || ''; + } else { + console.error('Failed to load admin-server settings:', adminResult.reason); + } + + const backendResult = results[1]; + if (backendResult.status === 'fulfilled') { + const backendData = await backendResult.value.json(); + document.getElementById('backend-host').value = backendData.host || ''; + document.getElementById('backend-port').value = backendData.port || ''; + } else { + console.error('Failed to load backend-server settings:', backendResult.reason); + document.getElementById('server-params-status').textContent += ' Ошибка загрузки параметров Backend.'; + } + + } catch (e) { + document.getElementById('server-params-status').textContent = 'Критическая ошибка загрузки параметров'; + document.getElementById('server-params-status').style.color = 'red'; + } + // Обработка сохранения + document.getElementById('server-params-form').addEventListener('submit', async (e) => { + e.preventDefault(); + const PORT = document.getElementById('admin-port').value; + const ADMIN_URL = document.getElementById('admin-url').value; + const host = document.getElementById('backend-host').value; + const port = document.getElementById('backend-port').value; + const statusEl = document.getElementById('server-params-status'); + statusEl.textContent = ''; + try { + const [adminRes, backendRes] = await Promise.all([ + apiFetch('/api/settings/admin-server', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ PORT, ADMIN_URL }) + }), + apiFetch('/api/settings/backend-server', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ host, port }) + }) + ]); + if (adminRes.ok && backendRes.ok) { + statusEl.innerHTML = 'Параметры успешно сохранены.
Требуется перезапуск обоих серверов для применения!'; + statusEl.style.color = 'green'; + showToast('Параметры успешно сохранены', 'success'); + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + } + + function initDbSection() { + // --- БД --- + // MS SQL + async function loadMssql() { + try { + const res = await apiFetch('/api/settings/mssql'); + const data = await res.json(); + document.getElementById('mssql-user').value = data.DB_USER || ''; + + const passWrapper = document.getElementById('mssql-pass').closest('.password-wrapper'); + passWrapper.innerHTML = ` + + + `; + if (data.DB_PASSWORD) { + passWrapper.querySelector('input').placeholder = '********'; + } + + document.getElementById('mssql-server').value = data.DB_SERVER || ''; + document.getElementById('mssql-db').value = data.DB_NAME || ''; + } catch (e) { + document.getElementById('mssql-status').textContent = 'Ошибка загрузки'; + document.getElementById('mssql-status').style.color = 'red'; + } + } + loadMssql(); + document.getElementById('mssql-form').addEventListener('submit', async (e) => { + e.preventDefault(); + + const payload = { + DB_USER: document.getElementById('mssql-user').value, + DB_SERVER: document.getElementById('mssql-server').value, + DB_NAME: document.getElementById('mssql-db').value + }; + const passInput = document.getElementById('mssql-pass'); + if (!passInput.readOnly) { + payload.DB_PASSWORD = passInput.value; + } + + const statusEl = document.getElementById('mssql-status'); + statusEl.textContent = ''; + try { + const res = await apiFetch('/api/settings/mssql', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); + if (res.ok) { + statusEl.innerHTML = 'Сохранено.
Требуется перезапуск Admin-server для применения!'; + statusEl.style.color = 'green'; + showToast('Сохранено', 'success'); + loadMssql(); // Перезагружаем секцию, чтобы сбросить поле пароля + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + // MySQL + async function loadMysql() { + try { + const res = await apiFetch('/api/settings/mysql'); + const data = await res.json(); + document.getElementById('mysql-host').value = data.MYSQL_HOST || ''; + document.getElementById('mysql-port').value = data.MYSQL_PORT || ''; + document.getElementById('mysql-user').value = data.MYSQL_USER || ''; + + const passWrapper = document.getElementById('mysql-pass').closest('.password-wrapper'); + passWrapper.innerHTML = ` + + + `; + if (data.MYSQL_PASSWORD) { + passWrapper.querySelector('input').placeholder = '********'; + } + + document.getElementById('mysql-db').value = data.MYSQL_DATABASE || ''; + } catch (e) { + document.getElementById('mysql-status').textContent = 'Ошибка загрузки'; + document.getElementById('mysql-status').style.color = 'red'; + } + } + loadMysql(); + document.getElementById('mysql-form').addEventListener('submit', async (e) => { + e.preventDefault(); + + const payload = { + MYSQL_HOST: document.getElementById('mysql-host').value, + MYSQL_PORT: document.getElementById('mysql-port').value, + MYSQL_USER: document.getElementById('mysql-user').value, + MYSQL_DATABASE: document.getElementById('mysql-db').value + }; + const passInput = document.getElementById('mysql-pass'); + if (!passInput.readOnly) { + payload.MYSQL_PASSWORD = passInput.value; + } + + const statusEl = document.getElementById('mysql-status'); + statusEl.textContent = ''; + try { + const res = await apiFetch('/api/settings/mysql', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); + if (res.ok) { + statusEl.innerHTML = 'Сохранено.
Требуется перезапуск Admin-server для применения!'; + statusEl.style.color = 'green'; + showToast('Сохранено', 'success'); + loadMysql(); // Перезагружаем секцию, чтобы сбросить поле пароля + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + } + + function initCorsSection() { + // --- CORS --- + let allowedOrigins = []; + async function loadCors() { + const list = document.getElementById('cors-list'); + list.innerHTML = '
  • Загрузка...
  • '; + try { + const res = await apiFetch('/api/settings/cors'); + const data = await res.json(); + allowedOrigins = Array.isArray(data.ALLOWED_ORIGINS) ? data.ALLOWED_ORIGINS : []; + renderCorsList(); + } catch (e) { + list.innerHTML = '
  • Ошибка загрузки
  • '; + } + } + const corsInput = document.getElementById('cors-new-origin'); + const corsAddBtn = document.getElementById('cors-add-btn'); + corsInput.addEventListener('input', () => { + const val = corsInput.value.trim(); + corsAddBtn.disabled = !val || allowedOrigins.includes(val); + }); + function renderCorsList() { + const list = document.getElementById('cors-list'); + list.innerHTML = ''; + if (!allowedOrigins.length) { + list.innerHTML = '
  • Нет origin
  • '; + return; + } + allowedOrigins.forEach((origin, idx) => { + const li = document.createElement('li'); + li.textContent = origin + ' '; + const delBtn = document.createElement('button'); + delBtn.textContent = 'Удалить'; + delBtn.className = 'btn-small'; + delBtn.addEventListener('click', () => { + allowedOrigins.splice(idx, 1); + renderCorsList(); + corsAddBtn.disabled = !corsInput.value.trim() || allowedOrigins.includes(corsInput.value.trim()); + }); + li.appendChild(delBtn); + list.appendChild(li); + }); + corsAddBtn.disabled = !corsInput.value.trim() || allowedOrigins.includes(corsInput.value.trim()); + } + loadCors(); + document.getElementById('cors-add-btn').addEventListener('click', () => { + const input = document.getElementById('cors-new-origin'); + const val = input.value.trim(); + if (val && !allowedOrigins.includes(val)) { + allowedOrigins.push(val); + input.value = ''; + renderCorsList(); + corsAddBtn.disabled = true; + } + }); + document.getElementById('cors-form').addEventListener('submit', async (e) => { + e.preventDefault(); + const statusEl = document.getElementById('cors-status'); + statusEl.textContent = ''; + try { + const res = await apiFetch('/api/settings/cors', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ ALLOWED_ORIGINS: allowedOrigins }) + }); + if (res.ok) { + statusEl.innerHTML = 'Сохранено.
    Требуется перезапуск Admin-server для применения!'; + statusEl.style.color = 'green'; + showToast('Сохранено', 'success'); + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + } + + function initModersSection() { + // --- МОДЕРАТОРЫ --- + async function loadModers() { + const tableBody = document.querySelector('#moders-table tbody'); + tableBody.innerHTML = 'Загрузка...'; + try { + const res = await apiFetch('/api/moders'); + const moders = await res.json(); + if (!Array.isArray(moders) || !moders.length) { + tableBody.innerHTML = 'Нет модераторов'; + return; + } + tableBody.innerHTML = ''; + for (const moder of moders) { + const tr = document.createElement('tr'); + tr.dataset.id = moder.id; + tr.innerHTML = `${moder.id}${moder.username}` + + `` + + ` ` + + `` + + ``; + tableBody.appendChild(tr); + } + } catch (e) { + tableBody.innerHTML = 'Ошибка загрузки'; + } + } + loadModers(); + // Добавление модератора + document.getElementById('add-moder-form').addEventListener('submit', async (e) => { + e.preventDefault(); + const username = document.getElementById('add-moder-username').value.trim(); + const password = document.getElementById('add-moder-password').value; + const statusEl = document.getElementById('add-moder-status'); + statusEl.textContent = ''; + if (!username || !password) { + statusEl.textContent = 'Заполните все поля'; + statusEl.style.color = 'red'; + return; + } + try { + const res = await apiFetch('/api/moders', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username, password }) + }); + if (res.ok) { + statusEl.textContent = 'Модератор добавлен'; + statusEl.style.color = 'green'; + document.getElementById('add-moder-form').reset(); + loadModers(); + showToast('Модератор добавлен', 'success'); + } else { + const data = await res.json(); + statusEl.textContent = data.message || 'Ошибка'; + statusEl.style.color = 'red'; + showToast(data.message || 'Ошибка', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка'; + statusEl.style.color = 'red'; + showToast('Ошибка', 'error'); + } + }); + // Действия: удалить/сменить пароль + document.getElementById('moders-table').addEventListener('click', async (e) => { + const btn = e.target.closest('button'); + if (!btn) return; + const id = btn.closest('tr').dataset.id; + const action = btn.getAttribute('data-action'); + if (action === 'delete') { + showConfirm('Удалить модератора?', async () => { + try { + const res = await apiFetch(`/api/moders/${id}`, { method: 'DELETE' }); + if (res.ok) { + loadModers(); + showToast('Модератор удален', 'success'); + } else { + showToast('Ошибка удаления', 'error'); + } + } catch (e) { + showToast('Ошибка удаления', 'error'); + } + }); + } else if (action === 'reset') { + const row = btn.closest('tr'); + const actionsCell = row.cells[2]; + + // Если мы уже в режиме редактирования, ничего не делаем + if (actionsCell.querySelector('input')) return; + + // Сохраняем оригинальные кнопки + const originalButtons = actionsCell.innerHTML; + + // Создаем поле ввода и кнопки + actionsCell.innerHTML = ` + + + + `; + + const input = actionsCell.querySelector('input'); + input.focus(); + + const saveBtn = actionsCell.querySelector('[data-action="save-pass"]'); + const cancelBtn = actionsCell.querySelector('[data-action="cancel-pass"]'); + + const handleSave = async () => { + const newPass = input.value; + if (!newPass || newPass.length < 4) { + showToast('Пароль должен быть не менее 4 символов', 'error'); + return; + } + + try { + const res = await apiFetch(`/api/moders/${id}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password: newPass }) + }); + if (res.ok) { + showToast('Пароль обновлён', 'success'); + actionsCell.innerHTML = originalButtons; // Возвращаем кнопки + } else { + showToast('Ошибка смены пароля', 'error'); + } + } catch (e) { + showToast('Ошибка смены пароля', 'error'); + } + }; + + const handleCancel = () => { + actionsCell.innerHTML = originalButtons; + }; + + saveBtn.addEventListener('click', handleSave); + cancelBtn.addEventListener('click', handleCancel); + } + }); + } + + fetchStatus(); + fetchConfig(); +}); \ No newline at end of file diff --git a/admin-server/public/editor.html b/admin-server/public/editor.html new file mode 100644 index 0000000..89a9f98 --- /dev/null +++ b/admin-server/public/editor.html @@ -0,0 +1,69 @@ + + + + + + Модератор: наполнение вкладок + + + + + + +
    +
    +

    Панель модератора

    +
    +

    Вход для модератора

    +
    +
    + + +
    +
    + + +
    + +

    +
    +
    + + + +
    + + + \ No newline at end of file diff --git a/admin-server/public/editor.js b/admin-server/public/editor.js new file mode 100644 index 0000000..80adaf9 --- /dev/null +++ b/admin-server/public/editor.js @@ -0,0 +1,209 @@ +document.addEventListener('DOMContentLoaded', () => { + const loginSection = document.getElementById('login-section'); + const editorSection = document.getElementById('editor-section'); + const loginForm = document.getElementById('moder-login-form'); + const loginError = document.getElementById('login-error'); + const tabBtns = document.querySelectorAll('.tab-btn'); + const addBlockBtn = document.getElementById('add-block-btn'); + const blocksList = document.getElementById('blocks-list'); + const logoutBtn = document.getElementById('logout-btn'); + loginForm.addEventListener('submit', async (e) => { + e.preventDefault(); + loginError.textContent = ''; + const username = loginForm.username.value.trim(); + const password = loginForm.password.value; + try { + const res = await fetch('/moders/moder-login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username, password }) + }); + if (res.ok) { + loginSection.style.display = 'none'; + editorSection.style.display = ''; + loadBlocks(currentTab); + } else { + const data = await res.json(); + loginError.textContent = data.message || 'Ошибка входа'; + } + } catch (err) { + loginError.textContent = 'Ошибка сервера'; + } + }); + if (logoutBtn) { + logoutBtn.onclick = async () => { + await fetch('/moders/moder-logout'); + editorSection.style.display = 'none'; + loginSection.style.display = ''; + showNotify('Вы вышли из системы', 'success'); + }; + } + tabBtns.forEach(btn => { + btn.addEventListener('click', () => { + tabBtns.forEach(b => b.classList.remove('active')); + btn.classList.add('active'); + currentTab = btn.dataset.tab; + loadBlocks(currentTab); + }); + }); + function loadBlocks(tab) { + fetch(`/moders/content/${tab}`) + .then(res => res.json()) + .then(data => { + blocksList.innerHTML = ''; + if (!Array.isArray(data) || !data.length) { + blocksList.innerHTML = '

    Нет блоков

    '; + return; + } + data.forEach(block => { + const div = document.createElement('div'); + div.className = 'content-block'; + div.innerHTML = `
    ${DOMPurify.sanitize(block.content)}
    `; + const editBtn = document.createElement('button'); + editBtn.textContent = 'Редактировать'; + editBtn.onclick = () => openEditModal(block); + const delBtn = document.createElement('button'); + delBtn.textContent = 'Удалить'; + delBtn.onclick = async () => { + if (confirm('Удалить блок?')) { + await fetch(`/moders/content/${tab}/${block.id}`, { method: 'DELETE' }); + showNotify('Блок удалён', 'success'); + loadBlocks(tab); + } + }; + div.appendChild(editBtn); + div.appendChild(delBtn); + blocksList.appendChild(div); + }); + }); + } + const editModal = document.getElementById('edit-modal'); + const editModalClose = document.getElementById('edit-modal-close'); + const editBlockForm = document.getElementById('edit-block-form'); + const editBlockId = document.getElementById('edit-block-id'); + const editModalTitle = document.getElementById('edit-modal-title'); + let editQuill; + let currentTab = 'info'; + let editingBlockId = null; + let originalContent = ''; + function showNotify(msg, type = 'success') { + const notify = document.getElementById('notify'); + notify.textContent = msg; + notify.className = 'show ' + type; + setTimeout(() => { notify.className = ''; }, 2200); + } + + if (typeof Quill === 'undefined' || typeof DOMPurify === 'undefined') { + console.error('Required libraries not loaded'); + return; + } + + // Инициализируйте Quill + if (!initQuill()) { + return; + } + + + function initQuill() { + if (typeof Quill === 'undefined') { + console.error('Quill not loaded'); + return false; + } + editQuill = new Quill('#edit-quill-editor', { + theme: 'snow', + modules: { + toolbar: [ + [{ header: [1, 2, 3, false] }], + ['bold', 'italic', 'underline', 'strike'], + [{ 'align': [] }], + [{ 'color': [] }, { 'background': [] }], + [{ 'list': 'ordered'}, { 'list': 'bullet' }], + ['blockquote', 'code-block'], + ['link', 'image', 'video'], + ['clean'] + ] + } + }); + return true; + } + function openEditModal(block) { + editingBlockId = block ? block.id : null; + editBlockId.value = block ? block.id : ''; + editModalTitle.textContent = block ? 'Редактировать блок' : 'Добавить блок'; + editQuill.root.innerHTML = block ? block.content : ''; + document.getElementById('edit-block-preview').innerHTML = block ? DOMPurify.sanitize(block.content) : ''; + originalContent = block ? block.content : ''; + editModal.style.display = 'block'; + } + editQuill.on('text-change', () => { + document.getElementById('edit-block-preview').innerHTML = DOMPurify.sanitize(editQuill.root.innerHTML); + }); + function tryCloseEditModal() { + const currentContent = editQuill.root.innerHTML; + if (currentContent !== originalContent) { + document.getElementById('confirm-modal').style.display = 'flex'; + const yesBtn = document.getElementById('confirm-close-yes'); + const noBtn = document.getElementById('confirm-close-no'); + yesBtn.onclick = function() { + document.getElementById('confirm-modal').style.display = 'none'; + editModal.style.display = 'none'; + }; + noBtn.onclick = function() { + document.getElementById('confirm-modal').style.display = 'none'; + }; + return; + } + editModal.style.display = 'none'; + } + editModalClose.onclick = tryCloseEditModal; + window.onclick = (event) => { + if (event.target === editModal) tryCloseEditModal(); + }; + addBlockBtn.onclick = () => openEditModal(null); + editBlockForm.addEventListener('submit', async (e) => { + e.preventDefault(); + const content = DOMPurify.sanitize(editQuill.root.innerHTML.trim()); + if (!content || content === '


    ') return; + if (editingBlockId) { + await fetch(`/moders/content/${currentTab}/${editingBlockId}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ type: 'text', content }) + }); + showNotify('Блок обновлён', 'success'); + } else { + await fetch(`/moders/content/${currentTab}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ type: 'text', content }) + }); + showNotify('Блок добавлен', 'success'); + } + editModal.style.display = 'none'; + loadBlocks(currentTab); + }); + fetch('/moders/check-session', { credentials: 'include' }).then(res => { + if (res.ok) { + loginSection.style.display = 'none'; + editorSection.style.display = ''; + loadBlocks(currentTab); + } else { + loginSection.style.display = ''; + editorSection.style.display = 'none'; + } + }); + + let csrfToken = ''; + fetch('/moders/csrf-token').then(res => res.json()).then(data => { + csrfToken = data.csrfToken; + }); + + const originalFetch = window.fetch; + window.fetch = function(url, options = {}) { + if (options && options.method && ['POST','PUT','DELETE'].includes(options.method.toUpperCase())) { + options.headers = options.headers || {}; + options.headers['x-csrf-token'] = csrfToken; + } + return originalFetch(url, options); + }; +}); \ No newline at end of file diff --git a/admin-server/public/index.html b/admin-server/public/index.html new file mode 100644 index 0000000..eb869d9 --- /dev/null +++ b/admin-server/public/index.html @@ -0,0 +1,201 @@ + + + + + + Панель администратора + + + +
    +
    +

    Панель администратора

    +
    + + + +
    +
    +
    +

    Статус сервера: загрузка...

    + +
    + +
    +
    +

    Админ -> БД: неизвестно

    + +
    +
    +

    Программа -> БД: неизвестно

    + +
    + +
    + +
    +

    Сетевая диагностика (Ping)

    +
    + + + + +
    +
    
    +            
    + +
    +

    Логи приложения

    +
    + + +
    +
    Нажмите "Обновить логи" для просмотра
    +
    + +
    +

    Логи считывателя

    +
    + +
    +
    +                
    Нажмите "Обновить логи считывателя" для просмотра
    +
    +
    + +
    +

    Конфигурация

    +
    +
    + +
    + + +
    +
    + +
    +

    +
    +
    + + + + +
    + + + + + + + \ No newline at end of file diff --git a/admin-server/public/login.html b/admin-server/public/login.html new file mode 100644 index 0000000..11effd2 --- /dev/null +++ b/admin-server/public/login.html @@ -0,0 +1,39 @@ + + + + + + Вход в панель администратора + + + +
    +

    Вход

    +
    +
    + + +
    + +
    +

    +
    + + + \ No newline at end of file diff --git a/admin-server/public/style.css b/admin-server/public/style.css new file mode 100644 index 0000000..295ca6a --- /dev/null +++ b/admin-server/public/style.css @@ -0,0 +1,557 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + background-color: #f4f7f9; + color: #333; + margin: 0; + padding: 20px; +} + +.container { + max-width: 80%; + margin: 0 auto; + background: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +h1 { + color: #0056b3; +} + +#status { + display: flex; + align-items: center; + gap: 15px; +} + +#refresh-status-btn { + padding: 5px 10px; + font-size: 14px; +} + +#server-status { + font-weight: bold; +} + +.logs-container { + margin-top: 20px; +} + +.log-controls { + margin-bottom: 10px; + display: flex; + gap: 10px; +} + +.ql-align-center { text-align: center; } +.ql-align-right { text-align: right; } +.ql-align-justify { text-align: justify; } + +#logs-content { + background-color: #2d2d2d; + color: #f1f1f1; + padding: 15px; + border-radius: 5px; + white-space: pre-wrap; /* Перенос строк */ + word-wrap: break-word; /* Перенос длинных строк */ + max-height: 400px; + overflow-y: auto; +} + +.config-container { + margin-top: 20px; +} + +.form-group { + margin-bottom: 15px; +} + +.form-group label { + display: block; + margin-bottom: 5px; +} + +.form-group input { + width: 100%; + padding: 8px; + box-sizing: border-box; + border: 1px solid #ccc; + border-radius: 4px; +} + +.input-with-button { + display: flex; + gap: 5px; +} + +.input-with-button input { + flex-grow: 1; /* Поле ввода займет все доступное место */ +} + +button { + background-color: #0056b3; + color: white; + padding: 10px 15px; + border: none; + border-radius: 4px; + cursor: pointer; +} + +button:hover { + background-color: #004494; +} + +#db-status-container { + display: flex; + align-items: flex-start; /* Выравнивание по верху */ + gap: 20px; + margin-top: 10px; + padding: 10px; + border: 1px solid #eee; + border-radius: 5px; +} + +#db-status-container p { + margin: 0 0 5px 0; +} + +#db-status-container small { + color: #666; + font-style: italic; +} + +#refresh-status-btn, .btn-small { + padding: 5px 10px; + font-size: 14px; +} + +.network-diag-container { + margin-top: 20px; +} + +.ping-controls { + display: inline-flex; + gap: 10px; + margin-bottom: 10px; +} + +.ping-controls input { + flex-grow: 1; +} + +#ping-output { + background-color: #2d2d2d; + color: #f1f1f1; + padding: 15px; + border-radius: 5px; + white-space: pre-wrap; + word-wrap: break-word; + min-height: 50px; +} + +/* --- Карточки блоков --- */ +.content-block { + background: #f9f9fb; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0,0,0,0.07); + padding: 18px 18px 12px 18px; + margin-bottom: 18px; + position: relative; + transition: box-shadow 0.2s; +} +.content-block:hover { + box-shadow: 0 4px 16px rgba(0,0,0,0.13); +} +.block-text, .block-image, .block-video { + margin-bottom: 10px; +} +.block-image img, .block-video video { + max-width: 100%; + border-radius: 6px; + box-shadow: 0 1px 4px rgba(0,0,0,0.08); +} + +/* --- Кнопки --- */ +button, .btn-small, .tab-btn { + background: #0056b3; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 16px; + margin-right: 8px; + font-size: 15px; + cursor: pointer; + transition: background 0.15s, box-shadow 0.15s; + box-shadow: 0 1px 2px rgba(0,0,0,0.04); +} +button:hover, .btn-small:hover, .tab-btn:hover { + background: #003e80; +} +button:active, .btn-small:active, .tab-btn:active { + background: #002b5c; +} +.tab-btn.active { + background: #0074e4; + font-weight: bold; +} + +/* --- Модальное окно --- */ +.modal { + display: none; /* Скрыто по умолчанию */ + position: fixed; /* Остается на месте при скролле */ + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; /* Включает скролл, если нужно */ + background-color: rgba(0,0,0,0.5); /* Полупрозрачный фон */ + justify-content: center; + align-items: center; +} + +.modal-content { + background-color: #fefefe; + margin: auto; + padding: 20px; + border: 1px solid #888; + width: 80%; + border-radius: 8px; +} + +.monitoring-filters { + margin-bottom: 15px; +} + +.monitoring-filters label { + margin-right: 20px; +} + +.log-level-label { + padding: 2px 6px; + border-radius: 4px; + color: white; + font-weight: bold; + font-size: 0.9em; +} + +tr.log-level-error { + background-color: #ffdddd; +} +tr.log-level-error .log-level-label { + background-color: #d63031; +} + +tr.log-level-warn { + background-color: #fff3cd; +} +tr.log-level-warn .log-level-label { + background-color: #fdcb6e; +} + + +.modal-buttons { + margin-top: 20px; +} + +.modal-buttons button { + margin: 0 10px; + padding: 10px 20px; +} + +.close { + position: absolute; + right: 18px; + top: 12px; + font-size: 2rem; + color: #888; + cursor: pointer; + font-weight: bold; + transition: color 0.15s; +} +.close:hover { color: #0056b3; } +@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } +@keyframes slideDown { from { transform: translateY(-30px); opacity: 0; } to { transform: none; opacity: 1; } } + +/* --- Уведомления --- */ +#notify { + position: fixed; + top: 24px; + right: 24px; + z-index: 2000; + min-width: 220px; + background: #fff; + color: #222; + border-radius: 7px; + box-shadow: 0 2px 12px rgba(0,0,0,0.13); + padding: 16px 22px; + font-size: 16px; + opacity: 0; + pointer-events: none; + transition: opacity 0.2s; +} +#notify.show { + opacity: 1; + pointer-events: auto; +} +#notify.error { + background: #ffeaea; + color: #b30000; + border: 1px solid #ffb3b3; +} +#notify.success { + background: #eaffea; + color: #1a7f1a; + border: 1px solid #b3ffb3; +} + +/* --- Формы --- */ +input[type="text"], input[type="password"], textarea, select { + border: 1.5px solid #b3c6e0; + border-radius: 5px; + padding: 8px 10px; + font-size: 15px; + margin-bottom: 8px; + width: 100%; + box-sizing: border-box; + transition: border 0.15s; +} +input[type="text"]:focus, input[type="password"]:focus, textarea:focus, select:focus { + border: 1.5px solid #0056b3; + outline: none; + background: #f4f8ff; +} + +/* --- Logout --- */ +#logout-btn { + background: #e74c3c; + float: right; + margin-top: 2px; + margin-bottom: 10px; + font-size: 15px; + padding: 7px 16px; +} +#logout-btn:hover { background: #c0392b; } + +/* Кнопка "Добавить блок" */ +#add-block-btn { + background: #0074e4; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + margin-bottom: 10px; + cursor: pointer; + transition: background 0.15s; +} +#add-block-btn:hover { background: #005bb5; } + +/* Кнопка "Редактировать" */ +.content-block button:nth-of-type(1) { + background: #ff9800; + color: #fff; + border: none; + border-radius: 5px; + padding: 6px 14px; + margin-right: 8px; + font-size: 15px; + cursor: pointer; + transition: background 0.15s; +} +.content-block button:nth-of-type(1):hover { background: #e65100; } + +/* Кнопка "Удалить" */ +.content-block button:nth-of-type(2) { + background: #e74c3c; + color: #fff; + border: none; + border-radius: 5px; + padding: 6px 14px; + font-size: 15px; + cursor: pointer; + transition: background 0.15s; +} +.content-block button:nth-of-type(2):hover { background: #b71c1c; } + +/* Кнопка "Сохранить" в модалке */ +#edit-block-form button[type="submit"] { + background: #43a047; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + margin-top: 10px; + cursor: pointer; + transition: background 0.15s; +} +#edit-block-form button[type="submit"]:hover { background: #2e7031; } + +/* --- Адаптивность --- */ +@media (max-width: 600px) { + .container { padding: 8px; } + .modal-content { min-width: 90vw; padding: 18px 8px; } + #notify { right: 8px; top: 8px; min-width: 120px; font-size: 14px; } +} + +#edit-block-preview { + max-width: 100%; + max-height: 45vh; /* Ограничение по высоте предпросмотра */ + overflow-y: auto; + overflow-x: hidden; + word-break: break-word; +} + +#confirm-modal .modal-content { + max-width: 400px; + padding: 10px 28px 24px 28px; + text-align: center; + border-radius: 12px; + box-shadow: 0 8px 32px rgba(0,0,0,0.22); +} +#confirm-modal h3 { + font-size: 1.15rem; + color: #222; + margin-bottom: 18px; +} +#confirm-close-yes { + background: #e74c3c; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + margin-right: 12px; + cursor: pointer; + transition: background 0.15s; +} +#confirm-close-yes:hover { background: #b71c1c; } +#confirm-close-no { + background: #f4f7f9; + color: #222; + border: 1.5px solid #b3c6e0; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + cursor: pointer; + transition: background 0.15s; +} +#confirm-close-no:hover { background: #e0e7ef; } + +#toast-container { + position: fixed; + top: 30px; + right: 30px; + z-index: 9999; + display: flex; + flex-direction: column; + gap: 10px; +} +.toast { + visibility: hidden; + min-width: 250px; + max-width: 350px; + background: #333; + color: #fff; + padding: 14px 22px; + border-radius: 6px; + box-shadow: 0 2px 8px rgba(0,0,0,0.15); + font-size: 16px; + opacity: 0.97; + animation: fadein 0.3s, fadeout 0.3s 2.7s; + transition: opacity 0.3s; +} +.toast-success { background: #2ecc40; color: #fff; } +.toast-error { background: #ff4136; color: #fff; } +@keyframes fadein { from { opacity: 0; transform: translateY(-20px);} to { opacity: 0.97; transform: translateY(0);} } +@keyframes fadeout { from { opacity: 0.97; } to { opacity: 0; } } + +/* --- Настройки: секции и формы --- */ +#settings-tab > div { + margin-bottom: 32px; + padding: 18px 20px 16px 20px; + background: #f8fafc; + border-radius: 8px; + box-shadow: 0 1px 4px rgba(0,0,0,0.04); + border: 1px solid #e3e8ee; +} +#settings-tab h3 { margin-top: 0; } +fieldset { + border: 1px solid #bfc9d8; + border-radius: 6px; + margin-bottom: 12px; + padding: 12px 16px 10px 16px; + background: #fff; +} +legend { color: #0056b3; font-weight: 500; } +input[type="text"], input[type="password"], input[type="number"] { + padding: 7px 10px; + border: 1px solid #bfc9d8; + border-radius: 4px; + margin: 4px 0 10px 0; + width: 220px; + font-size: 15px; + background: #fafdff; + transition: border 0.2s; +} +input:focus { border: 1.5px solid #0056b3; outline: none; background: #fff; } +input:invalid { border: 1.5px solid #ff4136; background: #fff6f6; } +.form-error { color: #ff4136; font-size: 14px; margin: 2px 0 8px 0; } +.warning-text { + color: #ff8c00; /* DarkOrange */ +} +.btn-small { + background: #e3e8ee; + color: #0056b3; + border: none; + border-radius: 4px; + padding: 5px 12px; + font-size: 14px; + margin-left: 2px; + cursor: pointer; + transition: background 0.2s, color 0.2s; +} +.btn-small:hover { background: #0056b3; color: #fff; } +button[type="submit"] { + background: #2ecc40; + color: #fff; + border: none; + border-radius: 4px; + padding: 8px 18px; + font-size: 15px; + margin-top: 8px; + cursor: pointer; + transition: background 0.2s; +} +button[type="submit"]:hover { background: #27ae38; } +#cors-list li { margin-bottom: 6px; } +.moders-table { + width: 100%; + border-collapse: collapse; + margin-top: 12px; + background: #fff; +} +.moders-table th, .moders-table td { + border: 1px solid #e3e8ee; + padding: 7px 10px; + text-align: left; +} +.moders-table th { + background: #f4f7fa; + color: #0056b3; + font-weight: 500; +} +.moders-table tr:nth-child(even) { background: #fafdff; } +.moders-table tr:hover { background: #eaf3ff; } + +.moder-pass-input { + width: 100px; + margin-right: 5px; +} + +.password-wrapper { + display: inline-flex; + align-items: center; +} \ No newline at end of file diff --git a/admin-server/routes/auth.js b/admin-server/routes/auth.js new file mode 100644 index 0000000..0855cc1 --- /dev/null +++ b/admin-server/routes/auth.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); +const authController = require('../controllers/authController'); +const csurf = require('csurf'); + +const csrfProtection = csurf({ cookie: false }); + +router.post('/', authController.login); + +module.exports = router; \ No newline at end of file diff --git a/admin-server/routes/card.js b/admin-server/routes/card.js new file mode 100644 index 0000000..1cd5533 --- /dev/null +++ b/admin-server/routes/card.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const cardController = require('../controllers/cardController'); + +router.post('/card-event', cardController.cardEvent); +router.get('/card-logs', cardController.getCardLogs); + +module.exports = router; diff --git a/admin-server/routes/health.js b/admin-server/routes/health.js new file mode 100644 index 0000000..f615c5a --- /dev/null +++ b/admin-server/routes/health.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const healthController = require('../controllers/healthController'); + +router.get('/check-db', healthController.checkDb); +router.get('/status', healthController.checkStatus); + +module.exports = router; \ No newline at end of file diff --git a/admin-server/routes/logs.js b/admin-server/routes/logs.js new file mode 100644 index 0000000..271360e --- /dev/null +++ b/admin-server/routes/logs.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); // Сначала инициализируем router +const logsController = require('../controllers/logsController'); +const checkAuth = require('../middleware/checkAuth'); +console.log('Imported router:', router.toString()); + +router.get('/', checkAuth, logsController.getLogs); +router.post('/clear', checkAuth, logsController.clearLogs); + +module.exports = router; \ No newline at end of file diff --git a/admin-server/routes/moders.js b/admin-server/routes/moders.js new file mode 100644 index 0000000..4937f73 --- /dev/null +++ b/admin-server/routes/moders.js @@ -0,0 +1,11 @@ +const express = require('express'); +const router = express.Router(); +const modersController = require('../controllers/modersController'); +const checkAuth = require('../middleware/checkAuth'); + +router.get('/', checkAuth, modersController.getModers); +router.post('/', checkAuth, modersController.addModer); +router.put('/:id', checkAuth, modersController.changePassword); +router.delete('/:id', checkAuth, modersController.deleteModer); + +module.exports = router; diff --git a/admin-server/routes/monitoring.js b/admin-server/routes/monitoring.js new file mode 100644 index 0000000..7f51d05 --- /dev/null +++ b/admin-server/routes/monitoring.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const logsController = require('../controllers/logsController'); +const checkAuth = require('../middleware/checkAuth'); + +router.get('/logs', checkAuth, logsController.getMonitoringLogs); + +module.exports = router; \ No newline at end of file diff --git a/admin-server/routes/settings.js b/admin-server/routes/settings.js new file mode 100644 index 0000000..5f3e1c3 --- /dev/null +++ b/admin-server/routes/settings.js @@ -0,0 +1,18 @@ +const express = require('express'); +const router = express.Router(); +const settingsController = require('../controllers/settingsController'); +const checkAuth = require('../middleware/checkAuth'); + +router.get('/mysql', checkAuth, settingsController.getMysqlSettings); +router.post('/mysql', checkAuth, settingsController.updateMysqlSettings); + +router.get('/cors', checkAuth, settingsController.getCorsSettings); +router.post('/cors', checkAuth, settingsController.updateCorsSettings); + +router.get('/admin-server', checkAuth, settingsController.getAdminServerSettings); +router.post('/admin-server', checkAuth, settingsController.updateAdminServerSettings); + +router.get('/backend-server', checkAuth, settingsController.getBackendServerSettings); +router.post('/backend-server', checkAuth, settingsController.updateBackendServerSettings); + +module.exports = router; diff --git a/admin-server/server.js b/admin-server/server.js new file mode 100644 index 0000000..4dea26a --- /dev/null +++ b/admin-server/server.js @@ -0,0 +1,114 @@ +const fs = require('fs-extra'); +const cors = require('cors'); +const express = require('express'); +const morgan = require('morgan'); +const path = require('path'); +const session = require('express-session'); +require('dotenv').config({ path: path.join(__dirname, './config.env') }); +require('dotenv').config({ path: __dirname + '/moders/config.env' }); +const logger = require('./logger'); +const moderAuthRouter = require('./moders/routes/moderAuth'); +const moderContentRouter = require('./moders/routes/content'); +const authRouter = require('./routes/auth'); +const cardRouter = require('./routes/card'); +const logsRouter = require('./routes/logs'); +const settingsRouter = require('./routes/settings'); +const modersRouter = require('./routes/moders'); +const healthRouter = require('./routes/health'); +const monitoringRouter = require('./routes/monitoring'); +const setupWebSocket = require('./services/websocket'); +const cardController = require('./controllers/cardController'); +const app = express(); +const server = require('http').createServer(app); + +// Конфигурации +const corsConfig = require('./config/cors'); +const sessionConfig = require('./config/session'); +app.use('/libs/quill', express.static(path.join(__dirname, 'node_modules/quill/dist'))); +app.use('/libs/dompurify', express.static(path.join(__dirname, 'node_modules/dompurify/dist'))); +// Middleware +app.use(cors(corsConfig)); +app.use(morgan('dev')); +app.use(express.json()); +app.use(session(sessionConfig(session))); +// Роуты, которые не требуют CSRF +app.use('/api/auth', authRouter); +app.use(require('./middleware/csrf')); +// Статические файлы +app.use('/login.html', express.static(path.join(__dirname, 'public', 'login.html'))); +app.use(express.static(path.join(__dirname, 'public'))); +app.use('/uploads', express.static(__dirname + '/uploads')); +// Роуты +app.use('/api/card', cardRouter); +app.use('/api/logs', logsRouter); +app.use('/api/settings', settingsRouter); +app.use('/api/moders', modersRouter); +app.use('/api/health', healthRouter); +app.use('/api/monitoring', monitoringRouter); +app.use('/moders', moderAuthRouter); +app.use('/moders/content', moderContentRouter); +// Initialize card logs +(async () => { + try { + await cardController.initCardLogs(); + logger.info('Card logs initialized successfully'); + } catch (err) { + logger.error('Failed to initialize card logs:', err); + } +})(); + +// WebSocket +setupWebSocket(server); + +// Обработчик ошибок (должен быть последним!) +app.use(require('./middleware/errorHandler')); +app.get('/api/status', async (req, res) => { + try { + res.json({ status: 'online' }); // или другая логика проверки + } catch (err) { + res.status(500).json({ status: 'error', message: err.message }); + } +}); + +app.get('/api/config', async (req, res) => { + try { + const backendConfigPath = path.join(__dirname, '../backend/config.json'); + const backendConfig = await fs.readJson(backendConfigPath); + const config = { + payslipsPath: backendConfig.payslipsPath + }; + res.json(config); + } catch (err) { + logger.error('Ошибка чтения backend/config.json:', err); + res.status(500).json({ error: 'Ошибка загрузки конфигурации' }); + } +}); +// Добавьте рядом с существующим GET обработчиком +app.post('/api/config', async (req, res) => { + try { + const backendConfigPath = path.join(__dirname, '../backend/config.json'); + const currentConfig = await fs.readJson(backendConfigPath); + + // Обновляем только разрешенные поля + if (req.body.payslipsPath) { + currentConfig.payslipsPath = req.body.payslipsPath; + } + + // Сохраняем обновленный конфиг + await fs.writeJson(backendConfigPath, currentConfig, { spaces: 4 }); + + res.json({ + success: true, + message: 'Конфигурация успешно обновлена' + }); + } catch (err) { + logger.error('Ошибка сохранения конфигурации:', err); + res.status(500).json({ + error: 'Ошибка сохранения конфигурации', + details: err.message + }); + } +}); +server.listen(process.env.PORT || 3005, () => { + logger.info(`Server running on ${process.env.ADMIN_URL}`); +}); \ No newline at end of file diff --git a/admin-server/services/websocket.js b/admin-server/services/websocket.js new file mode 100644 index 0000000..0d1ba20 --- /dev/null +++ b/admin-server/services/websocket.js @@ -0,0 +1,93 @@ +const WebSocket = require('ws'); +const iconv = require('iconv-lite'); +const { spawn } = require('child_process'); +const logger = require('../logger'); + +function setupWebSocket(server) { + const wss = new WebSocket.Server({ server }); + + wss.on('connection', (ws) => { + logger.info('New WebSocket connection'); + + let pingProcess = null; + + ws.on('message', (message) => { + try { + const data = JSON.parse(message); + + if (data.type === 'ping') { + const ip = data.ip; + + // Валидация IP + if (!ip || !/^[a-zA-Z0-9\.\-_:]+$/.test(ip)) { + ws.send(JSON.stringify({ + type: 'error', + message: 'Invalid IP address format' + })); + return; + } + + // Завершаем предыдущий процесс, если есть + if (pingProcess) { + pingProcess.kill(); + } + + // Запускаем ping (для Windows) + pingProcess = spawn('ping', ['-t', ip]); + + // Обработка вывода + pingProcess.stdout.on('data', (data) => { + const decodedData = iconv.decode(data, 'cp866'); + ws.send(JSON.stringify({ + type: 'data', + data: decodedData + })); + }); + + pingProcess.stderr.on('data', (data) => { + const decodedData = iconv.decode(data, 'cp866'); + ws.send(JSON.stringify({ + type: 'error', + data: decodedData + })); + }); + + pingProcess.on('close', (code) => { + ws.send(JSON.stringify({ + type: 'close', + data: `Process exited with code ${code}` + })); + pingProcess = null; + }); + } + } catch (e) { + logger.error('WebSocket message error:', e); + ws.send(JSON.stringify({ + type: 'error', + message: 'Invalid message format', + details: e.message + })); + } + }); + + ws.on('close', () => { + logger.info('WebSocket connection closed'); + if (pingProcess) { + pingProcess.kill(); + pingProcess = null; + } + }); + + ws.on('error', (error) => { + logger.error('WebSocket error:', error); + if (pingProcess) { + pingProcess.kill(); + pingProcess = null; + } + }); + }); + + return wss; +} + +module.exports = setupWebSocket; \ No newline at end of file diff --git a/admin-server/uploads/1752673443018-580872.png b/admin-server/uploads/1752673443018-580872.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server/uploads/1752736681880-254035.png b/admin-server/uploads/1752736681880-254035.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server/uploads/1752741776453-525354.png b/admin-server/uploads/1752741776453-525354.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server/uploads/1752742234633-995414.png b/admin-server/uploads/1752742234633-995414.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server/uploads/1752742255814-836795.png b/admin-server/uploads/1752742255814-836795.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server1/card-reader.log b/admin-server1/card-reader.log new file mode 100644 index 0000000..e69de29 diff --git a/admin-server1/config.env b/admin-server1/config.env new file mode 100644 index 0000000..e8ffe12 --- /dev/null +++ b/admin-server1/config.env @@ -0,0 +1,17 @@ +PORT=3005 +DB_USER=prog +DB_PASSWORD=prog +DB_SERVER=192.168.31.34 +DB_NAME=ASU + +BACKEND_URL=http://localhost:3001 +ADMIN_URL=http://localhost:3005 +ADMIN_PASSWORD=2 +SECRET_KEY=njdsn30423423fndjjfsn34u +LOGS_DIR=../backend/logs +CARD_LOG_PATH=../backend/logs/cards.log +ADMIN_LOG=./logs/admin.log +ADMIN_LOG_DIR=../logs +ALLOWED_ORIGINS=http://localhost:3000, http://localhost:3005, http://localhost:3001, http://127.0.0.1:3000 +BACKEND_APP_LOG=../backend/logs/app.log +CARD_LOG=../backend/logs/cards.log \ No newline at end of file diff --git a/admin-server1/config/cors.js b/admin-server1/config/cors.js new file mode 100644 index 0000000..4ee5d61 --- /dev/null +++ b/admin-server1/config/cors.js @@ -0,0 +1,12 @@ +const allowedOrigins = process.env.ALLOWED_ORIGINS.split(',').map(origin => origin.trim()); + +module.exports = { + origin: function(origin, callback) { + if (!origin) return callback(null, true); + if (allowedOrigins.includes(origin)) { + return callback(null, true); + } + return callback(new Error('CORS: Origin not allowed'), false); + }, + credentials: true +}; \ No newline at end of file diff --git a/admin-server1/config/session.js b/admin-server1/config/session.js new file mode 100644 index 0000000..d465c67 --- /dev/null +++ b/admin-server1/config/session.js @@ -0,0 +1,22 @@ +const session = require('express-session'); +const MySQLStore = require('express-mysql-session')(session); + +module.exports = (session) => { + return { + secret: process.env.SECRET_KEY || 'mhmh4563463fds', + resave: false, + saveUninitialized: false, + store: new MySQLStore({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE + }), + cookie: { + secure: false, + httpOnly: true, + maxAge: 10 * 60 * 60 * 1000 + } + }; +}; \ No newline at end of file diff --git a/admin-server1/controllers/authController.js b/admin-server1/controllers/authController.js new file mode 100644 index 0000000..d4f0ab2 --- /dev/null +++ b/admin-server1/controllers/authController.js @@ -0,0 +1,40 @@ +const logger = require('../logger'); +const bcrypt = require('bcrypt'); +const moderDb = require('../moders/db'); +require('dotenv').config({ path: __dirname + './config.env' }); +exports.login = (req, res) => { + const { password } = req.body; + if (password === process.env.ADMIN_PASSWORD) { + req.session.isAuthenticated = true; + logger.info('Login successful'); + res.status(200).send('Login successful'); + } else { + res.status(401).send('Invalid password'); + logger.warn('Неверный пароль'); + } +}; + +exports.getCsrfToken = (req, res) => { + res.json({ csrfToken: req.csrfToken() }); +}; + +exports.moderLogin = async (req, res) => { + const { username, password } = req.body; + try { + const [users] = await moderDb.query('SELECT * FROM users WHERE username = ?', [username]); + if (users.length === 0) { + return res.status(401).json({ message: 'Неверные учетные данные' }); + } + const user = users[0]; + const match = await bcrypt.compare(password, user.password_hash); + if (!match) { + return res.status(401).json({ message: 'Неверные учетные данные' }); + } + req.session.moderId = user.id; + req.session.moderName = user.username; + res.json({ message: 'Успешный вход', username: user.username }); + } catch (error) { + logger.error('Ошибка входа модератора:', error); + res.status(500).json({ message: 'Ошибка сервера' }); + } +}; \ No newline at end of file diff --git a/admin-server1/controllers/cardController.js b/admin-server1/controllers/cardController.js new file mode 100644 index 0000000..93edf9e --- /dev/null +++ b/admin-server1/controllers/cardController.js @@ -0,0 +1,70 @@ +const fs = require('fs-extra'); +const path = require('path'); +const logger = require('../logger'); + +const CARD_LOG_PATH = path.resolve(__dirname, '..', process.env.CARD_LOG_PATH); +const initCardLogs = async () => { + try { + await fs.ensureDir(path.dirname(CARD_LOG_PATH)); + if (!(await fs.pathExists(CARD_LOG_PATH))) { + await fs.writeFile(CARD_LOG_PATH, ''); + logger.info(`Card log file created at: ${CARD_LOG_PATH}`); + } + } catch (err) { + logger.error('Failed to initialize card logs:', err); + throw err; + } +}; +initCardLogs().catch(err => { + logger.error('Card logs initialization error:', err); +}); + +const cardEvent = (req, res) => { + logger.info('[CARD EVENT] Received:', req.body); + + if (!req.body || !req.body.event) { + logger.error('Invalid request body:', req.body); + return res.status(400).json({ message: 'Missing required field: event' }); + } + + const { event, uid = 'N/A', timestamp = Date.now() } = req.body; + const logLine = `[${new Date(timestamp).toISOString()}] [${event}] UID: ${uid}\n`; + + try { + if (!fs.existsSync(CARD_LOG_PATH)) { + initCardLogs(); + } + fs.appendFileSync(CARD_LOG_PATH, logLine); + logger.info('[CARD EVENT] Log written to:', CARD_LOG_PATH); + return res.status(200).json({ message: 'OK', path: CARD_LOG_PATH }); + + } catch (err) { + logger.error('[CARD EVENT] Failed to write log:', err); + return res.status(500).json({ + message: 'Failed to write log', + error: err.message, + path: CARD_LOG_PATH + }); + } +}; +const getCardLogs = async (req, res) => { + try { + if (!(await fs.pathExists(CARD_LOG_PATH))) { + await initCardLogs(); + return res.status(200).type('text/plain').send('Card logs initialized'); + } + const logs = await fs.readFile(CARD_LOG_PATH, 'utf-8'); + res.type('text/plain').send(logs); + } catch (err) { + logger.error('Error reading card logs:', err); + res.status(500).json({ + error: err.message, + path: CARD_LOG_PATH + }); + } +}; +module.exports = { + cardEvent, + getCardLogs, + initCardLogs +}; diff --git a/admin-server1/controllers/healthController.js b/admin-server1/controllers/healthController.js new file mode 100644 index 0000000..f4d0813 --- /dev/null +++ b/admin-server1/controllers/healthController.js @@ -0,0 +1,165 @@ +const axios = require('axios'); +const mysql = require('mysql2/promise'); +const WebSocket = require('ws'); +const iconv = require('iconv-lite'); +const logger = require('../logger'); +exports.checkDb = async (req, res) => { + // 📊 Статус прямого подключения (админка -> БД) + let adminToDbStatus = { + status: 'offline', + message: 'Test not performed' + }; + + try { + // ✅ Конфигурация для MySQL (правильный синтаксис) + const dbConfig = { + host: process.env.MYSQL_HOST || 'localhost', + user: process.env.MYSQL_USER || 'root', + password: process.env.MYSQL_PASSWORD || '', + database: process.env.MYSQL_DATABASE || 'test', + port: process.env.MYSQL_PORT || 3306, + connectionLimit: 1, + connectTimeout: 15000, + waitForConnections: true, + queueLimit: 0 + }; + + logger.info(`[DB CHECK] Проверка подключения к MySQL: ${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`); + + // 🔌 Создаем пул соединений (правильный синтаксис для mysql2) + const pool = mysql.createPool(dbConfig); + + // 🔍 Получаем соединение из пула + const connection = await pool.getConnection(); + + // ✅ Выполняем тестовый запрос (правильный синтаксис) + const [rows] = await connection.query('SELECT 1 as result'); + + // ✅ Успешно! + adminToDbStatus = { + status: 'online', + message: '✅ Прямое подключение к MySQL успешно', + dbType: 'MySQL', + host: dbConfig.host, + database: dbConfig.database + }; + + logger.info(`[DB CHECK] ✅ Успешное подключение к MySQL`); + + // Освобождаем соединение + connection.release(); + + // Закрываем пул + await pool.end(); + + } catch (error) { + logger.error(`[DB CHECK] ❌ Ошибка подключения к MySQL:`, error.message); + + adminToDbStatus = { + status: 'offline', + message: `❌ Ошибка подключения: ${error.message}`, + dbType: 'MySQL', + errorCode: error.code || 'UNKNOWN' + }; + + if (error.code === 'ECONNREFUSED') { + adminToDbStatus.diagnostic = 'Сервер MySQL не запущен или недоступен. Проверьте, запущен ли MySQL.'; + } else if (error.code === 'ER_ACCESS_DENIED_ERROR') { + adminToDbStatus.diagnostic = 'Неверный логин или пароль. Проверьте MYSQL_USER и MYSQL_PASSWORD в .env'; + } else if (error.code === 'ER_BAD_DB_ERROR') { + adminToDbStatus.diagnostic = 'База данных не существует. Проверьте MYSQL_DATABASE в .env'; + } else if (error.code === 'ENOTFOUND') { + adminToDbStatus.diagnostic = 'Хост не найден. Проверьте MYSQL_HOST в .env'; + } + } + let backendToDbStatus = { + status: 'offline', + message: 'Test not performed' + }; + + try { + const backendUrl = process.env.BACKEND_URL || 'http://localhost:3001'; + const response = await axios.get(`${backendUrl}/api/db-status`, { + timeout: 3000, + validateStatus: false // Не выбрасывать ошибку при статусе != 200 + }); + + if (response.status === 200 && response.data && response.data.status === 'ok') { + backendToDbStatus = { + status: 'online', + message: '✅ Бэкенд успешно подключен к БД', + details: response.data + }; + } else { + backendToDbStatus = { + status: 'offline', + message: '⚠️ Бэкенд сообщил об ошибке', + details: response.data || { status: 'unknown' } + }; + } + } catch (error) { + logger.error(`[DB CHECK] ❌ Ошибка связи с бэкендом:`, error.message); + backendToDbStatus = { + status: 'offline', + message: `❌ Не удалось связаться с бэкендом: ${error.message}` + }; + } + + // 📤 Отправляем результат + res.json({ + timestamp: new Date().toISOString(), + adminToDb: adminToDbStatus, + backendToDb: backendToDbStatus, + environment: { + nodeVersion: process.version, + platform: process.platform, + envFile: process.env.NODE_ENV || 'development' + } + }); +}; + +exports.checkStatus = async (req, res) => { + try { + const backendUrl = process.env.BACKEND_URL || 'http://localhost:3001'; + await axios.get(`${backendUrl}/api/test`, { + timeout: 2000 + }); + res.json({ + status: 'online', + message: 'Сервер работает', + timestamp: new Date().toISOString() + }); + } catch (error) { + logger.error(`[STATUS] ❌ Ошибка проверки статуса:`, error.message); + res.json({ + status: 'offline', + message: 'Сервер недоступен', + error: error.message, + timestamp: new Date().toISOString() + }); + } +}; + +exports.testDbConnection = async () => { + try { + const dbConfig = { + host: process.env.MYSQL_HOST || 'localhost', + user: process.env.MYSQL_USER || 'root', + password: process.env.MYSQL_PASSWORD || '', + database: process.env.MYSQL_DATABASE || 'test', + port: process.env.MYSQL_PORT || 3306, + connectionLimit: 1, + connectTimeout: 5000 + }; + + const pool = mysql.createPool(dbConfig); + const connection = await pool.getConnection(); + await connection.query('SELECT 1'); + connection.release(); + await pool.end(); + + return { success: true, message: 'Подключение успешно' }; + } catch (error) { + return { success: false, message: error.message }; + } +}; \ No newline at end of file diff --git a/admin-server1/controllers/logsController.js b/admin-server1/controllers/logsController.js new file mode 100644 index 0000000..ec3ade4 --- /dev/null +++ b/admin-server1/controllers/logsController.js @@ -0,0 +1,99 @@ +const fs = require('fs-extra'); +const path = require('path'); +const logger = require('../logger'); + +const ADMIN_LOG = path.resolve(__dirname, '..', process.env.ADMIN_LOG); +const BACKEND_APP_LOG = path.resolve(__dirname, '..', process.env.BACKEND_APP_LOG); +const CARD_LOG = path.resolve(__dirname, '..', process.env.CARD_LOG); + +const getLogs = async (req, res) => { + try { + const logPath = path.join(__dirname, '..', '../backend/logs/app.log'); + const logs = await fs.readFile(logPath, 'utf-8'); + res.type('text/plain'); + res.send(logs); + } catch (error) { + logger.error('Error reading log file:', error); + res.status(500).send('Could not read log file.'); + } +}; + +const clearLogs = async (req, res) => { + try { + const logPath = path.join(__dirname, '..', '../backend/logs/app.log'); + await fs.truncate(logPath, 0); + res.status(200).json({ message: 'Logs cleared successfully' }); + } catch (error) { + logger.error('Error clearing log file:', error); + res.status(500).send('Could not clear log file.'); + } +}; + +const getMonitoringLogs = async (req, res) => { + const logSources = [ + { name: 'Admin', path: ADMIN_LOG }, + { name: 'Backend', path: BACKEND_APP_LOG }, + { name: 'CardReader', path: CARD_LOG } + ]; + + let allEvents = []; + + for (const source of logSources) { + try { + if (!(await fs.pathExists(source.path))) { + logger.warn(`Log file not found: ${source.path}`); + continue; + } + + const content = await fs.readFile(source.path, 'utf-8'); + const lines = content.split(/\r?\n/); + + lines.forEach(line => { + if (!line) return; + try { + const jsonLog = JSON.parse(line); + if (['warn', 'error'].includes(jsonLog.level?.toLowerCase())) { + allEvents.push({ + timestamp: jsonLog.timestamp || new Date().toISOString(), + level: jsonLog.level.toUpperCase(), + source: source.name, + message: jsonLog.message + }); + } + return; + } catch (e) { + } + const match = line.match(/\[([^\]]+)\] \[([^\]]+)\] (.*)/); + if (match) { + const level = match[2].toLowerCase(); + if (['warn', 'error'].includes(level)) { + allEvents.push({ + timestamp: new Date(match[1]).toISOString(), + level: level.toUpperCase(), + source: source.name, + message: match[3] + }); + } + } + }); + } catch (err) { + console.error(`Error reading or parsing log file ${source.path}:`, err); + allEvents.push({ + timestamp: new Date().toISOString(), + level: 'ERROR', + source: 'Monitoring', + message: `Could not read log file: ${source.name}` + }); + } + } + + allEvents.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp)); + + res.json(allEvents); +}; + +module.exports = { + getLogs, + clearLogs, + getMonitoringLogs +}; diff --git a/admin-server1/controllers/modersController.js b/admin-server1/controllers/modersController.js new file mode 100644 index 0000000..09dda8b --- /dev/null +++ b/admin-server1/controllers/modersController.js @@ -0,0 +1,72 @@ +const moderDb = require('../moders/db'); +const bcrypt = require('bcrypt'); +const logger = require('../logger'); + +const getModers = async (req, res) => { + try { + const [rows] = await moderDb.query('SELECT id, username FROM users ORDER BY id ASC'); + res.json(rows); + } catch (e) { + logger.error('Ошибка получения списка модераторов:', e); + res.status(500).json({ message: 'Ошибка получения списка модераторов' }); + } +}; + +const addModer = async (req, res) => { + const { username, password } = req.body; + if (!username || !password) { + return res.status(400).json({ message: 'username и password обязательны' }); + } + try { + const [exists] = await moderDb.query('SELECT id FROM users WHERE username = ?', [username]); + if (exists.length) { + return res.status(409).json({ message: 'Пользователь с таким username уже существует' }); + } + const hash = await bcrypt.hash(password, 10); + const [result] = await moderDb.query('INSERT INTO users (username, password_hash) VALUES (?, ?)', [username, hash]); + res.json({ id: result.insertId, username }); + } catch (e) { + logger.error('Ошибка добавления модератора:', e); + res.status(500).json({ message: 'Ошибка добавления модератора' }); + } +}; + +const changePassword = async (req, res) => { + const { id } = req.params; + const { password } = req.body; + if (!password) { + return res.status(400).json({ message: 'password обязателен' }); + } + try { + const hash = await bcrypt.hash(password, 10); + const [result] = await moderDb.query('UPDATE users SET password_hash = ? WHERE id = ?', [hash, id]); + if (result.affectedRows === 0) { + return res.status(404).json({ message: 'Модератор не найден' }); + } + res.json({ message: 'Пароль обновлён' }); + } catch (e) { + logger.error('Ошибка смены пароля модератора:', e); + res.status(500).json({ message: 'Ошибка смены пароля модератора' }); + } +}; + +const deleteModer = async (req, res) => { + const { id } = req.params; + try { + const [result] = await moderDb.query('DELETE FROM users WHERE id = ?', [id]); + if (result.affectedRows === 0) { + return res.status(404).json({ message: 'Модератор не найден' }); + } + res.json({ message: 'Модератор удалён' }); + } catch (e) { + logger.error('Ошибка удаления модератора:', e); + res.status(500).json({ message: 'Ошибка удаления модератора' }); + } +}; + +module.exports = { + getModers, + addModer, + changePassword, + deleteModer +}; diff --git a/admin-server1/controllers/settingsController.js b/admin-server1/controllers/settingsController.js new file mode 100644 index 0000000..c414882 --- /dev/null +++ b/admin-server1/controllers/settingsController.js @@ -0,0 +1,172 @@ +const fs = require('fs-extra'); +const path = require('path'); +const logger = require('../logger'); + +const configEnvPath = path.join(__dirname, '..', 'config.env'); +const modersEnvPath = path.join(__dirname, '..', 'moders', 'config.env'); +const backendConfigPath = path.join(__dirname, '..', '../backend/config.json'); + +const parseEnv = async (filePath) => { + const content = await fs.readFile(filePath, 'utf-8'); + const lines = content.split(/\r?\n/); + const result = {}; + for (const line of lines) { + if (!line.trim() || line.trim().startsWith('#')) continue; + const idx = line.indexOf('='); + if (idx === -1) continue; + const key = line.slice(0, idx).trim(); + const value = line.slice(idx + 1).trim(); + result[key] = value; + } + return result; +}; + +const updateEnv = async (filePath, updates) => { + const content = await fs.readFile(filePath, 'utf-8'); + const lines = content.split(/\r?\n/); + const keys = Object.keys(updates); + const updated = new Set(); + const newLines = lines.map(line => { + if (!line.trim() || line.trim().startsWith('#') || !line.includes('=')) return line; + const idx = line.indexOf('='); + const key = line.slice(0, idx).trim(); + if (keys.includes(key)) { + updated.add(key); + return `${key}=${updates[key]}`; + } + return line; + }); + for (const key of keys) { + if (!updated.has(key)) { + newLines.push(`${key}=${updates[key]}`); + } + } + await fs.writeFile(filePath, newLines.join('\n'), 'utf-8'); +}; + +const getMysqlSettings = async (req, res) => { + try { + const env = await parseEnv(modersEnvPath); + res.json({ + MYSQL_HOST: env.MYSQL_HOST || '', + MYSQL_PORT: env.MYSQL_PORT || '', + MYSQL_USER: env.MYSQL_USER || '', + MYSQL_PASSWORD: env.MYSQL_PASSWORD || '', + MYSQL_DATABASE: env.MYSQL_DATABASE || '' + }); + } catch (e) { + logger.error('Ошибка чтения moders/config.env:', e); + res.status(500).json({ message: 'Ошибка чтения moders/config.env' }); + } +}; + +const updateMysqlSettings = async (req, res) => { + const updates = req.body; + if (updates.MYSQL_PASSWORD === '') { + delete updates.MYSQL_PASSWORD; + } + if (Object.keys(updates).length === 0) { + return res.status(400).json({ message: 'Нет данных для обновления' }); + } + try { + await updateEnv(modersEnvPath, updates); + res.json({ message: 'Параметры MySQL обновлены' }); + } catch (e) { + logger.error('Ошибка записи moders/config.env:', e); + res.status(500).json({ message: 'Ошибка записи moders/config.env' }); + } +}; + +const getCorsSettings = async (req, res) => { + try { + const env = await parseEnv(configEnvPath); + const origins = (env.ALLOWED_ORIGINS || '').split(',').map(o => o.trim()).filter(Boolean); + res.json({ ALLOWED_ORIGINS: origins }); + } catch (e) { + logger.error('Ошибка чтения ALLOWED_ORIGINS:', e); + res.status(500).json({ message: 'Ошибка чтения ALLOWED_ORIGINS' }); + } +}; + +const updateCorsSettings = async (req, res) => { + const { ALLOWED_ORIGINS } = req.body; + if (!Array.isArray(ALLOWED_ORIGINS) || !ALLOWED_ORIGINS.length) { + return res.status(400).json({ message: 'Список ALLOWED_ORIGINS обязателен' }); + } + try { + await updateEnv(configEnvPath, { ALLOWED_ORIGINS: ALLOWED_ORIGINS.join(', ') }); + res.json({ message: 'ALLOWED_ORIGINS обновлён' }); + } catch (e) { + logger.error('Ошибка записи ALLOWED_ORIGINS:', e); + res.status(500).json({ message: 'Ошибка записи ALLOWED_ORIGINS' }); + } +}; + +const getAdminServerSettings = async (req, res) => { + try { + const env = await parseEnv(configEnvPath); + res.json({ + PORT: env.PORT || '', + ADMIN_URL: env.ADMIN_URL || '' + }); + } catch (e) { + logger.error('Ошибка чтения config.env (admin-server):', e); + res.status(500).json({ message: 'Ошибка чтения config.env' }); + } +}; + +const updateAdminServerSettings = async (req, res) => { + const { PORT, ADMIN_URL } = req.body; + if (!PORT || !ADMIN_URL) { + return res.status(400).json({ message: 'PORT и ADMIN_URL обязательны' }); + } + try { + await updateEnv(configEnvPath, { PORT, ADMIN_URL }); + res.json({ message: 'Параметры admin-server обновлены' }); + } catch (e) { + logger.error('Ошибка записи config.env (admin-server):', e); + res.status(500).json({ message: 'Ошибка записи config.env' }); + } +}; + +const getBackendServerSettings = async (req, res) => { + try { + const config = await fs.readJson(backendConfigPath); + res.json({ + host: config.server?.host || '', + port: config.server?.port || '' + }); + } catch (e) { + logger.error('Ошибка чтения backend/config.json:', e); + res.status(500).json({ message: 'Ошибка чтения backend/config.json' }); + } +}; + +const updateBackendServerSettings = async (req, res) => { + const { host, port } = req.body; + if (!host || !port) { + return res.status(400).json({ message: 'host и port обязательны' }); + } + try { + const config = await fs.readJson(backendConfigPath); + config.server = config.server || {}; + config.server.host = host; + config.server.port = port; + await fs.writeJson(backendConfigPath, config, { spaces: 4 }); + res.json({ message: 'Параметры backend-server обновлены' }); + } catch (e) { + logger.error('Ошибка записи backend/config.json:', e); + res.status(500).json({ message: 'Ошибка записи backend/config.json' }); + } +}; + +module.exports = { + getMysqlSettings, + updateMysqlSettings, + getCorsSettings, + updateCorsSettings, + getAdminServerSettings, + updateAdminServerSettings, + getBackendServerSettings, + updateBackendServerSettings +}; diff --git a/admin-server1/logger.js b/admin-server1/logger.js new file mode 100644 index 0000000..d2bca8d --- /dev/null +++ b/admin-server1/logger.js @@ -0,0 +1,53 @@ +const fs = require('fs'); +const path = require('path'); +const LOGS_DIR = path.join(__dirname, 'logs'); +const LOG_FILE = path.join(LOGS_DIR, 'admin.log'); +const MAX_SIZE = 20 * 1024 * 1024; + +if (!fs.existsSync(LOGS_DIR)) { + fs.mkdirSync(LOGS_DIR, { recursive: true }); +} + +function rotateLogIfNeeded() { + try { + if (fs.existsSync(LOG_FILE)) { + const stats = fs.statSync(LOG_FILE); + if (stats.size >= MAX_SIZE) { + const date = new Date().toISOString().replace(/[:.]/g, '-'); + const archiveName = `admin-${date}.log`; + const archivePath = path.join(LOGS_DIR, archiveName); + fs.renameSync(LOG_FILE, archivePath); + } + } + } catch (err) { + console.error('[LOGGER] Ошибка ротации лога:', err); + } +} + +function format(level, message) { + return `[${new Date().toISOString()}] [${level.toUpperCase()}] ${message}\n`; +} + +function log(level, ...args) { + const msg = args.map(a => (typeof a === 'string' ? a : JSON.stringify(a))).join(' '); + const line = format(level, msg); + rotateLogIfNeeded(); + try { + fs.appendFileSync(LOG_FILE, line); + } catch (err) { + console.error('[LOGGER] Ошибка записи в лог:', err); + } + if (level === 'error') { + console.error(line.trim()); + } else if (level === 'warn') { + console.warn(line.trim()); + } else { + console.log(line.trim()); + } +} + +module.exports = { + info: (...args) => log('info', ...args), + warn: (...args) => log('warn', ...args), + error: (...args) => log('error', ...args), +}; \ No newline at end of file diff --git a/admin-server1/logs/admin.log b/admin-server1/logs/admin.log new file mode 100644 index 0000000..6937974 --- /dev/null +++ b/admin-server1/logs/admin.log @@ -0,0 +1,1356 @@ +[2025-07-14T07:10:44.285Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:10:44.292Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:10:44.292Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:12:22.296Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:12:22.296Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:12:22.297Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:12:31.309Z] [INFO] Login successful +[2025-07-14T07:16:18.673Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:16:18.674Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:16:27.993Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:16:27.993Z] [INFO] Card logs path: D:\rasch\admin-server\logs\card-reader.log +[2025-07-14T07:16:27.994Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:17:33.085Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:17:33.086Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:17:33.086Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:17:42.580Z] [INFO] Login successful +[2025-07-14T07:20:24.110Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:20:24.111Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:20:24.111Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:20:36.194Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:20:36.195Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:20:36.195Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:20:42.465Z] [INFO] Login successful +[2025-07-14T07:23:23.394Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:23:23.394Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:23:23.394Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:23:30.060Z] [INFO] Login successful +[2025-07-14T07:24:06.210Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T07:24:06.210Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T07:24:06.210Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T07:24:11.554Z] [INFO] Login successful +[2025-07-14T12:09:02.949Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T12:09:02.949Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T12:09:02.950Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T12:09:08.964Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T12:09:08.965Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T12:09:08.965Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T12:09:33.343Z] [WARN] Неверный пароль +[2025-07-14T12:09:36.778Z] [INFO] Login successful +[2025-07-14T12:09:51.109Z] [INFO] Good connect to Web-socket +[2025-07-14T12:10:42.272Z] [INFO] Good connect to Web-socket +[2025-07-14T12:11:26.852Z] [INFO] Good connect to Web-socket +[2025-07-14T12:14:37.428Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-14T12:14:37.429Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-14T12:14:37.429Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-14T12:14:48.946Z] [INFO] Login successful +[2025-07-14T12:14:59.329Z] [INFO] Good connect to Web-socket +[2025-07-14T12:15:05.885Z] [INFO] Good connect to Web-socket +[2025-07-14T12:15:16.931Z] [INFO] Good connect to Web-socket +[2025-07-15T05:27:39.692Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:27:39.693Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:27:39.693Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T05:27:47.286Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:27:47.286Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:27:47.287Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T05:28:37.739Z] [INFO] Login successful +[2025-07-15T05:38:50.151Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:38:50.151Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:38:50.152Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T05:39:01.148Z] [INFO] Login successful +[2025-07-15T05:39:10.987Z] [INFO] Good connect to Web-socket +[2025-07-15T05:54:54.149Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T05:54:54.150Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T05:54:54.150Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:15:11.786Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:15:11.786Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:15:11.787Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:22:14.382Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:22:14.382Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:22:14.383Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:50:01.617Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:50:01.618Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:50:01.618Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:50:26.699Z] [INFO] Login successful +[2025-07-15T06:55:27.910Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-15T06:55:27.911Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-15T06:55:27.911Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-15T06:55:50.182Z] [INFO] Login successful +[2025-07-16T13:04:38.889Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:04:38.891Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:04:38.892Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:05:01.409Z] [WARN] Неверный пароль +[2025-07-16T13:05:10.680Z] [WARN] Неверный пароль +[2025-07-16T13:05:13.398Z] [INFO] Login successful +[2025-07-16T13:08:49.897Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:08:49.898Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:08:49.898Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:08:56.800Z] [WARN] Неверный пароль +[2025-07-16T13:09:08.567Z] [WARN] Неверный пароль +[2025-07-16T13:09:58.540Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:09:58.541Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:09:58.541Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:10:18.777Z] [WARN] Неверный пароль +[2025-07-16T13:11:56.468Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:11:56.469Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:11:56.469Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:12:19.448Z] [WARN] Неверный пароль +[2025-07-16T13:14:16.768Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:14:16.768Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:14:16.811Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:15:31.439Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:15:31.440Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:15:31.440Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:15:46.819Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:15:46.819Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:15:46.834Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:16:09.659Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:16:09.659Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:16:09.660Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:16:16.352Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:16:16.353Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:16:16.368Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:17:29.890Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:17:29.891Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:17:29.891Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:17:37.070Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:17:37.071Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:17:37.088Z] [ERROR] [LOGIN] Ошибка авторизации: {"message":"Access denied for user ''@'localhost' (using password: NO)","code":"ER_ACCESS_DENIED_ERROR","errno":1045,"sqlState":"28000","sqlMessage":"Access denied for user ''@'localhost' (using password: NO)"} +[2025-07-16T13:20:13.871Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:20:13.872Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:20:13.872Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:20:26.558Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:20:26.559Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:20:26.581Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:20:26.581Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:20:26.633Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:20:26.633Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:21:07.256Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:21:07.257Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:21:07.258Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:21:07.258Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:21:07.307Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:21:07.308Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:25:02.337Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:25:02.338Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:25:02.338Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:25:13.489Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:25:13.490Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:25:13.501Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:25:13.501Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:25:13.553Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:25:13.553Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:26:33.039Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:26:33.040Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:26:33.040Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:27:20.182Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:27:20.183Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:27:20.183Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:27:31.961Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:27:31.962Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:27:31.972Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:27:31.973Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:27:32.024Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:27:32.024Z] [INFO] [LOGIN] Устанавливаю сессию... +[2025-07-16T13:27:32.025Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:28:17.737Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:28:17.738Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:28:17.738Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:28:30.681Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:28:30.682Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:28:30.693Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:28:30.693Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:28:30.744Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:28:30.744Z] [INFO] [LOGIN] Устанавливаю сессию... +[2025-07-16T13:28:30.745Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:28:39.623Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:28:39.623Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:28:39.624Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:28:39.625Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:28:39.675Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-16T13:28:39.676Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-16T13:32:32.475Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:32:32.475Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:32:32.476Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:32:50.634Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:32:50.634Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:32:50.646Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:32:50.646Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:32:50.697Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:32:50.697Z] [INFO] [LOGIN] Устанавливаю сессию... +[2025-07-16T13:32:50.698Z] [ERROR] [LOGIN] Ошибка авторизации: {} +[2025-07-16T13:33:29.957Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:33:29.959Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:33:29.959Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:33:39.449Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:33:39.450Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:33:39.461Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:33:39.461Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:33:39.512Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:33:39.513Z] [ERROR] [LOGIN] Ошибка при установке сессии или отправке ответа: {} +[2025-07-16T13:41:53.707Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:41:53.708Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:41:53.708Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:42:37.295Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:42:37.296Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:42:37.296Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-16T13:42:45.148Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-16T13:42:45.148Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-16T13:42:45.157Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-16T13:42:45.158Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-16T13:42:45.209Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-16T13:42:45.209Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-16T13:42:45.211Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-16T13:58:30.819Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-16T13:58:30.820Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-16T13:58:30.820Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T07:15:15.350Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T07:15:15.360Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T07:15:15.361Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T07:15:47.745Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T07:15:47.746Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T07:15:47.789Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T07:15:47.789Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T07:15:47.840Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T07:15:47.840Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T07:15:47.842Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:35:34.179Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T08:35:34.180Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T08:35:34.180Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T08:37:21.244Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:37:21.245Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:37:21.250Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:37:21.250Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:37:21.301Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:37:21.301Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:37:21.302Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:38:51.945Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:38:51.945Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:38:51.946Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:38:51.946Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:38:51.996Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:38:51.997Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:38:51.998Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:39:34.291Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:39:34.291Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:39:34.292Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:39:34.293Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:39:34.342Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:39:34.343Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:39:34.343Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:42:30.931Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T08:42:30.932Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T08:42:30.932Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T08:42:37.658Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T08:42:37.659Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T08:42:37.668Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T08:42:37.669Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T08:42:37.719Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T08:42:37.720Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T08:42:37.722Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T08:52:05.967Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T08:52:05.968Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T08:52:05.968Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:04:04.203Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:04:04.204Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:04:04.205Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:04:04.206Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:04:04.256Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:04:04.256Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:04:04.257Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:05:09.569Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:05:09.569Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:05:09.570Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:05:09.570Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:05:09.619Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:05:09.619Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:05:09.620Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:05:39.657Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:05:39.657Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:05:39.658Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:05:39.658Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:05:39.707Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:05:39.707Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:05:39.708Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:05:51.608Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:05:51.609Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:05:51.610Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:05:51.610Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:05:51.659Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:05:51.659Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:05:51.659Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:06:33.425Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:06:33.426Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:06:33.432Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:06:33.433Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:06:33.488Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:06:33.488Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:06:33.489Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:17:50.609Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:17:50.610Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:17:50.610Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:18:00.214Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:18:00.214Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:18:00.224Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:18:00.224Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:18:00.275Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:18:00.275Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:18:00.277Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:18:35.108Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:18:35.108Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:18:35.110Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:18:35.110Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:18:35.159Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:18:35.160Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:18:35.160Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:18:55.143Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:18:55.143Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:18:55.143Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:19:21.832Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:19:21.832Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:19:21.833Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:19:41.025Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:19:41.025Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:19:41.027Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:19:41.027Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:19:41.078Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:19:41.079Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:19:41.080Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:19:59.283Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:19:59.284Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:19:59.285Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:19:59.285Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:19:59.336Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:19:59.336Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:19:59.337Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:25:09.576Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:25:09.577Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:25:09.577Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:25:20.924Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:25:20.924Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:25:20.934Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:25:20.935Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:25:20.984Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T09:25:20.985Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T09:25:24.162Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:25:24.162Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:25:24.163Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:25:24.163Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:25:24.213Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:25:24.214Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:25:24.215Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:32:00.801Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:32:00.802Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:32:00.802Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:32:22.130Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:32:22.131Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:32:22.132Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:32:22.133Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:32:22.184Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:32:22.184Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:32:22.185Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:38:25.371Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T09:38:25.372Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T09:38:25.372Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T09:38:34.538Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:38:34.538Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:38:34.540Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:38:34.540Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:38:34.590Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:38:34.591Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:38:34.591Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:39:21.201Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:39:21.201Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:39:21.203Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:39:21.203Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:39:21.252Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:39:21.252Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:39:21.253Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T09:54:38.861Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T09:54:38.862Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T09:54:38.863Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T09:54:38.863Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T09:54:38.911Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T09:54:38.912Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T09:54:38.912Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:00:08.548Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:00:08.548Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:00:08.549Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:00:08.549Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:00:08.599Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:00:08.600Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:00:08.600Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:22:56.371Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:22:56.372Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:22:56.373Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:22:56.373Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:22:56.424Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:22:56.424Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:22:56.425Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:38:19.621Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T10:38:19.621Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T10:38:19.622Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T10:42:46.762Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:42:46.763Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:42:46.764Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:42:46.765Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:42:46.815Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T10:42:46.816Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T10:42:50.624Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:42:50.624Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:42:50.626Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:42:50.626Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:42:50.677Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:42:50.677Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:42:50.678Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T10:50:46.487Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T10:50:46.488Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T10:50:46.488Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T10:51:01.553Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T10:51:01.554Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T10:51:01.564Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T10:51:01.565Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T10:51:01.615Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T10:51:01.616Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T10:51:01.617Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T11:58:47.534Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T11:58:47.534Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T11:58:47.535Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T11:58:47.535Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T11:58:47.585Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T11:58:47.585Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T11:58:47.586Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:05:21.460Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:05:21.461Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:05:21.461Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:05:21.462Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:05:21.512Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:05:21.512Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:05:21.513Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:06:41.428Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:06:41.429Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:06:41.430Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:06:41.430Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:06:41.479Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:06:41.479Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:06:41.480Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:17:00.060Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:17:00.061Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:17:00.061Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:17:00.061Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:17:00.112Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:17:00.112Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:17:00.112Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:18:18.518Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:18:18.518Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:18:18.519Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:18:18.519Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:18:18.568Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:18:18.568Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:18:18.569Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:21:01.651Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:21:01.651Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:21:01.652Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:21:01.653Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:21:01.703Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:21:01.703Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:21:01.704Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:37:39.246Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T12:37:39.247Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T12:37:39.247Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T12:37:48.506Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:37:48.507Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:37:48.517Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:37:48.517Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:37:48.567Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:37:48.567Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:37:48.569Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:44:07.714Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:44:07.714Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:44:07.716Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:44:07.716Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:44:07.765Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:44:07.766Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:44:07.767Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:45:06.161Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:45:06.162Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:45:06.163Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:45:06.163Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:45:06.213Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T12:45:06.214Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T12:45:09.760Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:45:09.761Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:45:09.762Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:45:09.762Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:45:09.813Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-17T12:45:09.813Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-17T12:45:20.609Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:45:20.609Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:45:20.611Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:45:20.611Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:45:20.660Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:45:20.660Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:45:20.661Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:47:05.273Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:47:05.273Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:47:05.274Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:47:05.275Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:47:05.324Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:47:05.324Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:47:05.325Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T12:49:26.609Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-17T12:49:26.610Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-17T12:49:26.611Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-17T12:49:26.611Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-17T12:49:26.661Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-17T12:49:26.662Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-17T12:49:26.663Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-17T13:42:03.566Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:42:03.567Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:42:03.567Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:47:22.821Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:47:22.822Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:47:22.822Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:52:42.658Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:52:42.658Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:52:42.659Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:53:34.492Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:53:34.493Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:53:34.493Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T13:59:02.500Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T13:59:02.501Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T13:59:02.501Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-17T14:00:56.539Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-17T14:00:56.540Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-17T14:00:56.540Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T05:35:28.226Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T05:35:28.226Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T05:35:28.227Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T05:38:07.040Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T05:38:07.041Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T05:38:07.041Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T05:38:19.590Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-18T05:38:19.591Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T05:38:19.607Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T05:38:19.608Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T05:38:19.658Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T05:38:19.659Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-18T05:38:19.660Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T08:45:38.236Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:45:38.237Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:45:38.237Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T08:45:55.439Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-18T08:45:55.439Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T08:45:55.458Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T08:45:55.459Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T08:45:55.508Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T08:45:55.508Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-18T08:45:55.509Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T08:55:57.081Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:55:57.081Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:55:57.082Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T08:56:47.333Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:56:47.334Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:56:47.335Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T08:57:11.361Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T08:57:11.362Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T08:57:11.362Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T09:00:48.091Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T09:00:48.092Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T09:00:48.093Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T09:00:52.419Z] [INFO] Login successful +[2025-07-18T09:01:25.584Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-18T09:01:25.584Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T09:01:25.594Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T09:01:25.594Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T09:01:25.646Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T09:01:25.647Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":1,"username":"vova"} +[2025-07-18T09:01:25.648Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T09:46:13.116Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T09:46:13.117Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T09:46:13.117Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T09:46:23.938Z] [INFO] Login successful +[2025-07-18T09:58:23.656Z] [INFO] Login successful +[2025-07-18T10:13:49.104Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T10:13:49.105Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T10:13:49.105Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T10:13:57.804Z] [INFO] Login successful +[2025-07-18T10:16:03.740Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T10:16:03.740Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T10:16:03.741Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T10:16:09.258Z] [INFO] Login successful +[2025-07-18T10:16:45.861Z] [INFO] [LOGIN] Попытка входа: test +[2025-07-18T10:16:45.861Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-18T10:16:45.863Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-18T10:16:45.864Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-18T10:16:45.915Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-18T10:16:45.915Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":2,"username":"test"} +[2025-07-18T10:16:45.916Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-18T10:17:08.948Z] [INFO] Login successful +[2025-07-18T10:28:57.930Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T10:28:57.931Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T10:28:57.931Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T10:29:04.485Z] [INFO] Login successful +[2025-07-18T10:29:20.080Z] [INFO] Login successful +[2025-07-18T11:12:16.575Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T11:12:16.576Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T11:12:16.576Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T11:12:20.350Z] [INFO] Login successful +[2025-07-18T11:17:55.739Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T11:17:55.739Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T11:17:55.740Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T13:17:20.354Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-18T13:17:20.354Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-18T13:17:20.355Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-18T13:21:14.759Z] [INFO] Login successful +[2025-07-18T13:22:02.033Z] [INFO] Good connect to Web-socket +[2025-07-21T05:43:20.819Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T05:43:20.820Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T05:43:20.820Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T05:43:43.245Z] [INFO] Login successful +[2025-07-21T05:47:37.338Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:47:37.339Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:47:37.472Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:47:37.473Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:47:37.603Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:47:37.603Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:47:48.808Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:47:48.808Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:47:48.809Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:47:48.811Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:47:48.860Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:47:48.860Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:48:17.951Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:48:17.951Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:48:17.953Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:48:17.953Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:48:18.003Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:48:18.003Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:48:26.111Z] [INFO] [LOGIN] Попытка входа: test +[2025-07-21T05:48:26.111Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:48:26.121Z] [INFO] [LOGIN] Результат поиска пользователя: не найден +[2025-07-21T05:48:26.121Z] [WARN] [LOGIN] Пользователь не найден: test +[2025-07-21T05:48:52.232Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:48:52.233Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:48:52.234Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:48:52.234Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:48:52.284Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:48:52.284Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:51:38.171Z] [INFO] Login successful +[2025-07-21T05:54:01.375Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T05:54:01.375Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T05:54:01.375Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T05:54:16.219Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:54:16.220Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:54:16.229Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:54:16.230Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:54:16.279Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:54:16.280Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:56:35.352Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-21T05:56:35.353Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:56:35.354Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T05:56:35.355Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T05:56:35.405Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-21T05:56:35.405Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-21T05:56:53.047Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-21T05:56:53.048Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:56:53.049Z] [INFO] [LOGIN] Результат поиска пользователя: не найден +[2025-07-21T05:56:53.049Z] [WARN] [LOGIN] Пользователь не найден: grivova +[2025-07-21T05:57:03.947Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-21T05:57:03.947Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T05:57:03.948Z] [INFO] [LOGIN] Результат поиска пользователя: не найден +[2025-07-21T05:57:03.948Z] [WARN] [LOGIN] Пользователь не найден: grivova +[2025-07-21T06:03:08.154Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-21T06:03:08.155Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-21T06:03:08.156Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-21T06:03:08.156Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-21T06:03:08.206Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-21T06:03:08.207Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-21T06:03:08.209Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-21T06:04:41.874Z] [INFO] Login successful +[2025-07-21T08:29:53.691Z] [INFO] Admin server running on http://localhost:3002:3002 +[2025-07-21T08:29:53.691Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:29:53.692Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:30:33.613Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T08:30:33.614Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:30:33.614Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:30:37.964Z] [INFO] Login successful +[2025-07-21T08:31:04.544Z] [INFO] Admin server running on http://localhost:3002:3002 +[2025-07-21T08:31:04.545Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:31:04.545Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:32:13.301Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T08:32:13.301Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T08:32:13.302Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T08:32:18.708Z] [INFO] Login successful +[2025-07-21T09:23:10.572Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T09:23:10.573Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T09:23:10.573Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T09:23:22.933Z] [INFO] Login successful +[2025-07-21T10:09:55.753Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T10:09:55.753Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T10:09:55.753Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T10:10:03.039Z] [INFO] Login successful +[2025-07-21T13:43:08.772Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T13:43:08.772Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T13:43:08.773Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T13:47:07.278Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-21T13:47:07.279Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-21T13:47:07.279Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-21T13:58:50.641Z] [INFO] Login successful +[2025-07-22T06:05:58.792Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:05:58.793Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:05:58.794Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:07:04.536Z] [INFO] Login successful +[2025-07-22T06:09:05.609Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:09:05.610Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:09:05.610Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:09:11.617Z] [INFO] Login successful +[2025-07-22T06:28:07.919Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:28:07.920Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:28:07.920Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:28:14.928Z] [INFO] Login successful +[2025-07-22T06:33:20.493Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:33:20.493Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:33:20.493Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T06:54:10.099Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T06:54:10.099Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T06:54:10.100Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:11:53.589Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:11:53.589Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:11:53.590Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:12:39.235Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:12:39.236Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:12:39.236Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:13:30.853Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:13:30.854Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:13:30.854Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:56:29.520Z] [INFO] Admin server running on http://localhost:3005:3005 +[2025-07-22T07:56:29.520Z] [INFO] Card logs path: D:\rasch\backend\logs\cards.log +[2025-07-22T07:56:29.521Z] [INFO] Test logs path: D:\rasch\admin-server\logs\test.log +[2025-07-22T07:57:32.522Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-22T07:57:32.522Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:57:32.524Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:57:32.525Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:57:32.597Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-22T07:57:32.598Z] [WARN] [LOGIN] Неверный пароль для пользователя: grivova +[2025-07-22T07:57:43.460Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-22T07:57:43.461Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:57:43.462Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:57:43.462Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:57:43.512Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-22T07:57:43.513Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-22T07:58:02.538Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-22T07:58:02.539Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:58:02.540Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:58:02.541Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:58:02.591Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-22T07:58:02.592Z] [WARN] [LOGIN] Неверный пароль для пользователя: grivova +[2025-07-22T07:58:08.732Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-22T07:58:08.732Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-22T07:58:08.734Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-22T07:58:08.734Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-22T07:58:08.784Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-22T07:58:08.784Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-22T07:58:08.785Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-22T08:00:13.910Z] [INFO] Login successful +[2025-07-23T06:51:58.522Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:53:31.703Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:53:38.230Z] [ERROR] Error: secret option required for sessions + at session (D:\rasch\admin-server\node_modules\express-session\index.js:204:12) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at jsonParser (D:\rasch\admin-server\node_modules\body-parser\lib\types\json.js:100:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 +[2025-07-23T06:53:38.272Z] [ERROR] Error: secret option required for sessions + at session (D:\rasch\admin-server\node_modules\express-session\index.js:204:12) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at jsonParser (D:\rasch\admin-server\node_modules\body-parser\lib\types\json.js:100:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 +[2025-07-23T06:57:25.198Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:58:13.777Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T06:58:32.526Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-23T06:58:32.526Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-23T06:58:32.544Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-23T06:58:32.545Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-23T06:58:32.596Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-23T06:58:32.596Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-23T06:58:42.364Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-23T06:58:42.364Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-23T06:58:42.365Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-23T06:58:42.365Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-23T06:58:42.416Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-23T06:58:42.417Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-23T06:58:42.418Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-23T07:02:20.080Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:06:01.248Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:06:05.651Z] [INFO] Login successful +[2025-07-23T07:06:38.004Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.006Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.013Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.015Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.017Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:06:38.019Z] [ERROR] TypeError: req.isAuthenticated is not a function + at module.exports (D:\rasch\admin-server\middleware\checkAuth.js:3:13) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-23T07:07:52.810Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:09:41.218Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:10:57.908Z] [INFO] Server running on http://localhost:3005:3005 +[2025-07-23T07:14:53.005Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:16:07.227Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:26:08.347Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:26:13.137Z] [ERROR] Error: secret option required for sessions + at session (D:\rasch\admin-server\node_modules\express-session\index.js:204:12) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at jsonParser (D:\rasch\admin-server\node_modules\body-parser\lib\types\json.js:100:7) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at trimPrefix (D:\rasch\admin-server\node_modules\router\index.js:342:13) + at D:\rasch\admin-server\node_modules\router\index.js:297:9 +[2025-07-23T07:26:46.088Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:31:27.536Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:31:29.487Z] [ERROR] Error reading config file: {} +[2025-07-23T07:37:40.566Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:39:01.586Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:41:05.276Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:41:34.738Z] [INFO] Good connect to Web-socket +[2025-07-23T07:41:34.738Z] [ERROR] WebSocket error: {} +[2025-07-23T07:53:53.806Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:54:28.969Z] [INFO] Good connect to Web-socket +[2025-07-23T07:54:28.970Z] [ERROR] WebSocket error: {} +[2025-07-23T07:55:36.153Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T07:57:01.020Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:06:35.812Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:07:03.339Z] [INFO] Good connect to Web-socket +[2025-07-23T08:07:03.340Z] [ERROR] WebSocket error: {} +[2025-07-23T08:10:19.037Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:14:23.158Z] [INFO] Server running on http://localhost:3005 +[2025-07-23T08:14:28.611Z] [ERROR] Error reading log file: {"errno":-4058,"code":"ENOENT","syscall":"open","path":"D:\\backend\\logs\\app.log"} +[2025-07-23T08:18:18.880Z] [ERROR] Error reading log file: {"errno":-4058,"code":"ENOENT","syscall":"open","path":"D:\\backend\\logs\\app.log"} +[2025-07-23T08:20:04.814Z] [ERROR] Error reading log file: {"errno":-4058,"code":"ENOENT","syscall":"open","path":"D:\\backend\\logs\\app.log"} +[2025-07-28T07:41:01.607Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T07:41:03.580Z] [INFO] Login successful +[2025-07-28T07:41:41.691Z] [INFO] Good connect to Web-socket +[2025-07-28T07:41:41.692Z] [ERROR] WebSocket error: {} +[2025-07-28T08:41:06.121Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:41:06.131Z] [INFO] Card log file created at: D:\rasch\admin-server\logs\cards.log +[2025-07-28T08:41:18.541Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:42:50.143Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:42:56.015Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:43:11.480Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:43:12.608Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:44:40.475Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T08:44:40.484Z] [INFO] Card log file created at: D:\rasch\admin-server\logs\cards.log +[2025-07-28T08:44:54.286Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T08:46:05.472Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:44:25.265Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:44:25.267Z] [INFO] Card log file created at: D:\backend\logs\cards.log +[2025-07-28T11:44:43.078Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:45:51.928Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:45:52.053Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:46:15.609Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:46:24.264Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:46:38.108Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:46:42.319Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:47:13.045Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:47:17.274Z] [ERROR] Failed to initialize card logs: {} +[2025-07-28T11:49:16.545Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T11:49:16.549Z] [INFO] Card logs initialized successfully +[2025-07-28T12:00:43.516Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:00:43.519Z] [INFO] Card logs initialized successfully +[2025-07-28T12:02:30.511Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:02:30.514Z] [INFO] Card logs initialized successfully +[2025-07-28T12:03:26.827Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:03:26.831Z] [INFO] Card logs initialized successfully +[2025-07-28T12:04:32.169Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:04:32.172Z] [INFO] Card logs initialized successfully +[2025-07-28T12:04:48.062Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:04:48.065Z] [INFO] Card logs initialized successfully +[2025-07-28T12:07:46.087Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:07:46.090Z] [INFO] Card logs initialized successfully +[2025-07-28T12:09:43.924Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:11:02.541Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:11:08.453Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:11:08.456Z] [INFO] Card logs initialized successfully +[2025-07-28T12:11:18.314Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:03.016Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:09.018Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:12:09.022Z] [INFO] Card logs initialized successfully +[2025-07-28T12:12:20.060Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:56.130Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:12:59.231Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:05.872Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:09.013Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:11.278Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:12.428Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:14.497Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:14.498Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:15.415Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:13:15.417Z] [ERROR] Error: misconfigured csrf + at csrf (D:\rasch\admin-server\node_modules\csurf\index.js:71:19) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at next (D:\rasch\admin-server\node_modules\router\lib\route.js:157:13) + at Route.dispatch (D:\rasch\admin-server\node_modules\router\lib\route.js:117:3) + at handle (D:\rasch\admin-server\node_modules\router\index.js:435:11) + at Layer.handleRequest (D:\rasch\admin-server\node_modules\router\lib\layer.js:152:17) + at D:\rasch\admin-server\node_modules\router\index.js:295:15 + at processParams (D:\rasch\admin-server\node_modules\router\index.js:582:12) + at next (D:\rasch\admin-server\node_modules\router\index.js:291:5) + at Function.handle (D:\rasch\admin-server\node_modules\router\index.js:186:3) +[2025-07-28T12:15:40.259Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:15:40.262Z] [INFO] Card logs initialized successfully +[2025-07-28T12:18:18.766Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:18:18.769Z] [INFO] Card logs initialized successfully +[2025-07-28T12:19:58.300Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:19:58.303Z] [INFO] Card logs initialized successfully +[2025-07-28T12:23:06.779Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:23:06.782Z] [INFO] Card logs initialized successfully +[2025-07-28T12:23:42.811Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:20.702Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:21.374Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:21.538Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:25:48.768Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:52:33.102Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:54:44.943Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:54:44.945Z] [INFO] Card logs initialized successfully +[2025-07-28T12:54:48.568Z] [WARN] Log file not found: D:\logs\admin.log +[2025-07-28T12:55:22.939Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:55:22.940Z] [INFO] Card logs initialized successfully +[2025-07-28T12:55:27.625Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:56:20.851Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:56:29.655Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:56:29.657Z] [INFO] Card logs initialized successfully +[2025-07-28T12:56:33.307Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T12:58:00.162Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T12:58:00.165Z] [INFO] Card logs initialized successfully +[2025-07-28T12:58:04.031Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:13:56.909Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:13:56.912Z] [INFO] Card logs initialized successfully +[2025-07-28T13:14:00.288Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:15:35.437Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:15:35.440Z] [INFO] Card logs initialized successfully +[2025-07-28T13:15:38.886Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:15:52.116Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:16:16.389Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:16:25.999Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:18:21.485Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:18:56.370Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:18:56.374Z] [INFO] Card logs initialized successfully +[2025-07-28T13:18:59.105Z] [WARN] Log file not found: D:\rasch\admin-server\admin.log +[2025-07-28T13:19:21.312Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:19:21.316Z] [INFO] Card logs initialized successfully +[2025-07-28T13:19:23.294Z] [WARN] Log file not found: D:\rasch\logs\admin.log +[2025-07-28T13:19:43.875Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:19:43.880Z] [INFO] Card logs initialized successfully +[2025-07-28T13:21:48.904Z] [INFO] [LOGIN] Попытка входа: vova +[2025-07-28T13:21:48.905Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-28T13:21:48.918Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-28T13:21:48.928Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-28T13:21:49.010Z] [INFO] [LOGIN] Результат сравнения пароля: false +[2025-07-28T13:21:49.010Z] [WARN] [LOGIN] Неверный пароль для пользователя: vova +[2025-07-28T13:21:57.029Z] [INFO] [LOGIN] Попытка входа: grivova +[2025-07-28T13:21:57.029Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-07-28T13:21:57.031Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-07-28T13:21:57.031Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-07-28T13:21:57.081Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-07-28T13:21:57.082Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2025-07-28T13:21:57.083Z] [INFO] [LOGIN] Ответ отправлен +[2025-07-28T13:24:30.419Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:24:30.422Z] [INFO] Card logs initialized successfully +[2025-07-28T13:24:41.116Z] [INFO] Login successful +[2025-07-28T13:24:58.867Z] [INFO] Good connect to Web-socket +[2025-07-28T13:24:58.868Z] [ERROR] WebSocket error: {} +[2025-07-28T13:27:59.766Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:27:59.768Z] [INFO] Card logs initialized successfully +[2025-07-28T13:28:22.080Z] [INFO] Good connect to Web-socket +[2025-07-28T13:28:22.081Z] [ERROR] WebSocket error: {} +[2025-07-28T13:31:00.081Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:31:00.084Z] [INFO] Card logs initialized successfully +[2025-07-28T13:31:05.975Z] [INFO] New WebSocket connection +[2025-07-28T13:31:10.348Z] [INFO] WebSocket connection closed +[2025-07-28T13:49:29.465Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:49:29.468Z] [INFO] Card logs initialized successfully +[2025-07-28T13:50:11.012Z] [INFO] New WebSocket connection +[2025-07-28T13:50:14.243Z] [INFO] WebSocket connection closed +[2025-07-28T13:51:39.743Z] [INFO] Server running on http://localhost:3005 +[2025-07-28T13:51:39.746Z] [INFO] Card logs initialized successfully +[2025-07-28T13:51:49.286Z] [INFO] New WebSocket connection +[2025-07-28T13:51:50.317Z] [INFO] WebSocket connection closed +[2025-07-29T05:47:16.690Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T05:47:16.695Z] [INFO] Card logs initialized successfully +[2025-07-29T05:48:41.648Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T05:48:41.649Z] [INFO] Card logs initialized successfully +[2025-07-29T05:49:23.926Z] [INFO] Login successful +[2025-07-29T05:50:44.165Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T05:50:44.167Z] [INFO] Card logs initialized successfully +[2025-07-29T05:50:51.082Z] [INFO] New WebSocket connection +[2025-07-29T05:50:52.399Z] [INFO] WebSocket connection closed +[2025-07-29T07:55:32.314Z] [INFO] Card log path initialized: D:\rasch\admin-server\logs\cards.log +[2025-07-29T07:55:32.317Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-29T07:55:32.317Z] [INFO] Configuration loaded from: local files +[2025-07-29T07:55:32.320Z] [INFO] Card log file created at: D:\rasch\admin-server\logs\cards.log +[2025-07-29T07:55:32.320Z] [INFO] Card logs initialized successfully +[2025-07-29T07:56:01.662Z] [INFO] Card log path initialized: D:\rasch\admin-server\logs\cards.log +[2025-07-29T07:56:01.673Z] [INFO] Admin server running on http://localhost:3005 +[2025-07-29T07:56:01.674Z] [INFO] Configuration loaded from: local files +[2025-07-29T07:56:01.677Z] [INFO] Card logs initialized successfully +[2025-07-29T07:57:30.027Z] [ERROR] Error: Access denied for user ''@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:232:16 +[2025-07-29T07:57:30.269Z] [ERROR] Error: Access denied for user ''@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:105:5) +[2025-07-29T07:57:30.281Z] [ERROR] Error: Access denied for user ''@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:105:5) +[2025-07-29T08:04:47.293Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T08:04:47.296Z] [INFO] Card logs initialized successfully +[2025-07-29T09:10:07.396Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T09:10:07.400Z] [INFO] Card logs initialized successfully +[2025-07-29T11:18:24.828Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T11:18:24.830Z] [INFO] Card logs initialized successfully +[2025-07-29T13:15:04.688Z] [INFO] Server running on http://localhost:3005 +[2025-07-29T13:15:04.692Z] [INFO] Card logs initialized successfully +[2025-07-29T13:16:07.735Z] [INFO] Login successful +[2025-07-29T13:16:16.719Z] [INFO] New WebSocket connection +[2025-07-29T13:16:18.138Z] [INFO] WebSocket connection closed +[2025-09-09T12:06:33.379Z] [INFO] Server running on http://localhost:3005 +[2025-09-09T12:06:33.412Z] [INFO] Card logs initialized successfully +[2025-09-09T12:10:27.374Z] [INFO] Login successful +[2025-09-09T12:10:48.082Z] [INFO] [LOGIN] Попытка входа: test +[2025-09-09T12:10:48.085Z] [INFO] [LOGIN] Проверка подключения к базе... +[2025-09-09T12:10:48.095Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2025-09-09T12:10:48.098Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2025-09-09T12:10:48.162Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2025-09-09T12:10:48.166Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2025-09-09T12:10:48.171Z] [INFO] [LOGIN] Ответ отправлен +[2025-09-09T12:31:20.727Z] [INFO] New WebSocket connection +[2025-09-09T12:31:28.729Z] [INFO] WebSocket connection closed +[2026-08-04T13:11:44.671Z] [INFO] Server running on http://localhost:3005 +[2026-08-04T13:11:44.683Z] [INFO] Card logs initialized successfully +[2026-08-04T13:11:54.012Z] [ERROR] Error: Access denied for user 'root'@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:232:16 + at process.processTicksAndRejections (node:internal/process/task_queues:104:5) +[2026-08-04T13:11:54.098Z] [ERROR] Error: Access denied for user 'root'@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:104:5) +[2026-08-04T13:11:54.106Z] [ERROR] Error: Access denied for user 'root'@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:104:5) +[2026-08-04T13:11:54.164Z] [ERROR] Error: Access denied for user 'root'@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:104:5) +[2026-08-04T13:11:54.206Z] [ERROR] Error: Access denied for user 'root'@'localhost' (using password: YES) + at PromisePool.query (D:\rasch\admin-server1\node_modules\express-mysql-session\node_modules\mysql2\promise.js:356:22) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:384:30 + at new Promise () + at MySQLStore.query (D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:381:10) + at D:\rasch\admin-server1\node_modules\express-mysql-session\index.js:170:16 + at process.processTicksAndRejections (node:internal/process/task_queues:104:5) +[2026-08-04T13:16:43.899Z] [INFO] Server running on http://localhost:3005 +[2026-08-04T13:16:43.902Z] [INFO] Card logs initialized successfully +[2026-08-04T13:26:31.310Z] [INFO] Server running on http://localhost:3005 +[2026-08-04T13:26:31.321Z] [INFO] Card logs initialized successfully +[2026-08-04T13:30:33.443Z] [INFO] Card logs initialized successfully +[2026-08-07T12:14:07.016Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:14:07.031Z] [INFO] Card logs initialized successfully +[2026-08-07T12:20:20.432Z] [INFO] Login successful +[2026-08-07T12:24:06.319Z] [INFO] Login successful +[2026-08-07T12:28:38.937Z] [INFO] [LOGIN] Попытка входа: grivova +[2026-08-07T12:28:38.938Z] [INFO] [LOGIN] Проверка подключения к базе... +[2026-08-07T12:28:38.939Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2026-08-07T12:28:38.940Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2026-08-07T12:28:39.043Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2026-08-07T12:28:39.044Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2026-08-07T12:28:39.045Z] [INFO] [LOGIN] Ответ отправлен +[2026-08-07T12:31:03.762Z] [INFO] [LOGIN] Попытка входа: test +[2026-08-07T12:31:03.762Z] [INFO] [LOGIN] Проверка подключения к базе... +[2026-08-07T12:31:03.763Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2026-08-07T12:31:03.764Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2026-08-07T12:31:03.826Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2026-08-07T12:31:03.827Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":5,"username":"test"} +[2026-08-07T12:31:03.828Z] [INFO] [LOGIN] Ответ отправлен +[2026-08-07T12:33:50.102Z] [INFO] Login successful +[2026-08-07T12:35:55.061Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:35:55.063Z] [INFO] Card logs initialized successfully +[2026-08-07T12:37:00.779Z] [INFO] Login successful +[2026-08-07T12:37:55.751Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:37:55.754Z] [INFO] Card logs initialized successfully +[2026-08-07T12:38:20.690Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:38:20.693Z] [INFO] Card logs initialized successfully +[2026-08-07T12:40:50.263Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:40:50.266Z] [INFO] Card logs initialized successfully +[2026-08-07T12:40:58.771Z] [INFO] Login successful +[2026-08-07T12:41:25.476Z] [INFO] [LOGIN] Попытка входа: grivova +[2026-08-07T12:41:25.477Z] [INFO] [LOGIN] Проверка подключения к базе... +[2026-08-07T12:41:25.479Z] [INFO] [LOGIN] Результат поиска пользователя: найден +[2026-08-07T12:41:25.480Z] [INFO] [LOGIN] Сравнение пароля через bcrypt... +[2026-08-07T12:41:25.538Z] [INFO] [LOGIN] Результат сравнения пароля: true +[2026-08-07T12:41:25.539Z] [INFO] [LOGIN] Сессия установлена: {"isModerator":true,"userId":3,"username":"grivova"} +[2026-08-07T12:41:25.540Z] [INFO] [LOGIN] Ответ отправлен +[2026-08-07T12:41:40.392Z] [INFO] Login successful +[2026-08-07T12:43:25.216Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:43:25.218Z] [INFO] Card logs initialized successfully +[2026-08-07T12:43:44.858Z] [INFO] Login successful +[2026-08-07T12:47:33.580Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:47:33.582Z] [INFO] Card logs initialized successfully +[2026-08-07T12:47:44.188Z] [INFO] Login successful +[2026-08-07T12:55:19.445Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:55:19.449Z] [INFO] Card logs initialized successfully +[2026-08-07T12:55:33.508Z] [INFO] Login successful +[2026-08-07T12:58:42.719Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T12:58:42.723Z] [INFO] Card logs initialized successfully +[2026-08-07T12:58:54.521Z] [INFO] Login successful +[2026-08-07T13:00:21.863Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T13:00:21.866Z] [INFO] Card logs initialized successfully +[2026-08-07T13:00:30.853Z] [INFO] Login successful +[2026-08-07T13:00:32.326Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content +[2026-08-07T13:00:32.338Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL +[2026-08-07T13:03:43.999Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content +[2026-08-07T13:03:44.004Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL +[2026-08-07T13:06:28.709Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T13:06:28.712Z] [INFO] Card logs initialized successfully +[2026-08-07T13:06:34.818Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content +[2026-08-07T13:06:34.828Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL +[2026-08-07T13:07:01.592Z] [INFO] Server running on http://localhost:3005 +[2026-08-07T13:07:01.595Z] [INFO] Card logs initialized successfully +[2026-08-07T13:07:06.016Z] [INFO] [DB CHECK] Проверка подключения к MySQL: localhost:3306/rasch_content +[2026-08-07T13:07:06.042Z] [INFO] [DB CHECK] ✅ Успешное подключение к MySQL diff --git a/admin-server1/logs/cards.log b/admin-server1/logs/cards.log new file mode 100644 index 0000000..e69de29 diff --git a/admin-server1/main.js b/admin-server1/main.js new file mode 100644 index 0000000..fbbec0e --- /dev/null +++ b/admin-server1/main.js @@ -0,0 +1,41 @@ +const { app, BrowserWindow } = require('electron'); +const path = require('path'); + +let mainWindow; + +function createWindow() { + mainWindow = new BrowserWindow({ + width: 1200, + height: 800, + webPreferences: { + nodeIntegration: true, + contextIsolation: false + } + }); + + // Загружаем ваш сервер + mainWindow.loadURL('http://localhost:3005'); + + // Открываем DevTools + mainWindow.webContents.openDevTools(); + + mainWindow.on('closed', () => { + mainWindow = null; + }); +} + +app.whenReady().then(() => { + createWindow(); +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on('activate', () => { + if (mainWindow === null) { + createWindow(); + } +}); \ No newline at end of file diff --git a/admin-server1/middleware/checkAuth.js b/admin-server1/middleware/checkAuth.js new file mode 100644 index 0000000..3f568b2 --- /dev/null +++ b/admin-server1/middleware/checkAuth.js @@ -0,0 +1,7 @@ +module.exports = (req, res, next) => { + if (req.session && req.session.isAuthenticated) { + next(); + } else { + res.status(401).json({ message: 'Unauthorized' }); + } +}; diff --git a/admin-server1/middleware/csrf.js b/admin-server1/middleware/csrf.js new file mode 100644 index 0000000..eea6ea1 --- /dev/null +++ b/admin-server1/middleware/csrf.js @@ -0,0 +1,17 @@ +// middleware/csrf.js +const csurf = require('csurf'); + +const csrfProtection = csurf({ cookie: false }); + +const csrfMiddleware = (req, res, next) => { + if ( + req.path === '/login' || + req.path === '/moders/moder-login' || + req.path === '/moders/csrf-token' + ) { + return next(); + } + return csrfProtection(req, res, next); +}; + +module.exports = csrfMiddleware; \ No newline at end of file diff --git a/admin-server1/middleware/errorHandler.js b/admin-server1/middleware/errorHandler.js new file mode 100644 index 0000000..048ef2c --- /dev/null +++ b/admin-server1/middleware/errorHandler.js @@ -0,0 +1,8 @@ +const logger = require('../logger') +module.exports = (err, req, res, next) => { + if (err.code === 'EBADCSRFTOKEN') { + return res.status(403).json({ message: 'Invalid CSRF token' }); + } + logger.error(err.stack); + res.status(500).json({ message: 'Internal Server Error' }); +}; \ No newline at end of file diff --git a/admin-server1/moders/config.env b/admin-server1/moders/config.env new file mode 100644 index 0000000..e5b9052 --- /dev/null +++ b/admin-server1/moders/config.env @@ -0,0 +1,5 @@ +MYSQL_HOST=localhost +MYSQL_PORT=3306 +MYSQL_USER=root +MYSQL_PASSWORD=Vova-2003. +MYSQL_DATABASE=rasch_content \ No newline at end of file diff --git a/admin-server1/moders/db.js b/admin-server1/moders/db.js new file mode 100644 index 0000000..e45ce81 --- /dev/null +++ b/admin-server1/moders/db.js @@ -0,0 +1,20 @@ +const mysql = require('mysql2/promise'); +require('dotenv').config({ path: __dirname + './config.env' }); +console.log({ + host: process.env.MYSQL_HOST, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE +}); +const pool = mysql.createPool({ + host: process.env.MYSQL_HOST, + port: process.env.MYSQL_PORT || 3306, + user: process.env.MYSQL_USER, + password: process.env.MYSQL_PASSWORD, + database: process.env.MYSQL_DATABASE, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); + +module.exports = pool; \ No newline at end of file diff --git a/admin-server1/moders/middleware/requireModerator.js b/admin-server1/moders/middleware/requireModerator.js new file mode 100644 index 0000000..f78b5d4 --- /dev/null +++ b/admin-server1/moders/middleware/requireModerator.js @@ -0,0 +1,6 @@ +function requireModerator(req, res, next) { + if (req.session && req.session.isModerator) return next(); + res.status(401).send('Unauthorized'); +} + +module.exports = requireModerator; \ No newline at end of file diff --git a/admin-server1/moders/routes/content.js b/admin-server1/moders/routes/content.js new file mode 100644 index 0000000..59c9229 --- /dev/null +++ b/admin-server1/moders/routes/content.js @@ -0,0 +1,100 @@ +const express = require('express'); +const db = require('../db'); +const requireModerator = require('../middleware/requireModerator'); +const router = express.Router(); +const multer = require('multer'); +const path = require('path'); +const fs = require('fs'); + +const uploadDir = path.join(__dirname, '../../uploads'); +if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir, { recursive: true }); +const storage = multer.diskStorage({ + destination: (req, file, cb) => cb(null, uploadDir), + filename: (req, file, cb) => { + const ext = path.extname(file.originalname); + const name = Date.now() + '-' + Math.round(Math.random() * 1e6) + ext; + cb(null, name); + } +}); +const ALLOWED_MIME_TYPES = [ + 'image/jpeg', 'image/png', + 'video/mp4', 'video/quicktime' +]; +const MAX_FILE_SIZE = 20 * 1024 * 1024; // 20 МБ + +const upload = multer({ + storage, + limits: { fileSize: MAX_FILE_SIZE }, + fileFilter: (req, file, cb) => { + if (ALLOWED_MIME_TYPES.includes(file.mimetype)) { + cb(null, true); + } else { + cb(new Error('Недопустимый тип файла')); + } + } +}); + +// Получить все блоки для вкладки +router.get('/:tab', async (req, res) => { + const { tab } = req.params; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + const [rows] = await db.query('SELECT * FROM content_blocks WHERE tab = ? ORDER BY created_at ASC', [tab]); + res.json(rows); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// Загрузка файла (image/video) +router.post('/:tab/upload', requireModerator, upload.single('file'), (req, res) => { + if (!req.file) return res.status(400).json({ message: 'Файл не загружен' }); + const relPath = '/uploads/' + req.file.filename; + res.json({ path: relPath }); +}); + +// Добавить новый блок +router.post('/:tab', requireModerator, async (req, res) => { + const { tab } = req.params; + const { content } = req.body; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + const [result] = await db.query( + 'INSERT INTO content_blocks (tab, type, content, created_by, created_at, updated_at) VALUES (?, ?, ?, ?, NOW(), NOW())', + [tab, 'text', content, req.session.userId] + ); + res.json({ id: result.insertId }); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// Обновить блок +router.put('/:tab/:id', requireModerator, async (req, res) => { + const { tab, id } = req.params; + const { content } = req.body; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + await db.query( + 'UPDATE content_blocks SET content = ?, updated_at = NOW() WHERE id = ? AND tab = ?', + [content, id, tab] + ); + res.json({ message: 'Обновлено' }); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// Удалить блок +router.delete('/:tab/:id', requireModerator, async (req, res) => { + const { tab, id } = req.params; + if (!['info', 'union'].includes(tab)) return res.status(400).json({ message: 'Некорректная вкладка' }); + try { + await db.query('DELETE FROM content_blocks WHERE id = ? AND tab = ?', [id, tab]); + res.json({ message: 'Удалено' }); + } catch (err) { + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/admin-server1/moders/routes/moderAuth.js b/admin-server1/moders/routes/moderAuth.js new file mode 100644 index 0000000..590f3c8 --- /dev/null +++ b/admin-server1/moders/routes/moderAuth.js @@ -0,0 +1,81 @@ +const express = require('express'); +const bcrypt = require('bcrypt'); +const db = require('../db'); +const router = express.Router(); +const logger = require('../../logger'); +const rateLimit = require('express-rate-limit'); +const csurf = require('csurf'); + +const csrfProtection = csurf({ cookie: false }); + +const loginLimiter = rateLimit({ + windowMs: 30 * 60 * 1000, // 30 минут + max: 10, + message: { message: 'Слишком много попыток входа. Попробуйте позже.' }, + standardHeaders: true, + legacyHeaders: false +}); + +router.get('/csrf-token', csrfProtection, (req, res) => { + res.json({ csrfToken: req.csrfToken() }); +}); + +router.post('/moder-login', loginLimiter, async (req, res) => { + const { username, password } = req.body; + logger.info(`[LOGIN] Попытка входа: ${username}`); + try { + logger.info('[LOGIN] Проверка подключения к базе...'); + const [rows] = await db.query('SELECT * FROM users WHERE username = ?', [username]); + logger.info(`[LOGIN] Результат поиска пользователя: ${rows.length > 0 ? 'найден' : 'не найден'}`); + if (!rows.length) { + logger.warn(`[LOGIN] Пользователь не найден: ${username}`); + return res.status(401).json({ message: 'Неверный логин или пароль' }); + } + const user = rows[0]; + if (!user.password_hash) { + logger.error('[LOGIN] Отсутствует password_hash в БД'); + return res.status(500).json({ message: 'Ошибка сервера: некорректные данные пользователя' }); + } + logger.info('[LOGIN] Сравнение пароля через bcrypt...'); + const match = await bcrypt.compare(password, user.password_hash); + logger.info(`[LOGIN] Результат сравнения пароля: ${match}`); + if (!match) { + logger.warn(`[LOGIN] Неверный пароль для пользователя: ${username}`); + return res.status(401).json({ message: 'Неверный логин или пароль' }); + } + try { + req.session.isModerator = true; + req.session.userId = user.id; + req.session.username = user.username; + logger.info('[LOGIN] Сессия установлена:', { + isModerator: req.session.isModerator, + userId: req.session.userId, + username: req.session.username + }); + res.json({ message: 'OK' }); + logger.info('[LOGIN] Ответ отправлен'); + } catch (e) { + logger.error('[LOGIN] Ошибка при установке сессии или отправке ответа:', e); + res.status(500).json({ message: 'Ошибка сервера (сессия)' }); + } + } catch (err) { + logger.error('[LOGIN] Ошибка авторизации:', err); + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +router.get('/moder-logout', (req, res) => { + req.session.destroy(() => { + res.json({ message: 'OK' }); + }); +}); + +router.get('/check-session', (req, res) => { + if (req.session && req.session.isModerator) { + res.json({ ok: true }); + } else { + res.status(401).json({ ok: false }); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/admin-server1/package-lock.json b/admin-server1/package-lock.json new file mode 100644 index 0000000..dc84cfd --- /dev/null +++ b/admin-server1/package-lock.json @@ -0,0 +1,3423 @@ +{ + "name": "admin-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "admin-server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^1.10.0", + "bcrypt": "^6.0.0", + "cors": "^2.8.5", + "csurf": "^1.11.0", + "dotenv": "^17.2.1", + "electron": "^37.0.0", + "express": "^5.1.0", + "express-mysql-session": "^3.0.3", + "express-rate-limit": "^8.0.1", + "express-session": "^1.18.1", + "fs-extra": "^11.3.0", + "morgan": "^1.10.0", + "mssql": "^11.0.1", + "multer": "^2.0.1", + "mysql2": "^3.14.2", + "ws": "^8.18.3" + } + }, + "node_modules/@azure-rest/core-client": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.8.0.tgz", + "integrity": "sha512-F1ybHeN+++QhyFCF/ehLUEvrOB6fehPdFBFtGdj0C3B2lpQ9zkPiO5JDgsqc6IfjuUe6b3dAbXK0a7+VgSGfhw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.24.0", + "@azure/core-tracing": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.11.0.tgz", + "integrity": "sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.11.0.tgz", + "integrity": "sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.7.0.tgz", + "integrity": "sha512-7GEAoIsaoBr6KELNRb8nypowCqvk8dnCHFCYg4XD4lOQGY2GqjQg5IhkRjyBFRO18CGSMq05PaNqSOE9GQro3g==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.25.0.tgz", + "integrity": "sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.4.0.tgz", + "integrity": "sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.14.0.tgz", + "integrity": "sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.13.1.tgz", + "integrity": "sha512-5C/2WD5Vb1lHnZS16dNQRPMjN6oV/Upba+C9nBIs15PmOi6A3ZGs4Lr2u60zw4S04gi+u3cEXiqTVP7M4Pz3kw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^5.5.0", + "@azure/msal-node": "^5.1.0", + "open": "^10.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/keyvault-common": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.1.0.tgz", + "integrity": "sha512-aCDidWuKY06LWQ4x7/8TIXK6iRqTaRWRL3t7T+LC+j1b07HtoIsOxP/tU90G4jCSBn5TAyUTCtA4MS/y5Hudaw==", + "license": "MIT", + "dependencies": { + "@azure-rest/core-client": "^2.3.3", + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.10.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/keyvault-keys": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.10.2.tgz", + "integrity": "sha512-VmUSLbXRAbSzDD8grXHGPaknYs0SKr3yuf6U+d4XMpX4XuVYskNqbTTwXce0zR1LyxfTZm9rWEBcvs3vdYwCmQ==", + "license": "MIT", + "dependencies": { + "@azure-rest/core-client": "^2.3.3", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-lro": "^2.7.2", + "@azure/core-paging": "^1.6.2", + "@azure/core-rest-pipeline": "^1.19.0", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/keyvault-common": "^2.1.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.4.0.tgz", + "integrity": "sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "5.17.3", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-5.17.3.tgz", + "integrity": "sha512-qMabD7Xrm/UgRhs+/IVyCTZRjUl8Qb+uGsRrCkaKNWsiTwRaeyStJbChE7/ySNTNYtiWo7khfF7vUDd0wGMnLw==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "16.11.3" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "16.11.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-16.11.3.tgz", + "integrity": "sha512-VeXOW+t3Rdd9XGX6lVyIg3DhtjMR1JD8ARKcsnGbJFUWwAmF3sHL7GwZc/ZjEUfHESResAonETRYCuG06OBT7A==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-5.4.3.tgz", + "integrity": "sha512-tumCMmzrRhKmTbYQg/7OlfbrIKcKaf8Ed0Fw3suUpRT3owFYljznVgxcfHe8RycQXY9uyROGiLD1GjhpF45AwA==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "16.11.3", + "jsonwebtoken": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.7.0.tgz", + "integrity": "sha512-WBu4ULVVxySLLzK1Ppq+OdfP+adRS4ntmDQT915rzDJ++i95gc2jZkM5B6LWEAwN3lGXpfie3yPABozdD3K3Vg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tediousjs/connection-string": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz", + "integrity": "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==", + "license": "MIT" + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "26.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", + "license": "MIT", + "dependencies": { + "undici-types": "~8.3.0" + } + }, + "node_modules/@types/readable-stream": { + "version": "4.0.24", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.24.tgz", + "integrity": "sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.8.tgz", + "integrity": "sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", + "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bcrypt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", + "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.3.0", + "node-gyp-build": "^4.8.4" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/bl": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.1.6.tgz", + "integrity": "sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^4.2.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/body-parser/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "optional": true + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/csrf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.1.0.tgz", + "integrity": "sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==", + "license": "MIT", + "dependencies": { + "rndm": "1.2.0", + "tsscmp": "1.0.6", + "uid-safe": "2.1.5" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/csurf": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/csurf/-/csurf-1.11.0.tgz", + "integrity": "sha512-UCtehyEExKTxgiu8UHdGvHj4tnpE/Qctue03Giq5gPgMQ9cg/ciod5blZQ5a4uCEenNQjxyGuzygLdKUmee/bQ==", + "deprecated": "This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions", + "license": "MIT", + "dependencies": { + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "csrf": "3.1.0", + "http-errors": "~1.7.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT", + "optional": true + }, + "node_modules/dotenv": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron": { + "version": "37.0.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-37.0.0.tgz", + "integrity": "sha512-QhdtwF7Hq1qfnUXigYp1+bTGuLYTmYTir5KnrMXxWJoWfNhURRU2EYuTktBHoWT5mtv/GmmRjGEiR3IS2p9SSA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "22.20.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.1.tgz", + "integrity": "sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/electron/node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT", + "optional": true + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-mysql-session": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/express-mysql-session/-/express-mysql-session-3.0.3.tgz", + "integrity": "sha512-sEYrzFrOs3er+Ie/uk1dt93qz4AQ9SU1mpJJ0HPs0MJ4t4hE9AcDRNq0sZQUwy2F/SbXusBt1E5+FY6KzSqXNg==", + "license": "MIT", + "dependencies": { + "debug": "4.3.4", + "mysql2": "3.10.2" + } + }, + "node_modules/express-mysql-session/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/express-mysql-session/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express-mysql-session/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/express-mysql-session/node_modules/mysql2": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.10.2.tgz", + "integrity": "sha512-KCXPEvAkO0RcHPr362O5N8tFY2fXvbjfkPvRY/wGumh4EOemo9Hm5FjQZqv/pCmrnuxGu5OxnSENG0gTXqKMgQ==", + "license": "MIT", + "dependencies": { + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru-cache": "^8.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/express-rate-limit": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.6.1.tgz", + "integrity": "sha512-0D493aP61w0TJ2A0wy27riRsO7FMQ7FK+KUHOKCSfPvYo0R55aiC6emCVgFUeShH0fq0ICPVzNcgoS+BsbXQCA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express-session": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.19.0.tgz", + "integrity": "sha512-0csaMkGq+vaiZTmSMMGkfdCOabYv192VbytFypcvI0MANrp+4i/7yEkJ0sbAEhycQjntaKGzYfjfXQyVb7BHMA==", + "license": "MIT", + "dependencies": { + "cookie": "~0.7.2", + "cookie-signature": "~1.0.7", + "debug": "~2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.1.0", + "parseurl": "~1.3.3", + "safe-buffer": "~5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-session/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/express/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/express/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-extra": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.4.0.tgz", + "integrity": "sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", + "license": "MIT" + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC", + "optional": true + }, + "node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-8.0.5.tgz", + "integrity": "sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==", + "license": "ISC", + "engines": { + "node": ">=16.14" + } + }, + "node_modules/lru.min": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz", + "integrity": "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/morgan": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.11.0.tgz", + "integrity": "sha512-zSkVu3t18r39pw4ixfBKvfZi3y2UOqr7d4WYwcj3m8nXpEQK4rPO6GLzs/CExoRgmX3y9EjmmcXqv6jq0SK46g==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.4.1", + "on-headers": "~1.1.0" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mssql": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/mssql/-/mssql-11.0.1.tgz", + "integrity": "sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w==", + "license": "MIT", + "dependencies": { + "@tediousjs/connection-string": "^0.5.0", + "commander": "^11.0.0", + "debug": "^4.3.3", + "rfdc": "^1.3.0", + "tarn": "^3.0.2", + "tedious": "^18.2.1" + }, + "bin": { + "mssql": "bin/mssql" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/multer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.2.0.tgz", + "integrity": "sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.6.0", + "concat-stream": "^2.0.0", + "type-is": "^1.6.18" + }, + "engines": { + "node": ">= 10.16.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql2": { + "version": "3.23.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.23.2.tgz", + "integrity": "sha512-fxh3HpQ8vJtu/Mmnd4Xsur19jGjHGzRLMxptiDtOkbX7EVBgnafGSGDx1WGGVmJLClVh2LeeBMMo24IFv8wCyQ==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.2", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.7.2", + "long": "^5.3.2", + "lru.min": "^1.1.4", + "named-placeholders": "^1.1.6", + "sql-escaper": "^1.5.1" + }, + "engines": { + "node": ">= 8.0" + }, + "peerDependencies": { + "@types/node": ">= 8" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz", + "integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==", + "license": "MIT", + "dependencies": { + "lru.min": "^1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/native-duplexpair": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", + "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-addon-api": { + "version": "8.9.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.1.tgz", + "integrity": "sha512-4eUQWVPCUUUiBjLnHS3cXWeC6ryoPUc0U3rP7IuzapoGbzMqd/r6KKO0clr0b+snQhsrueFEhCZDdK+LK7hxKg==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/raw-body/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rndm": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz", + "integrity": "sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==", + "license": "MIT" + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT", + "optional": true + }, + "node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/send/node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/sql-escaper": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sql-escaper/-/sql-escaper-1.5.1.tgz", + "integrity": "sha512-4toX5E1fQbBrpfXidaHnF0669nkAdETeIPTs2SUjxxD7RRIs9ICG4gtpmfc68JCEKehsdwLFqBu9VlQqZ1P1gg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=2.0.0", + "node": ">=12.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/mysqljs/sql-escaper?sponsor=1" + } + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/tarn": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.1.2.tgz", + "integrity": "sha512-3RTvqKZcK/17jnJ8rMKFXbyNogywTs1z0gVPPwFsJGX46rkmUHOdIaSQ/aVO1rS7nH+soiXiWk7rvUXxndm8Dg==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tedious": { + "version": "18.6.2", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-18.6.2.tgz", + "integrity": "sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg==", + "license": "MIT", + "dependencies": { + "@azure/core-auth": "^1.7.2", + "@azure/identity": "^4.2.1", + "@azure/keyvault-keys": "^4.4.0", + "@js-joda/core": "^5.6.1", + "@types/node": ">=18", + "bl": "^6.0.11", + "iconv-lite": "^0.6.3", + "js-md4": "^0.3.2", + "native-duplexpair": "^1.0.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tedious/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/undici-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.21.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.2.tgz", + "integrity": "sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/admin-server1/package.json b/admin-server1/package.json new file mode 100644 index 0000000..96d8f75 --- /dev/null +++ b/admin-server1/package.json @@ -0,0 +1,36 @@ +{ + "name": "admin-server", + "version": "1.0.0", + "main": "main.js", + "scripts": { + "start": "node server.js", + "electron": "electron .", + "electron-dev": "set NODE_ENV=development&& electron .", + "postinstall": "electron-builder install-app-deps", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "axios": "^1.10.0", + "bcrypt": "^6.0.0", + "cors": "^2.8.5", + "csurf": "^1.11.0", + "dompurify": "^3.2.6", + "dotenv": "^17.2.1", + "electron": "^37.0.0", + "express": "^5.1.0", + "express-mysql-session": "^3.0.3", + "express-rate-limit": "^8.0.1", + "express-session": "^1.18.1", + "fs-extra": "^11.3.0", + "morgan": "^1.10.0", + "mssql": "^11.0.1", + "multer": "^2.0.1", + "mysql2": "^3.14.2", + "quill": "^2.0.3", + "ws": "^8.18.3" + } +} diff --git a/admin-server1/public/app.js b/admin-server1/public/app.js new file mode 100644 index 0000000..ecefdfe --- /dev/null +++ b/admin-server1/public/app.js @@ -0,0 +1,805 @@ +document.addEventListener('DOMContentLoaded', () => { + const statusElement = document.getElementById('server-status'); + const refreshBtn = document.getElementById('refresh-status-btn'); + const logsElement = document.getElementById('logs-content'); + const configForm = document.getElementById('config-form'); + const payslipsPathInput = document.getElementById('payslipsPath'); + const configStatus = document.getElementById('config-status'); + const browseBtn = document.getElementById('browse-btn'); + const dbStatusElement = document.getElementById('db-status'); + const checkDbBtn = document.getElementById('check-db-btn'); + const refreshLogsBtn = document.getElementById('refresh-logs-btn'); + const clearLogsBtn = document.getElementById('clear-logs-btn'); + const adminDbStatusEl = document.getElementById('admin-db-status'); + const adminDbMessageEl = document.getElementById('admin-db-message'); + const backendDbStatusEl = document.getElementById('backend-db-status'); + const backendDbMessageEl = document.getElementById('backend-db-message'); + const pingBtn = document.getElementById('ping-btn'); + const pingStopBtn = document.getElementById('ping-stop-btn'); + const pingClearBtn = document.getElementById('ping-clear-btn'); + const pingIpInput = document.getElementById('ping-ip'); + const pingOutputEl = document.getElementById('ping-output'); + let ws; + + const loginForm = document.getElementById('login-form'); + if (loginForm) { + loginForm.addEventListener('submit', async (e) => { + e.preventDefault(); + const password = loginForm.elements['password'].value; + try { + const response = await fetch('/api/auth', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password }) + }); + if (response.ok) { + window.location.href = '/'; + } else { + alert('Неверный пароль'); + } + } catch (err) { + alert('Ошибка авторизации'); + } + }); + } + + function fetchStatus() { + fetch('/api/status') + .then(response => response.json()) + .then(data => { + if (data.status === 'online') { + statusElement.textContent = 'Онлайн'; + statusElement.style.color = 'green'; + } else { + statusElement.textContent = 'Оффлайн'; + statusElement.style.color = 'red'; + } + }) + .catch(err => { + console.error('Ошибка при получении статуса:', err); + statusElement.textContent = 'Ошибка'; + statusElement.style.color = 'orange'; + }); + } + + refreshBtn.addEventListener('click', fetchStatus); + function fetchLogs() { + logsElement.textContent = 'загрузка...'; + fetch('/api/logs') + .then(response => { + if (!response.ok) throw new Error('Не удалось загрузить логи'); + return response.text(); + }) + .then(data => { + logsElement.textContent = data || 'Лог-файл пуст.'; + }) + .catch(err => { + logsElement.textContent = `Ошибка при загрузке логов: ${err.message}`; + logsElement.style.color = '#ff6b6b'; + }); + } + function fetchConfig() { + fetch('/api/config') + .then(response => response.json()) + .then(config => { + payslipsPathInput.value = config.payslipsPath; + }) + .catch(err => { + console.error('Ошибка при получении конфигурации:', err); + configStatus.textContent = 'Не удалось загрузить конфигурацию.'; + configStatus.style.color = 'red'; + }); + } + +configForm.addEventListener('submit', (e) => { + e.preventDefault(); + const newConfig = { + payslipsPath: payslipsPathInput.value + }; + + apiFetch('/api/config', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify(newConfig) + }) + .then(response => response.json()) + .then(data => { + configStatus.textContent = 'Конфигурация успешно сохранена!'; + configStatus.style.color = 'green'; + setTimeout(() => { configStatus.textContent = ''; }, 3000); + }) + .catch(err => { + console.error('Ошибка при сохранении конфигурации:', err); + configStatus.textContent = 'Ошибка при сохранении.'; + configStatus.style.color = 'red'; + }); +}); + browseBtn.addEventListener('click', async () => { + try { + const response = await fetch('/api/browse'); + if (response.ok) { + const data = await response.json(); + payslipsPathInput.value = data.path; + } else { + console.info('Folder selection was canceled.'); + } + } catch (error) { + console.error('Error opening folder dialog:', error); + alert('Не удалось открыть диалог выбора папки.'); + } + }); + + function renderStatus(element, messageEl, data) { + messageEl.textContent = data.message; + if (data.status === 'online') { + element.textContent = 'Онлайн'; + element.style.color = 'green'; + } else { + element.textContent = 'Оффлайн'; + element.style.color = 'red'; + } + } + function checkDbStatus() { + adminDbStatusEl.textContent = 'проверка...'; + backendDbStatusEl.textContent = 'проверка...'; + adminDbMessageEl.textContent = ''; + backendDbMessageEl.textContent = ''; + adminDbStatusEl.style.color = '#333'; + backendDbStatusEl.style.color = '#333'; + + fetch('/api/health/check-db') + .then(response => response.json()) + .then(data => { + renderStatus(adminDbStatusEl, adminDbMessageEl, data.adminToDb); + renderStatus(backendDbStatusEl, backendDbMessageEl, data.backendToDb); + }) + .catch(err => { + console.error('Ошибка при проверке статуса БД:', err); + adminDbStatusEl.textContent = 'Ошибка'; + adminDbStatusEl.style.color = 'orange'; + backendDbStatusEl.textContent = 'Ошибка'; + backendDbStatusEl.style.color = 'orange'; + }); + } + + checkDbBtn.addEventListener('click', checkDbStatus); + + function clearLogs() { + if (!confirm('Это действие удалит лог-файл полностью и навсегда. Вы уверены?')) { + return; + } + fetch('/api/logs/clear', { method: 'POST' }) + .then(response => { + if (response.ok) { + fetchLogs(); + } else { + alert('Не удалось очистить логи.'); + } + }) + .catch(err => { + console.error('Ошибка при очистке логов:', err); + alert('Произошла ошибка при очистке логов.'); + }); + } + + refreshLogsBtn.addEventListener('click', fetchLogs); + clearLogsBtn.addEventListener('click', clearLogs); + + function doPing() { + const ip = pingIpInput.value.trim(); + if (!ip) { + pingOutputEl.textContent = 'Пожалуйста, введите IP-адрес.'; + return; + } + if (ws) { + ws.close(); + } + const wsProtocol = window.location.protocol === 'https:' ? 'wss' : 'ws'; + ws = new WebSocket(`${wsProtocol}://${window.location.host}`); + + ws.onopen = () => { + pingOutputEl.textContent = ''; + pingBtn.disabled = true; + pingStopBtn.disabled = false; + ws.send(JSON.stringify({ type: 'ping', ip })); + }; + + ws.onmessage = (event) => { + const message = JSON.parse(event.data); + pingOutputEl.textContent += message.data; + pingOutputEl.scrollTop = pingOutputEl.scrollHeight; + }; + + ws.onerror = (error) => { + console.error('WebSocket Error:', error); + pingOutputEl.textContent += '\nОшибка WebSocket соединения.'; + }; + + ws.onclose = () => { + console.info('WebSocket connection closed'); + pingBtn.disabled = false; + pingStopBtn.disabled = true; + ws = null; + }; + } + + function stopPing() { + if (ws) { + ws.close(); + } + } + + function clearPingOutput() { + pingOutputEl.textContent = ''; + } + pingBtn.addEventListener('click', doPing); + pingStopBtn.addEventListener('click', stopPing); + pingClearBtn.addEventListener('click', clearPingOutput); + + const cardLogsElement = document.getElementById('card-logs-content'); + const refreshCardLogsBtn = document.getElementById('refresh-card-logs-btn'); + + function fetchCardLogs() { + cardLogsElement.textContent = 'загрузка...'; + fetch('/api/card/card-logs') + .then(response => { + if (!response.ok) throw new Error('Не удалось загрузить логи считывателя'); + return response.text(); + }) + .then(data => { + cardLogsElement.textContent = data || 'Лог-файл пуст.'; + }) + .catch(err => { + cardLogsElement.textContent = `Ошибка при загрузке логов: ${err.message}`; + cardLogsElement.style.color = '#ff6b6b'; + }); + } + refreshCardLogsBtn.addEventListener('click', fetchCardLogs); + + // --- ТАБЫ --- + const tabMainBtn = document.getElementById('tab-main'); + const tabSettingsBtn = document.getElementById('tab-settings'); + const tabMonitoringBtn = document.getElementById('tab-monitoring'); + const mainTab = document.getElementById('main-tab'); + const settingsTab = document.getElementById('settings-tab'); + const monitoringTab = document.getElementById('monitoring-tab'); + + function showTab(tab) { + mainTab.style.display = 'none'; + settingsTab.style.display = 'none'; + monitoringTab.style.display = 'none'; + tabMainBtn.classList.remove('active'); + tabSettingsBtn.classList.remove('active'); + tabMonitoringBtn.classList.remove('active'); + + if (tab === 'main') { + mainTab.style.display = ''; + tabMainBtn.classList.add('active'); + } else if (tab === 'settings') { + settingsTab.style.display = ''; + tabSettingsBtn.classList.add('active'); + initSettingsTab(); + } else if (tab === 'monitoring') { + monitoringTab.style.display = ''; + tabMonitoringBtn.classList.add('active'); + initMonitoringTab(); + } + } + tabMainBtn.addEventListener('click', () => showTab('main')); + tabSettingsBtn.addEventListener('click', () => showTab('settings')); + tabMonitoringBtn.addEventListener('click', () => showTab('monitoring')); + + // --- TOAST --- + function showToast(message, type = 'success') { + const container = document.getElementById('toast-container'); + const toast = document.createElement('div'); + toast.className = 'toast toast-' + type; + toast.textContent = message; + container.appendChild(toast); + setTimeout(() => { + toast.style.opacity = '0'; + setTimeout(() => container.removeChild(toast), 300); + }, 3000); + } + + // --- CSRF TOKEN --- + let csrfToken = null; + async function fetchCsrfToken() { + try { + const res = await fetch('/moders/csrf-token', { credentials: 'include' }); + if (res.ok) { + const data = await res.json(); + csrfToken = data.csrfToken; + } + } catch (e) { csrfToken = null; } + } + // Обёртка для fetch с CSRF и credentials + async function apiFetch(url, options = {}) { + if (!options.headers) options.headers = {}; + if (['POST','PUT','DELETE'].includes((options.method||'GET').toUpperCase())) { + if (!csrfToken) await fetchCsrfToken(); + options.headers['X-CSRF-Token'] = csrfToken; + } + options.credentials = 'include'; + return fetch(url, options); + } + + // --- Модальное окно подтверждения --- + const confirmModal = document.getElementById('confirm-modal'); + const confirmModalText = document.getElementById('confirm-modal-text'); + const confirmModalYes = document.getElementById('confirm-modal-yes'); + const confirmModalNo = document.getElementById('confirm-modal-no'); + + function showConfirm(text, onConfirm) { + confirmModalText.textContent = text; + confirmModal.style.display = 'flex'; + + const yesListener = () => { + onConfirm(); + closeConfirm(); + }; + + const closeConfirm = () => { + confirmModal.style.display = 'none'; + confirmModalYes.removeEventListener('click', yesListener); + confirmModalNo.removeEventListener('click', closeConfirm); + } + + confirmModalYes.addEventListener('click', yesListener); + confirmModalNo.addEventListener('click', closeConfirm); + } + + + // --- ВКЛАДКА МОНИТОРИНГА --- + let monitoringInitialized = false; + let allMonitoringEvents = []; // Кэш для всех событий + + async function initMonitoringTab() { + if (monitoringInitialized) return; + monitoringInitialized = true; + + const tableBody = document.querySelector('#monitoring-log-table tbody'); + const levelFilter = document.getElementById('log-level-filter'); + const sourceFilter = document.getElementById('log-source-filter'); + const refreshBtn = document.getElementById('refresh-monitoring-btn'); + + async function loadMonitoringLogs() { + tableBody.innerHTML = 'Загрузка...'; + try { + const res = await apiFetch('/api/monitoring/logs'); + if (!res.ok) throw new Error('Failed to fetch logs'); + + allMonitoringEvents = await res.json(); + renderTable(); + + } catch (e) { + tableBody.innerHTML = 'Ошибка загрузки логов.'; + console.error('Error loading monitoring logs:', e); + } + } + + function renderTable() { + const level = levelFilter.value; + const source = sourceFilter.value; + + const filteredEvents = allMonitoringEvents.filter(event => { + const levelMatch = (level === 'all') || (event.level === level); + const sourceMatch = (source === 'all') || (event.source === source); + return levelMatch && sourceMatch; + }); + + tableBody.innerHTML = ''; + if (filteredEvents.length === 0) { + tableBody.innerHTML = 'Нет событий для отображения.'; + return; + } + + filteredEvents.forEach(event => { + const tr = document.createElement('tr'); + tr.className = `log-level-${event.level.toLowerCase()}`; + tr.innerHTML = ` + ${new Date(event.timestamp).toLocaleString()} + ${event.level} + ${event.source} + ${event.message} + `; + tableBody.appendChild(tr); + }); + } + + levelFilter.addEventListener('change', renderTable); + sourceFilter.addEventListener('change', renderTable); + refreshBtn.addEventListener('click', loadMonitoringLogs); + + loadMonitoringLogs(); + } + + + // --- НАСТРОЙКИ: инициализация вкладки --- + let settingsInitialized = false; + + async function initSettingsTab() { + if(settingsInitialized) return; + settingsInitialized = true; + + initServerParamsSection(); + initDbSection(); + initCorsSection(); + initModersSection(); + + settingsTab.addEventListener('click', (e) => { + if (e.target.dataset.action === 'edit-pass') { + const targetId = e.target.dataset.target; + const input = document.getElementById(targetId); + input.readOnly = false; + input.value = ''; + input.placeholder = 'Введите новый пароль...'; + input.focus(); + e.target.remove(); + } + }); + } + + async function initServerParamsSection() { + // Загрузка текущих значений + try { + const results = await Promise.allSettled([ + apiFetch('/api/settings/admin-server'), + apiFetch('/api/settings/backend-server') + ]); + + const adminResult = results[0]; + if (adminResult.status === 'fulfilled') { + const adminData = await adminResult.value.json(); + document.getElementById('admin-port').value = adminData.PORT || ''; + document.getElementById('admin-url').value = adminData.ADMIN_URL || ''; + } else { + console.error('Failed to load admin-server settings:', adminResult.reason); + } + + const backendResult = results[1]; + if (backendResult.status === 'fulfilled') { + const backendData = await backendResult.value.json(); + document.getElementById('backend-host').value = backendData.host || ''; + document.getElementById('backend-port').value = backendData.port || ''; + } else { + console.error('Failed to load backend-server settings:', backendResult.reason); + document.getElementById('server-params-status').textContent += ' Ошибка загрузки параметров Backend.'; + } + + } catch (e) { + document.getElementById('server-params-status').textContent = 'Критическая ошибка загрузки параметров'; + document.getElementById('server-params-status').style.color = 'red'; + } + // Обработка сохранения + document.getElementById('server-params-form').addEventListener('submit', async (e) => { + e.preventDefault(); + const PORT = document.getElementById('admin-port').value; + const ADMIN_URL = document.getElementById('admin-url').value; + const host = document.getElementById('backend-host').value; + const port = document.getElementById('backend-port').value; + const statusEl = document.getElementById('server-params-status'); + statusEl.textContent = ''; + try { + const [adminRes, backendRes] = await Promise.all([ + apiFetch('/api/settings/admin-server', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ PORT, ADMIN_URL }) + }), + apiFetch('/api/settings/backend-server', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ host, port }) + }) + ]); + if (adminRes.ok && backendRes.ok) { + statusEl.innerHTML = 'Параметры успешно сохранены.
    Требуется перезапуск обоих серверов для применения!'; + statusEl.style.color = 'green'; + showToast('Параметры успешно сохранены', 'success'); + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + } + + function initDbSection() { + async function loadMysql() { + try { + const res = await apiFetch('/api/settings/mysql'); + const data = await res.json(); + document.getElementById('mysql-host').value = data.MYSQL_HOST || ''; + document.getElementById('mysql-port').value = data.MYSQL_PORT || ''; + document.getElementById('mysql-user').value = data.MYSQL_USER || ''; + + const passWrapper = document.getElementById('mysql-pass').closest('.password-wrapper'); + passWrapper.innerHTML = ` + + + `; + if (data.MYSQL_PASSWORD) { + passWrapper.querySelector('input').placeholder = '********'; + } + + document.getElementById('mysql-db').value = data.MYSQL_DATABASE || ''; + } catch (e) { + document.getElementById('mysql-status').textContent = 'Ошибка загрузки'; + document.getElementById('mysql-status').style.color = 'red'; + } + } + loadMysql(); + document.getElementById('mysql-form').addEventListener('submit', async (e) => { + e.preventDefault(); + + const payload = { + MYSQL_HOST: document.getElementById('mysql-host').value, + MYSQL_PORT: document.getElementById('mysql-port').value, + MYSQL_USER: document.getElementById('mysql-user').value, + MYSQL_DATABASE: document.getElementById('mysql-db').value + }; + const passInput = document.getElementById('mysql-pass'); + if (!passInput.readOnly) { + payload.MYSQL_PASSWORD = passInput.value; + } + + const statusEl = document.getElementById('mysql-status'); + statusEl.textContent = ''; + try { + const res = await apiFetch('/api/settings/mysql', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(payload) + }); + if (res.ok) { + statusEl.innerHTML = 'Сохранено.
    Требуется перезапуск Admin-server для применения!'; + statusEl.style.color = 'green'; + showToast('Сохранено', 'success'); + loadMysql(); // Перезагружаем секцию, чтобы сбросить поле пароля + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + } + + function initCorsSection() { + // --- CORS --- + let allowedOrigins = []; + async function loadCors() { + const list = document.getElementById('cors-list'); + list.innerHTML = '
  • Загрузка...
  • '; + try { + const res = await apiFetch('/api/settings/cors'); + const data = await res.json(); + allowedOrigins = Array.isArray(data.ALLOWED_ORIGINS) ? data.ALLOWED_ORIGINS : []; + renderCorsList(); + } catch (e) { + list.innerHTML = '
  • Ошибка загрузки
  • '; + } + } + const corsInput = document.getElementById('cors-new-origin'); + const corsAddBtn = document.getElementById('cors-add-btn'); + corsInput.addEventListener('input', () => { + const val = corsInput.value.trim(); + corsAddBtn.disabled = !val || allowedOrigins.includes(val); + }); + function renderCorsList() { + const list = document.getElementById('cors-list'); + list.innerHTML = ''; + if (!allowedOrigins.length) { + list.innerHTML = '
  • Нет origin
  • '; + return; + } + allowedOrigins.forEach((origin, idx) => { + const li = document.createElement('li'); + li.textContent = origin + ' '; + const delBtn = document.createElement('button'); + delBtn.textContent = 'Удалить'; + delBtn.className = 'btn-small'; + delBtn.addEventListener('click', () => { + allowedOrigins.splice(idx, 1); + renderCorsList(); + corsAddBtn.disabled = !corsInput.value.trim() || allowedOrigins.includes(corsInput.value.trim()); + }); + li.appendChild(delBtn); + list.appendChild(li); + }); + corsAddBtn.disabled = !corsInput.value.trim() || allowedOrigins.includes(corsInput.value.trim()); + } + loadCors(); + document.getElementById('cors-add-btn').addEventListener('click', () => { + const input = document.getElementById('cors-new-origin'); + const val = input.value.trim(); + if (val && !allowedOrigins.includes(val)) { + allowedOrigins.push(val); + input.value = ''; + renderCorsList(); + corsAddBtn.disabled = true; + } + }); + document.getElementById('cors-form').addEventListener('submit', async (e) => { + e.preventDefault(); + const statusEl = document.getElementById('cors-status'); + statusEl.textContent = ''; + try { + const res = await apiFetch('/api/settings/cors', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ ALLOWED_ORIGINS: allowedOrigins }) + }); + if (res.ok) { + statusEl.innerHTML = 'Сохранено.
    Требуется перезапуск Admin-server для применения!'; + statusEl.style.color = 'green'; + showToast('Сохранено', 'success'); + } else { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка сохранения'; + statusEl.style.color = 'red'; + showToast('Ошибка сохранения', 'error'); + } + }); + } + + function initModersSection() { + // --- МОДЕРАТОРЫ --- + async function loadModers() { + const tableBody = document.querySelector('#moders-table tbody'); + tableBody.innerHTML = 'Загрузка...'; + try { + const res = await apiFetch('/api/moders'); + const moders = await res.json(); + if (!Array.isArray(moders) || !moders.length) { + tableBody.innerHTML = 'Нет модераторов'; + return; + } + tableBody.innerHTML = ''; + for (const moder of moders) { + const tr = document.createElement('tr'); + tr.dataset.id = moder.id; + tr.innerHTML = `${moder.id}${moder.username}` + + `` + + ` ` + + `` + + ``; + tableBody.appendChild(tr); + } + } catch (e) { + tableBody.innerHTML = 'Ошибка загрузки'; + } + } + loadModers(); + // Добавление модератора + document.getElementById('add-moder-form').addEventListener('submit', async (e) => { + e.preventDefault(); + const username = document.getElementById('add-moder-username').value.trim(); + const password = document.getElementById('add-moder-password').value; + const statusEl = document.getElementById('add-moder-status'); + statusEl.textContent = ''; + if (!username || !password) { + statusEl.textContent = 'Заполните все поля'; + statusEl.style.color = 'red'; + return; + } + try { + const res = await apiFetch('/api/moders', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username, password }) + }); + if (res.ok) { + statusEl.textContent = 'Модератор добавлен'; + statusEl.style.color = 'green'; + document.getElementById('add-moder-form').reset(); + loadModers(); + showToast('Модератор добавлен', 'success'); + } else { + const data = await res.json(); + statusEl.textContent = data.message || 'Ошибка'; + statusEl.style.color = 'red'; + showToast(data.message || 'Ошибка', 'error'); + } + } catch (e) { + statusEl.textContent = 'Ошибка'; + statusEl.style.color = 'red'; + showToast('Ошибка', 'error'); + } + }); + // Действия: удалить/сменить пароль + document.getElementById('moders-table').addEventListener('click', async (e) => { + const btn = e.target.closest('button'); + if (!btn) return; + const id = btn.closest('tr').dataset.id; + const action = btn.getAttribute('data-action'); + if (action === 'delete') { + showConfirm('Удалить модератора?', async () => { + try { + const res = await apiFetch(`/api/moders/${id}`, { method: 'DELETE' }); + if (res.ok) { + loadModers(); + showToast('Модератор удален', 'success'); + } else { + showToast('Ошибка удаления', 'error'); + } + } catch (e) { + showToast('Ошибка удаления', 'error'); + } + }); + } else if (action === 'reset') { + const row = btn.closest('tr'); + const actionsCell = row.cells[2]; + + // Если мы уже в режиме редактирования, ничего не делаем + if (actionsCell.querySelector('input')) return; + + // Сохраняем оригинальные кнопки + const originalButtons = actionsCell.innerHTML; + + // Создаем поле ввода и кнопки + actionsCell.innerHTML = ` + + + + `; + + const input = actionsCell.querySelector('input'); + input.focus(); + + const saveBtn = actionsCell.querySelector('[data-action="save-pass"]'); + const cancelBtn = actionsCell.querySelector('[data-action="cancel-pass"]'); + + const handleSave = async () => { + const newPass = input.value; + if (!newPass || newPass.length < 4) { + showToast('Пароль должен быть не менее 4 символов', 'error'); + return; + } + + try { + const res = await apiFetch(`/api/moders/${id}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ password: newPass }) + }); + if (res.ok) { + showToast('Пароль обновлён', 'success'); + actionsCell.innerHTML = originalButtons; // Возвращаем кнопки + } else { + showToast('Ошибка смены пароля', 'error'); + } + } catch (e) { + showToast('Ошибка смены пароля', 'error'); + } + }; + + const handleCancel = () => { + actionsCell.innerHTML = originalButtons; + }; + + saveBtn.addEventListener('click', handleSave); + cancelBtn.addEventListener('click', handleCancel); + } + }); + } + + fetchStatus(); + fetchConfig(); +}); \ No newline at end of file diff --git a/admin-server1/public/editor.html b/admin-server1/public/editor.html new file mode 100644 index 0000000..01b4ff4 --- /dev/null +++ b/admin-server1/public/editor.html @@ -0,0 +1,69 @@ + + + + + + Модератор: наполнение вкладок + + + + + +
    +
    +

    Панель модератора

    +
    +

    Вход для модератора

    +
    +
    + + +
    +
    + + +
    + +

    +
    +
    + + + +
    + + + + \ No newline at end of file diff --git a/admin-server1/public/editor.js b/admin-server1/public/editor.js new file mode 100644 index 0000000..a22621e --- /dev/null +++ b/admin-server1/public/editor.js @@ -0,0 +1,190 @@ +document.addEventListener('DOMContentLoaded', () => { + const loginSection = document.getElementById('login-section'); + const editorSection = document.getElementById('editor-section'); + const loginForm = document.getElementById('moder-login-form'); + const loginError = document.getElementById('login-error'); + const tabBtns = document.querySelectorAll('.tab-btn'); + const addBlockBtn = document.getElementById('add-block-btn'); + const blocksList = document.getElementById('blocks-list'); + const logoutBtn = document.getElementById('logout-btn'); + loginForm.addEventListener('submit', async (e) => { + e.preventDefault(); + loginError.textContent = ''; + const username = loginForm.username.value.trim(); + const password = loginForm.password.value; + try { + const res = await fetch('/moders/moder-login', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ username, password }) + }); + if (res.ok) { + loginSection.style.display = 'none'; + editorSection.style.display = ''; + loadBlocks(currentTab); + } else { + const data = await res.json(); + loginError.textContent = data.message || 'Ошибка входа'; + } + } catch (err) { + loginError.textContent = 'Ошибка сервера'; + } + }); + if (logoutBtn) { + logoutBtn.onclick = async () => { + await fetch('/moders/moder-logout'); + editorSection.style.display = 'none'; + loginSection.style.display = ''; + showNotify('Вы вышли из системы', 'success'); + }; + } + tabBtns.forEach(btn => { + btn.addEventListener('click', () => { + tabBtns.forEach(b => b.classList.remove('active')); + btn.classList.add('active'); + currentTab = btn.dataset.tab; + loadBlocks(currentTab); + }); + }); + function loadBlocks(tab) { + fetch(`/moders/content/${tab}`) + .then(res => res.json()) + .then(data => { + blocksList.innerHTML = ''; + if (!Array.isArray(data) || !data.length) { + blocksList.innerHTML = '

    Нет блоков

    '; + return; + } + data.forEach(block => { + const div = document.createElement('div'); + div.className = 'content-block'; + div.innerHTML = `
    ${DOMPurify.sanitize(block.content)}
    `; + const editBtn = document.createElement('button'); + editBtn.textContent = 'Редактировать'; + editBtn.onclick = () => openEditModal(block); + const delBtn = document.createElement('button'); + delBtn.textContent = 'Удалить'; + delBtn.onclick = async () => { + if (confirm('Удалить блок?')) { + await fetch(`/moders/content/${tab}/${block.id}`, { method: 'DELETE' }); + showNotify('Блок удалён', 'success'); + loadBlocks(tab); + } + }; + div.appendChild(editBtn); + div.appendChild(delBtn); + blocksList.appendChild(div); + }); + }); + } + const editModal = document.getElementById('edit-modal'); + const editModalClose = document.getElementById('edit-modal-close'); + const editBlockForm = document.getElementById('edit-block-form'); + const editBlockId = document.getElementById('edit-block-id'); + const editModalTitle = document.getElementById('edit-modal-title'); + let editQuill; + let currentTab = 'info'; + let editingBlockId = null; + let originalContent = ''; + function showNotify(msg, type = 'success') { + const notify = document.getElementById('notify'); + notify.textContent = msg; + notify.className = 'show ' + type; + setTimeout(() => { notify.className = ''; }, 2200); + } + editQuill = new Quill('#edit-quill-editor', { + theme: 'snow', + modules: { + toolbar: [ + [{ header: [1, 2, 3, false] }], + ['bold', 'italic', 'underline', 'strike'], + [{ 'align': [] }], + [{ 'color': [] }, { 'background': [] }], + [{ 'list': 'ordered'}, { 'list': 'bullet' }], + ['blockquote', 'code-block'], + ['link', 'image', 'video'], + ['clean'] + ] + } + }); + function openEditModal(block) { + editingBlockId = block ? block.id : null; + editBlockId.value = block ? block.id : ''; + editModalTitle.textContent = block ? 'Редактировать блок' : 'Добавить блок'; + editQuill.root.innerHTML = block ? block.content : ''; + document.getElementById('edit-block-preview').innerHTML = block ? DOMPurify.sanitize(block.content) : ''; + originalContent = block ? block.content : ''; + editModal.style.display = 'block'; + } + editQuill.on('text-change', () => { + document.getElementById('edit-block-preview').innerHTML = DOMPurify.sanitize(editQuill.root.innerHTML); + }); + function tryCloseEditModal() { + const currentContent = editQuill.root.innerHTML; + if (currentContent !== originalContent) { + document.getElementById('confirm-modal').style.display = 'flex'; + const yesBtn = document.getElementById('confirm-close-yes'); + const noBtn = document.getElementById('confirm-close-no'); + yesBtn.onclick = function() { + document.getElementById('confirm-modal').style.display = 'none'; + editModal.style.display = 'none'; + }; + noBtn.onclick = function() { + document.getElementById('confirm-modal').style.display = 'none'; + }; + return; + } + editModal.style.display = 'none'; + } + editModalClose.onclick = tryCloseEditModal; + window.onclick = (event) => { + if (event.target === editModal) tryCloseEditModal(); + }; + addBlockBtn.onclick = () => openEditModal(null); + editBlockForm.addEventListener('submit', async (e) => { + e.preventDefault(); + const content = DOMPurify.sanitize(editQuill.root.innerHTML.trim()); + if (!content || content === '


    ') return; + if (editingBlockId) { + await fetch(`/moders/content/${currentTab}/${editingBlockId}`, { + method: 'PUT', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ type: 'text', content }) + }); + showNotify('Блок обновлён', 'success'); + } else { + await fetch(`/moders/content/${currentTab}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ type: 'text', content }) + }); + showNotify('Блок добавлен', 'success'); + } + editModal.style.display = 'none'; + loadBlocks(currentTab); + }); + fetch('/moders/check-session', { credentials: 'include' }).then(res => { + if (res.ok) { + loginSection.style.display = 'none'; + editorSection.style.display = ''; + loadBlocks(currentTab); + } else { + loginSection.style.display = ''; + editorSection.style.display = 'none'; + } + }); + + let csrfToken = ''; + fetch('/moders/csrf-token').then(res => res.json()).then(data => { + csrfToken = data.csrfToken; + }); + + const originalFetch = window.fetch; + window.fetch = function(url, options = {}) { + if (options && options.method && ['POST','PUT','DELETE'].includes(options.method.toUpperCase())) { + options.headers = options.headers || {}; + options.headers['x-csrf-token'] = csrfToken; + } + return originalFetch(url, options); + }; +}); \ No newline at end of file diff --git a/admin-server1/public/index.html b/admin-server1/public/index.html new file mode 100644 index 0000000..91503e4 --- /dev/null +++ b/admin-server1/public/index.html @@ -0,0 +1,188 @@ + + + + + + Панель администратора + + + +
    +
    +

    Панель администратора

    +
    + + + +
    +
    +
    +

    Статус сервера: загрузка...

    + +
    + +
    +
    +

    Админ -> БД: неизвестно

    + +
    +
    +

    Программа -> БД: неизвестно

    + +
    + +
    + +
    +

    Сетевая диагностика (Ping)

    +
    + + + + +
    +
    
    +            
    + +
    +

    Логи приложения

    +
    + + +
    +
    Нажмите "Обновить логи" для просмотра
    +
    + +
    +

    Логи считывателя

    +
    + +
    +
    +                
    Нажмите "Обновить логи считывателя" для просмотра
    +
    +
    + +
    +

    Конфигурация

    +
    +
    + +
    + + +
    +
    + +
    +

    +
    +
    + + + + +
    + + + + + + + \ No newline at end of file diff --git a/admin-server1/public/login.html b/admin-server1/public/login.html new file mode 100644 index 0000000..11effd2 --- /dev/null +++ b/admin-server1/public/login.html @@ -0,0 +1,39 @@ + + + + + + Вход в панель администратора + + + +
    +

    Вход

    +
    +
    + + +
    + +
    +

    +
    + + + \ No newline at end of file diff --git a/admin-server1/public/style.css b/admin-server1/public/style.css new file mode 100644 index 0000000..295ca6a --- /dev/null +++ b/admin-server1/public/style.css @@ -0,0 +1,557 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + background-color: #f4f7f9; + color: #333; + margin: 0; + padding: 20px; +} + +.container { + max-width: 80%; + margin: 0 auto; + background: #fff; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +h1 { + color: #0056b3; +} + +#status { + display: flex; + align-items: center; + gap: 15px; +} + +#refresh-status-btn { + padding: 5px 10px; + font-size: 14px; +} + +#server-status { + font-weight: bold; +} + +.logs-container { + margin-top: 20px; +} + +.log-controls { + margin-bottom: 10px; + display: flex; + gap: 10px; +} + +.ql-align-center { text-align: center; } +.ql-align-right { text-align: right; } +.ql-align-justify { text-align: justify; } + +#logs-content { + background-color: #2d2d2d; + color: #f1f1f1; + padding: 15px; + border-radius: 5px; + white-space: pre-wrap; /* Перенос строк */ + word-wrap: break-word; /* Перенос длинных строк */ + max-height: 400px; + overflow-y: auto; +} + +.config-container { + margin-top: 20px; +} + +.form-group { + margin-bottom: 15px; +} + +.form-group label { + display: block; + margin-bottom: 5px; +} + +.form-group input { + width: 100%; + padding: 8px; + box-sizing: border-box; + border: 1px solid #ccc; + border-radius: 4px; +} + +.input-with-button { + display: flex; + gap: 5px; +} + +.input-with-button input { + flex-grow: 1; /* Поле ввода займет все доступное место */ +} + +button { + background-color: #0056b3; + color: white; + padding: 10px 15px; + border: none; + border-radius: 4px; + cursor: pointer; +} + +button:hover { + background-color: #004494; +} + +#db-status-container { + display: flex; + align-items: flex-start; /* Выравнивание по верху */ + gap: 20px; + margin-top: 10px; + padding: 10px; + border: 1px solid #eee; + border-radius: 5px; +} + +#db-status-container p { + margin: 0 0 5px 0; +} + +#db-status-container small { + color: #666; + font-style: italic; +} + +#refresh-status-btn, .btn-small { + padding: 5px 10px; + font-size: 14px; +} + +.network-diag-container { + margin-top: 20px; +} + +.ping-controls { + display: inline-flex; + gap: 10px; + margin-bottom: 10px; +} + +.ping-controls input { + flex-grow: 1; +} + +#ping-output { + background-color: #2d2d2d; + color: #f1f1f1; + padding: 15px; + border-radius: 5px; + white-space: pre-wrap; + word-wrap: break-word; + min-height: 50px; +} + +/* --- Карточки блоков --- */ +.content-block { + background: #f9f9fb; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0,0,0,0.07); + padding: 18px 18px 12px 18px; + margin-bottom: 18px; + position: relative; + transition: box-shadow 0.2s; +} +.content-block:hover { + box-shadow: 0 4px 16px rgba(0,0,0,0.13); +} +.block-text, .block-image, .block-video { + margin-bottom: 10px; +} +.block-image img, .block-video video { + max-width: 100%; + border-radius: 6px; + box-shadow: 0 1px 4px rgba(0,0,0,0.08); +} + +/* --- Кнопки --- */ +button, .btn-small, .tab-btn { + background: #0056b3; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 16px; + margin-right: 8px; + font-size: 15px; + cursor: pointer; + transition: background 0.15s, box-shadow 0.15s; + box-shadow: 0 1px 2px rgba(0,0,0,0.04); +} +button:hover, .btn-small:hover, .tab-btn:hover { + background: #003e80; +} +button:active, .btn-small:active, .tab-btn:active { + background: #002b5c; +} +.tab-btn.active { + background: #0074e4; + font-weight: bold; +} + +/* --- Модальное окно --- */ +.modal { + display: none; /* Скрыто по умолчанию */ + position: fixed; /* Остается на месте при скролле */ + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; /* Включает скролл, если нужно */ + background-color: rgba(0,0,0,0.5); /* Полупрозрачный фон */ + justify-content: center; + align-items: center; +} + +.modal-content { + background-color: #fefefe; + margin: auto; + padding: 20px; + border: 1px solid #888; + width: 80%; + border-radius: 8px; +} + +.monitoring-filters { + margin-bottom: 15px; +} + +.monitoring-filters label { + margin-right: 20px; +} + +.log-level-label { + padding: 2px 6px; + border-radius: 4px; + color: white; + font-weight: bold; + font-size: 0.9em; +} + +tr.log-level-error { + background-color: #ffdddd; +} +tr.log-level-error .log-level-label { + background-color: #d63031; +} + +tr.log-level-warn { + background-color: #fff3cd; +} +tr.log-level-warn .log-level-label { + background-color: #fdcb6e; +} + + +.modal-buttons { + margin-top: 20px; +} + +.modal-buttons button { + margin: 0 10px; + padding: 10px 20px; +} + +.close { + position: absolute; + right: 18px; + top: 12px; + font-size: 2rem; + color: #888; + cursor: pointer; + font-weight: bold; + transition: color 0.15s; +} +.close:hover { color: #0056b3; } +@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } +@keyframes slideDown { from { transform: translateY(-30px); opacity: 0; } to { transform: none; opacity: 1; } } + +/* --- Уведомления --- */ +#notify { + position: fixed; + top: 24px; + right: 24px; + z-index: 2000; + min-width: 220px; + background: #fff; + color: #222; + border-radius: 7px; + box-shadow: 0 2px 12px rgba(0,0,0,0.13); + padding: 16px 22px; + font-size: 16px; + opacity: 0; + pointer-events: none; + transition: opacity 0.2s; +} +#notify.show { + opacity: 1; + pointer-events: auto; +} +#notify.error { + background: #ffeaea; + color: #b30000; + border: 1px solid #ffb3b3; +} +#notify.success { + background: #eaffea; + color: #1a7f1a; + border: 1px solid #b3ffb3; +} + +/* --- Формы --- */ +input[type="text"], input[type="password"], textarea, select { + border: 1.5px solid #b3c6e0; + border-radius: 5px; + padding: 8px 10px; + font-size: 15px; + margin-bottom: 8px; + width: 100%; + box-sizing: border-box; + transition: border 0.15s; +} +input[type="text"]:focus, input[type="password"]:focus, textarea:focus, select:focus { + border: 1.5px solid #0056b3; + outline: none; + background: #f4f8ff; +} + +/* --- Logout --- */ +#logout-btn { + background: #e74c3c; + float: right; + margin-top: 2px; + margin-bottom: 10px; + font-size: 15px; + padding: 7px 16px; +} +#logout-btn:hover { background: #c0392b; } + +/* Кнопка "Добавить блок" */ +#add-block-btn { + background: #0074e4; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + margin-bottom: 10px; + cursor: pointer; + transition: background 0.15s; +} +#add-block-btn:hover { background: #005bb5; } + +/* Кнопка "Редактировать" */ +.content-block button:nth-of-type(1) { + background: #ff9800; + color: #fff; + border: none; + border-radius: 5px; + padding: 6px 14px; + margin-right: 8px; + font-size: 15px; + cursor: pointer; + transition: background 0.15s; +} +.content-block button:nth-of-type(1):hover { background: #e65100; } + +/* Кнопка "Удалить" */ +.content-block button:nth-of-type(2) { + background: #e74c3c; + color: #fff; + border: none; + border-radius: 5px; + padding: 6px 14px; + font-size: 15px; + cursor: pointer; + transition: background 0.15s; +} +.content-block button:nth-of-type(2):hover { background: #b71c1c; } + +/* Кнопка "Сохранить" в модалке */ +#edit-block-form button[type="submit"] { + background: #43a047; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + margin-top: 10px; + cursor: pointer; + transition: background 0.15s; +} +#edit-block-form button[type="submit"]:hover { background: #2e7031; } + +/* --- Адаптивность --- */ +@media (max-width: 600px) { + .container { padding: 8px; } + .modal-content { min-width: 90vw; padding: 18px 8px; } + #notify { right: 8px; top: 8px; min-width: 120px; font-size: 14px; } +} + +#edit-block-preview { + max-width: 100%; + max-height: 45vh; /* Ограничение по высоте предпросмотра */ + overflow-y: auto; + overflow-x: hidden; + word-break: break-word; +} + +#confirm-modal .modal-content { + max-width: 400px; + padding: 10px 28px 24px 28px; + text-align: center; + border-radius: 12px; + box-shadow: 0 8px 32px rgba(0,0,0,0.22); +} +#confirm-modal h3 { + font-size: 1.15rem; + color: #222; + margin-bottom: 18px; +} +#confirm-close-yes { + background: #e74c3c; + color: #fff; + border: none; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + margin-right: 12px; + cursor: pointer; + transition: background 0.15s; +} +#confirm-close-yes:hover { background: #b71c1c; } +#confirm-close-no { + background: #f4f7f9; + color: #222; + border: 1.5px solid #b3c6e0; + border-radius: 5px; + padding: 8px 18px; + font-size: 16px; + cursor: pointer; + transition: background 0.15s; +} +#confirm-close-no:hover { background: #e0e7ef; } + +#toast-container { + position: fixed; + top: 30px; + right: 30px; + z-index: 9999; + display: flex; + flex-direction: column; + gap: 10px; +} +.toast { + visibility: hidden; + min-width: 250px; + max-width: 350px; + background: #333; + color: #fff; + padding: 14px 22px; + border-radius: 6px; + box-shadow: 0 2px 8px rgba(0,0,0,0.15); + font-size: 16px; + opacity: 0.97; + animation: fadein 0.3s, fadeout 0.3s 2.7s; + transition: opacity 0.3s; +} +.toast-success { background: #2ecc40; color: #fff; } +.toast-error { background: #ff4136; color: #fff; } +@keyframes fadein { from { opacity: 0; transform: translateY(-20px);} to { opacity: 0.97; transform: translateY(0);} } +@keyframes fadeout { from { opacity: 0.97; } to { opacity: 0; } } + +/* --- Настройки: секции и формы --- */ +#settings-tab > div { + margin-bottom: 32px; + padding: 18px 20px 16px 20px; + background: #f8fafc; + border-radius: 8px; + box-shadow: 0 1px 4px rgba(0,0,0,0.04); + border: 1px solid #e3e8ee; +} +#settings-tab h3 { margin-top: 0; } +fieldset { + border: 1px solid #bfc9d8; + border-radius: 6px; + margin-bottom: 12px; + padding: 12px 16px 10px 16px; + background: #fff; +} +legend { color: #0056b3; font-weight: 500; } +input[type="text"], input[type="password"], input[type="number"] { + padding: 7px 10px; + border: 1px solid #bfc9d8; + border-radius: 4px; + margin: 4px 0 10px 0; + width: 220px; + font-size: 15px; + background: #fafdff; + transition: border 0.2s; +} +input:focus { border: 1.5px solid #0056b3; outline: none; background: #fff; } +input:invalid { border: 1.5px solid #ff4136; background: #fff6f6; } +.form-error { color: #ff4136; font-size: 14px; margin: 2px 0 8px 0; } +.warning-text { + color: #ff8c00; /* DarkOrange */ +} +.btn-small { + background: #e3e8ee; + color: #0056b3; + border: none; + border-radius: 4px; + padding: 5px 12px; + font-size: 14px; + margin-left: 2px; + cursor: pointer; + transition: background 0.2s, color 0.2s; +} +.btn-small:hover { background: #0056b3; color: #fff; } +button[type="submit"] { + background: #2ecc40; + color: #fff; + border: none; + border-radius: 4px; + padding: 8px 18px; + font-size: 15px; + margin-top: 8px; + cursor: pointer; + transition: background 0.2s; +} +button[type="submit"]:hover { background: #27ae38; } +#cors-list li { margin-bottom: 6px; } +.moders-table { + width: 100%; + border-collapse: collapse; + margin-top: 12px; + background: #fff; +} +.moders-table th, .moders-table td { + border: 1px solid #e3e8ee; + padding: 7px 10px; + text-align: left; +} +.moders-table th { + background: #f4f7fa; + color: #0056b3; + font-weight: 500; +} +.moders-table tr:nth-child(even) { background: #fafdff; } +.moders-table tr:hover { background: #eaf3ff; } + +.moder-pass-input { + width: 100px; + margin-right: 5px; +} + +.password-wrapper { + display: inline-flex; + align-items: center; +} \ No newline at end of file diff --git a/admin-server1/routes/auth.js b/admin-server1/routes/auth.js new file mode 100644 index 0000000..0855cc1 --- /dev/null +++ b/admin-server1/routes/auth.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); +const authController = require('../controllers/authController'); +const csurf = require('csurf'); + +const csrfProtection = csurf({ cookie: false }); + +router.post('/', authController.login); + +module.exports = router; \ No newline at end of file diff --git a/admin-server1/routes/card.js b/admin-server1/routes/card.js new file mode 100644 index 0000000..1cd5533 --- /dev/null +++ b/admin-server1/routes/card.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const cardController = require('../controllers/cardController'); + +router.post('/card-event', cardController.cardEvent); +router.get('/card-logs', cardController.getCardLogs); + +module.exports = router; diff --git a/admin-server1/routes/health.js b/admin-server1/routes/health.js new file mode 100644 index 0000000..f615c5a --- /dev/null +++ b/admin-server1/routes/health.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const healthController = require('../controllers/healthController'); + +router.get('/check-db', healthController.checkDb); +router.get('/status', healthController.checkStatus); + +module.exports = router; \ No newline at end of file diff --git a/admin-server1/routes/logs.js b/admin-server1/routes/logs.js new file mode 100644 index 0000000..271360e --- /dev/null +++ b/admin-server1/routes/logs.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); // Сначала инициализируем router +const logsController = require('../controllers/logsController'); +const checkAuth = require('../middleware/checkAuth'); +console.log('Imported router:', router.toString()); + +router.get('/', checkAuth, logsController.getLogs); +router.post('/clear', checkAuth, logsController.clearLogs); + +module.exports = router; \ No newline at end of file diff --git a/admin-server1/routes/moders.js b/admin-server1/routes/moders.js new file mode 100644 index 0000000..4937f73 --- /dev/null +++ b/admin-server1/routes/moders.js @@ -0,0 +1,11 @@ +const express = require('express'); +const router = express.Router(); +const modersController = require('../controllers/modersController'); +const checkAuth = require('../middleware/checkAuth'); + +router.get('/', checkAuth, modersController.getModers); +router.post('/', checkAuth, modersController.addModer); +router.put('/:id', checkAuth, modersController.changePassword); +router.delete('/:id', checkAuth, modersController.deleteModer); + +module.exports = router; diff --git a/admin-server1/routes/monitoring.js b/admin-server1/routes/monitoring.js new file mode 100644 index 0000000..7f51d05 --- /dev/null +++ b/admin-server1/routes/monitoring.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const logsController = require('../controllers/logsController'); +const checkAuth = require('../middleware/checkAuth'); + +router.get('/logs', checkAuth, logsController.getMonitoringLogs); + +module.exports = router; \ No newline at end of file diff --git a/admin-server1/routes/settings.js b/admin-server1/routes/settings.js new file mode 100644 index 0000000..5f3e1c3 --- /dev/null +++ b/admin-server1/routes/settings.js @@ -0,0 +1,18 @@ +const express = require('express'); +const router = express.Router(); +const settingsController = require('../controllers/settingsController'); +const checkAuth = require('../middleware/checkAuth'); + +router.get('/mysql', checkAuth, settingsController.getMysqlSettings); +router.post('/mysql', checkAuth, settingsController.updateMysqlSettings); + +router.get('/cors', checkAuth, settingsController.getCorsSettings); +router.post('/cors', checkAuth, settingsController.updateCorsSettings); + +router.get('/admin-server', checkAuth, settingsController.getAdminServerSettings); +router.post('/admin-server', checkAuth, settingsController.updateAdminServerSettings); + +router.get('/backend-server', checkAuth, settingsController.getBackendServerSettings); +router.post('/backend-server', checkAuth, settingsController.updateBackendServerSettings); + +module.exports = router; diff --git a/admin-server1/server.js b/admin-server1/server.js new file mode 100644 index 0000000..b687b36 --- /dev/null +++ b/admin-server1/server.js @@ -0,0 +1,114 @@ +const fs = require('fs-extra'); +const cors = require('cors'); +const express = require('express'); +const morgan = require('morgan'); +const path = require('path'); +const session = require('express-session'); +require('dotenv').config({ path: path.join(__dirname, './config.env') }); +require('dotenv').config({ path: __dirname + '/moders/config.env' }); +const logger = require('./logger'); +const moderAuthRouter = require('./moders/routes/moderAuth'); +const moderContentRouter = require('./moders/routes/content'); +const authRouter = require('./routes/auth'); +const cardRouter = require('./routes/card'); +const logsRouter = require('./routes/logs'); +const settingsRouter = require('./routes/settings'); +const modersRouter = require('./routes/moders'); +const healthRouter = require('./routes/health'); +const monitoringRouter = require('./routes/monitoring'); +const setupWebSocket = require('./services/websocket'); +const cardController = require('./controllers/cardController'); +const app = express(); +const server = require('http').createServer(app); + +// Конфигурации +const corsConfig = require('./config/cors'); +const sessionConfig = require('./config/session'); + +// Middleware +app.use(cors(corsConfig)); +app.use(morgan('dev')); +app.use(express.json()); +app.use(session(sessionConfig(session))); +// Роуты, которые не требуют CSRF +app.use('/api/auth', authRouter); +app.use(require('./middleware/csrf')); +// Статические файлы +app.use('/login.html', express.static(path.join(__dirname, 'public', 'login.html'))); +app.use(express.static(path.join(__dirname, 'public'))); +app.use('/uploads', express.static(__dirname + '/uploads')); + +// Роуты +app.use('/api/card', cardRouter); +app.use('/api/logs', logsRouter); +app.use('/api/settings', settingsRouter); +app.use('/api/moders', modersRouter); +app.use('/api/health', healthRouter); +app.use('/api/monitoring', monitoringRouter); +app.use('/moders', moderAuthRouter); +app.use('/moders/content', moderContentRouter); +// Initialize card logs +(async () => { + try { + await cardController.initCardLogs(); + logger.info('Card logs initialized successfully'); + } catch (err) { + logger.error('Failed to initialize card logs:', err); + } +})(); + +// WebSocket +setupWebSocket(server); + +// Обработчик ошибок (должен быть последним!) +app.use(require('./middleware/errorHandler')); +app.get('/api/status', async (req, res) => { + try { + res.json({ status: 'online' }); // или другая логика проверки + } catch (err) { + res.status(500).json({ status: 'error', message: err.message }); + } +}); + +app.get('/api/config', async (req, res) => { + try { + const backendConfigPath = path.join(__dirname, '../backend/config.json'); + const backendConfig = await fs.readJson(backendConfigPath); + const config = { + payslipsPath: backendConfig.payslipsPath + }; + res.json(config); + } catch (err) { + logger.error('Ошибка чтения backend/config.json:', err); + res.status(500).json({ error: 'Ошибка загрузки конфигурации' }); + } +}); +// Добавьте рядом с существующим GET обработчиком +app.post('/api/config', async (req, res) => { + try { + const backendConfigPath = path.join(__dirname, '../backend/config.json'); + const currentConfig = await fs.readJson(backendConfigPath); + + // Обновляем только разрешенные поля + if (req.body.payslipsPath) { + currentConfig.payslipsPath = req.body.payslipsPath; + } + + // Сохраняем обновленный конфиг + await fs.writeJson(backendConfigPath, currentConfig, { spaces: 4 }); + + res.json({ + success: true, + message: 'Конфигурация успешно обновлена' + }); + } catch (err) { + logger.error('Ошибка сохранения конфигурации:', err); + res.status(500).json({ + error: 'Ошибка сохранения конфигурации', + details: err.message + }); + } +}); +server.listen(process.env.PORT || 3005, () => { + logger.info(`Server running on ${process.env.ADMIN_URL}`); +}); \ No newline at end of file diff --git a/admin-server1/services/websocket.js b/admin-server1/services/websocket.js new file mode 100644 index 0000000..0d1ba20 --- /dev/null +++ b/admin-server1/services/websocket.js @@ -0,0 +1,93 @@ +const WebSocket = require('ws'); +const iconv = require('iconv-lite'); +const { spawn } = require('child_process'); +const logger = require('../logger'); + +function setupWebSocket(server) { + const wss = new WebSocket.Server({ server }); + + wss.on('connection', (ws) => { + logger.info('New WebSocket connection'); + + let pingProcess = null; + + ws.on('message', (message) => { + try { + const data = JSON.parse(message); + + if (data.type === 'ping') { + const ip = data.ip; + + // Валидация IP + if (!ip || !/^[a-zA-Z0-9\.\-_:]+$/.test(ip)) { + ws.send(JSON.stringify({ + type: 'error', + message: 'Invalid IP address format' + })); + return; + } + + // Завершаем предыдущий процесс, если есть + if (pingProcess) { + pingProcess.kill(); + } + + // Запускаем ping (для Windows) + pingProcess = spawn('ping', ['-t', ip]); + + // Обработка вывода + pingProcess.stdout.on('data', (data) => { + const decodedData = iconv.decode(data, 'cp866'); + ws.send(JSON.stringify({ + type: 'data', + data: decodedData + })); + }); + + pingProcess.stderr.on('data', (data) => { + const decodedData = iconv.decode(data, 'cp866'); + ws.send(JSON.stringify({ + type: 'error', + data: decodedData + })); + }); + + pingProcess.on('close', (code) => { + ws.send(JSON.stringify({ + type: 'close', + data: `Process exited with code ${code}` + })); + pingProcess = null; + }); + } + } catch (e) { + logger.error('WebSocket message error:', e); + ws.send(JSON.stringify({ + type: 'error', + message: 'Invalid message format', + details: e.message + })); + } + }); + + ws.on('close', () => { + logger.info('WebSocket connection closed'); + if (pingProcess) { + pingProcess.kill(); + pingProcess = null; + } + }); + + ws.on('error', (error) => { + logger.error('WebSocket error:', error); + if (pingProcess) { + pingProcess.kill(); + pingProcess = null; + } + }); + }); + + return wss; +} + +module.exports = setupWebSocket; \ No newline at end of file diff --git a/admin-server1/uploads/1752673443018-580872.png b/admin-server1/uploads/1752673443018-580872.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server1/uploads/1752736681880-254035.png b/admin-server1/uploads/1752736681880-254035.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 zcmch5cQo7ozkgb-S*4}b5-V!8M(x@)V=G!}*N&AEu~${?3aLGdXi?OrXz8G$1Tjmf zR%7p7V*K9vndjc`@7%xc%{e(a@0`5f=j8Q#K4#1vJt!?TGc^bVqSe$;H3Wf9MFVdM zN^;FgyLPtzrL`@d309>{NQ_~p=aH=#f>+W_b4>d z7)y4gdOctUTX$03GqX7-D-K1g-dJT!J@?0Q%0GYDN*g98FW>q6_`qrR`t~wGYH!i{ z`1f_1w(3Iny)}zqE@BdP~hue>?DyclUU$FY-8%3N#jdgA!W70RovbQi2|hG#np>9tod4 z4O-K(GocSXCQVKYhwjA%UP?<(d)M_99%W}4kzcZ$cxVAPBm=$WqX&V6sn3Ak$DKCF zpB{}loNlUlk!6sAE6>gz|ML0WnSxIW1E&{l3B%V!kz&8PE2637>L1dzV8JA={D|6-6_@I2tW~LpsTP#C>y_ z&{@Cu`Cwu+rbjGkk4=^ke4If#N+P@nNI-$Fjl(O>1+L6O(Q*62VI5*Qo#`XFQOL)$b=$r7_at8sDuljL^25NO> zLVZN2Jm%bd&#NBZdR?hssCTm;JxeFOu8V55&hBo$z|P-?KgTKVvi1H-q(Ea#n}p$n z_ww#PDIzA?k#f(TlliVsDry~vZfegUHbq;D;%D~xC-B|7$Jl-94Qr_n#t7f~LK7zV zPFC0boz=Um7DBwfhzdfGzp!tTjoH&X@x5+YLSKEC9I98PeQ#7a>E(u05G_bnIGJE? zxu15Z1go9iv}F(Mjz8~;QV`WLBC`wsLe{*$lxA0o^zLw#{8P+$26fe2>n@!B7nNXz zCfzWOMf+<^h~<3=sn(f|#2~sg9y{BfXZpk_Km}=u~E=7OyC7rT{Zw0*Ay-s}f zPd`7pa(1BN9kK;VRPfyLA?`Wb9 z_m!P9(y>F2GAZQd99pa>wb}bS_MFpmkl)wz1g%Z;(TiNwS*Gp3xATPZ(MrjBnk@fc zpjad*9`E%Qb3u={iWD0wT2Q9Yl^dWr)aP8={gKuq?$Cpu>=UI4109VmW}cVs)h!h> z5tcp5N^gqSu~t9VW@4y}3QlbeXUGF!cKzoKNgej*wKVd_P4E+_n)rudhsiBFGU-xqk=RSm`Jl&x?unP{rbjdE ze^%5DJ;-#gh|uX~k57o0oY_&`-{fix@>z6Col(fMJUFXdL#{)XhT@q>^78sVsK}PP z*I2srU}8+Jyn$?J`-;bu>o&0iCKT)y>Bp_|gXxWtuv#nk0Lh&=VnKBD5i)(Nl1h5y zvwoS<{RuagvlbWfOCBBNpGwd4gTLHIak?pUOK0iDVu`>jJo%7)+Q#eV<$F@bLLc$F z3bKkO$KRx^t(&GjH+56$XE)LiXWK~N(C<^QV6J#n1?CQ4I z+N#D|#YN-4h4V4%IG_ui>L&GGPjqW!(8{%74bN&7FiQp6p4ptZAJ;}smD1AN<#%8P ze%(#Nb>Fl3K{;ufn_ayJ%Jh~)ckVB|Ao+R)axZokRUYAYmhU~z&>IoGy3;k;f$C69Tkk9x=T57L zQ}Oh-O2$$2$qndP^B_FknPGvDH0*Tm!j#3kv&zk$sD$d<%*#;heTFL&iS*YG@_%K4eaGYjL8vQ(r9 zt$kA;QD(Viu1n7JO;I|M7t5SlUD2BUE&QgF@K{~HBCW^{zAWx2Li*k$JC#hM0BY9i z;?P$D16TU0?LsfN>D;JFCy7`A3YZmbHtlj=Q6FBM)=a@c8@78)Hsk`3?rlDbDk|L~ z@)FC+Lme(RC>BZGP#NOk6|8_B`zZY0sx{|EusZ99UtAp# z)(UQe{?M`tV|A2qa8f1~zw#>JnA#wP6l6YPQjc0V5a6s;lWV{0fhDao8fE*%c2<;e zPVv7S+1ec1_6Hs&*M0`HT1Z=4@dJJX5X84CX|bwr&)U}Dk3o4prf67TKA$lCDOD64 zqlObDPIWIG9NqtXcw0(OQZLXGqR;8pzU+gTIXe9U=_by)SQ;){e>tY!S~r<7+F=uo zVHR`=LCBbum`3_5T9SLwTaRM#DP`RU4=zYEmx#Lz!fUz~B6Z=V(}!j}Nvbof>|=H1 zY9FmRl%v6{I@7!2EPO&z#9y0saB-tZG|7xL0n8fYYyJKqm;Rz^x^GxVm{dtqu_eTOkf!HWth2nUMPhlhhQ|q5E=#Mz&;WCP+;@ zbQ#*l8pvZ0c z3UGJbQrFd5(&QYyG&98js;#Zv=U(SG8 zM8;f_1TVriRZz~+61c1Cz*NMkEhM17xY^H!ZWzvUzs_2XUfL|LRny%VI=R_}c)q7G zc9ZeaWWtC2skR5fAuYYw2f;&q+w1t=Nn+E}&`Jd_NB1K#P!QUW<_ze&wgCs|dtBSM zcj{pvklzJqvpYVY&QGWk=SWDK;34iO_0d@TW0h|SMd?#*Mmix5v={V6BuYEIuO1ue zfF22}o!kXH0%SFP7V-#d;Oa$kxsu?{I3JV6aHXbO6{W7xz(Sb2$xXU7_M-5%Kvn`+ zB5J;T#$ZdB*n_JQj~!G;El|EpgF8No2CEVLcRXw3T5mt0mwu%>y3!lkMjXpBNV=YUO}oulMUG$yQ* zE+5Xr0kcd13l7vc)r;_UIjiUqVII_n3%9?@fTj2AZMm4}Akb5H3zE z(I8^6dR*r7Y?QG}s?9gwuF7>NI`T6^hXxV$70H1;I?xb$J|UTP7VOLt{U=&mi|O5o z!t|V~D3{u~6R0W@-9kv#}&D+(Wi@YJ9=I=b)6Apxg z0ZJLY27!KJMjRN`lK4l407!7S_4R9n)HYEX>x`I+CWq~b>CAjoQ^oyNYT0w~Oo(*C+-U&{49|IK4ajOdD%AeM4i+yhRa%_dco7#F3#foc#=(CkjDW zrL9@{UPQ_te*@Q%lAnCjs*39$?9@~Hjl~#Z&z9k|^0;MlMw+t)EYeY_5tw|I^&Wk?k+E)rD_6pL>kD8&HBN zeqoo(G#eF*#b1Wav{6z<`~fsnLSY3)f16x1TMlb?IUp%3pA-UbrI}Ipx)L7fAw7wkiWo;FF+@>9Hes4l7tu^}d z^RB7BjsqT5$Trj3FE%|c$~X({WSZ6_!me~XwcK~2gMmaejCf@)NnZ~y5qP#mm6_wf z*G-pT$^_8U(tWt2g*=Do|22x`WUCY>g;Yd(+`L?)b}65sZY`z;IxXDIRW3t*O<$H& zp_=HRA=Nm>=Db}{IUI_b@-V$aJJxQ_@i-a`q_f1I z)&(BUdPKgdw9hrhSMP?C+5Z;QMM(MFeZhAW_#ook@QjZDljJ=d4o35Pl-+;CR8W;0YTvR}u^i(o{H@zS-`NS0vG7_GQ)a$>ic2{;-|I|MHj z{H84D3TnC{o%tJ$;Zi3v2i4A5nXq;rDapA~{s}-_MrZhVr}J<`!LD+FUr&D-4Ft+n zizXzs%$27$8#U|1$7f)(dVaqB({BBZ#7C_A zB#GwsQ*$zZlm&lzu4u3zU$adV9D>*ijs}>q@7nnz)y}h-cV67z2P<9t6@~ zaFb}LwJ9vwI?i-~|3oI43!MCeG@cl=PTBxrcj8@Om>DqUo)=mF_@)^yD2}2|GxA8A ziI6y7IVK{;l8(i{|H?V2&plZhgV?!M%L^&1QAbK321EJ`{ACP#b4Och11@Ma_X1;m zD%eDm@h0u7u>ASDoCi4)m?SjDxq9SN1Wl)iQ^o%F;`_WmWL9N34fC^3Jh7Uk0+%H1 z#oEMFd~X*}7q^g+wT$__nXk1Gz15;l?K{tgYvJ=%Eb|wZ;x?`!#5o*~2WqO<%LC&r z;m-paq4l*U8J(4AUei31>j(tewbkQPop@uUPSnRs#rA}(*I9rpl`bagm%j7CqDrAD z*l@QB8mQlOD6s$~7C&FfQv=*m)LZuO?e>@t`v*bK(I56RM~F@Kl?tHuR{v1-f3-${ z;mV;OgXG#?zePOsi{;moYbTlv(*th2=1=?mFE9UvMiqp{5MTxnr~y~a>SD{bi<^eq zrQP);6!&=_Rn4&blI+s2&k;R6E>4ED9>R}FO9vK*fe`3BaS#5hU)~>F70q1yk*Z&<@LH&toC5pbDIM+( z??BiX4UL}*#~OrV@n4+3si(U36}=1ml#@M{L@$<;x$Wb>GJ}z{j0fXjoL5}Qm50lT z^wKWCS&6(e)VS0Y0=Mod*sKW8BWOm|`XHm9#K zm~_b{N4#^*Z`mr(cp?rgVF8%u*zjdD(Q~*xSQ(Xid&D)elxu)>Z0_%#Fnatl)03GyTpcxdDF4(M9?4#YoItG9jCB~KJTwc zz8J?4zP-1nz!knNQPJt$`5^e;j_Y?IgCJ`2mLgf3VzBsKPDHKDe-2-c5{*Lsu~eW+ zrr+XzvN0)4(RmPPgDHiN08fKOi$W8JTdXN9d_g%^nS~zkoF*hcp@cK#28JA|Hmax@ zjM~I^#Qe?43+G-A1B8CUL$}-UPb#9p?ku5Ul-vk$CcyyY+f;IOFmx8UpHm(JC13#( zj{|$FP_;69j$6#ALxpi(mb&#_0)c>sFAi>8)*D~Ge*epI7b(4j#?rp2;)3)(oW;u! z5XTA0nP13`Qg^!kdL;tmJHb2cRb~NnkYua@;nBj{XfDS&*^togZgpA+V$h#%HDWLg6@x$*hmtl^q+2R<&>l?9`Y+#s6|KIM738;S z)2Q+RMPcn6?3=K_C&SmXA{5Dt1#(>l%8Sw9IupK?nO6SKrk(xvN<;glk$@t%Xdj(% zkVruhwa$J9Pnum5>OaV)q5bvhCeufA4&@l|M8LaqlG%Y<1Mgz>Z=o?Wu?320TwZGH z3tCE;b2T0>Eq=fR2`QRHJ_u$aa7A05s%&GF`uNfb2HRoy35RI8!!D-jQF~%>`i+Q? zeN>ipLUY9XC4YwC%yKeI9aR)WCSX-5@agipG&(}Me)i`=zr1!+dM1z^)Z-LTxefY; z?mDhgP3N|r4VT3gL!cBJ18)z<;foJNb07AqNzPoK{g|A!FS1qdKMNpbmQu5QDw z6Rs-fTWax4*hTWi8vtuuDHGN^H#|E_dU|enqWq@KnaISV3>3B}@^R!k+Mi-@L4iTG({5=0Atb0}*r-9Q&7UDnNWFzqPj|3x? zD(z~Dx*Ej1IrTXm|IGIlb4}M*djIi?63w}^rSsOU_bad&K{b8(&+330i`K>C;WZRvW0B?sfNc$3;&FpnO$OAj?<(3lHzhaT3TQ;W7l z7(YQU3Hy;T>UQefVKg{Cypfsg@ylH{z-E{^`sY|_IUKhA5LtW-xTWb8rF3uVGjUja z!+e;<|4n!UFzYF!5NqC&Q{w7RU4>t+uZjO^_D~dvY|-{Aq4|K(YkP*p_X1uZpsS|$ zTpfY7i&Uq>6VqJ^R%ZOL#zYB$;yq;w59Tw2!Ve`kYW3`Iv1*APw{IKM_|u$0W2}q& z;+2T7N8S5#&79L!QGazLg=65;VC6v5@pTtMc&$4JVvrM&3~=~7{ep?>rs->wmn|UW*L@h+9lg_G%{Y(7f zXJpc-+8wEPySIsRm(dti)bQsr-d}T?n3bsr`TNZoci4fIe;IFvcT(sF*8M@Sr){Nz z;-nK$jL!f>d$o-2-$eU6SgE2eCr?zWNC5<=po%i)1)7VZbZUU(b8TZ8^hNgmlXaUC zq|b^!q5%DZ0PV#V7JpKMonWPJ-C(?lkkRz4i2lX|+zsQ~$LZs<>shO<8FrIJVGwHo zv|i;B2qgCn2z31gvz$omXVuG%hv4NYAUZ=)3W_u8ViQtewl!(y^fSnehTBiT(yzLF zf*3v1gYsDb`Me`I9gs`TbIPXQ>ay?Ku^kR~7J%kyY7Bm-B%Klb;Je2ozb*E~^?5U5 zZCV5tpV}V@C_P8UcK&XoOjdYUG|&a8q%Hpt`JOdE0ql%L>ucd_{+H&SK(emys^7fq z0vJ-gV^|tdrI8uLSxFk_n|pBIJ*tD~`evCCE~1yFsFuTWa&c=k{(HpaAmE!`Vf zpElIAxab_$a{~y)P!t?q z;~?wlbsF;%^Tr$Cy6gI!>RIAFK0(~OySqQs$09ih9lm4aJ1h14{PbOUT+ji(Gpx5) z`f=yz(HK0wsz`6zFxTWphMoi$*O5VZ>)^U4{JW0bPi3k;W`Oe$#Nz(Mi>zcXM@kHc zYcG&ULo`dxz{4meTWrgrx~LZ7leVH_lW^Zkmq3P1`qd}X#q?Q6?xz*wZ#6RFwTOHL!-^M; zIJ=LklS$iHoT_|nT03f4mpDgLp6pZjBc;q(OiE0BERjJv7CU-lAL>7Rw}#l96|)cQ zhn>_+<*T7Pih#FDT5W2Rg^?;#OH1pnsjN^*0@xJH(sUPgzE=npLt{?$NA_e#Th3~` z6_QMFTd#(fl9hvDk9Labr8C9SzkF0jz3jToRwD%Ps^Lis=GDHX`|u!VKAuFsTLE(J zo?f+B;$Fz-4OK<06#W~yGJee&WDlKRzu7-jng%MWjpfaMB+ns$?CQDhy00zTxAVyU zZo2+w-=$DJ@#KbCJ2KX~Z zHqADQv{aco_4!ILrqD1B1mpXxzsPk%^rPrln>j}`_)vK)9=+%SK``R`Jzm-Kk!?Dq z_r6ru1%|;|Q7^ASAcsI>z`Dm&XbddTG0C1&$$5kCQi0W2mu<%m4`M6ASPKFjr~zCq z{tE3yLgbmzzPv`)7k9WIP+#DLRfv3<1-uYCUqoh3-rUjp1C;Jy0x+PHhpKHZ#f<&U znac*82=OQ^kS6dq<(&sD-&Rt%N-->8{`8 zPC;BwG4jb;tMleHSK0oD!UsMDb$?GH5(O~9sK`7}{$2<6T5D4bCqwDgN~gTqoG$9( zrN#F`7jJbL0@W4(NLbzWvnC4y0u8rUNn@M#_g{7VE>UBR6Plh25wL5fL(mmmRYe8N zk1hwCI8LCiw26k!cz1;`|s9o tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server1/uploads/1752741776453-525354.png b/admin-server1/uploads/1752741776453-525354.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server1/uploads/1752742234633-995414.png b/admin-server1/uploads/1752742234633-995414.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/admin-server1/uploads/1752742255814-836795.png b/admin-server1/uploads/1752742255814-836795.png new file mode 100644 index 0000000000000000000000000000000000000000..74d6f52f25f617d49a33c05c9b8d6a273c060ffa GIT binary patch literal 8837 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 tO)tQ4{(riJ{*nLy literal 0 HcmV?d00001 diff --git a/backend/config.env b/backend/config.env new file mode 100644 index 0000000..0eed498 --- /dev/null +++ b/backend/config.env @@ -0,0 +1,12 @@ +PORT=3001 +DB_USER=prog +DB_PASSWORD=prog +DB_SERVER=192.168.31.34 +DB_NAME=ASU + +LOG_DIR_CARDS=../../logs +LOG_FILE_CARDS=cards.log + +LOG_DIR=../../logs/ +LOG_FILE=app.log +DOCX_PATH=../../../frontend/public/handbook.docx \ No newline at end of file diff --git a/backend/config.json b/backend/config.json new file mode 100644 index 0000000..d47022b --- /dev/null +++ b/backend/config.json @@ -0,0 +1,59 @@ +{ + "payslipsPath": "\\\\PC-20010\\payslips", + "server": { + "host": "localhost", + "port": "3001" + }, + "testMode": true, + "mockData": { + "employees": [ + { + "id": 1, + "cardNumber": "1001", + "tnom": "001", + "famaly": "Петров", + "ima": "Петр", + "otch": "Петрович", + "profession": "Главный инженер", + "category": "Высшая", + "departmentName": "Технический отдел", + "departmentCode": "101", + "organization": "ООО ТехноЦентр", + "identNumber": "123456789" + }, + { + "id": 2, + "cardNumber": "1002", + "tnom": "002", + "famaly": "Сидорова", + "ima": "Анна", + "otch": "Сергеевна", + "profession": "Бухгалтер", + "category": "1", + "departmentName": "Бухгалтерия", + "departmentCode": "202", + "organization": "ООО ТехноЦентр", + "identNumber": "987654321" + }, + { + "id": 3, + "cardNumber": "1003", + "tnom": "003", + "famaly": "Иванов", + "ima": "Иван", + "otch": "Иванович", + "profession": "Разработчик", + "category": "2", + "departmentName": "IT-отдел", + "departmentCode": "303", + "organization": "ООО ТехноЦентр", + "identNumber": "555555555" + } + ], + "payslips": [ + "Петров_ПП_2026-08.pdf", + "Сидорова_АС_2026-08.pdf", + "Иванов_ИИ_2026-08.pdf" + ] + } +} \ No newline at end of file diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 0000000..38dc188 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,4013 @@ +{ + "name": "backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "backend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "fs-extra": "^11.3.0", + "mammoth": "^1.9.1", + "mysql2": "^3.14.2", + "node-cron": "^4.2.1", + "winston": "^3.17.0", + "winston-daily-rotate-file": "^5.0.0" + }, + "devDependencies": { + "nodemon": "^2.0.22" + } + }, + "node_modules/@azure-rest/core-client": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-2.4.0.tgz", + "integrity": "sha512-CjMFBcmnt0YNdRcxSSoZbtZNXudLlicdml7UrPsV03nHiWB+Bq5cu5ctieyaCuRtU7jm7+SOFtiE/g4pBFPKKA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-rest-pipeline": "^1.5.0", + "@azure/core-tracing": "^1.0.1", + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure-rest/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.4.tgz", + "integrity": "sha512-f7IxTD15Qdux30s2qFARH+JxgwxWLG2Rlr4oSkPGuLWm+1p5y1+C04XGLA0vmX6EtqfutmjvpNmAfgwVIS5hpw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.20.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-http-compat": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@azure/core-http-compat/-/core-http-compat-2.3.0.tgz", + "integrity": "sha512-qLQujmUypBBG0gxHd0j6/Jdmul6ttl24c8WGiLXIk7IHXdBlfoBqW27hyz3Xn6xbfdyVSarl1Ttbk0AwnZBYCw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-client": "^1.3.0", + "@azure/core-rest-pipeline": "^1.20.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-http-compat/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-lro": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.7.2.tgz", + "integrity": "sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.2.0", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-paging": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.6.2.tgz", + "integrity": "sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.21.0.tgz", + "integrity": "sha512-a4MBwe/5WKbq9MIxikzgxLBbruC5qlkFYlBdI7Ev50Y7ib5Vo/Jvt5jnJo7NaWeJ908LCHL0S1Us4UMf1VoTfg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@typespec/ts-http-runtime": "^0.2.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.2.0.tgz", + "integrity": "sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.12.0.tgz", + "integrity": "sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-2.1.0.tgz", + "integrity": "sha512-BPDz1sK7Ul9t0l9YKLEa8PHqWU4iCfhGJ+ELJl6c8CP3TpJt2urNCbm0ZHsthmxRsYoMPbz2Dvzj30zXZVmAFw==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.4.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^2.26.0", + "@azure/msal-common": "^7.0.0", + "@azure/msal-node": "^1.10.0", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/keyvault-common": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz", + "integrity": "sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.5.0", + "@azure/core-rest-pipeline": "^1.8.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.10.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-common/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-keys": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@azure/keyvault-keys/-/keyvault-keys-4.10.0.tgz", + "integrity": "sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag==", + "license": "MIT", + "dependencies": { + "@azure-rest/core-client": "^2.3.3", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-http-compat": "^2.2.0", + "@azure/core-lro": "^2.7.2", + "@azure/core-paging": "^1.6.2", + "@azure/core-rest-pipeline": "^1.19.0", + "@azure/core-tracing": "^1.2.0", + "@azure/core-util": "^1.11.0", + "@azure/keyvault-common": "^2.0.0", + "@azure/logger": "^1.1.4", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/keyvault-keys/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.2.0.tgz", + "integrity": "sha512-0hKEzLhpw+ZTAfNJyRrn6s+V0nDWzXk9OjBr2TiGIu0OfMr5s2V4FpKLTAK3Ca5r5OKLbf4hkOGDPyiRjie/jA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "2.39.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.39.0.tgz", + "integrity": "sha512-kks/n2AJzKUk+DBqZhiD+7zeQGBl+WpSOQYzWy6hff3bU0ZrYFqr4keFLlzB5VKuKZog0X59/FGHb1RPBDZLVg==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "13.3.3" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.3.tgz", + "integrity": "sha512-n278DdCXKeiWhLwhEL7/u9HRMyzhUXLefeajiknf6AmEedoiOiv2r5aRJ7LXdT3NGPyubkdIbthaJlVtmuEqvA==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-7.6.0.tgz", + "integrity": "sha512-XqfbglUTVLdkHQ8F9UQJtKseRr3sSnr9ysboxtoswvaMVaEfvyLtMoHv9XdKUfOc0qKGzNgRFd9yRjIWVepl6Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "1.18.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", + "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "13.3.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": "10 || 12 || 14 || 16 || 18" + } + }, + "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", + "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@js-joda/core": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@js-joda/core/-/core-5.6.5.tgz", + "integrity": "sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@tediousjs/connection-string": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@tediousjs/connection-string/-/connection-string-0.5.0.tgz", + "integrity": "sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==", + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", + "license": "MIT" + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.2.3.tgz", + "integrity": "sha512-oRhjSzcVjX8ExyaF8hC0zzTqxlVuRlgMHL/Bh4w3xB9+wjbm0FpXylVU/lBrn+kgphwYTrOk3tp+AVShGmlYCg==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/argparse/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dingbat-to-unicode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", + "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", + "license": "BSD-2-Clause" + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duck": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", + "license": "BSD", + "dependencies": { + "underscore": "^1.13.1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-aggregate-error": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/es-aggregate-error/-/es-aggregate-error-1.0.14.tgz", + "integrity": "sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "globalthis": "^1.0.4", + "has-property-descriptors": "^1.0.2", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", + "license": "MIT" + }, + "node_modules/file-stream-rotator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", + "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", + "license": "MIT", + "dependencies": { + "moment": "^2.29.1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", + "license": "MIT" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", + "license": "MIT" + }, + "node_modules/jsbi": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-4.3.2.tgz", + "integrity": "sha512-9fqMSQbhJykSeii05nxKl4m6Eqn2P6rOlYiS+C5Dr/HPIU/7yZxu5qzbs40tgaFORiw2Amd0mirjxatXYMkIew==", + "license": "Apache-2.0" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", + "license": "MIT" + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/logform": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lop": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", + "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", + "license": "BSD-2-Clause", + "dependencies": { + "duck": "^0.1.12", + "option": "~0.2.1", + "underscore": "^1.13.1" + } + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/mammoth": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.9.1.tgz", + "integrity": "sha512-4S2v1eP4Yo4so0zGNicJKcP93su3wDPcUk+xvkjSG75nlNjSkDJu8BhWQ+e54BROM0HfA6nPzJn12S6bq2Ko6w==", + "license": "BSD-2-Clause", + "dependencies": { + "@xmldom/xmldom": "^0.8.6", + "argparse": "~1.0.3", + "base64-js": "^1.5.1", + "bluebird": "~3.4.0", + "dingbat-to-unicode": "^1.0.1", + "jszip": "^3.7.1", + "lop": "^0.4.2", + "path-is-absolute": "^1.0.0", + "underscore": "^1.13.1", + "xmlbuilder": "^10.0.0" + }, + "bin": { + "mammoth": "bin/mammoth" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mysql2": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.2.tgz", + "integrity": "sha512-YD6mZMeoypmheHT6b2BrVmQFvouEpRICuvPIREulx2OvP1xAxxeqkMQqZSTBefv0PiOBKGYFa2zQtY+gf/4eQw==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/native-duplexpair": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/native-duplexpair/-/native-duplexpair-1.0.0.tgz", + "integrity": "sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "license": "MIT" + }, + "node_modules/node-cron": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.2.1.tgz", + "integrity": "sha512-lgimEHPE/QDgFlywTd8yTR61ptugX3Qer29efeyWw2rv259HtGBNn1vZVmp8lB9uo9wC0t/AT4iGqXxia+CJFg==", + "license": "ISC", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/option": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", + "license": "BSD-2-Clause" + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "license": "MIT", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tarn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz", + "integrity": "sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tedious": { + "version": "15.1.3", + "resolved": "https://registry.npmjs.org/tedious/-/tedious-15.1.3.tgz", + "integrity": "sha512-166EpRm5qknwhEisjZqz/mF7k14fXKJYHRg6XiAXVovd/YkyHJ3SG4Ppy89caPaNFfRr7PVYe+s4dAvKaCMFvw==", + "license": "MIT", + "dependencies": { + "@azure/identity": "^2.0.4", + "@azure/keyvault-keys": "^4.4.0", + "@js-joda/core": "^5.2.0", + "bl": "^5.0.0", + "es-aggregate-error": "^1.0.8", + "iconv-lite": "^0.6.3", + "js-md4": "^0.3.2", + "jsbi": "^4.3.0", + "native-duplexpair": "^1.0.0", + "node-abort-controller": "^3.0.1", + "punycode": "^2.1.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tedious/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/winston": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-daily-rotate-file": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", + "license": "MIT", + "dependencies": { + "file-stream-rotator": "^0.6.1", + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + } + } +} diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..7e4df92 --- /dev/null +++ b/backend/package.json @@ -0,0 +1,28 @@ +{ + "name": "backend", + "version": "1.0.0", + "description": "", + "main": "src/server.js", + "scripts": { + "start": "node src/server.js", + "dev": "nodemon src/server.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "dotenv": "^16.0.3", + "express": "^4.18.2", + "fs-extra": "^11.3.0", + "mammoth": "^1.9.1", + "mysql2": "^3.14.2", + "node-cron": "^4.2.1", + "winston": "^3.17.0", + "winston-daily-rotate-file": "^5.0.0" + }, + "devDependencies": { + "nodemon": "^2.0.22" + } +} diff --git a/backend/src/config/db.js b/backend/src/config/db.js new file mode 100644 index 0000000..06dbd9d --- /dev/null +++ b/backend/src/config/db.js @@ -0,0 +1,248 @@ +// ============================================ +// 📦 Модуль подключения к MySQL базе данных +// ============================================ + +const mysql = require('mysql2/promise'); // ✅ Используем promise-версию +const path = require('path'); +const fs = require('fs-extra'); +const { logger } = require('./logger'); + +// Загружаем переменные окружения +require('dotenv').config({ path: path.join(__dirname, '../../config.env') }); + +// ============================================ +// 🔧 Конфигурация подключения к MySQL +// ============================================ + +const dbConfig = { + host: process.env.DB_HOST || 'localhost', + user: process.env.DB_USER || 'root', + password: process.env.DB_PASSWORD || '', + database: process.env.DB_NAME || 'test', + port: process.env.DB_PORT || 3306, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0, + // Дополнительные настройки + charset: 'utf8mb4', + timezone: '+00:00' +}; + +// ============================================ +// 📊 Глобальные переменные +// ============================================ + +let pool = null; // Пул соединений +let isDBConnected = false; +let lastError = null; +let connectionAttempts = 0; +let isReconnecting = false; + +// ✅ Функция для проверки testMode из config.json +async function checkTestMode() { + try { + const configPath = path.join(__dirname, '../../config.json'); + const config = await fs.readJson(configPath); + return config.testMode === true; + } catch (err) { + logger.warn('⚠️ Не удалось прочитать config.json для проверки testMode', { error: err.message }); + return false; + } +} + +// ============================================ +// 🔄 Функция подключения с повторными попытками +// ============================================ + +async function connectDB(retries = 5, delay = 3000) { + // ✅ Проверяем testMode + const testMode = await checkTestMode(); + + // 🔧 Если включен тестовый режим - пропускаем подключение + if (testMode) { + logger.info('🔧 ТЕСТОВЫЙ РЕЖИМ: Подключение к БД отключено'); + logger.info('📊 Используются mock-данные из config.json'); + isDBConnected = false; + lastError = 'Test mode active - database connection disabled'; + return false; + } + + // Если уже подключены + if (isDBConnected && pool) { + logger.verbose('✅ БД уже подключена'); + return true; + } + + // Если идет переподключение + if (isReconnecting) { + logger.warn('⏳ Идет переподключение к БД, ожидаем...'); + return false; + } + + logger.info(`🔄 Подключение к MySQL... (попытка 1/${retries})`); + logger.info(`📊 Хост: ${dbConfig.host}, БД: ${dbConfig.database}, Порт: ${dbConfig.port}`); + + // Цикл повторных попыток + for (let i = 0; i < retries; i++) { + try { + connectionAttempts++; + + // Создаем пул соединений + pool = mysql.createPool(dbConfig); + + // Проверяем подключение + const connection = await pool.getConnection(); + await connection.ping(); + connection.release(); + + // ✅ Успешно подключились + isDBConnected = true; + lastError = null; + isReconnecting = false; + + logger.info('✅ Успешно подключено к MySQL'); + logger.info(`📊 Пул соединений: макс. ${dbConfig.connectionLimit}`); + + return true; + + } catch (err) { + lastError = err.message; + isDBConnected = false; + pool = null; + + logger.warn(`❌ Попытка ${i + 1}/${retries} не удалась: ${err.message}`); + + if (i < retries - 1) { + logger.info(`⏳ Повторная попытка через ${delay/1000} секунд...`); + await new Promise(resolve => setTimeout(resolve, delay)); + } else { + logger.error('❌ Все попытки подключения к БД исчерпаны'); + startBackgroundReconnection(); + } + } + } + + return false; +} + +// ============================================ +// 🔄 Фоновое переподключение +// ============================================ + +async function reconnectToDatabase() { + if (isReconnecting) { + logger.warn('⏳ Переподключение уже запущено'); + return; + } + + isReconnecting = true; + logger.info('🔄 Запущено фоновое переподключение к БД...'); + + const success = await connectDB(10, 5000); + + if (success) { + logger.info('✅ Переподключение к БД успешно выполнено'); + } else { + logger.error('❌ Переподключение к БД не удалось'); + setTimeout(() => { + logger.info('🔄 Запускаем повторную попытку переподключения...'); + reconnectToDatabase(); + }, 30000); + } + + isReconnecting = false; +} + +function startBackgroundReconnection() { + if (!isReconnecting) { + logger.info('🔄 Запускаем фоновое переподключение...'); + reconnectToDatabase(); + } +} + +// ============================================ +// 📊 Функция выполнения запросов +// ============================================ + +/** + * Выполняет SQL-запрос с параметрами + * @param {string} sql - SQL-запрос с плейсхолдерами ? + * @param {Array} params - Параметры для подстановки + * @returns {Promise} - Результат запроса + */ +async function query(sql, params = []) { + if (!isDBConnected || !pool) { + throw new Error('База данных не подключена'); + } + + try { + const [rows] = await pool.execute(sql, params); + return rows; + } catch (err) { + logger.error('❌ Ошибка выполнения запроса', { sql, error: err.message }); + throw err; + } +} + +/** + * Выполняет SQL-запрос и возвращает первый результат + */ +async function queryOne(sql, params = []) { + const rows = await query(sql, params); + return rows.length > 0 ? rows[0] : null; +} + +// ============================================ +// 📊 Функции для получения статуса БД +// ============================================ + +async function getDBStatus() { + const testMode = await checkTestMode(); + + return { + connected: isDBConnected, + lastError: lastError, + connectionAttempts: connectionAttempts, + isReconnecting: isReconnecting, + testMode: testMode, + dbType: 'MySQL', + host: dbConfig.host, + database: dbConfig.database + }; +} + +function isDBConnectedFn() { + return isDBConnected; +} + +// ============================================ +// 🧹 Закрытие соединения +// ============================================ + +async function closeDB() { + try { + if (pool) { + await pool.end(); + pool = null; + isDBConnected = false; + logger.info('🔒 Соединение с MySQL закрыто'); + } + } catch (err) { + logger.error('❌ Ошибка при закрытии соединения с БД', { error: err.message }); + } +} + +// ============================================ +// 📤 Экспорт модуля +// ============================================ + +module.exports = { + pool, // Пул соединений + query, // Выполнение запросов + queryOne, // Выполнение запроса с одним результатом + connectDB, // Функция подключения + getDBStatus, // Получение статуса + isDBConnected: isDBConnectedFn, + closeDB, + reconnectToDatabase +}; \ No newline at end of file diff --git a/backend/src/config/logger.js b/backend/src/config/logger.js new file mode 100644 index 0000000..9dc3edd --- /dev/null +++ b/backend/src/config/logger.js @@ -0,0 +1,62 @@ +const winston = require('winston'); +const path = require('path'); +const fs = require('fs'); +const zlib = require('zlib'); +const cron = require('node-cron'); +require('dotenv').config({ path: path.join(__dirname, '../../config.env') }); +const logDir = path.join(__dirname, process.env.LOG_DIR); +const logFile = path.join(logDir, process.env.LOG_FILE); + +if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir, { recursive: true }); +} + +const logger = winston.createLogger({ + level: 'info', + format: winston.format.combine( + winston.format.timestamp({ + format: 'HH:mm:ss YYYY-MM-DD ' + }), + winston.format.errors({ stack: true }), + winston.format.splat(), + winston.format.json() + ), + defaultMeta: { service: 'user-service' }, + transports: [ + new winston.transports.File({ + filename: logFile, + maxsize: 10 * 1024 * 1024, // 5MB + }), + new winston.transports.Console({ + format: winston.format.combine( + winston.format.colorize(), + winston.format.simple() + ) + }) + ] +}); + +const archiveLog = () => { + if (!fs.existsSync(logFile)) return; + + const archiveName = `app-${new Date().toISOString().slice(0, 10).replace(/-/g, '_')}.log.gz`; + const archivePath = path.join(logDir, archiveName); + + fs.createReadStream(logFile) + .pipe(zlib.createGzip()) + .pipe(fs.createWriteStream(archivePath)) + .on('finish', () => { + fs.writeFileSync(logFile, ''); + logger.info(`Логи архивированы в ${archiveName}`); + }) + .on('error', (err) => { + logger.error('Ошибка архивации:', err); + }); +}; + +cron.schedule('* * 1 * *', archiveLog); + +module.exports = { + logger, + archiveLog +} \ No newline at end of file diff --git a/backend/src/config/logger_cards.js b/backend/src/config/logger_cards.js new file mode 100644 index 0000000..98e3871 --- /dev/null +++ b/backend/src/config/logger_cards.js @@ -0,0 +1,60 @@ +const winston = require('winston'); +const path = require('path'); +const fs = require('fs'); +const zlib = require('zlib'); +const cron = require('node-cron'); +require('dotenv').config({ path: path.join(__dirname, '../../config.env') }); + +const logDir = path.join(__dirname, process.env.LOG_DIR_CARDS); +const logFile = path.join(logDir, process.env.LOG_FILE_CARDS); + +if (!fs.existsSync(logDir)) { + fs.mkdirSync(logDir, { recursive: true }); +} + +//логгируем cards +const logger = winston.createLogger({ + level: 'info', + format: winston.format.combine( + winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + winston.format.errors({ stack: true }), + winston.format.splat(), + winston.format.json() + ), + transports: [ + new winston.transports.File({ + filename: logFile, + maxsize: 10 * 1024 * 1024, + }), + new winston.transports.Console({ + format: winston.format.combine( + winston.format.colorize(), + winston.format.simple() + ) + }) + ] +}); + +const archiveLog = () => { + if (!fs.existsSync(logFile)) return; + + const archiveName = `cards-${new Date().toISOString().slice(0, 10).replace(/-/g, '_')}.log.gz` + const archivePath = path.join(logDir, archiveName); + + fs.createReadStream(logFile) + .pipe(zlib.createGzip()) + .pipe(fs.createWriteStream(archivePath)) + .on('finish', () => { + fs.writeFileSync(logFile, ''); + logger.info(`Логи архивированы в ${archiveName}`); + }) + .on('error', (err) => { + logger.error('Ошибка архивации:', err); + }); +}; + +cron.schedule('* * 1 * *', archiveLog); +module.exports = { + archiveLog, + logger +} \ No newline at end of file diff --git a/backend/src/config/startArchiveApp.js b/backend/src/config/startArchiveApp.js new file mode 100644 index 0000000..7b411c2 --- /dev/null +++ b/backend/src/config/startArchiveApp.js @@ -0,0 +1,7 @@ +const { archiveLog } = require('./logger'); +try { + archiveLog(); + console.log('Архивация запущена'); +} catch (err) { + console.error('Ошибка архивации:', err.message); +} \ No newline at end of file diff --git a/backend/src/config/startArchiveCards.js b/backend/src/config/startArchiveCards.js new file mode 100644 index 0000000..8e45137 --- /dev/null +++ b/backend/src/config/startArchiveCards.js @@ -0,0 +1,7 @@ +const { archiveLog } = require('./logger_cards'); +try { + archiveLog(); + console.log('Архивация запущена'); +} catch (err) { + console.error('Ошибка архивации:', err.message); +} \ No newline at end of file diff --git a/backend/src/routes/employee.js b/backend/src/routes/employee.js new file mode 100644 index 0000000..552764c --- /dev/null +++ b/backend/src/routes/employee.js @@ -0,0 +1,280 @@ +// ============================================ +// 📦 Маршруты для работы с сотрудниками (MySQL) +// ============================================ + +const express = require('express'); +const router = express.Router(); +const path = require('path'); +const fs = require('fs-extra'); +const { query, queryOne, isDBConnected, getDBStatus } = require('../config/db'); +const { logger } = require('../config/logger_cards'); + +// ============================================ +// 📊 Вспомогательные функции +// ============================================ + +/** + * Получение mock-данных сотрудника из config.json + */ +async function getMockEmployee(searchParam, type = 'card') { + try { + const configPath = path.join(__dirname, '../../config.json'); + const config = await fs.readJson(configPath); + + if (!config.testMode || !config.mockData) { + return null; + } + + const mockEmployees = config.mockData.employees || []; + + if (type === 'card') { + return mockEmployees.find(e => String(e.cardNumber) === String(searchParam)) || null; + } else if (type === 'id') { + return mockEmployees.find(e => e.id === parseInt(searchParam)) || null; + } + + return null; + } catch (err) { + logger.error('[MOCK ERROR]', { error: err.message }); + return null; + } +} + +/** + * Форматирование данных сотрудника + */ +function formatEmployeeResponse(employee) { + return { + ...employee, + category: employee.category || null, + departmentName: employee.departmentName || null, + departmentCode: employee.departmentCode || null + }; +} + +// ============================================ +// 🔍 Поиск по номеру карты +// ============================================ + +router.get('/card/:cardNumber', async (req, res) => { + const startTime = Date.now(); + const { cardNumber } = req.params; + + logger.info(`[SEARCH] Поиск сотрудника по номеру карты: ${cardNumber}`); + + try { + const dbStatus = await getDBStatus(); + + // 🔧 Если БД не доступна или включен тестовый режим + if (!dbStatus.connected || dbStatus.testMode) { + logger.warn(`[SEARCH] БД недоступна или testMode=true, пробуем mock-данные`); + + const mockEmployee = await getMockEmployee(cardNumber, 'card'); + + if (mockEmployee) { + logger.info(`[MOCK] Найден тестовый сотрудник: ${mockEmployee.famaly} ${mockEmployee.ima}`); + return res.json({ + ...formatEmployeeResponse(mockEmployee), + _mock: true, + _message: 'Тестовые данные (режим без БД)' + }); + } + + return res.status(404).json({ + message: 'Сотрудник не найден (тестовый режим)', + cardNumber: cardNumber, + dbStatus: dbStatus + }); + } + + // ✅ БД доступна - выполняем MySQL запрос + const sqlQuery = ` + SELECT + mk570.id, + mk570.cardNumber, + mk570.tnom, + mk501.famaly, + mk501.ima, + mk501.otch, + mk503.nameprof AS profession, + my501.pm AS category, + my401.name AS departmentName, + mk503.cex AS departmentCode, + mk570.organization, + mk570.identNumber + FROM mk570 + JOIN mk501 ON mk570.tnom = mk501.tnom + LEFT JOIN mk503 ON mk501.kod_sht = mk503.kod_sht AND mk501.tnom = mk503.tnom + LEFT JOIN my501 ON mk503.id_my501 = my501.id + LEFT JOIN my401 ON mk501.cex = my401.cex + WHERE mk570.cardNumber = ? + `; + + const results = await query(sqlQuery, [cardNumber]); + + if (results.length === 0) { + logger.warn(`[SEARCH] Сотрудник с картой ${cardNumber} не найден в БД`); + + const mockEmployee = await getMockEmployee(cardNumber, 'card'); + if (mockEmployee) { + logger.info(`[MOCK FALLBACK] Используем mock-данные`); + return res.json({ + ...formatEmployeeResponse(mockEmployee), + _mock: true, + _message: 'Данные из тестового режима (сотрудник не найден в БД)' + }); + } + + return res.status(404).json({ + message: 'Сотрудник не найден', + cardNumber: cardNumber + }); + } + + const result = results[0]; + const responseTime = Date.now() - startTime; + + logger.info(`[SQL] Найден сотрудник: ${result.famaly} ${result.ima} (ID: ${result.id})`); + logger.info(`[SQL] Время: ${responseTime}мс`); + + res.json(formatEmployeeResponse(result)); + + } catch (err) { + logger.error('[SQL ERROR]', { error: err.message }); + + const mockEmployee = await getMockEmployee(cardNumber, 'card'); + if (mockEmployee) { + logger.info(`[MOCK FALLBACK] Используем mock-данные из-за ошибки`); + return res.json({ + ...formatEmployeeResponse(mockEmployee), + _mock: true, + _message: 'Тестовые данные (ошибка БД)' + }); + } + + res.status(500).json({ + message: 'Ошибка сервера', + error: err.message, + dbStatus: await getDBStatus() + }); + } +}); + +// ============================================ +// 🔍 Поиск по ID +// ============================================ + +router.get('/:id', async (req, res) => { + const startTime = Date.now(); + const { id } = req.params; + + logger.info(`[SEARCH] Поиск сотрудника по ID: ${id}`); + + try { + const dbStatus = await getDBStatus(); + + if (!dbStatus.connected || dbStatus.testMode) { + const mockEmployee = await getMockEmployee(id, 'id'); + if (mockEmployee) { + logger.info(`[MOCK] Найден тестовый сотрудник по ID`); + return res.json({ + ...formatEmployeeResponse(mockEmployee), + _mock: true, + _message: 'Тестовые данные (режим без БД)' + }); + } + + return res.status(404).json({ + message: 'Сотрудник не найден (тестовый режим)', + id: id, + dbStatus: dbStatus + }); + } + + const sqlQuery = ` + SELECT + mk570.id, + mk570.cardNumber, + mk570.tnom, + mk501.famaly, + mk501.ima, + mk501.otch, + mk503.nameprof AS profession, + my501.pm AS category, + my401.name AS departmentName, + mk503.cex AS departmentCode, + mk570.organization, + mk570.identNumber + FROM mk570 + JOIN mk501 ON mk570.tnom = mk501.tnom + LEFT JOIN mk503 ON mk501.kod_sht = mk503.kod_sht AND mk501.tnom = mk503.tnom + LEFT JOIN my501 ON mk503.id_my501 = my501.id + LEFT JOIN my401 ON mk501.cex = my401.cex + WHERE mk570.id = ? + `; + + const results = await query(sqlQuery, [id]); + + if (results.length === 0) { + logger.warn(`[SEARCH] Сотрудник с ID ${id} не найден`); + + const mockEmployee = await getMockEmployee(id, 'id'); + if (mockEmployee) { + logger.info(`[MOCK FALLBACK] Используем mock-данные`); + return res.json({ + ...formatEmployeeResponse(mockEmployee), + _mock: true, + _message: 'Данные из тестового режима' + }); + } + + return res.status(404).json({ + message: 'Сотрудник не найден', + id: id + }); + } + + const result = results[0]; + const responseTime = Date.now() - startTime; + + logger.info(`[SQL] Найден сотрудник: ${result.famaly} ${result.ima} (ID: ${result.id})`); + logger.info(`[SQL] Время: ${responseTime}мс`); + + res.json(formatEmployeeResponse(result)); + + } catch (err) { + logger.error('[SQL ERROR]', { error: err.message }); + + const mockEmployee = await getMockEmployee(id, 'id'); + if (mockEmployee) { + logger.info(`[MOCK FALLBACK] Используем mock-данные из-за ошибки`); + return res.json({ + ...formatEmployeeResponse(mockEmployee), + _mock: true, + _message: 'Тестовые данные (ошибка БД)' + }); + } + + res.status(500).json({ + message: 'Ошибка сервера', + error: err.message, + dbStatus: await getDBStatus() + }); + } +}); + +// ============================================ +// 📊 Статус сервиса +// ============================================ + +router.get('/status', async (req, res) => { + const dbStatus = await getDBStatus(); + + res.json({ + service: 'employee-search', + database: dbStatus, + timestamp: new Date().toISOString() + }); +}); + +module.exports = router; \ No newline at end of file diff --git a/backend/src/routes/handbook.js b/backend/src/routes/handbook.js new file mode 100644 index 0000000..353bdf4 --- /dev/null +++ b/backend/src/routes/handbook.js @@ -0,0 +1,37 @@ +const express = require('express'); +const router = express.Router(); +const path = require('path'); +const fs = require('fs'); +const mammoth = require('mammoth'); +const { logger } = require('../config/logger'); +require('dotenv').config({ path: path.join(__dirname, '../../config.env') }); +router.get('/test', (req, res) => { + res.send('Handbook test route works!'); +}); +router.get('/html', async (req, res) => { + const docxPath = path.join(__dirname, process.env.DOCX_PATH); + logger.info('Checking document', { + path: docxPath, + exists: fs.existsSync(docxPath) + }); + + if (!fs.existsSync(docxPath)) { + logger.error('Document not found', { path: docxPath }); + return res.status(404).send('Документ не найден'); + } + + try { + const result = await mammoth.convertToHtml({ path: docxPath }); + logger.info('Document converted successfully', { path: docxPath }); + res.send(result.value); + } catch (err) { + logger.error('Conversion failed', { + path: docxPath, + error: err.message, + stack: err.stack + }); + res.status(500).send('Ошибка при конвертации документа'); + } +}); + +module.exports = router; \ No newline at end of file diff --git a/backend/src/server.js b/backend/src/server.js new file mode 100644 index 0000000..1627fae --- /dev/null +++ b/backend/src/server.js @@ -0,0 +1,329 @@ +const express = require('express'); +const cors = require('cors'); +const path = require('path'); +const fs = require('fs-extra'); +const { connectDB } = require('./config/db'); +const { logger } = require('./config/logger'); +const handbookRoutes = require('./routes/handbook'); +const employeeRoutes = require('./routes/employee'); +require('dotenv').config({ path: path.join(__dirname, '../config.env') }); + +async function connectToNetworkShare(config) { + if (config.networkCredentials && config.networkCredentials.username) { + try { + const { exec } = require('child_process'); + const { promisify } = require('util'); + const execAsync = promisify(exec); + const payslipsPath = config.payslipsPath; + const username = config.networkCredentials.username; + const password = config.networkCredentials.password; + const domain = config.networkCredentials.domain; + const netUseCommand = `net use \\${payslipsPath} ${password} /user:${domain ? domain + '\\' : ''}${username}`; + + logger.info(`Attempting to connect to network share with credentials`); + const { stdout, stderr } = await execAsync(netUseCommand); + + if (stderr) { + logger.warn(`Network share connection warning: ${stderr}`); + } + + logger.info(`Network share connection result: ${stdout}`); + return true; + } catch (error) { + logger.error('Failed to connect to network share', { error: error.message }); + return false; + } + } + return true; +} + +// ============================================ +// 🚀 Инициализация Express +// ============================================ + +const app = express(); +app.use(cors()); +app.use(express.json()); + +// ============================================ +// 📍 Маршруты API +// ============================================ + +app.use('/api/handbook', handbookRoutes); +app.use('/api/employee', employeeRoutes); + +// ============================================ +// 🧪 Тестовые эндпоинты +// ============================================ + +app.get('/api/test', (req, res) => { + res.json({ message: 'API работает' }); +}); + +// ============================================ +// 📊 Эндпоинт для получения статуса системы +// ============================================ + +app.get('/api/system-status', async (req, res) => { + try { + const configPath = path.join(__dirname, '../config.json'); + const config = await fs.readJson(configPath); + const { getDBStatus } = require('./config/db'); + const dbStatus = await getDBStatus(); + + let networkAccess = false; + let networkError = null; + let networkContents = []; + + try { + networkAccess = await fs.pathExists(config.payslipsPath); + if (networkAccess) { + const stats = await fs.stat(config.payslipsPath); + networkAccess = stats.isDirectory(); + if (networkAccess) { + networkContents = await fs.readdir(config.payslipsPath); + if (networkContents.length > 10) { + networkContents = networkContents.slice(0, 10); + networkContents.push(`... и еще ${networkContents.length - 10} элементов`); + } + } + } + } catch (err) { + networkAccess = false; + networkError = err.message; + } + + const serverInfo = { + uptime: process.uptime(), + memory: process.memoryUsage(), + nodeVersion: process.version, + platform: process.platform, + cwd: process.cwd(), + pid: process.pid + }; + + res.json({ + status: 'ok', + timestamp: new Date().toISOString(), + server: serverInfo, + database: dbStatus, + networkShare: { + path: config.payslipsPath, + accessible: networkAccess, + error: networkError, + contents: networkContents, + testMode: config.testMode || false + }, + config: { + testMode: config.testMode || false, + serverHost: config.server?.host || 'localhost', + serverPort: config.server?.port || '3001' + } + }); + + } catch (err) { + logger.error('Ошибка получения статуса', { error: err.message }); + res.status(500).json({ + status: 'error', + message: 'Ошибка получения статуса системы', + error: err.message + }); + } +}); + +// ============================================ +// 🌐 Тест сетевой папки +// ============================================ + +app.get('/api/test-network', async (req, res) => { + try { + const configPath = path.join(__dirname, '../config.json'); + const config = await fs.readJson(configPath); + const payslipBasePath = config.payslipsPath; + + logger.info(`Testing network connection to: ${payslipBasePath}`); + + const networkConnected = await connectToNetworkShare(config); + logger.info(`Network share connection successful: ${networkConnected}`); + + const testResults = { + basePath: payslipBasePath, + basePathExists: false, + basePathAccessible: false, + basePathContents: [], + networkConnected: networkConnected, + error: null + }; + + try { + testResults.basePathExists = await fs.pathExists(payslipBasePath); + logger.info(`Base path exists: ${testResults.basePathExists}`); + + if (testResults.basePathExists) { + const stats = await fs.stat(payslipBasePath); + testResults.basePathAccessible = stats.isDirectory(); + logger.info(`Base path is directory: ${testResults.basePathAccessible}`); + + if (testResults.basePathAccessible) { + testResults.basePathContents = await fs.readdir(payslipBasePath); + logger.info(`Base path contents: ${JSON.stringify(testResults.basePathContents)}`); + } + } + } catch (error) { + testResults.error = error.message; + logger.error('Network test error', { error: error.message, stack: error.stack }); + } + + res.json(testResults); + } catch (err) { + logger.error('Error in network test', { error: err.message, stack: err.stack }); + res.status(500).json({ error: err.message }); + } +}); + +// ============================================ +// 📄 Получение расчетного листка (с периодом) +// ============================================ + +app.get('/api/payslip/:period/:fileName', async (req, res) => { + try { + const { period, fileName } = req.params; + const configPath = path.join(__dirname, '../config.json'); + const config = await fs.readJson(configPath); + const payslipBasePath = config.payslipsPath; + + logger.info(`Payslip request - Period: ${period}, File: ${fileName}`); + logger.info(`Base path from config: ${payslipBasePath}`); + + const networkConnected = await connectToNetworkShare(config); + logger.info(`Network share connection for payslip: ${networkConnected}`); + + let finalPayslipPath; + if (path.isAbsolute(payslipBasePath)) { + finalPayslipPath = path.join(payslipBasePath, period, fileName); + } else { + const projectRoot = path.resolve(__dirname, '../../'); + finalPayslipPath = path.join(projectRoot, payslipBasePath, period, fileName); + } + + logger.info(`Final payslip path: ${finalPayslipPath}`); + + try { + const basePathExists = await fs.pathExists(payslipBasePath); + logger.info(`Base path exists: ${basePathExists}`); + + if (basePathExists) { + const basePathStats = await fs.stat(payslipBasePath); + logger.info(`Base path stats: ${JSON.stringify({ + isDirectory: basePathStats.isDirectory(), + permissions: basePathStats.mode, + size: basePathStats.size + })}`); + + const basePathContents = await fs.readdir(payslipBasePath); + logger.info(`Base path contents: ${JSON.stringify(basePathContents)}`); + + const periodPath = path.join(payslipBasePath, period); + const periodPathExists = await fs.pathExists(periodPath); + logger.info(`Period path exists: ${periodPathExists} (${periodPath})`); + + if (periodPathExists) { + const periodPathContents = await fs.readdir(periodPath); + logger.info(`Period path contents: ${JSON.stringify(periodPathContents)}`); + } + } + } catch (basePathError) { + logger.error('Error checking base path', { + error: basePathError.message, + stack: basePathError.stack + }); + } + + if (await fs.pathExists(finalPayslipPath)) { + logger.info(`Payslip found, sending file: ${finalPayslipPath}`); + res.sendFile(finalPayslipPath); + } else { + logger.warn(`Payslip not found: ${finalPayslipPath}`); + res.status(404).json({ + message: 'Расчетный листок не найден', + path: finalPayslipPath, + period: period, + fileName: fileName, + basePath: payslipBasePath, + networkConnected: networkConnected + }); + } + } catch (err) { + logger.error('Error getting payslip', { error: err.message, stack: err.stack }); + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// ============================================ +// 📄 Получение расчетного листка (без периода) +// ============================================ + +app.get('/api/payslip/:fileName', async (req, res) => { + try { + const { fileName } = req.params; + const configPath = path.join(__dirname, '../config.json'); + const config = await fs.readJson(configPath); + const payslipBasePath = config.payslipsPath; + + let finalPayslipPath; + if (path.isAbsolute(payslipBasePath)) { + finalPayslipPath = path.join(payslipBasePath, fileName); + } else { + const projectRoot = path.resolve(__dirname, '../../'); + finalPayslipPath = path.join(projectRoot, payslipBasePath, fileName); + } + + logger.info(`Attempting to find payslip at resolved path: ${finalPayslipPath}`); + + if (await fs.pathExists(finalPayslipPath)) { + res.sendFile(finalPayslipPath); + } else { + logger.warn(`Payslip not found: ${finalPayslipPath}`); + res.status(404).json({ message: 'Расчетный листок не найден' }); + } + } catch (err) { + logger.error('Error getting payslip', { error: err.message, stack: err.stack }); + res.status(500).json({ message: 'Ошибка сервера' }); + } +}); + +// ============================================ + +// ============================================ + +app.get('/api/db-status', async (req, res) => { + try { + const { query } = require('./config/db'); + await query('SELECT 1'); + res.status(200).json({ status: 'ok', message: 'DB connection successful' }); + } catch (err) { + logger.error('Database connection check failed', { error: err.message, stack: err.stack }); + res.status(500).json({ status: 'error', message: 'DB connection failed' }); + } +}); + +async function startServer() { + try { + const configPath = path.join(__dirname, '../config.json'); + const config = await fs.readJson(configPath); + const { host, port } = config.server; + + await connectDB(); + app.listen(port, host, () => { + logger.info(`Server is running on http://${host}:${port}`); + }); + } catch (err) { + if (logger) { + logger.error('Failed to start server:', { error: err.message, stack: err.stack }); + } else { + console.error('Failed to start server:', err); + } + } +} + +startServer(); \ No newline at end of file diff --git a/backend/startArchive/app.bat b/backend/startArchive/app.bat new file mode 100644 index 0000000..8957e50 --- /dev/null +++ b/backend/startArchive/app.bat @@ -0,0 +1,3 @@ +@echo off +echo let's go... +node "D:\rasch\backend\src\config\startArchiveApp.js" \ No newline at end of file diff --git a/backend/startArchive/cards.bat b/backend/startArchive/cards.bat new file mode 100644 index 0000000..5245535 --- /dev/null +++ b/backend/startArchive/cards.bat @@ -0,0 +1,3 @@ +@echo off +echo let's go... +node "D:\rasch\backend\src\config\startArchiveCards.js" diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..b87cb00 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,46 @@ +# Getting Started with Create React App + +This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). + +## Available Scripts + +In the project directory, you can run: + +### `npm start` + +Runs the app in the development mode.\ +Open [http://localhost:3000](http://localhost:3000) to view it in the browser. + +The page will reload if you make edits.\ +You will also see any lint errors in the console. + +### `npm test` + +Launches the test runner in the interactive watch mode.\ +See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. + +### `npm run build` + +Builds the app for production to the `build` folder.\ +It correctly bundles React in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.\ +Your app is ready to be deployed! + +See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. + +### `npm run eject` + +**Note: this is a one-way operation. Once you `eject`, you can’t go back!** + +If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. + +Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. + +You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. + +## Learn More + +You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). + +To learn React, check out the [React documentation](https://reactjs.org/). diff --git a/frontend/librgsec.dll b/frontend/librgsec.dll new file mode 100644 index 0000000000000000000000000000000000000000..b03cdf3c6296a1323f86f5ad1e612d908afe5f15 GIT binary patch literal 436224 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 z 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 R?auLzg8kpG|Brg$-vLxVzbXI# literal 0 HcmV?d00001 diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..b89bdbe --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,24440 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.0", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "electron-is-dev": "^2.0.0", + "ffi-napi": "^4.0.3", + "fs": "^0.0.1-security", + "http": "^0.0.1-security", + "https": "^1.0.0", + "mammoth": "^1.9.1", + "nfc-pcsc": "^0.8.1", + "os": "^0.1.2", + "path": "^0.12.7", + "pdfjs-dist": "2.16.105", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-pdf": "6.2.2", + "react-scripts": "5.0.1", + "ref-array-napi": "^1.2.2", + "ref-napi": "^3.0.3", + "ref-struct-napi": "^1.1.1", + "serialport": "^13.0.0", + "stream": "^0.0.3", + "textract": "^2.5.0", + "typescript": "^4.8.4", + "util": "^0.12.5", + "web-vitals": "^2.1.4", + "zlib": "^1.0.5" + }, + "devDependencies": { + "@types/react-pdf": "^6.2.0", + "buffer": "^6.0.3", + "concurrently": "^7.5.0", + "crypto-browserify": "^3.12.1", + "electron": "^21.2.0", + "electron-builder": "^23.6.0", + "electron-rebuild": "^3.2.9", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "querystring-es3": "^0.2.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "url": "^0.11.4", + "wait-on": "^6.0.1" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.3.tgz", + "integrity": "sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==", + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", + "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", + "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.4", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.4", + "@babel/types": "^7.27.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.27.5.tgz", + "integrity": "sha512-HLkYQfRICudzcOtjGwkPvGc5nF1b4ljLZh1IRDj50lRZ718NAKVgQpIAUX8bfg6u/yuSKY3L7E0YzIV+OxrB8Q==", + "license": "MIT", + "dependencies": { + "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0", + "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/@babel/eslint-parser/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", + "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", + "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", + "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", + "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz", + "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-decorators": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", + "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", + "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", + "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", + "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", + "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", + "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.27.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.3.tgz", + "integrity": "sha512-s4Jrok82JpiaIprtY2nHsYmrThKvvwgHwjgd7UMiYhZaN0asdXNLr0y+NjTfkA7SyQE5i2Fb7eawUOZmLvyqOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", + "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-flow": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.3.tgz", + "integrity": "sha512-7ZZtznF9g4l2JCImCo5LNKFHB5eXnN39lLtLY5Tg+VkR0jwOt7TBciMckuiQIOIW7L5tkQOCh3bVGYeXgMx52Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.3", + "@babel/plugin-transform-parameters": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", + "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", + "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", + "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", + "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.4.tgz", + "integrity": "sha512-D68nR5zxU64EUzV8i7T3R5XP0Xhrou/amNnddsRQssx6GrTLdZl1rLxyjtVZBd+v/NVX4AbTPOB5aU8thAZV1A==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", + "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-syntax-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", + "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.27.1", + "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", + "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-typescript": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", + "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.3", + "@babel/parser": "^7.27.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", + "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "license": "MIT" + }, + "node_modules/@csstools/normalize.css": { + "version": "12.1.1", + "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz", + "integrity": "sha512-YAYeJ+Xqh7fUou1d1j9XHl44BmsuThiTr4iNrgCQ3J27IbhXsxXDGZ1cXv8Qvs99d4rBbLiSKy3+WZiet32PcQ==", + "license": "CC0-1.0" + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "license": "CC0-1.0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { + "version": "5.1.1-v1", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", + "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "license": "MIT", + "dependencies": { + "eslint-scope": "5.1.1" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.16.tgz", + "integrity": "sha512-kLQc9xz6QIqd2oIYyXRUiAp79kGpFBm3fEM9ahfG1HI0WI5gdZ2OVHWdmZYnwODt7ISck+QuQ6sBPrtvUBML7Q==", + "license": "MIT", + "dependencies": { + "ansi-html": "^0.0.9", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^4.2.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <5.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x || 5.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pokusew/pcsclite": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@pokusew/pcsclite/-/pcsclite-0.6.0.tgz", + "integrity": "sha512-jX7zRXM2Or5Pms1AFjNtawsXDjLiZOzOUo7Sf0put7Pnq/EKIR9g0KvTx62HtwdPpVP6hWHGydUTHgIi9PxodQ==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.14.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "license": "MIT" + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "license": "MIT" + }, + "node_modules/@serialport/binding-mock": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@serialport/binding-mock/-/binding-mock-10.2.2.tgz", + "integrity": "sha512-HAFzGhk9OuFMpuor7aT5G1ChPgn5qSsklTFOTUX72Rl6p0xwcSVsRtG/xaGp6bxpN7fI9D/S8THLBWbBgS6ldw==", + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@serialport/bindings-cpp": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-13.0.0.tgz", + "integrity": "sha512-r25o4Bk/vaO1LyUfY/ulR6hCg/aWiN6Wo2ljVlb4Pj5bqWGcSRC4Vse4a9AcapuAu/FeBzHCbKMvRQeCuKjzIQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "12.0.0", + "debug": "4.4.0", + "node-addon-api": "8.3.0", + "node-gyp-build": "4.8.4" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz", + "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz", + "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==", + "license": "MIT", + "dependencies": { + "@serialport/parser-delimiter": "12.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.0.tgz", + "integrity": "sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/@serialport/bindings-interface": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@serialport/bindings-interface/-/bindings-interface-1.2.2.tgz", + "integrity": "sha512-CJaUd5bLvtM9c5dmO9rPBHPXTa9R2UwpkJ0wdh9JCYcbrPWsKz+ErvR0hBLeo7NPeiFdjFO4sonRljiw4d2XiA==", + "license": "MIT", + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-13.0.0.tgz", + "integrity": "sha512-32yvqeTAqJzAEtX5zCrN1Mej56GJ5h/cVFsCDPbF9S1ZSC9FWjOqNAgtByseHfFTSTs/4ZBQZZcZBpolt8sUng==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-13.0.0.tgz", + "integrity": "sha512-RErAe57g9gvnlieVYGIn1xymb1bzNXb2QtUQd14FpmbQQYlcrmuRnJwKa1BgTCujoCkhtaTtgHlbBWOxm8U2uA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-13.0.0.tgz", + "integrity": "sha512-Qqyb0FX1avs3XabQqNaZSivyVbl/yl0jywImp7ePvfZKLwx7jBZjvL+Hawt9wIG6tfq6zbFM24vzCCK7REMUig==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-13.0.0.tgz", + "integrity": "sha512-a0w0WecTW7bD2YHWrpTz1uyiWA2fDNym0kjmPeNSwZ2XCP+JbirZt31l43m2ey6qXItTYVuQBthm75sPVeHnGA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-13.0.0.tgz", + "integrity": "sha512-60ZDDIqYRi0Xs2SPZUo4Jr5LLIjtb+rvzPKMJCohrO6tAqSDponcNpcB1O4W21mKTxYjqInSz+eMrtk0LLfZIg==", + "license": "MIT", + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-13.0.0.tgz", + "integrity": "sha512-dov3zYoyf0dt1Sudd1q42VVYQ4WlliF0MYvAMA3MOyiU1IeG4hl0J6buBA2w4gl3DOCC05tGgLDN/3yIL81gsA==", + "license": "MIT", + "dependencies": { + "@serialport/parser-delimiter": "13.0.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-13.0.0.tgz", + "integrity": "sha512-JNUQA+y2Rfs4bU+cGYNqOPnNMAcayhhW+XJZihSLQXOHcZsFnOa2F9YtMg9VXRWIcnHldHYtisp62Etjlw24bw==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-13.0.0.tgz", + "integrity": "sha512-m7HpIf56G5XcuDdA3DB34Z0pJiwxNRakThEHjSa4mG05OnWYv0IG8l2oUyYfuGMowQWaVnQ+8r+brlPxGVH+eA==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-13.0.0.tgz", + "integrity": "sha512-fUHZEExm6izJ7rg0A1yjXwu4sOzeBkPAjDZPfb+XQoqgtKAk+s+HfICiYn7N2QU9gyaeCO8VKgWwi+b/DowYOg==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-13.0.0.tgz", + "integrity": "sha512-DoXJ3mFYmyD8X/8931agJvrBPxqTaYDsPoly9/cwQSeh/q4EjQND9ySXBxpWz5WcpyCU4jOuusqCSAPsbB30Eg==", + "license": "MIT", + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-13.0.0.tgz", + "integrity": "sha512-F7xLJKsjGo2WuEWMSEO1SimRcOA+WtWICsY13r0ahx8s2SecPQH06338g28OT7cW7uRXI7oEQAk62qh5gHJW3g==", + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "debug": "4.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/core": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", + "license": "MIT", + "dependencies": { + "@svgr/plugin-jsx": "^5.5.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", + "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.12.6" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", + "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@svgr/babel-preset": "^5.5.0", + "@svgr/hast-util-to-babel-ast": "^5.5.0", + "svg-parser": "^2.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", + "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.5.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/react/node_modules/@testing-library/dom": { + "version": "8.20.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.1.tgz", + "integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@testing-library/react/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "license": "Apache-2.0", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.12", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.12.tgz", + "integrity": "sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "license": "MIT", + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "license": "MIT" + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.23.tgz", + "integrity": "sha512-/LDXMQh55EzZQ0uVAZmKKhfENivEvWz6E+EYzh+/MCjMhNsotd+ZHhBGIjFDTi6+fz0OhQQQLbTgdQIxxCsC0w==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/react-pdf": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@types/react-pdf/-/react-pdf-6.2.0.tgz", + "integrity": "sha512-OSCYmrfaJvpXkM5V4seUMAhUDOAOqbGQf9kwv14INyTf7AjDs2ukfkkQrLWRQ8OjWrDklbXYWh5l7pT7l0N76g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*", + "pdfjs-dist": "^2.16.105" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "license": "MIT", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.9.tgz", + "integrity": "sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true, + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/universal": "1.2.1", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.6.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.10", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^3.1.2", + "read-config-file": "6.2.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.7", + "tar": "^6.1.11", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/app-builder-lib/node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/app-builder-lib/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-index": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-index/-/array-index-1.0.0.tgz", + "integrity": "sha512-jesyNbBkLQgGZMSwA1FanaFjalb1mZUGxGeUEkSDidzgrbjBGhvizJkaItdhkt8eIHFOJC7nDsrXk+BaehTdRw==", + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "es6-symbol": "^3.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/array-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/array-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-array-method-boxes-properly": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT" + }, + "node_modules/asar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", + "dev": true, + "license": "MIT", + "dependencies": { + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" + } + }, + "node_modules/asar/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-loader": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.4.1.tgz", + "integrity": "sha512-nXzRChX+Z1GoE6yWavBQg6jDslyFF3SDjl2paADuoQtQW10JqShJt62R6eJQ5m/pjJFDT8xgKIWSP85OY8eXeA==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.4", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-named-asset-import": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", + "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "license": "MIT" + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-react-app": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.1.0.tgz", + "integrity": "sha512-f9B1xMdnkCIqe+2dHrJsoQFRz7reChaAHE/65SdaykPklQqhme2WaC08oD3is77x9ff98/9EazAKFDZv5rFEQg==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/plugin-proposal-class-properties": "^7.16.0", + "@babel/plugin-proposal-decorators": "^7.16.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", + "@babel/plugin-proposal-numeric-separator": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.0", + "@babel/plugin-proposal-private-methods": "^7.16.0", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-transform-flow-strip-types": "^7.16.0", + "@babel/plugin-transform-react-display-name": "^7.16.0", + "@babel/plugin-transform-runtime": "^7.16.4", + "@babel/preset-env": "^7.16.4", + "@babel/preset-react": "^7.16.0", + "@babel/preset-typescript": "^7.16.0", + "@babel/runtime": "^7.16.3", + "babel-plugin-macros": "^3.1.0", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24" + } + }, + "node_modules/babel-preset-react-app/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babyparse": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/babyparse/-/babyparse-0.2.1.tgz", + "integrity": "sha512-94zhgPYkWLpOCB8BkGyGkXNFCBh0TsRWBGmmoXvR8imRe/hQiLIm0V5zVoKPKIjQ8y52hKtFchiPxJcz1QaH5Q==", + "deprecated": "Deprecated in favour of PapaParse, which now supports Node.js" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/bfj": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.1.0.tgz", + "integrity": "sha512-I6MMLkn+anzNdCUp9hMRyui1HaNEUCco50lxbvNS4+EyXg8lN3nJ48PjPWtbH8UVS9CuMoaKE9U2V3l29DaRQw==", + "license": "MIT", + "dependencies": { + "bluebird": "^3.7.2", + "check-types": "^11.2.3", + "hoopy": "^0.1.4", + "jsonpath": "^1.1.1", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/bn.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "license": "BSD-2-Clause" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", + "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001718", + "electron-to-chromium": "^1.5.160", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/builder-util/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/builder-util/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/builder-util/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cacheable-request/node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "license": "MIT", + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001724", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001724.tgz", + "integrity": "sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/capture-stack-trace": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", + "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cfb": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-0.11.1.tgz", + "integrity": "sha512-1GEqpcO365hTRpP+GzHXNiUF5SB7qmY5aVYwrJm8ISx27HzHpaFlTQhnOCMNhqP0WPkHR0OGE9WDSqtksV4anw==", + "license": "Apache-2.0", + "dependencies": { + "commander": "" + }, + "bin": { + "cfb": "bin/cfb.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-types": { + "version": "11.2.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", + "integrity": "sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==", + "license": "MIT" + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha512-9LDHQy1jHc/eXMzPN6/oah9Qba4CjdKECC7YYEE/2zge/tsGwt19NQp5NFdfd5Lx6TZlyC5SXNQkG41P9r6XDg==", + "license": "MIT", + "dependencies": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash": "^4.15.0", + "parse5": "^3.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cheerio/node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==", + "license": "BSD-like", + "dependencies": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "node_modules/cheerio/node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "license": "BSD-2-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "node_modules/cheerio/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "license": "BSD-2-Clause" + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "license": "MIT", + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/cheerio/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "license": "MIT", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/coa/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/coa/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "devOptional": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/component-emitter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-2.0.0.tgz", + "integrity": "sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concurrently": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.6.0.tgz", + "integrity": "sha512-BKtRgvcJGeZ4XttiDiNcFiRlxoAeZOseqUvyYRUp/Vtd+9p1ULmeoSqGsDA+2ivdeDFpqrJvGvmI+StKfKl5hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.29.1", + "lodash": "^4.17.21", + "rxjs": "^7.0.0", + "shell-quote": "^1.7.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^17.3.1" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.43.0.tgz", + "integrity": "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.43.0.tgz", + "integrity": "sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.25.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.43.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.43.0.tgz", + "integrity": "sha512-i/AgxU2+A+BbJdMxh3v7/vxi2SbFqxiFmg6VsDwYB4jkucrd1BZNA9a9gphC0fYMG5IBSgQcbQnk865VCLe7xA==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", + "license": "MIT", + "dependencies": { + "capture-stack-trace": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "license": "CC0-1.0", + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "license": "MIT" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "license": "MIT" + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "CC0-1.0" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "license": "MIT", + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "license": "MIT" + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/dingbat-to-unicode": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz", + "integrity": "sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==", + "license": "BSD-2-Clause" + }, + "node_modules/dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "bin": { + "dircompare": "src/cli/dircompare.js" + } + }, + "node_modules/dir-compare/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dmg-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/dmg-builder/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "license": "MIT" + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dommatrix": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dommatrix/-/dommatrix-1.0.3.tgz", + "integrity": "sha512-l32Xp/TLgWb8ReqbVJAFIvXmY7go4nTxxlWiAFyhoQw9RKEOHBZNnyGvJWqDVSPmq3Y9HlM4npqF/T6VMOXhww==", + "deprecated": "dommatrix is no longer maintained. Please use @thednp/dommatrix.", + "license": "MIT" + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "license": "BSD-2-Clause" + }, + "node_modules/duck": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/duck/-/duck-0.1.12.tgz", + "integrity": "sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==", + "license": "BSD", + "dependencies": { + "underscore": "^1.13.1" + } + }, + "node_modules/duck/node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "21.4.4", + "resolved": "https://registry.npmjs.org/electron/-/electron-21.4.4.tgz", + "integrity": "sha512-N5O7y7Gtt7mDgkJLkW49ETiT8M3myZ9tNIEvGTKhpBduX4WdgMj6c3hYeYBD6XW7SvbRkWEQaTl25RNday8Xpw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + } + }, + "node_modules/electron-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "dmg-builder": "23.6.0", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.1" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder/node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/electron-builder/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-is-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-2.0.0.tgz", + "integrity": "sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-alloc": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/electron-osx-sign/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-publish": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-rebuild": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-3.2.9.tgz", + "integrity": "sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw==", + "deprecated": "Please use @electron/rebuild moving forward. There is no API change, just a package name change", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "lzma-native": "^8.0.5", + "node-abi": "^3.0.0", + "node-api-version": "^0.1.4", + "node-gyp": "^9.0.0", + "ora": "^5.1.0", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/src/cli.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/electron-rebuild/node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/electron-rebuild/node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/electron-rebuild/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-rebuild/node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-rebuild/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-rebuild/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/electron-rebuild/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/electron-rebuild/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-rebuild/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-rebuild/node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/electron-rebuild/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-rebuild/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.171", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz", + "integrity": "sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/epub2": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/epub2/-/epub2-1.3.4.tgz", + "integrity": "sha512-KSkxyVaIDZfez+epxNVr9ALql4TxAuyJeweBFJ/bQ8J+bLALb5qZdfe16T7ZbyuC1GXlyUMVDkSUP7SB95pc/A==", + "license": "ISC", + "dependencies": { + "adm-zip": "^0.4.4", + "bluebird": "^3.5.1", + "xml2js": "^0.4.4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-react-app": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", + "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/eslint-parser": "^7.16.3", + "@rushstack/eslint-patch": "^1.1.0", + "@typescript-eslint/eslint-plugin": "^5.5.0", + "@typescript-eslint/parser": "^5.5.0", + "babel-preset-react-app": "^10.0.1", + "confusing-browser-globals": "^1.0.11", + "eslint-plugin-flowtype": "^8.0.3", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.3.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.1", + "eslint-plugin-react-hooks": "^4.3.0", + "eslint-plugin-testing-library": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-flowtype": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", + "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", + "license": "BSD-3-Clause", + "dependencies": { + "lodash": "^4.17.21", + "string-natural-compare": "^3.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@babel/plugin-syntax-flow": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.9", + "eslint": "^8.1.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "25.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", + "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-testing-library": { + "version": "5.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.1.tgz", + "integrity": "sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^5.58.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6" + }, + "peerDependencies": { + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/ffi-napi": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/ffi-napi/-/ffi-napi-4.0.3.tgz", + "integrity": "sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "get-uv-event-loop-napi-h": "^1.0.5", + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.1", + "ref-napi": "^2.0.1 || ^3.0.2", + "ref-struct-di": "^1.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ffi-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/form-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", + "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/frac": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", + "integrity": "sha512-1Lzf2jOjhIkRaa013KlxNOn2D9FemmQNeYUDpEIyPeFXmpLvbZXJOlaayMBT6JKXx+afQFgQ1QJ4kaF7Z07QFQ==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==", + "license": "ISC" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-from-current-process-h": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz", + "integrity": "sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw==", + "license": "MIT" + }, + "node_modules/get-uv-event-loop-napi-h": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz", + "integrity": "sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg==", + "license": "MIT", + "dependencies": { + "get-symbol-from-current-process-h": "^1.0.1" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/global-tunnel-ng/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true, + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/harb": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/harb/-/harb-0.0.7.tgz", + "integrity": "sha512-UgVmR4wXa1PXz9TKLrqwljer9bXOXNXBsWgKSk+Fauyi5CD4QWBeX+5fglXRUCHPrpfTyeA9bSmgDyjIHTLS4A==", + "deprecated": "harb has been merged into xlsx", + "license": "Apache-2.0", + "dependencies": { + "babyparse": "0.2.1", + "codepage": "", + "commander": "", + "ssf": "0.8.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "license": "(Apache-2.0 OR MPL-1.1)" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==", + "license": "ISC" + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "license": "ISC" + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", + "license": "MIT", + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "license": "MIT" + }, + "node_modules/is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "license": "MIT" + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/j": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/j/-/j-0.4.3.tgz", + "integrity": "sha512-4VkRtT9V/3fFjdy4m53W8ME/luT3YAXh+aRd4OsaKRM0D6Rm+vVtPZrOKxeXkLbEJxCM/UVRUy66i7zBPi7dcg==", + "deprecated": "The underlying libraries have been unified. See < https://cdn.sheetjs.com/j/ >.", + "license": "Apache-2.0", + "dependencies": { + "commander": "", + "concat-stream": "", + "harb": "~0.0.5", + "xlsjs": "~0.7.1", + "xlsx": "~0.7.11" + }, + "bin": { + "j": "bin/j.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "license": "MIT", + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "license": "MIT", + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "license": "MIT", + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "license": "MIT", + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.2.tgz", + "integrity": "sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jschardet": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.4.1.tgz", + "integrity": "sha512-VY1R9qIkqzb9si89CKU35n1LutiHmCxcDo+u8dEA+vl9VykJuB3Kf2Cu24AT03utlsGEoOl8c3c0qpPh8mOY8Q==", + "license": "LGPL-2.1+", + "engines": { + "node": "*" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "license": "MIT", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lop": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/lop/-/lop-0.4.2.tgz", + "integrity": "sha512-RefILVDQ4DKoRZsJ4Pj22TxE3omDO47yFpkIBoDKzkqPRISs5U1cnAdg/5583YPkWPaLIYHOKRMQSvjFsO26cw==", + "license": "BSD-2-Clause", + "dependencies": { + "duck": "^0.1.12", + "option": "~0.2.1", + "underscore": "^1.13.1" + } + }, + "node_modules/lop/node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "license": "MIT", + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/lzma-native": { + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-8.0.6.tgz", + "integrity": "sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^3.1.0", + "node-gyp-build": "^4.2.1", + "readable-stream": "^3.6.0" + }, + "bin": { + "lzmajs": "bin/lzmajs" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/lzma-native/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", + "license": "MIT", + "funding": { + "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", + "license": "MIT", + "funding": { + "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mammoth": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/mammoth/-/mammoth-1.9.1.tgz", + "integrity": "sha512-4S2v1eP4Yo4so0zGNicJKcP93su3wDPcUk+xvkjSG75nlNjSkDJu8BhWQ+e54BROM0HfA6nPzJn12S6bq2Ko6w==", + "license": "BSD-2-Clause", + "dependencies": { + "@xmldom/xmldom": "^0.8.6", + "argparse": "~1.0.3", + "base64-js": "^1.5.1", + "bluebird": "~3.4.0", + "dingbat-to-unicode": "^1.0.1", + "jszip": "^3.7.1", + "lop": "^0.4.2", + "path-is-absolute": "^1.0.0", + "underscore": "^1.13.1", + "xmlbuilder": "^10.0.0" + }, + "bin": { + "mammoth": "bin/mammoth" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/mammoth/node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/mammoth/node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/mammoth/node_modules/xmlbuilder": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-10.1.1.tgz", + "integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marked": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", + "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==", + "license": "MIT", + "bin": { + "marked": "bin/marked" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "license": "MIT", + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "license": "MIT", + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/meow/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "license": "MIT", + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-refs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz", + "integrity": "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==", + "license": "MIT", + "funding": { + "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/nfc-pcsc": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/nfc-pcsc/-/nfc-pcsc-0.8.1.tgz", + "integrity": "sha512-wEfacG0dwPVZOG/WY28Mk3P4Q+yz6q7LnjpnZvdFddx3iXavEXiGhftRZXBtudr0NrzH1MrGWSkWq77tef7BMA==", + "license": "MIT", + "dependencies": { + "@pokusew/pcsclite": "^0.6.0" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.75.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", + "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-api-version": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", + "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause", + "optional": true, + "peer": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha512-1cBMgRxdMWE8KeWCqk2RIOrvUb0XCwYfEsY5/y2NlXyq4Y/RumnOZvTj4Nbr77+Vb2C+kyBoRTdkNOS8L3d/aQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "license": "ISC" + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", + "license": "MIT", + "dependencies": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/option": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/option/-/option-0.2.4.tgz", + "integrity": "sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==", + "license": "BSD-2-Clause" + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", + "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==", + "license": "MIT" + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "license": "MIT", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/path/node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "license": "MIT", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/pdf-text-extract": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pdf-text-extract/-/pdf-text-extract-1.3.1.tgz", + "integrity": "sha512-SFOPNOajIvJTkbdsTXuaO2Dh0x1h1sdak4W4nt6qY7pW2mV9Q8EavRQXTt/3xGZnYyhwq99KifcSYF+w9KBk8w==", + "license": "BSD", + "dependencies": { + "yargs": "^1.2.5" + }, + "bin": { + "pdf-text-extract": "bin/pdf-text-extract.js" + } + }, + "node_modules/pdf-text-extract/node_modules/yargs": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz", + "integrity": "sha512-7OGt4xXoWJQh5ulgZ78rKaqY7dNWbjfK+UKxGcIlaM2j7C4fqGchyv8CPvEWdRPrHp6Ula/YU8yGRpYGOHrI+g==", + "license": "MIT/X11" + }, + "node_modules/pdfjs-dist": { + "version": "2.16.105", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.16.105.tgz", + "integrity": "sha512-J4dn41spsAwUxCpEoVf6GVoz908IAA3mYiLmNxg8J9kfRXc2jxpbUepcP0ocp0alVNLFthTAM8DZ1RaHh8sU0A==", + "license": "Apache-2.0", + "dependencies": { + "dommatrix": "^1.0.3", + "web-streams-polyfill": "^3.2.1" + }, + "peerDependencies": { + "worker-loader": "^3.0.8" + }, + "peerDependenciesMeta": { + "worker-loader": { + "optional": true + } + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "browserslist": ">=4", + "postcss": ">=8" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-flexbugs-fixes": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", + "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "license": "CC0-1.0", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "browserslist": ">= 4", + "postcss": ">= 8" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "license": "CC0-1.0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", + "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", + "license": "CC0-1.0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.1.1", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.13", + "browserslist": "^4.21.4", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.1.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.10", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.2.0", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "license": "CC0-1.0", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-app-polyfill": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", + "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", + "license": "MIT", + "dependencies": { + "core-js": "^3.19.2", + "object-assign": "^4.1.1", + "promise": "^8.1.0", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.9", + "whatwg-fetch": "^3.6.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.1.0.tgz", + "integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==", + "license": "MIT" + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "license": "MIT" + }, + "node_modules/react-pdf": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-6.2.2.tgz", + "integrity": "sha512-huNWhzzTAb3t1mWA6WOR9yQRCbcZ6uXCGC46cEAgEhGqvXTB6RcHm+1DS2r9OdPNUZ9SZTuR6jZ1BNOJIiEing==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.0.0", + "clsx": "^1.2.1", + "make-cancellable-promise": "^1.0.0", + "make-event-props": "^1.1.0", + "merge-refs": "^1.0.0", + "pdfjs-dist": "2.16.105", + "prop-types": "^15.6.2", + "tiny-invariant": "^1.0.0", + "tiny-warning": "^1.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" + }, + "peerDependencies": { + "file-loader": "^6.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-scripts": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", + "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.16.0", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", + "@svgr/webpack": "^5.5.0", + "babel-jest": "^27.4.2", + "babel-loader": "^8.2.3", + "babel-plugin-named-asset-import": "^0.3.8", + "babel-preset-react-app": "^10.0.1", + "bfj": "^7.0.2", + "browserslist": "^4.18.1", + "camelcase": "^6.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "css-loader": "^6.5.1", + "css-minimizer-webpack-plugin": "^3.2.0", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "eslint": "^8.3.0", + "eslint-config-react-app": "^7.0.1", + "eslint-webpack-plugin": "^3.1.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "html-webpack-plugin": "^5.5.0", + "identity-obj-proxy": "^3.0.0", + "jest": "^27.4.3", + "jest-resolve": "^27.4.2", + "jest-watch-typeahead": "^1.0.0", + "mini-css-extract-plugin": "^2.4.5", + "postcss": "^8.4.4", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-loader": "^6.2.1", + "postcss-normalize": "^10.0.1", + "postcss-preset-env": "^7.0.1", + "prompts": "^2.4.2", + "react-app-polyfill": "^3.0.0", + "react-dev-utils": "^12.0.1", + "react-refresh": "^0.11.0", + "resolve": "^1.20.0", + "resolve-url-loader": "^4.0.0", + "sass-loader": "^12.3.0", + "semver": "^7.3.5", + "source-map-loader": "^3.0.0", + "style-loader": "^3.3.1", + "tailwindcss": "^3.0.2", + "terser-webpack-plugin": "^5.2.5", + "webpack": "^5.64.4", + "webpack-dev-server": "^4.6.0", + "webpack-manifest-plugin": "^4.0.2", + "workbox-webpack-plugin": "^6.4.1" + }, + "bin": { + "react-scripts": "bin/react-scripts.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + }, + "peerDependencies": { + "react": ">= 16", + "typescript": "^3.2.1 || ^4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha512-DI1drPHbmBcUDWrJ7ull/F2Qb8HkwBncVx8/RpKYFSIACYaVRQReISYPdZz/mt1y1+qMCOrfReTopERmaxtP6w==", + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-all-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/read-all-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/read-all-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/read-all-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-config-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/read-config-file/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/read-config-file/node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/read-config-file/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ref-array-napi": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ref-array-napi/-/ref-array-napi-1.2.2.tgz", + "integrity": "sha512-EGQzUQpyqD/hN9eIn3uF68UPBmwJXdWkumHCmvK3ncjw128bkjd8TbJ51ur+2PZ4UrfCOQCcPQkuWZ6mNHch9A==", + "license": "MIT", + "dependencies": { + "array-index": "1", + "debug": "2", + "ref-napi": "^3.0.1" + } + }, + "node_modules/ref-array-napi/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ref-array-napi/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/ref-napi": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ref-napi/-/ref-napi-3.0.3.tgz", + "integrity": "sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "get-symbol-from-current-process-h": "^1.0.2", + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.1" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/ref-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/ref-struct-di": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz", + "integrity": "sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g==", + "license": "MIT", + "dependencies": { + "debug": "^3.1.0" + } + }, + "node_modules/ref-struct-di/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ref-struct-napi": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ref-struct-napi/-/ref-struct-napi-1.1.1.tgz", + "integrity": "sha512-YgS5/d7+kT5zgtySYI5ieH0hREdv+DabgDvoczxsui0f9VLm0rrDcWEj4DHKehsH+tJnVMsLwuyctWgvdEcVRw==", + "license": "MIT", + "dependencies": { + "debug": "2", + "ref-napi": "^1.4.2" + } + }, + "node_modules/ref-struct-napi/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/ref-struct-napi/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/ref-struct-napi/node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/ref-struct-napi/node_modules/ref-napi": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ref-napi/-/ref-napi-1.5.2.tgz", + "integrity": "sha512-hwyNmWpUkt1bDWDW4aiwCoC+SJfJO69UIdjqssNqdaS0sYJpgqzosGg/rLtk69UoQ8drZdI9yyQefM7eEMM3Gw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.1" + }, + "engines": { + "node": ">= 6.0" + } + }, + "node_modules/ref-struct-napi/node_modules/ref-napi/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ref-struct-napi/node_modules/ref-napi/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT" + }, + "node_modules/regex-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", + "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^7.0.35", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=8.9" + }, + "peerDependencies": { + "rework": "1.0.1", + "rework-visit": "1.0.0" + }, + "peerDependenciesMeta": { + "rework": { + "optional": true + }, + "rework-visit": { + "optional": true + } + } + }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/roarr/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sanitize.css": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", + "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", + "license": "CC0-1.0" + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serialport": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-13.0.0.tgz", + "integrity": "sha512-PHpnTd8isMGPfFTZNCzOZp9m4mAJSNWle9Jxu6BPTcWq7YXl5qN7tp8Sgn0h+WIGcD6JFz5QDgixC2s4VW7vzg==", + "license": "MIT", + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "13.0.0", + "@serialport/parser-byte-length": "13.0.0", + "@serialport/parser-cctalk": "13.0.0", + "@serialport/parser-delimiter": "13.0.0", + "@serialport/parser-inter-byte-timeout": "13.0.0", + "@serialport/parser-packet-length": "13.0.0", + "@serialport/parser-readline": "13.0.0", + "@serialport/parser-ready": "13.0.0", + "@serialport/parser-regex": "13.0.0", + "@serialport/parser-slip-encoder": "13.0.0", + "@serialport/parser-spacepacket": "13.0.0", + "@serialport/stream": "13.0.0", + "debug": "4.4.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/serialport/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", + "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", + "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "license": "MIT" + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/ssf": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", + "integrity": "sha512-+ZkFDAG+ImJ48DcZvabx6YTrZ67DKkM0kbyOOtH73mbUEvNhQWWgRZrHC8+k7GuGKWQnACYLi7bj0eCt1jmosQ==", + "license": "Apache-2.0", + "dependencies": { + "colors": "0.6.2", + "frac": "0.3.1", + "voc": "" + }, + "bin": { + "ssf": "bin/ssf.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ssf/node_modules/colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ssri/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "license": "MIT" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "license": "MIT", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/stream/-/stream-0.0.3.tgz", + "integrity": "sha512-aMsbn7VKrl4A2T7QAQQbzgN7NVc70vgF5INQrBXqn4dCXN1zy3L9HGgLO5s7PExmdrzTJ8uR/27aviW8or8/+A==", + "license": "MIT", + "dependencies": { + "component-emitter": "^2.0.0" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-natural-compare": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", + "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "license": "BSD-2-Clause" + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "devOptional": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "devOptional": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/textract": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/textract/-/textract-2.5.0.tgz", + "integrity": "sha512-sSic0+fZMx9jxfqQVpGlHPzxv/3VTp95o7r/reMNMXq8DWqimDLqO+NvoZVihHYyOBHbF22NlUx+6ZveFzNHiA==", + "license": "MIT", + "dependencies": { + "cheerio": "1.0.0-rc.2", + "epub2": "1.3.4", + "got": "5.7.1", + "html-entities": "1.2.0", + "iconv-lite": "0.4.15", + "j": "0.4.3", + "jschardet": "1.4.1", + "marked": "0.6.2", + "meow": "3.7.0", + "mime": "2.2.0", + "pdf-text-extract": "1.3.1", + "xmldom": "0.1.27", + "xpath": "0.0.23", + "yauzl": "2.7.0" + }, + "bin": { + "textract": "bin/textract" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/textract/node_modules/fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha512-MX1ZLPIuKED51hrI4++K+1B0VX87Cs4EkybD2q12Ysuf5p4vkmHqMvQJRlDwROqFr4D2Pzyit5wGQxf30grIcw==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/textract/node_modules/got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha512-1qd54GLxvVgzuidFmw9ze9umxS3rzhdBH6Wt6BTYrTQUXTN01vGGYXwzLzYLowNx8HBH3/c7kRyvx90fh13i7Q==", + "license": "MIT", + "dependencies": { + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0 <7" + } + }, + "node_modules/textract/node_modules/html-entities": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.0.tgz", + "integrity": "sha512-0md7tlUUyb0BEQGsZzbqty1CgV6RESOoxdivt94AScqhBhYsPCCQCOaGvur/RospMjYpPJ7iFe3zw4Bu4SVA8g==", + "engines": [ + "node >= 0.4.0" + ], + "license": "MIT" + }, + "node_modules/textract/node_modules/iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha512-RGR+c9Lm+tLsvU57FTJJtdbv2hQw42Yl2n26tVIBaYmZzLN+EGfroUugN/z9nJf9kOXd49hBmpoGr4FEm+A4pw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/textract/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/textract/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/textract/node_modules/mime": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", + "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/textract/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/textract/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/textract/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/textract/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/textract/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/textract/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", + "license": "MIT", + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/textract/node_modules/yauzl": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.7.0.tgz", + "integrity": "sha512-Va3zHtr8LlgGA793wwelHBRqUy8EFStjxv80VpBRuvgK6twAn4L7aPs/M7S0tVFbR3LXsIqAPZRbCDbKDZlGhg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.0.1" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "license": "MIT" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha512-3RB4qgvPkxF/FGPnrzaWLhW1rxNK2sdH0mFjbhxkfTR6QXvcM3EtYm9L44UrhODZrZ+yhDXeMncLqi8QXn2MJg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "license": "MIT" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "license": "MIT" + }, + "node_modules/unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha512-pwCcjjhEcpW45JZIySExBHYv5Y9EeL2OIGEfrSKp2dMUFGFv4CpvZkwJbVge8OvGH2BNNtJBx67DuKuJhf+N5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "license": "ISC", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/voc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", + "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==", + "license": "Apache-2.0", + "bin": { + "voc": "voc.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/web-vitals": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-2.1.4.tgz", + "integrity": "sha512-sVWcwhU5mX6crfI5Vd2dC4qchyTqxV8URinzt25XqVh+bHEPGH4C3NPrNionCP7Obx59wrYEbNlw4Z8sjALzZg==", + "license": "Apache-2.0" + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-manifest-plugin": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", + "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", + "license": "MIT", + "dependencies": { + "tapable": "^2.0.0", + "webpack-sources": "^2.2.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "peerDependencies": { + "webpack": "^4.44.2 || ^5.47.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", + "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.6.0.tgz", + "integrity": "sha512-jkf4ZdgOJxC9u2vztxLuPT/UjlH7m/nWRQ/MgGL0v8BJHoZdVGJd18Kck+a0e55wGXdqyHO+4IQTk0685g4MUw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.6.0.tgz", + "integrity": "sha512-nm+v6QmrIFaB/yokJmQ/93qIJ7n72NICxIwQwe5xsZiV2aI93MGGyEyzOzDPVz5THEr5rC3FJSsO3346cId64Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-build": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.6.0.tgz", + "integrity": "sha512-Tjf+gBwOTuGyZwMz2Nk/B13Fuyeo0Q84W++bebbVsfr9iLkDSo6j6PST8tET9HYA58mlRXwlMGpyWO8ETJiXdQ==", + "license": "MIT", + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "6.6.0", + "workbox-broadcast-update": "6.6.0", + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-google-analytics": "6.6.0", + "workbox-navigation-preload": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-range-requests": "6.6.0", + "workbox-recipes": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0", + "workbox-streams": "6.6.0", + "workbox-sw": "6.6.0", + "workbox-window": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "license": "MIT", + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.6.0.tgz", + "integrity": "sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==", + "deprecated": "workbox-background-sync@6.6.0", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-core": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.6.0.tgz", + "integrity": "sha512-GDtFRF7Yg3DD859PMbPAYPeJyg5gJYXuBQAC+wyrWuuXgpfoOrIQIvFRZnQ7+czTIQjIr1DhLEGFzZanAT/3bQ==", + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.6.0.tgz", + "integrity": "sha512-baplYXcDHbe8vAo7GYvyAmlS4f6998Jff513L4XvlzAOxcl8F620O91guoJ5EOf5qeXG4cGdNZHkkVAPouFCpw==", + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.6.0.tgz", + "integrity": "sha512-p4DJa6OldXWd6M9zRl0H6vB9lkrmqYFkRQ2xEiNdBFp9U0LhsGO7hsBscVEyH9H2/3eZZt8c97NB2FD9U2NJ+Q==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "license": "MIT", + "dependencies": { + "workbox-background-sync": "6.6.0", + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.6.0.tgz", + "integrity": "sha512-utNEWG+uOfXdaZmvhshrh7KzhDu/1iMHyQOV6Aqup8Mm78D286ugu5k9MFD9SzBT5TcwgwSORVvInaXWbvKz9Q==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-precaching": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.6.0.tgz", + "integrity": "sha512-eYu/7MqtRZN1IDttl/UQcSZFkHP7dnvr/X3Vn6Iw6OsPMruQHiVjjomDFCNtd8k2RdjLs0xiz9nq+t3YVBcWPw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.6.0.tgz", + "integrity": "sha512-V3aICz5fLGq5DpSYEU8LxeXvsT//mRWzKrfBOIxzIdQnV/Wj7R+LyJVTczi4CQ4NwKhAaBVaSujI1cEjXW+hTw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-recipes": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.6.0.tgz", + "integrity": "sha512-TFi3kTgYw73t5tg73yPVqQC8QQjxJSeqjXRO4ouE/CeypmP2O/xqmB/ZFBBQazLTPxILUQ0b8aeh0IuxVn9a6A==", + "license": "MIT", + "dependencies": { + "workbox-cacheable-response": "6.6.0", + "workbox-core": "6.6.0", + "workbox-expiration": "6.6.0", + "workbox-precaching": "6.6.0", + "workbox-routing": "6.6.0", + "workbox-strategies": "6.6.0" + } + }, + "node_modules/workbox-routing": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.6.0.tgz", + "integrity": "sha512-x8gdN7VDBiLC03izAZRfU+WKUXJnbqt6PG9Uh0XuPRzJPpZGLKce/FkOX95dWHRpOHWLEq8RXzjW0O+POSkKvw==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-strategies": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.6.0.tgz", + "integrity": "sha512-eC07XGuINAKUWDnZeIPdRdVja4JQtTuc35TZ8SwMb1ztjp7Ddq2CJ4yqLvWzFWGlYI7CG/YGqaETntTxBGdKgQ==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0" + } + }, + "node_modules/workbox-streams": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.6.0.tgz", + "integrity": "sha512-rfMJLVvwuED09CnH1RnIep7L9+mj4ufkTyDPVaXPKlhi9+0czCu+SJggWCIFbPpJaAZmp2iyVGLqS3RUmY3fxg==", + "license": "MIT", + "dependencies": { + "workbox-core": "6.6.0", + "workbox-routing": "6.6.0" + } + }, + "node_modules/workbox-sw": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.6.0.tgz", + "integrity": "sha512-R2IkwDokbtHUE4Kus8pKO5+VkPHD2oqTgl+XJwh4zbF1HyjAbgNmK/FneZHVU7p03XUt9ICfuGDYISWG9qV/CQ==", + "license": "MIT" + }, + "node_modules/workbox-webpack-plugin": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.6.0.tgz", + "integrity": "sha512-xNZIZHalboZU66Wa7x1YkjIqEy1gTR+zPM+kjrYJzqN7iurYZBctBLISyScjhkJKYuRrZUP0iqViZTh8rS0+3A==", + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "^2.1.0", + "pretty-bytes": "^5.4.1", + "upath": "^1.2.0", + "webpack-sources": "^1.4.3", + "workbox-build": "6.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.9.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "license": "MIT", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/workbox-window": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.6.0.tgz", + "integrity": "sha512-L4N9+vka17d16geaJXXRjENLFldvkWy7JyGxElRD0JvBxvFEd8LOhr+uXCcar/NzAmIBRv9EZ+M+Qr4mOoBITw==", + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.6.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsjs": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/xlsjs/-/xlsjs-0.7.6.tgz", + "integrity": "sha512-IQtL2z+BVYaIVzEhknZ1YBr8ItUbqiS7kaQZ3O35/k1q+kSgjVxmzwno6r3EbBgEWhrVCad2mKbnFeMmEE5zdw==", + "deprecated": "xlsjs has been merged into xlsx", + "license": "Apache-2.0", + "dependencies": { + "cfb": "~0.11.0", + "codepage": "", + "commander": "", + "exit-on-epipe": "", + "ssf": "~0.8.1" + }, + "bin": { + "xls": "bin/xls.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.7.12.tgz", + "integrity": "sha512-+dljNu2OdnbvAsjWZPlB4YMsJjC0JcNeR0cYH5lowp2YrxF55HjgD0jcff9alUDHxEKGw0nLIlbd9K+QbteEgg==", + "deprecated": "this version is no longer supported. More info at https://cdn.sheetjs.com/xlsx/", + "license": "Apache-2.0", + "dependencies": { + "adler-32": "", + "cfb": ">=0.10.0", + "codepage": "~1.3.6", + "commander": "", + "crc-32": "", + "jszip": "2.4.0", + "ssf": "~0.8.1" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx/node_modules/codepage": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz", + "integrity": "sha512-cjAoQW5L/TCKWRbzt/xGBvhwJKQFhcIVO0jWQtpKQx4gr9qvXNkpRfq6gSmjjA8dB2Is/DPOb7gNwqQXP7UgTQ==", + "license": "Apache-2.0", + "dependencies": { + "commander": "", + "concat-stream": "", + "voc": "" + }, + "bin": { + "codepage": "bin/codepage.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx/node_modules/jszip": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz", + "integrity": "sha512-m+yvNmYfRCaf1gr5YFT5e3fnSqLnE9McbNyRd0fNycsT0HltS19NKc18fh3Lvl/AIW/ovL6/MQ1JnfFg4G3o4A==", + "license": "MIT or GPLv3", + "dependencies": { + "pako": "~0.2.5" + } + }, + "node_modules/xlsx/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "license": "Apache-2.0" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha512-7WpJBYwyhvsddFJA51SOIU0Be9W44sbGGjc6Z3ly8Wx/Wl7nriMPZ5xf6Np9ASlJ6gACfXcTLukm4DtX372lFw==", + "deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0", + "engines": { + "node": ">=0.1" + } + }, + "node_modules/xpath": { + "version": "0.0.23", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.23.tgz", + "integrity": "sha512-WHBD7+PebdFl+vGmhl/TnFLHDCTytivkerph52SF+2IUtil+lbOEK0BHHAoL+z4JOHIaF5R7Dh9VgrpnzVOFRA==", + "license": "Creative Commons", + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zlib": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zlib/-/zlib-1.0.5.tgz", + "integrity": "sha512-40fpE2II+Cd3k8HWTWONfeKE2jL+P42iWJ1zzps5W51qcTsOUKM5Q5m2PFb0CLxlmFAaUuUdJGc3OfZy947v0w==", + "hasInstallScript": true, + "engines": { + "node": ">=0.2.0" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..6e81b61 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,104 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "main": "public/electron.js", + "dependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.0", + "@types/react": "^18.0.0", + "@types/react-dom": "^18.0.0", + "electron-is-dev": "^2.0.0", + "ffi-napi": "^4.0.3", + "fs": "^0.0.1-security", + "http": "^0.0.1-security", + "https": "^1.0.0", + "mammoth": "^1.9.1", + "nfc-pcsc": "^0.8.1", + "os": "^0.1.2", + "path": "^0.12.7", + "pdfjs-dist": "2.16.105", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-pdf": "6.2.2", + "react-scripts": "5.0.1", + "ref-array-napi": "^1.2.2", + "ref-napi": "^3.0.3", + "ref-struct-napi": "^1.1.1", + "serialport": "^13.0.0", + "stream": "^0.0.3", + "textract": "^2.5.0", + "typescript": "^4.8.4", + "util": "^0.12.5", + "web-vitals": "^2.1.4", + "zlib": "^1.0.5" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject", + "electron-dev": "concurrently \"npm start\" \"wait-on http://localhost:3000 && electron .\"", + "electron-pack": "electron-builder -c.extraMetadata.main=build/electron.js", + "preelectron-pack": "npm run build", + "rebuild": "electron-rebuild -f -w nfc-pcsc" + }, + "build": { + "appId": "com.example.electron-react", + "files": [ + "build/**/*", + "node_modules/**/*" + ], + "directories": { + "buildResources": "assets" + }, + "extraResources": [ + { + "from": "node_modules/pdfjs-dist/build/pdf.worker.min.mjs", + "to": "pdf.worker.mjs", + "filter": [ + "**/*" + ] + } + ] + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "@types/react-pdf": "^6.2.0", + "buffer": "^6.0.3", + "concurrently": "^7.5.0", + "crypto-browserify": "^3.12.1", + "electron": "^21.2.0", + "electron-builder": "^23.6.0", + "electron-rebuild": "^3.2.9", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "querystring-es3": "^0.2.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "url": "^0.11.4", + "wait-on": "^6.0.1" + } +} diff --git a/frontend/public/README.md b/frontend/public/README.md new file mode 100644 index 0000000..62fb8a6 --- /dev/null +++ b/frontend/public/README.md @@ -0,0 +1,7 @@ +# Документы + +Поместите ваш файл справочника с именем `handbook.docx` в эту папку. + +Структура: +- `handbook.docx` - основной справочник +- Другие документы можно добавить по необходимости \ No newline at end of file diff --git a/frontend/public/config.env b/frontend/public/config.env new file mode 100644 index 0000000..b0570f4 --- /dev/null +++ b/frontend/public/config.env @@ -0,0 +1,2 @@ +COM_PORT=COM6 +COM_SPEED=9600 \ No newline at end of file diff --git a/frontend/public/electron.js b/frontend/public/electron.js new file mode 100644 index 0000000..856fc4d --- /dev/null +++ b/frontend/public/electron.js @@ -0,0 +1,201 @@ +const { app, BrowserWindow, protocol, ipcMain, globalShortcut } = require('electron'); +const path = require('path'); +require('dotenv').config({path: path.join(__dirname, 'config.env')}) +const isDev = require('electron-is-dev'); +const fs = require('fs'); +const COM_PORT = process.env.COM_PORT; +const COM_SPEED = process.env.COM_SPEED; +const { SerialPort } = require('serialport'); +const axios = require('axios'); +const { logger } = require('../../backend/src/config/logger'); +const config = require('../src/config.json') +protocol.registerSchemesAsPrivileged([ + { + scheme: 'app', + privileges: { + secure: true, + standard: true, + supportFetchAPI: true, + corsEnabled: true + } + } +]); + +if (!Promise.withResolvers) { + Promise.withResolvers = function () { + let resolve, reject; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; + }; +} + +let mainWindow; +let appConfig = {}; +const configPath = isDev + ? path.join(__dirname, '../src/config.json') + : path.join(process.resourcesPath, 'config.json'); + +try { + logger.info(`[Config] Trying to load config from: ${configPath}`); + if (fs.existsSync(configPath)) { + appConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8')); + logger.info('[Config] External config loaded successfully:', appConfig); + } else { + logger.warn('[Config] External config file not found. Using default values.'); + } +} catch (error) { + logger.error('[Config] Could not load external config file:', error); +} + +global.allowClose = false; + +function createWindow() { + const preloadPath = path.join(__dirname, 'preload.js'); + try { + fs.accessSync(preloadPath); + logger.debug(`[DEBUG] Preload script found at: ${preloadPath}`); + } catch (e) { + logger.error(`[FATAL] Preload script not found at: ${preloadPath}`); + app.quit(); + return; + } + + mainWindow = new BrowserWindow({ + kiosk: true, + titleBarStyle:'hidden', + alwaysOnTop: false, + webPreferences: { + preload: preloadPath, + contextIsolation: true, + nodeIntegration: false + + }, + }); + + mainWindow.loadURL( + isDev + ? `${config.frontUrl}` + : `file://${path.join(__dirname, '../build/index.html')}` + ); + + mainWindow.on('close', (e) => { + if (!global.allowClose) { + e.preventDefault(); + } + }); + + mainWindow.on('minimize', (e) => { + e.preventDefault(); + }); +} + +app.whenReady().then(() => { + createWindow(); + global.allowMinimize = false; + globalShortcut.register('Control+Alt+Backspace', () => { + global.allowMinimize = true; + if (mainWindow) mainWindow.minimize(); + }); + + mainWindow.on('minimize', function (event) { + if (global.allowMinimize) { + global.allowMinimize = false; + return; + } + event.preventDefault(); + setTimeout(() => { + if (mainWindow.isMinimized()) { + mainWindow.restore(); + mainWindow.focus(); + } + }, 10); + }); + globalShortcut.register('Control+Alt+Enter', () => { + global.allowClose = true; + app.quit(); + }); + + globalShortcut.register('F11', () => { + }); + +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on('activate', () => { + if (mainWindow === null) { + createWindow(); + } +}); + +app.on('will-quit', () => { + globalShortcut.unregisterAll(); +}); + +//считыватель +SerialPort.list().then(ports => { + logger.info('Доступные порты:', ports.map(p => p.path)); +}).catch(err => { + logger.error('Ошибка при получении списка портов:', err); +}); +try { + const port = new SerialPort({ path: COM_PORT, baudRate: parseInt(COM_SPEED, 10)}); + let buffer = ''; + port.on('open', () => { + logger.info(' Serial port открыт'); + }); + port.on('data', (data) => { + logger.info('RAW DATA:', data); + buffer += data.toString('utf8'); + if (buffer.includes('\n')) { + const lines = buffer.split('\n'); + lines.forEach((line, idx) => { + if (idx < lines.length - 1) { + const uid = line.trim().replace(/\D/g, ''); + if (uid) { + console.log(`UID карты: ${uid}`); + console.log('[DEBUG] Отправляю событие на admin-server:', { + event: 'CARD_PLACED', + uid: uid, + timestamp: Date.now() + }); + axios.post(`${config.adminUrl}}/api/card-event`, { + event: 'CARD_PLACED', + uid: uid, + timestamp: Date.now() + }).catch(err => { + console.error('[ADMIN][CARD_LOG] Ошибка отправки:', err.message); + }); + if (mainWindow && mainWindow.webContents) { + mainWindow.webContents.send('card-detected', uid); + console.log(` Отправка события 'card-detected' в рендерер с UID: ${uid}`); + } else { + console.warn('mainWindow или webContents не определены, событие не отправлено'); + } + } + } + }); + buffer = lines[lines.length - 1]; + } + }); + port.on('error', (err) => { + console.error('Ошибка serialport:', err); + }); +} catch (err) { + console.error('!!! FATAL: FAILED TO INITIALIZE SERIALPORT !!!', err); +} + +ipcMain.handle('get-app-config', async (event) => { + console.log('[IPC] Renderer requested app config. Sending:', appConfig); + return appConfig; +}); + +app.whenReady().then(() => { +}); \ No newline at end of file diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a11777cc471a4344702741ab1c8a588998b1311a GIT binary patch literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ literal 0 HcmV?d00001 diff --git a/frontend/public/handbook.docx b/frontend/public/handbook.docx new file mode 100644 index 0000000000000000000000000000000000000000..0b889d697f7f0e997e7661d0382bb3168bf4b2c4 GIT binary patch literal 111532 zcmeF1Q?n>Amtc==++*9eZQHhO+qP}nwr$(I$C&%gyi8a1Kj_XwDoLd(m7T1O?8r+2 zgP;I_0YCr%01yE1DvF;w00ICMg8~2`13&<23E9~?o7g(*DSOzPIO)*3+gRflf&h`{ z0|5P-|G(vbumqZur!0r)5ky`?eu5TShb247ONJ*3<4my3p>`-A*%4QuEgnBUV{e9& z4~I)6Siw9_bG=x?F=E+7$*3R{IIJa*^rI3)mZG#=I2QgtzqcdbZ36?5vWf2K;>oWvzG{tkycK7?YT+qsZag~7UZ zvSG@|a}XmV-m9Qr9$KL}=5lo~7fZ((X*zZm$|GU=NIVTlgeREVI&UgR%e&_F(S&J> zI-f3?*CI?4v*Ur2jalTAzynd5o4VWoL2Sc3d?!be0;07-+WCvp>2AG-cFr10(M z3PL&NLS=$Ii(AO&62i9uEblAh8;5e5PUNg=lhY#kI@Xv8lzSq~>q-65^dZg+r`knR!&_f`8tn5@$m)9*2ahyaNHgyLrBXiR5pXXIk@ z&z$|ojvf1G#SxFWoPGj*;z2zL15(Ru(*;Wq)wcTk;1hejcC7CVSyYvI$?tUEAcql2 zS}hS$Sgidqk7PEfb`1z|3(LfCVkZvs_Y+vro2T0dAHS}xEWezrmNGR-=#+L_BVjxg z&VI^qI@JETp4;noTJ-uhclY&n{Wyeu6S6OIbM~}%b@%?bjAHxwsPop_KF`sEk%b2* zGb{~FEfd&c`6%IkR;JlGhpa*LIv^E3!wdP3W6_qsof*+N5e(`)y5`r3b4 z$QgKtzr)6ZnVX%n)%m*Lzn-0G(rSx^kG1V}VCC+P006mY>l$hbDtdal=VoH}@v-+U z!oJ;~@hrlD1GfvN8v~q}3EB!e7+J_lV%VPyn$LPHO~-?%VUSlR2z(McNC`7!JE}ef zBea4=F=b&x(y=QBjWW852|g7&{8yieAzj5VyJg=_Ved`<}cVza7@llj^4p!Nkh>b&f_4w$+NZ2f?f12K*C}tGja`Je?Sa z*TbmQ&=T6@-D_PhUfGY}!}sIZ3R|q~B@ZjN>@K(G)8X;g;bYejXERl=t<*qbxvP`A zGt#-ctEcbh+ii+-d(*A?!OT`#Pj{YKCuzo11K8 z1|1$^AZ8avSo?=)4#hO@lOw6yAY?ALJI$grBHAhnZyIoZ2jKdEf=qoowotOsHg~$c z8}?Z{sg_Qx(zPV^nY*C6x)RuFQU>P!eM?Fx|C=N3gV@){vieyVT3DMJ)~#cl?dTmG zEm#})nVPgxw0l)4emi!8bc{N7eNs~pmB*hkZp|3;XUqP!Tj`sF9W^$i9#=QU z%?Hz>Z*#)Nz3|B;D5De@KAPZJwybG6TliZr3E#8*5WF5wPgd-1MuLNHnPo^H+Il1?#nxwa>1FIf#B)e{u|T!ckA6Q+uFs2;R{#Zk-^(?> zvjeXSDYBr)x{0jQ>*E$Kg|Hs)-^Y;Wgr%mwWr3)kk1IYjzk#>;tfr@*sDlTCufHqz zOwkI{sp6ASkh9&<Z2DbfE`3`4)IT?9#vpu=HvUtQRF|VGknE`63RW z@!j@r^w?kIvxrbo0gWS70(c$ab&rpHX~179AH1Z(;_0rZhxu=9+G_$5FU|4U*ABTS z;CHj!SnMV#&z>(E>Rg4<;Y^iXxrZWN&Q|xE6C+<^dbyqyvxkw2Ohd&X!oKbYU$^`C z(!aO&=U?V;9}6*Qo<(w^d$GCEcQLrpy%;;s!m(27I3QEIfsU=4eDfw2bn=)r%uW`kjW~E7uy1aJXb0w7-vU_nXxwH>ez1?3dbugwut$FDMX;NSYm}s8Ta}*jp@` z?uuoMQu(hIGjCIqG6Im4tM%2p-5A+@{yyduE&b^I7Hf-pa@|TjG+2L5jgdJKrwxl2Mk-FoOv<@dj|2vyRm;KDx#99zM>keU*RBGz4v`) z-0~7X1#YZ}vj;L3;S}R)p7dGt7d?5ZEr|AKtXzBtUj4)QOZHBV?=!4r-HAnD21h7Y zicg9JC?3UMR=m+GVkL@@${ycV*O*`ykcBokfi_4DCjk_Az%qhb8un1q)Cz7I8b6>^ zim>Vs#+tG*+!fs-L*wZtoSK@w|BtAM5+QF|}QOEtAUJL$?|FL9vgdvCc;lm!8+TD`w zqYfAe(|MW#Hyf=da5y88v?-LE;4`6m)ET*2e9+so#e`Hsbf}0`myQ;bXgBB>v#_@K zyADE6ed)Q#HsOiK?6Wptzp&R>e(t%BCm1VgPqd_A`&PseD%EVt%0^QFzC7}L4Oc5@ z<^$aktQJBqe9-Nu^|QxY&s#rT;+6Ni%tY!i12YPLe-R0r2!Ck-JW{^WVs-pNF|5TX z@d!}rSohSLwSYo!wM3B``aVW^yS;U23nCaRI>-A2F$jWb*D>`?3@_Z}QqKbysL~!Z zm`yjUUmcnr&35eIk){>{?6RY{qXHbP9W11Vz$xR8!MsiyMs-~cdgUrJG z3FhC>3vIkI6bdLMdo?%r&nA@QWbOrlgIEX3xV(P~D0UBb4?h3<=3Ia-q~1H{P*XD^ zfJk=>VE#QPixvBcf=?WLy%WYao@Tp4L5_VrEWRy2YRLqVIjfN+h;hB;0=pT01Dmiy z`1D#I7ui(2%+)}_dx@+FUMz1os%#GhFe_ohDEJU9;Azj|s1wrjh8Z8@onCwMnCs$Y#D#T81rDAA#!Dbb_(4!P?OqssmwZGpsz9Pnd`Y>monMIb1JMC65C7Bol zWXIrgkJyRBvu|o^{K2b;&MPDbXV()``PM84zz!^!a6P%pn}nQaQ8)5s))|MFF3?R2 zz%H6%2;e4&s3s5}%ZW>6eb5)|NC0HUy2UaSH#HgW z=Valbs*TPwt-~N&JMrrgIm*qFs>5_$y)a?|2Fj3uSbQ4ya>i*UK7SCU%8p{~TCWx+ zpbpB+iylN3p3VjirhEufvK@H^-fARa1$9pL$^npt-}v$3FS($2b<-mET`BAbXSwgg z#HbomVPV7&=E5v4Jw!TJeb&v%xGibD+l(Sq2~=S3u$?@d;?G(U>N zWzO3JebU%Ll-y`vIa<0E5II$L*Cf3^!%eXeqw}+a#_HB^Lr)Q5a#V%-NF^1gc}@U!=k#cix`d7S^mY}3@!Flh)0fs5ee|>! z58_c=pr@KpT`3elc#0yb!7S{~s=Pk?WD9>NgkZnx4D_?g;Q8VwGJkt?(YolVeE!t^ z^>r%NXas68SD%-&<6~0PzswNU)pL_M$UN9a`z^EQ5S~A@&L?tG?#n zzX#V%ch{nmDf$XbTso4-vnr1UkqrnqBSs6V=jvU>WJ4T(^^|DHyLr4rO(3Rlbrkb zS}gTJkpg&9Ydm2w_V6ia)nu~LE)oA=JZ8{L4lWX(v0Ue`9#6E0`AG@pXv{^_qdFF1 z6u=dzLYzsYWlIoSj|G3Q?9O&jv6~o`HB|HZb4_AhsF2A)P3jVIl4iy!ht>rl|$=L zfGkmzIjActapIdHDx7OtNIS8E_bmENxRfhio;d#YLRg^e?8hxR8?6|X3uQA!ga-Ws za5X|vr(PF`Kcru|_Lak5J))w1`b+~0DOwyWv(9h*;2H^mJh4 z^L}VHnxH*_OYM!2c}d_-rSU@d>>Dx6OS|`(!Lx9(rx7JGo=_ie9AZDi&>7xja$Y&$ zsMma%01LLCyl+7_$+yn4b@2kObYb%;H&!t$T_?S!k``HG1efqbEFqC)B-v_MajsB? z{9#LN5w4rbhDm}Gi0530(ieU!)tf*~q@Fl<)sD%Umoi{cgQZ;h>iWPU$F3-0_@e+- zu?yiSm+o85PeNHFy6W;y&Yv^PD0M8aB&YhX+-_EkTD{}x%hGaXmNgP1!*w#5$}M^G zag>b-6-F0rquetf`C1rdS0w%(mDs-QxkQob^L_+>NYlecttCJ!YQvF98CKn^vQ8B) z_2E)8bilHXibYsVsIYip5U|LlY)@8zL98N9m9oc=ZhuBmdW&d@knBjLXxyPgRq74` zrHioQGG2mB1?r<$jqKM+51%4H0?g88Q3twYcxS8ep656@xVW%!aC*4ip2cBe zL3z8{jh*Fez;a*I&5q0-PW}kCtstX3^8~jB|cw!hOnLG>}!}_N#&!zSzn!c zx~HF`_LE{u7^qCVI-(3nRwo@bq(}nv-Q~_2*Wik?UWC!Qy-Jh(Ys#=2< zFyEQa#|};c4kOgVWM>pda%`8lcZuwv7~b@2)W(j$4L-<5W5T)D^@-m})6Siv#q=&; zy?Lx%(C3v|DWBI?MWTXqhz3#)kY^tcYSRg1EW`(V&6<@}5=II9 z{4qf*?&pAANY?w=G%<{V$y66p`hRC|61GJBry?> zEzqeA0b#NFR^_BAY=?dGN%eR~4yzgqg7Tp)OUK(yvsLN6Gk4Zzi+Y_=qg70lc_6xh z2>;x3DMr6f*0<_a)H!RW`Y4z~|8ap_l(6%wowaa}sRx8PzYFDL`<~TkJ)K4miO^(5 zyaz3z0T>W{)^vwf24Y$>b%KY{zzkr+w(_wDi}54^Xv2&YxxEM^4SRinOgegi7E+Eh7-W#PV)i5t|O&#>vum@NzA$G=}PotgZ5wX z428JS*D=2==_wX@w~=#v?5OoKz%gY_IUl7&eLz$zE5b%lql8U*f`HcoBQa0`))PB? z`oZ=}GE*Uf5g3ih$9{2Pe0<)G$S%aYDpCsslLj3ki6SBNkP64h8>?vGei(i_SEMrF zV0g!16IWe%O=7Yg%b;#3Q5HDKbc1pg--apTBy?j9dM>b%(FO>NDwatp3OB?k`r9ee zt!aB&a~SkZP&}au_MnQ@`Q};)mNw!P#jO~0y@dElup)W_L^&CM(aT_Q-mV})pi$zFnc|aaEZ;1LgaS`WuAUwU2>tFqL_)n zFM1?~&7lwPyLKRp{kEXB5-KzEQeq|qoZIPKuqgizj+Gq;UKS&k@#934R92k~yD!#m4d*26!$biP(!( zKOVfRc*%6)T4u%xFy1iK{eW0XB)HbFEJ}P_tchWzsLpSm+g0HXfW>Ks84@WxLDt2V zw${xZx(C0Z1f*RPRMjm;2Nh%^{jQ*C!E^_7&uO{>20qWnb^ZbMw6%aezQzd6zh7M9 z<wolptVb1r5}4Yh5fBFw6K569Ka{dLtd1&h}*fYo#i%dn??OwqwjT=U<*K zfT?UsOZSwmJ_56HILl(y4lQB#xgieAP{%8YM3~e(sdj9ojoj#7Oh5V`kLg7#z<>S{!y%+$!gsNr-)m2IJ3q~l&!4kU_jYb}nz*!=|HkXsmLkw0J!<0-dIX*0aviR#{ z;tZjJu!$%Q5Vc`mTtBp)lnT_tBVEeiXWNVIFGAH|bHMz1kl4cREj(sT^GYrk&^2~` z2g>gGQo`VJWB`%CmTi4*P=;ti%C_Y9&J=ej+VDXClbZkxWa<13>qwemCH~l8Su0JV zTtQ&{ZgTR+#dG+O-Hbw?sHk^!OfH?SGO3utGxy5uZvg}ZKlE>BVh1i=JWV}+bXzKF17zUpc8Le>y;8}L+j^35sY}M@T$hVFao@zcry0< z#xsT`DJ;$6F8lu-O^6W)t9NseT)ul_H(U;r(RDWn2-2u>BSgs;gpkVW!lY>AFF`Me z{F|)0KG{_tD!K~7M+is<}2~N;r|Ar(S6B zdMs)tVIG+m*0IS~La{nuxc6Y%D@Zws1-!RIhxSa#DV?QqU5stRq;!FJ#JZP5UB1fe zAkT|JC8e{$-&g1UfWJ67hYDs%q6Y2nNn>wRmZZuc zF$nKUnw?&yAvmDnMpHpj!`S_9^N>=wC&f!wHbo1Zz?2qjUN*Ji5)(}LQ?x4TmgTu) zpaAmqXm?O2fFc-H6~<%@q$Fx?`shO#z_mgGCiBc~vg53`m)f9CKVD?Z!?ei{*La7# z2=8k!3Jx8<><7~Fl_N9;y$DefCE`*FNnfx--Xf=jJc{O=hc6Epit=^`t&1|mC5R4D zdtECsEC3wOiQJ8EtK*Pj)xV`k~ClkHA|?&bg3xZ}yMs33-8IiZtpZ zzZ-m3M@dWk#(ZPb;8AYWsT-&|S{PJmE@YT#l*@1D(fVm%2rUN62B(0&#O7R9N{+So zDp^#*J{TV>0*nYnqwtL&urk12gQQgwW*83|w?*n8_Unq-tQsS05^Bd^to4u@t+Z(= zI%6p1b)&09(2L3WT-8eaK#$_8LU^plc=XDI*{)!Mi*9C$kvgVCV~>)^QG;+`5`;-7 z_;`F6td$Bwl$av;wgJoqTRh3QAzq7Sl_Zis>Do(HVNMw@?AKbR5DWs%_7xQawji&O z=R-aIjg@>JV+-I$@Z9pKt)gZNV_KvD8xu8T53v~8d!B}s!A}(NJxqzk)@s-^#b=4I z%ETi)RD*R^>c{I{_D+@8LEVSEhuYW8OCvX^Q(Bvz_u_hu<_1>d^jYkUKmFibTbHJ;4#9VEe8V(s# zC~U&=b@(YFQI@FhYQBAhDFo?(a_`6+hl!M%VIBpoa= zin=a!TP`q0B^5*r-YvIQ(-4I9X3sA-REZSWJ2{CYSOqJ@iok8~lNYfcyLW(-mz}b) zg>Mj=pdmnM_Cbbt1jDY@|Jmo$oEMK z`>!nqRIStDC0A1$S5>Jyi3tK_&3J90(vMJFDK0I1f+K5($R27?a+y}ZjD3UCl~O5f zQ!eyG%>AI(L)k-j@4qsKH1GbtQr9NxpKy#*9lD}y^}M1rW+L>@!;zEn!&?;-TRbW(M6o?LBp!r3V2MXGvQ<2$V2Y zC?lSj-cdu<{k8`b=Gn{YW2B;PI&7r!{U|G#f)h zf(Dga;oRB?rp4D{kB)A>zR|i2=uI+@u!XJl2VVC`oi`U^{t^N6wsc zLD{1-CK{g1-@m@NL3`GQ&af~3%Ou_G7MR&h&PEWLNfGJHpIB|vvJ%|n${)>ji7`&) zhb&1>T(Ks@^?VByP5>Nm+ zDuhmFSIA?IKiWg08r*BM1egGXVJ6D3%_$U+aPY9Zo4J3T<8IT+rx`AM1|o&6GAeW0 zXMg2jUv{RDtYm==I=+R}Ugg{P;E1g}MiDC~sbOPuCBG?M0lCflgPdVHJEsz1^I72% zh!^=R0yV;|D|W6pE-i&;SGg5&3TI7)RZ-~e8Zda;q*eI~W~fU!i!+Sb zhNeG4wYk#tuEO)dIHiyxg2!u((1x+T)Xh4+sI$}iRdv> zCMj}5O^)?=-A)&0qIIC!3tzo`0|aSdJ0>0@y?Iz7sd%}QAx*v^VF_}M@TF{43=sZo z{};mzHQ}}j(PE~;l2CBxi6A}9J}qLmG(d#3+08T;ww!2LaXrPIH zg8nhXI{`@^pe7df_Sz9z70bzydY5GJEQT&%jdB>$FNRg?T+H5PXKH998hL%}K z@Ru&{TG3hWBmu=C4R6s>GQCPg3Bj~%s%ulmW(r&Pz6n>Ymy)8%o+O4mA!fzCO(w1& z-~IjC2A5vxOSx%q8*GDjAb2u#2LW{2{sOGret3o#$Pm( zQOyJ2MyIYqISK{Jr&q|#=XO&ur}J^#xfAuSLl+ImVUWFP^8m>P#6Gos_8Gu8Y>q)R z>|!4R0l6AK?it7+MB#YbDd$&tmZGq)%<<=gfIMJr5zSDQr3gZhL#(nWbOo&NPZbbU z&G^}aE?&e2zcMCUMIv0LFmNhf^rsxhgi77yR8$ztLADkPp=}+852nOi4tlHS5vC+A z3AAMMQ3QI`k9OxMqB3(vphb7C{N2S?jM=M-P>BIXj&vyw9`{z`$FD`XRwk<(4S-aD z2TXIh407w@F@q87Z{buo9Q3JAX7U3r4FpK4bao33qQ4Fz?HaW|Cjfa5apiJ^f#Q#u zrn+Q+PbrW&A+*JbVhA3ra>YT=8Z#V*AaY`vegTbYK!#eZ%uI#Vhyg-0JWEu=PewsG zau!KkhLp1gvS45Z8Cn)F%M=tgQUe)o6)K>`w~?pA5AXm55pNFVL|w>>FMNurN32|d z$kK{%Fqt3arOtRMsBSUFM*+30MK57$NLW60zSAYH#^}+|qGbxpP~M8%)n?EqJAYL_ zb_r(}1*6=FXS2KN1WimPNNQWzV%iCmILjAj-V@pZ5{JboMAe#~uPJw1Pgh=c7mWv) zK)Fg4`zT^GZVo506{zAzpenT2bx8w6LTKfIu7%bFC0W-{RrzX%9wV-Vl}QaC6$K$0 zy(^A|EQ<#h;*@o|+z?Kn|6BT)+zQ8T0LXrd-R$w7=CXMa$R?ttt!HS*!7@i9@)#o| z%&<;;!n-GVOimQPm;W~Cd_XkA zN!2YMCm?70MlYv0MxcUjeQgF1&Yz9%?ZLC_k*)slon8N zU`ec-;R(nMs$#BMUBNUGq>mRWq*Z|IWTJOwBZA>g0^catl&W|6v|<2~nB3AhMOd>n ze0moEcRJS)z3oa)J?s5AOYN;CnHZ57J&Cc@ySH78buA;ilzjwYP5qk2o=XtQEc}P=3(k zFg>)R9nZB<)Eai)O*kDu|2C4pdfJu+8bqEkhkbCl@Lio`fU7AjdRG2xol_EIp`$O^TBAFQ-lj!p*g13w&Cq$qbWn;KM~ zK4!2FM>-{6C#QB#6?Qtyr^T?0>ZYPpnQ@s&R{^K_AwOk)YTnGG+DB0h!)mGQ5Tx{f z;q9YKowQ7V%2T0ssxtAREz_(J6V-=hy(m)eDr5U#1r!~AE;N;T_yn&A(Mg3;gr2J% zo3Mt`>VL^V#G=L>Zcr%vmo6r-!*ST{>aM~eowdxXz1sxL;=CN^3mrn53L0CDkfXH{ zqLD``YDKbIC_z?#M!@Bvf`awY_5Id}eDzg@SrMH?{JY%Fjg|m3k|XhR=~}LhwFqc4 zpasuUEPE$V5=t3pJ^34~RMM~~QBA(O37tF{DaV8537sRYWA!goh?waic^MpKI$ZEQ z!(H%a6F@gc^RS`$7lBQqpo|~oC|mBUhW%zZimEN5au{lKexFAZPiULHD!wQ@oda_m zft@}Vu#@9fYzT2ZR|N3J1i{4vF*Ku{1gPV&X534L1VvUw7Jr5EkEu_9MlWTnatgR7 z&L>T@(bTD3V;SktqrZ0Z@EiyO<#Br45uAfijcDCbwdPkKsmW5vF#ZInqu+75igXto zJWpBGdiCP&2pi#y%9Ej?%5R`g)B%~CA0MohVxHys@12^#_{eTWib^e zmt3g3?yOegkCze#foee$v>+!8)I7r#bjvfrm8MF@z_|sXQw`=Wr+f76#pJNJhDtUT z?T%#S8U*u@*|W9&*~gV1V3HUFao%;VuGuHlvf?A48K;V4o(z{oH9?qwWXK}*v=Ij` z2Nhq6jh255H`EVhN{5(rvZhXzrCLuKK4MO#c~ z6U5XZtLO-d9}NKvE@33A$ukI~A<8w~ifafSEt@>fNg#$Mpdr{af8e?LoH0VapOj2Q zyO(qDhG<>8Xy9dS(YHm6a@ikcf2GvD_WWDO&!kx9i5NUkDd_PAGB7WgE||eNB&=e# zkEx)_6%T@C3|Uj@x@n0I$)K*Dg2q-HKBR7JW$MHVU%gY!w``3vW|nly-}5l1WPjdt zzc;7UevY;TNJ4dI=3{P%i`A4R8Z?e2?Biq^wFZ#B$6WuuFc{sG}b*IK>uqyglBp z&ajYJW-(v<<Vl8S&_viIG)K@X>bg&zzaBk4QP~Et!V3Ed>=LG7wEIuODW+@S_TABml~ zbLqfq=c#?;ePo!&5Eh?ar9$1k!pLHLo4#&$WC^BTh%ZSa-bMF<)stC(NpSZxx=q7C zPxuEg9RnvF-KKme?NAR}>rh>?Z%?l%NW6f2%8RJEC0u5Xo>`SB>2%`*!&FdU`pGhh z|31Go-1hJOR>T5eGgELPj8Faicvoqy-kKQRE}Bhycl4QV2PdH9jvVTrdetikKx~rs z*tELO9Y*yUTMQKF@RsVM@r#c{jl2d@Vk#4=LAr7nIJklKn%7%jD`@YYqU-aSaCc|bu0sEb{(mPm10mE7c&MT|ep z=?@-597tdbgcvY2Qi(|e?;~+>vhZ=CVqtXfx;%?RMFVn4N>#msEmz{`=v^QVd}_fH zh*FB2f?Ucq715yiHbNLrp%&y?Jcduv?Sv!U%i6r5T=WXv@2)^gyC|mXdC`0 z3n8zih8bSRfU*KaucCS}cX2;9&&Diww^B#1YVY@Zp&Z>@CyuqhJEhy>*{gl^g|diPv=IaDs&`=u^Qg-Z;F`4EMdIV1 zDH!t*n{55l@GrJM|8070;Yq|6^Yk;>mqY0|M)^LrUJU!|u;;PKPvTrhb7h0CPyPv1Ljv{v;2ji7TADZ@=TNO5roDkk1j) zXn|e$h3;tSi47LrpS!LfLQz!>uKZ>iqmVkh55*utrRTO4VTs4C#H@fgrZF{%!h#U0 zpZ@gH&!C|vD5X57`>+;1xQKRyXbP4aR0VoIOwxr#a?54{s#e#k=<(sePK$A0a%L7iuoY)0@YIw#+3qaB|+}pEGXONeBC+b15?LW z33?Hbu&2^;A{e7GDX0L=D0Y>w5Yj;Xo_AXt95`$R-A*}GLHc)VAFv4=vjDMnxw+?z zm+am1BPh&kZC zaD?Flg4C@Ha#fW~etAtbN{4N=#){PzhPM<*A>5KYz0;$$yJEwqw~p+FpG(KczfC-C z;dp#_ z$4`gfK;}cssr+ZD59lCDRFSIff&?guk_7zk};u3#eqwc zvcr?^`s#Pt&R*UH=^A1T)5mZ)Z6#RwFQw|5sL}@w!)SsSiLigh5}~NQ)Y%bz-krv0 zVIhu}ZKP?CVYc~g&a`2^`P+$13<}IRAr@5qo?^w`ob9I(L;LV0V@N%Hq50#5akn0$ zHv%WU;;>Cx)P zN)=6jlk$`ItC?{ZxM1SJm*?*Pl+M|5odUd!Pn)TfOf+o;217JdSE@1VxMBf1g?B_` z-oe`@Dh8(wX=4=m%h>vuk0xTHOhr%I@g*T|@I||TC zLy6LnTEm=CwJOH-*YYBdQ5_#r#FQ$&&zPEXBfC}c%Yre);y`l@sNfB=qwS^|A=KZ8 zUrxL9Mt}3!dtsb;^Ko8!3q+$!R?IZBm_ZnBgGt;o78znRfk=@%qZ{)FoJ#vKr5g95 zUk}|LQ8J{H4W>87PAdd@MJZNYM?o;Ik;c}Ec!>h?)9*l zBp3KAx|(7@u+yiVla%v3t}qQTOv6UO&2%8qB8o?LNVl{N!!hU`rq>IuOOvcdlVnh! zf97|w@r6QG@~ob?!v-6nOMj<`pQS#U!w{i%@}w^>w|6f6i5so|x8mgw8Fuv$u}|~I z&)7o({h>))7+i9tVW)E!x@bLWVj8l~EbLJ9V5qT`eJJ`L9|90ex?${tl%?`xhy+pu zk-4^3JL*uLbKVL^Brx%N!BJw}palA)Ixp_P2GpAVu^@<7<@taNNE!Tfe}38BZ%s|= zal#(m{G8X+wB|N2c5y#i1@u?~A_M0F0Mo*6gqoTc**qG%Xox}hgF9^*QdPu63BtC! z7!<>Nw1XH9!}%j>kI^|rG2f4ej~r&0gM*KlzgQQqjGv!w7q(YyR?SydLq%K)aIN(S z+-O}YgU~~J*X3k^M5*v9ye#AWMgJVxy_RKAg`?qO48BocNt$!VSZk7I1?oifhT5DvnPK!5=5P zD5Cu_(^bjj4H$($?@`t`nBas_#|lQHFcshC6+R+N2!JGD+^-6=>rbTKToDdu*i8Gu zJqr$^)C5Hv&4qn64%t=3Y!P-)a&f+LsAT%5``PFjH$6arS)EH0HSI|a^&Rfeb0zJa z9&lvf1f%!QXO5xvpFjy}!_nN&v5Qp@1O+)`{xTNj6+=Nt&f#j!OE+c662^fPTyS*p z-tc;`st|c^`Y`jw3Rn)b722m!j562bX~Lk=6sMRZct_ofj7QFHte`9mZJr0yHvDy% z*9Osj>rF?(2r75V&<;-se*mX;{$N<})t5d;SQhNgD7&PG;9rd}i4;I|pJI}DY=z@0 zWF8NN9wZB><8yvx^541QtyYNk?;+bY;VhuhAi`r8*@#?Da6twrUAzu*Lhq4Umz>7% zV<-|)4gi#xPUdF_76Ja3Uw6b(X3xR|u?119zMkS{0w4;Y0CFtAe>5h8X+YnG4LI97L3^)@ss?eStnu%0HwxK(~aEKpc$gMlW_ou2hSy7%3E~q0O*6)I7qeYT7 z9RHftdIb|?_pd{Xr9uAKjau_Y@H_gBwt(*hM;3a-JKBru+H?N3GZn8zXtA104{US} zLyoiYB8nT1R5cGI5_KTM;0?vxVTN#NSzhkgNYCvw-Ly z2aWqmFTQP=YK|bkzI?O1I?-N2sDD@Wjhq>}W(LXk1+DwOiKFX#8kC~j^6{q_D%c^=FAx-NNB8p?Tce3E*w`MEyH8_nB!pSYqcHM{Ej-P3jVtU=R@NDGFjB!+m_dJe(Q$khNmOme+lH2T7F8o9AaQU zor*loLCRlUF$T)K*n#+v_nw0_s$B0_PTdE2X8O-oZz@waGjdWd=Ep+~n2*D~xcbLJ z46WutOTn51D(bea+CKu|NDOhnlvtc<4p(qS$2Wq}BpDM*+tW$i8UW$5jM&7$b?zDY zMA!6P3O&aeI)8_~140nk1&fYwAgSLa6L+yVQ^%t_;nBuS=^p<~Nx3-+Ck%z5>FIv2 z{Wf}Ze;qXs&Xl={u*1k>!C`7#C{deat9b2=J8aitW&B;H088jt>}!!#236l(fEWK_#V3EH8H?HUYcRv%t7;k5(uVIJIg(>MXc=SpCBBczLhn%&2RLEYfISb{eJMu>4O6)HWP7Hi`H~)dGT3h_-^Xl;0g~#KS z;ETRMld{l*^LrPAp2efx=Y}{`J@&BYe1dITVmAlxiIS{RT%2Sg4M`>ARHI=%5{tRx zp)U#2p>LxhxJZ2d&v7=M9}<OZFoz_@xh&;e*8DudD>3Q>mMTlRQ)MG!kRp{lw`3HDH2hR(V!&OH z%gj8%;Cw(CgtqQYg7%WwnJmrZ?p5jrlD<@>YxhaJ?iKRfIxf%j1Qr~TNN0wc`Z^qq zA3`PhJ7$2v=4qeJSd#0S?ykuL^ws-)J$lM0q!zo2lxVm}nS|Vd_q0)<&n={1sZbe6 zTy$7*>li%R8$)Ci3=0J;)!Xhan=5C)yOz$Q`yx3~qe#xDS-O8E-q=Vr;D%snGZX*T zngMwtxUScjF}$Yeg0VSC0yvi@=w+t8N2kPClz(H}Yt&k)fM?o^llv=RJp(yJ6VtfA zLY0hOYu&*&)A=hrSPoP!GbxvVjiG#ziXxI)V&^)?JI**>=dbM8m7foH{0%n$-uzV0 z_rB3{yPnXf2YA{RIMA?rut<)8)`J637j9Yc#n5VT4aNplA|u0|rb3$|DPgUd~@5xj~^L!_)-bM;p?VZ{yduQjP8U zo$gUKuHBcL2J0_VaF^}wm?rDnE$Z+S?eu>aH|rH|@q+lbNQJE8UO0 zoZ`uzHr5~VOOFotaC)iNn1nswR(oaXP;c)DdogAsP3}=)3YyV8fvdVl1u+JT{`6kU zA{fS9TQ!Zhj84l;5SjTP4PZ?l_+n~ST7#sizj628h!Jl&ZhH)NPFHkK*1yb7_4mog zeiEJTNTV5U14yxkX&kNi<3%VD!#OeB+VnSimgCOfPR@vmFc7u<7iY`;G?9|*6!{CX10o!4IY+0XvtztgY& z?9NN+nt!Wber@~DFT8g7hmA0wKIS#z?Z0;^-n5~*KX!k~hWhi%%ttcV@sH~_bHj3~ zrr)i$&rQquG&~n4KIN*7@%;K18@}32wf@eYZE4X1Ifo^mZ2ivqmsiyZS3>@#eB}HK zN9AFbTi!EK-QMr+N1x&2A6;Y6_q-r&DK`F0i8!e>+S+oc@3FXYVAGnx(s*9@k5pN} zA+$xrxu2Seo?>B>Qisk*$&K7>h|hDuP9~B3KhdjvJbAh%KTS#pCtKEYZ$DnYJ?bte zO@`X0zLcOS9My4ipm)rW6MG|ouop%1wPIW{ z$xTT=S;vYIMub(Nq>Hk_Ih^h43~%Ae{!g^MQiXv>`DW*v$q`b-D9J1|AM;cl22Ql* zWeay59mWJ>smszS4uS?p(-SpgNp7OV-eay#6|vVr^wVbD1e;HyEBofA`F1a4C~Iz? zbf4vKBogemH`n{sk1o1<>$lc#r!(6G|A~M5i<~>^5juS?M<>Zm&iGsbD+5M>prU|@ zDa*L4n3o%kmAFDCiP5x+Y}F3Mqp|W)xroc9Jn8a8!BG~4Nj}w4iY^svJh*$kz{h)-L8rqNsCj85h@aCEc zxf5;mH$R#-7XEcwPI`d#-BH&)KKfmCzfaCZMEk_T@qH3XN)6h zP@jisPhc}AIYA8VqK1eSee;I$_vbn~b;9DZnEm_9W)mt|Sk zoHHE!2FFK;z@;_$UDfy8s5X3WI06cP2vW7zY4>l7a>y9)h1K*D`&+PR)#KBCMZR(l>;)z`W42IH z?rE?_wlr>Se(c4vMqA$3}IFSaC%(FFi znR_p1=A7L}IW7NYGFB-||55kHi|*s@!ND(YyyFx!g$>4fF#WnEmA=1zNp^e<_UNPL7}b>GemCD)t~AuM2Am3dMkzBu1A#x(#6BQksUC~m9u@<~uMz@8?iKH`H z;|ETNThKCsR(#GXM}|3Yxy%uRU?eD}OUK_ZXZvD@Wla5{#M#XGU=|wbG0}eD%p&b` z_xu^+6*$a=w*$L*9vx;va@8lEw(iZOR9v~HEXj>{wGUG3f82y#eTuX16L|ci_{sOX zUw8K^U=_z8{a%noneYTvbOTzzDnzNGBrkesZ#K>o9kC42F>@_=u#TxPrd7E0C9@U9 zW0s78Q|(4|N4LIYp4h-gEE!BHIxXR!(0CUwciV4@CHK$Lx*X_A-9{syzVvqC>9r3- zJ!28}df?=Jrs5FkG-a7eckA9*Yfl|NmjWk{MsZ+gP9d%hA`&gMh*Nc#p+H1Xi!jS2 zuhIJ46TcIEI0x3Y)t_=>rXh_t{q8vo&jG+i_euAld%pt50FIlSlX3tpV#FX$>iN7a zIA=5%9k3Ws;1-l9dLm@bL;?to?ckWfnYJ<$NCi~Z1ZWBZXVbWhB|oq$2?q$iENnP4 zIKr4466&(dPX|XtD$_`8iHw zpVMqDE5(RCb$~_)VI79T`C^EN_}!Msz*78sM1#-hnlJ7J1IS}eCotC2)O_LS3QAfS zDQ=OXxEODCJ=5nQ%$7qnUzd+MrsnIzXwCDyjO*AUA8&fIQx(pJ(QvzX^#=Bs9Hv~y z3wZnMAC1-2QKeN_Wcn0RS~_70tma4wW?k!qd^u?Bhod~~u{H@fil5 z7;IFUp=p*gRShb|rN-q6Hj9q6l5JI79l&X~V{d+bV%779nWOem_f5Rb;|i6}zs+@F z>F_;ME^HwAk{Itg6s}PB41suRN)$$v3m$UHq>i49L}9Ul3e2*cxZwRz(z6K^9uUY4 z7Ho7hCX{f1v-8_ZG=>#(@!?BcLtbI3cD?lZJ8%w(#&+^+X=>|txk9I}6iw}gSMgYi zwUTK{2C*7H0=H&1kR2EZH<#oKN#CM!C5CIzqi zc|c~0;^Vw3!8(` z)veCVsU`{nmRyEKqD7{?3s#hbRSX+R=Smw*9xX<1&tS9^dH6*80U4^9FYA|TE#g!i z7KnNyho(i(l<}}MNWYhhLy9_{S)-e=B+-pZ4CINnHSw!%`fMt+*+f^6o3gAC6HgrE zxg2#QGy;F-haCxwxV>J!pgGurmZt6VIYJ^*k2;=XM2gfOJi@XxzGS@OFlxyF9%C~^ zzR=W?)9RQSRhLbrmYkLZ0YEjux!|Z3dlywy-R4Q23Od*mYPDU2r9n_cDJiK4fde3) zYmH`j36nccR0?Yd8DkmRb({naQS;T9ii;KAqgB z6+=?e;YTm($)@VKdr+bC3z)TbFTP+Fdzyp#I&vD}K5fX^k2(N9G|h~KG<8cukJFtY zf!wfz$B*}Qf#EO}y~ZSIW`S&)s#e63%*c=$33gsi!$eO{y3f{cbbrosy&rEUmoJBx zUX6KroGXBGPVvip6!-bg`@Z$Ab7h_h#OTV4MGjD-M;q@^Rs&J#Gy&a~Wj`$QJcoJ5 z0ZVVoQhf%g?Ixc=H)Y<%idP_Qry+0*cuWAbw0R#8$f?_yvA{fI%gif694NtMK_Qb$ z;T-?X@D?TyGFYO)WMztZUR9bt$Z%FOqRy2)Ng+#|UZkgyF>W2pJT^He)r=+S z9z<8;`-D7c#^l59>kU2bw@(Mqf87@pKOG_Y-oeMBdms4et9Slx?6K))VApfyh^|o& z@$?M!+DACygmrd&jxHy~zGPuW)^pc$o7d5x5%@eiECY|*#)mVQr9#Mx9Z_OCI_d(c ziNe{JZ6)fWN`Rw&^PpE~O(EdS>ou^YnGUIi_4%V~r?w^WpPvrxG>d*ebi)S6qg=73jw)P@05t#016B+ZZYC4CTut zW0+Rnm8b6r85XRYDSbSB6h|N^R}LthSCuA@;*i2%xvZMim@bM#7&9fOnkaB!M+Rt* z1TPNRz!~7KBEQNQC|an-h9MinY+CY9`GAf0P1V?J@TW!=(R(Je8Z)o2eV#x{MwOmW zAEef!W)wDFZG%>T#w}S0q$D|iI>_jSa4~AhD8}K|l#~bO`Ib2zwPZn@O~cUs8kS7P zm5~Vt0yHaZI_HX7Wb4tBk6032$vG>nh@{k-+_O^M^`L@bdDJjo4We1)nwF6gGYETSug(OPHxNTQaH^H2+yzPaA{|1E?n+h7K$m_cRDYI<+S)vxrl5n5TYDN|vFJ78W$}MUs$t&ydTc)~y(li|$X| zw|Q9c!(86I{za%8z5SL25IWWDtkG{`c#*D!`DC0)*N--qSKAU9TiDx5S!&A?K~; zw(4Q?@h}84mbr1}vD9dyEj$f}m9}B?I=6Q=2}rA=D1Cx5H_AMBc}>@rx!ulTWjIz; z_7Zu%`y}q@UtX;LG0*S*OKvPmNv`cOvzuCuHuYzH1@M#09-~|ZyrCc78Be!>6!5OoV#rGQ&_iU~>RpcGe8nqJJmdH@Mr7Xj#({ZAASatU;({0)ayHkAs1r<-zBLt^ z8k`GYXLt*f$A@tnaZ5%`PpP?x1H0gT5S%VGY57zgCd`1qVxVqkCLIpoxils59A(%(a1X(sgafbs{^oNzNB@S@l>^o3N5u-iql*|LUv#i+bUe zmtIL9$}bV(UlKNNa`S;vwr5~L8`L^@caHWn1V_S#A!l!<6HyyIO|dtX$ykp15fjbW z$m_c3-g>&%a!Md>wL><;(6*eiJw0u_=SF6%>b9uwZT9th<+i*bm9n!5Zq&yE8%2~B z9+iVts7A&LRj(GX1@{F>>A>RiXlI{wViW>ry&fVloXJ3H2_9(aL@Li56X(J*0}e}Y zbu&|wrxO@e!Ag0iEHg0}(Hcr#+DbaiF>qTJi~%CXXc%$aym6lowj`AbNq6}#SA~ze z8KU^0`(%Ff!ZdhbC6y57mN}mX-qkVLO`wLAz_cgLwp`Az{|k_!YLVJ z=PONK-kuS%!m|$IO3{uqi!>S$rYtq(^i<42G70D67*UA~grySyQ&~NPgN3CiB2U#} z&mX8$5 zArf<~7m?@iZH?MDD))iKeSv~;B}po=affhds%da`k0JW5F${KRFd;NX{OX7%{?XQ! zdJ0wyb!p6Wnhq*hCyKC!8_zt-$6K@F)I_@qMP%T}ocC!ucL3U#`O$On7{GJl<C-UC~+L$$DxeS!Qc1A9pq>-a>>+N*tSs_jLN~ZLo;rl0fjx;E764 zF!2lZ z jPf9e#@63q~2t|WvAGH9c(|6EZQ8 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

    exKSESwrsihjB)#a=vzwb5i?{vPAy~Zg z0hb*!UkNdtW2TZ>zV447!7*#R!suTAiIP;!D;lXiW1|yMT(|_i z31}~0TX>@r9xtVm#DeiL?uZOdYD(juff%K3v90ZbGecmX%*sSLFpqS1b{weAG*Edx zyYVEKKi%VsQEMK~F0LpqCQ?{;4#hGL^gG8InE07w) zdFA%F;>KyV6aY$A#GJW(5Z(m;} zB*QOL#JW~%{Ba?qc%wm~g+^*gUH4D>Mfq4jyUpr!QTIn-7;#GwXXMk;`U#~{K+LLC zQJd|G>6xXlr*ah-MQ{|CQuhagJ^;?tcsA00;K@J6AeP!amo>v|&H2y>as*W-onS9t z8)UjmtNKd3{W3*3pI*F`3sqST_-uGEJRTlrIga%27Z>m5tn0-a7e5=$hsV>SktBk6 zT?6*TG_q0>Z8o1a4xuZD4O~6ZwFAU)M8{kaHI5=b z5{(>V&e4&W?|M29f_s@-P{&!sxiXBS18RI1Meb0A8cthn3n!jRAB4;^IVPh?s_FX< zqtsPe@3UnZ*^!DbnlPh-))?tB*UJDzKx80_&xwK-4TOtOirOSWi!CG>l5hfu6QqlJ zqiF$vpw4V+r;mI&$JS=;=K8Z9edDiQ|M^d^K6&ZYyLaxTYrOQ@tFOf^xbwI7UrYad z`IT4WZw)x-<>pKA#l4cN@P2al<=5`rO_>9<{?*^SbbYzIzqo(*-e&Dr6$Q7v{N=}+ zk#k=sWwJ4SA7@3g{34A)U4FIAX`RRdt||*YTRmJ4Vt5*LRMJ$JdH%vTNl$%|`ywBw zt7dKV=~{JVQqiaR3lFYoMlY97FY-9_?^7#fW+Q!iv3e(d{>^6GU6J_SlW}gTQ+zG` znY6u| zGVWY)x8ATjkyM7Ga)=fnD})!*8Wj33QB;0)J#8&T9=7HTe45Ha zzl-9OM}ls&>644)KSfpc`DO~ilQePQ@>&z8UiHh>uU<$7<|oUKFJ!dKE+oh_x}*Vf zN>EgrvcBk`z8tfFzq0;_FQ}@j;b#h@4&}H+68#{78Ycd`mqpbAs|C8Pk?uxGI5MJ& zh^8Dm(qL0Kg84NMSycsI120J%+9<*_$^g@nI0mAmfFlD5X74c_U`8pLIYLG-!g@Ln z)JI!H`i*SN&64CPLkg_p6%543rkD+(?8#&@9x9Ssawelmvd2++OTWIzeK9*2pMZTE z<)3>N_$ds?=P#BYuht(HGepu1F~+dP>U^fpH9o-`cMh;loJAx!x-4;c{iGyv}k4Gu-K z1;VRx${q$y9;|}{DS+^8PCms;zqyXhevltGwVb8LP3FXY0724) zlH?>5Ig*?w`i(}Eek0b%+jya7@4mW232qyP)R!i~R(p)*fUF%Ga;{bajvU3RD%B(~ zC}nTcO1(t18SyO0y~ZVE8KrrQRlhH%zh2XipXF~3$F6g7x*QqzB!{|_qWd~2y_{3J z;>b*WsB7($zZ5m%jwIarJX_uAwSU*EWHDi|4t0{%H{LOzjPjB-9}CRfnyhs?c()&} zj&iY`2OJzA0E}{!o{)E+ro)NUfi2rJh>fRGmEBS}L>Zy%*$UH*3om>9G&j56yT2J? zC$`1v+8rGnGZ`g_5m(d{QsfB7HGEVP=NGz3aC*{)QLeN#G= z57eXHy9dj#cR}H%CR^_wEMTE5Ax-OY`}1HaBh0#7RM1?8g$hWDT*ke1Zyqc)7PT8~ zTZ8ByFH;j%viP$7myNoI4dTXvF>dJz2V`n6zRsxvyikGT!h3<0JArFrn#PNubsTpP z2;yB$`7>DddestDtr{Ce2`fb$5hpQZy2mz3pl(%SAsbW$V1t~AigDtCP@y*|U2s%$ z>lz&n9%IPu)LV-KMFm-VXl;&l%?s-|)al3i zG+$r4`>D5IGZGF18Kv(Kk>Cu;w$%2$X?!)F4AghnyO+R~rqYhZbkLJd7lf-I+VW@h z=Oysy=yMy!nLMGaG-l63@y1GqpFR8pG|BS+<=}4$?mk`n2*Y~_h(+fu_(HoNN}@R< zr&LtA$pqcXjMLLuLsT=cejZ$P!%_udqm?V8M2F9V zPIJ`0oMAFS%bP0Ea&u4o#TQoz=1f_ck^om3p{rcc&P(sO_2VP{_&Nji?AG<)-pd>9 z!I^kMtGi43vNqOui{bfW+c(SIOS0 zy%B_jGJl1L!PHl93yirH2l7{ppCBhk){7I%6)s%^(237jS6Dw&*|D2lQ%-K)#B
    zp#c>zcMffutujg)A_}$7+1-=?n>HL729@GW|h1QQUFSl|mdS zeIPESDOs{J@+82RPHigVb`a`7UqqtE+UtuL z9_NjcR-iueKPi~*1?-jJc{O+7^WRTuZhh;ls}f1RVaPr9pMcj7pYi2@wdNYe|>m0@IL zA{`nf=0pus!1A1=t$P!xaX@xz{`wZqrzFmGp6O!sVD&J5keekpd|I2P#ugquQVNL9 z^1AJ+NouLh(Y!W$Sl@Yg8);2XCo(#!A?Q3Zary{#>xP_rx|nasbne? zk||WsC^K)2quh@jJ&35Gd6Le25h_{)m<2Wx%${v!NkWk+nRMF7Fw!CVQG1mu*h3;b zA7NA6XFgy&of$^pIx9L9$i-UQc@C}*K?`0r5f=-+-6(n>LFo<5gu#6=(#csCJ16j zsu$NvDp8V@GcP=`Im|T~O|oBWn~1n~NMR2#5D$(|*q~_sl<>};&+RK%q*X$!reD>K;^ULmpgB|<9^2!;cikf&t)$1PnI7K$RJLgpp29X zrwv>X?HCfK93*2kc$){UO$RPI7{rTrdn^I{_7l9g{P%d#?{i4*^9($nR$cujD*Bq$ zZPA_nK1$v%Cg|7o=PMdkdzS`A;^_(2}h}zRZOlmMJ$wf;R+NRIBi4)DUoX$ z={Zfh^41Ipip+Uy{5XRdk#blXD4aIXP9ulsLjBFadE!nX4w#VB#+i&3a!$j{&}kC{ z6C_5O=!Z$WDtpY@Zcijb>|~?70K*^l1Zlq5$B9tnoi)Fp>fmtgd7e6b_1&&IXE>r;%)+ zEX_&FTBi?B8%K6z1DH{PqLM;lSS57YQOd7*NKaHTo@(pHP-p}rXpoT%v& zbW?hKXJi17+4JjChC*`;GIPIID8uXA?7ef1ZIUve** zS@77wo^#03%ut@4_l^xIKHPfuyT7T*%+@m{9e&k27417OeDj~gT(o+aX7#P!KUyHF z(UEdtv@jj)Qv+Fe2rD6d;Vv^Tz!THX^{7F|@fm=yQU(WF#uk*oPGsX|E&#b{LpYdG z+`~u9aB@X=7YzaFC?&fRG7EgfCy2?B_z28up6gV$c8q9=k;s9mnd4)UoZ+-#^mL;5 zmKv#zHU#P%+p`53_MG_Hj9{diS_+}V*=oLsBhL`U9OE!kPCpb?0H<9~KadPd=A|tY z?-)@fL~d~$VCPO#BxC!#ARR;y(-kr{@o4j=LI~H5bg*f9N1nzx?`3bid{#$`AO&S2 z7lrORtytoQVW3*ujNexA+mntJo+-g6KLET!lTcha#f1eS0snmy6ePVejhU>X&)s@#pDRtM^is`y&4OX>{DbiXZ*z>QA2T zyyuR)mBq@p{qatf&|ccWVWkpNjAXyO@FvgnwiRv5nK2cOKLx={#v zQf)*S5HuI1w|8`1O5CwB&Y=ViWni+mx6psE#w!A$$_8(_h+`{g9ajcUNE}ZgSR)wq zbfokPcA$_jr3~W$PV;G%$&VbY!AdKs>HMP>R~%4vlPEcoT>CKpipZmaHJD+HT^I4{ z3=FYNFy~;={+_AsJaw##C#2(5Pba6g2iKUZ_#|l|Tgyum7ow|r>+&XPX42vFh&W|& zLKiLJ=x4t+Wmp%cb%GhpYfOo0uen~?QK`Y1ytu6;6N9n0d5*)4%C75RwB3gnv!=WG zRHPs4<8XbEbcyQl9h1}%j*A~P8SbV?U5)5eoA{Jr#8HDKvw)omgO5<hz3~ekj2%b)`TpcQEMKa zai1a>>7zvEba_4N{=nd|M1c8+& z^Ea!vli;l0t-9(t#FuGRZ>?9AM&JF@^3n41Gzl**^6?(|C8ZY>1Ymp;=kbxY7!YQB zNvkWkX3-U#5m0_d?}eh35Rt> z4rCHB0pV3@rfn)p{l^5NDIj=PcluC^I9G$_$%a6HzZ_fz}L&ddD zM5t3KF9$~`qP&)_j7ZU-kT!In$<3!D6kou>_`OV(baUVN*aT;v~gVcGNKrRBdXp z3n~-{m5-F4*i7+%%!u>d#(htY{-fl^Z=u!TSj2zwRsmnSTtu>YBNmk#==jOM6gYvJA2UD+|BwY#DO$TaVY3AxJBG*ei7-4PG3W`Va z*aFEft9F@tucc)P+wL^#b;fh`KUeRinbfPdQsi&-uozN(6&a4ea=H96#pm*Pr2T;L z(c(~T3ver`LtQ-$Ls7d*FcOyq44!bq?bM^ht;^Dw{fXUsBVjDX^BM4p6~+RMg8ijKs(#<1~9mBpOOY8G-W$z(Lijm1u3p{1h#c-$hmp}l=T6RGY5}?6V}?2n-+scF0)UM0}IF2Kc+fBRue^Key-mSIK-4$>9HIM^zlXc~vvxf8MN_xtD*-Q>aXhX%)y?Mmw89hyaB ze{GEWl%AHY`PpGXSd{hwEO^GxQIV~xBUGJ&%T+8R3GF~>W_0JYE&xen-2$U-JzT@ zLoy>(dxh^@NP24b-heIj(oU;{c>JU+cZ?A2icU6&wua}qD||AVev_1K5xDk(Qpx8K zxbE1HbC0oL9tR&r@jZwT))QT*bV}14Qa+cYtZ>LX#YZBC=;=IAXSl#&uCwf!6BNer zJ+KX4VOi!aQZK*F>7dDIlADsU5syAwJxtYK7t2Qxnxet6`um7fPa3qb_&|jVQ*ZjO zhb~z)X~YqNcuAj6r3uF8isCjRQ@twLph`+`0!o{XBRsk!R04LD7%<0_6S<#w+o6eA z!Xb|(n~dh@l7X}JxA)$VaaaH#FtE0?j)lhFQ#T%bADKMYBtC81*00+BUVx z`?Eo~3LJwPMTRj@z|s}$_{d|SQMRrpqe=E{kk!LIE9AN57uOE+;}p)l`c^zOa8Km9Lv zesBB_G2?2#kP0#H*73s(NI9y-5`>A(; zA5rOShwU{`08Iy!Kq>IhMg2=lgu=BLRUB@3bkL@umBDy>JU_vT(>Ls6kGsgNOY?+x=7dPgo{x%Z(| zT{A;2z{nVvzcEAP62O_n!3on`n3>=>_!KJwa)v+Px9%0}XEbkiaI*ZM26ThB}CaH9w{;>Q_3*X2S zi*fGU?h?2e1o-(vKxIo2jVDbO(Oc#zr7E*Kw~?0GemT*iv&<@msGmB4T^&?ciUBZ( zg(!zaVxy__xt47zN~22#ZqVHIqbEpIo}p_%)mn3_=xIoKo96C^YK&1TL>1}X;Y#-) z)D|Pf*1I`S>Av}BOGtMs-7`wQ@mH_^{HIr+y!7hbJNMExUV81-*WwND{O$eM(m!8* z<<wpE4j~G`r`8AhzBWR zwqYi_DsTTjm$pAxe!Bc>L%6)*B-;^^JyAo3NV6{Kzv=jt7r5nbBVc_KAMMKoTYKL- z_QokTxW_a7eu^Mo=7xbAip4vg@SWx5rmNt8RXin%i0GgXuI?x>;-WdQ`$$A9 zgUdR&_LFuts_3Ib@{;vVl=Ek8e9zd6E|*Vkm(*zDgTEckiwo=xVENg-JOBOWsV>_$ zc<~uK{l&#|HP^jquFLLKKRT$7UR-`szxEfG9}d~1grp8=92RN96eEn691fmgPE5V7B_ZOz(C0wDdo1=;LK-kxK)Ho?I;dA+0OnYj#A_*?yD`@7BB_qAmy% z1f!FRpO0)`CyYgxtgHk^fwGWgw~eG!Q@4=YT2F7>lOvrnfw9%Bob{}PQzE-+eeTJ= z5q$s7PhQ{ryx2g)t9M_%pT6}!UW*nBrifoXfBw@g%s5&$4{YhyWr_!kx7!#>J?lzg zI3V6dUNulU&{2(;EQ~7dMIb&;Kpx-(^d5)B+*(S?fz1ak!6F`FmC`TI%0npS$ z1%=BI7aS*^`i9Z6dVp>)ZV6$=l+!hS@W|rcwIMesoob&NxRBU%v7oM%jzd88I?ytt zPtCcMG(J}GNEq3OPkQI&j6JPj*BSiH>b-Q@Z_+W>a|cRY^6Am9w;EHTsfV5R9fCd( zEvAVA6J6Nddt>1PThF4H4yGLNAwS!^%)#|D=FECd3ULQ39Y{Gvii-vg6vH6|!e>Bc z)U_e!9$=y<5LMEHH9EkG3KUQwnH(u&L#BEg;4Sp-*g$m6#9o`hu%gtzV*|=Ze{v*( z>2qZm5kc@?kw+UD#?C84%Q{EIgw-UsZA?a!bkXbKH1g=v)mwi#JR}h%rKh$)ZX^Qo zI!_jFvuTrpBt(^@ZVvolTv(To3K)T@VUC$DBnhuH zC1$3Ol;)wPRQMP&j4^1u=NC~H5Vv+(xwQ^RA`KzQGpw~K3AYjR*5rzSHk&quxuQfe z6c64;qNj{Rw1fKghErS}ydst%OIXKFtWPmU*mHZ^DefnD6{I5Cmw|N2Fwo*~Pc(S- z?Pg?E8N6D(xq7&Iu=;h1V_mN2SiQCLYCCT5_=rEwG4xdX6(6AfYeOX$F{RidJxYN* zGoUcqpEzgZgTl1vaYhZIMLe~n%wG}Zv@l|F!#iOCq5)1QW4J5>i&Mmjt_?Z&03*$W zQ(ftvfhYpNh_L>~*1eH8(V7{`m+s$V(Vl~Yc~=Kuuc^^tq)6boGRy#kl8=g?7Syz@DD)Ml$D;irI-ing5zbDGppyx>F5 zNaD;Zud=z;{On>LymaLlE^rZmcqZK(M|B^W#KBUM_@9=d)I0vrKs0lrrfGA6_(Q2x z2D6UZx`C?Gtk!|^BG!l)5dgLwkzo(`vrAI`LLL%5Dqc~pC|2cUPVNC&7>Yu8qId;@ zIvT24X~)JZSdbw(t*Iq~u&!~f165NSO*P7)vh90EvnsXy4)Ydz$14)Jv9hfw^^R8% zXmnoHOj#`eg9(_AQ~AcUV0(Sp-1xYgFr^0dbE~NjG!LffU+JssD;8WBZ=BhG^>3?( zx$)`is;i#UarN6xgXFr=>dD3OgXOn*W_H5n1N~M)N&&n@zZKSsic+o_HVUac$)$~K zRa1LFgV~3a8Y{vaXc4V@Jz4cJvCdZAd0x zqr3MLQG;t`VI$sqQJy=ZgO)jFI~lD!xH86?83SD%B~uU-$`|4UWn6t+u@>HpG#VYi zYO8E%f^w#T4>cmWcQ*>9xR2~Yv*wF9@;m?n!@Gu54z-B0AxAM4gf1x8+Q=|cj%r8C zv=hNH;$S;dw+3?d%z_4vfS1O}$q(p{ESoK9iE)WH)O09xFrtsC`Jb7ItXyZy|Do! z)llOvdN(qdNVG;XH!{Fj&-cc%wpzrwGK{gc)Q8Qdt^Hbq5h<&JP*kTZz_ex{AC+5d zV1Ni~Xeg^1u;LE*P!rG(>|Ax1m>|PLag-Xv0MEer?b?uY&ottO67EN7`UI*32UBQ6 zf;2@s^XrVG(vQr{2Me>_18gPv*0CWsoZkBK3?P~y zSyfmmB{EmExrg6EKMl)5OUzW^vC`C7Uow5SXRzPB)owrWza=wsJ%Q=QkqFDo#J4GK zyQa5KUrX)FZ?4|FcrIS&qxgTnACSmh5U)UVIY9&IY(>1_W&0s_!Z<$EtkM&8_I}yM z>fP*0T=S}a9W{Ecy-VeIiK6xE_(D^E`WI2jZPrUBkU z?~VvyAE6Y@J2u8Wv)rSZ*4HySs+2+!uvdr(JE@BF;UNxjiAh07IH8QEG>kJCIe29tn^{};22YJtLzM{i4sn!WsYoV(o-f1^XLRr|*A_A) zH6dh_7BY;SlaLGRx9{zcmu71|<^(j!Nf5Ug#_`?qv&1&GdVBfB7T4H&bL|@I^{M}q zc5e0l^4nQG^}i=U$m0)EBqkd$13!Oh^+*~W@8PW;>;wvX1Cy}f6tjjC@+Q&ofeAs# zH}%F&6LpFga!8^vqKu$|jAQjgchV?a2m1FQwL0K}j>~m-{nNJUzNu$P5+(<GM30Xn}%Z`~Vch;Fx>R<869DSe&O-j6qwEYCdeJi;>h z)o%@tLp(_DXsL1-_-Fyy9~a#viW`Ua?C(k95MEF^WJ?;efm_m{Mh7bWXGl9HOD~8c z31q0U>E3Y&c_}DDBejh8bRGm{N<@EnoJE{1!xnqx#3&Sah#;@9FYb+<7HQP@Fgtf5 z4*f2N`ZmGa)%y(!YiI}t$}wD+Mw5q|NlnWf9&qATV3-MCB|Cv%xw@>9F%-Bf`@Iey zR*i(y=(fY!OIal-MjS8sR~RrMQdMXDGWTB2z;j^!&oz19cWHu0%Fv{UexkPc)n+Jq z?8uq|Z-0Q+5#NJY2Cx$@D&RDZ$H6duE)*|4g zjzt=4tunh=o1K{g+|alaDEhZ8kJpKC!xntVhF}OZ8suH9IRgco4WWF^*u3o^SQU`u z0~L7n4mTW#Hw4eSNRdlHox~kdFjcq#6p&(>Z>K%nAb~w9djOD)k0cvbe%HZG@@!Il zVG30x59fzJ?kJWw&MbWUUFL@WV)b@vN~^l^=_PMJd^0>?3S*phdz03UH=9XTZQku9 z023_t>tR__2TZacL;7c22ZIG2Wsn(?LPpcJ%=!4X-#wfID%x(?PTtZO~5yO@O8$~r!8WH zAbZ*?aSD%aEJM#?jPA z#?HWU6hsGJPaJLt@<9qaQiJQ+a3e9|BgM{;2kn_IppGzW3EF!2322hxlTDvw&Wx|J zgZ^~S#hzojiSqam3YRfut^*Buz)+jFJBd)A#45P#!%rPD@j?ta+lm6x+}4Hq`c^kY zP$r!!(1yh)!lEePo-Sk(Ac_b*()f*@&I6{NQP)MoG*!q1YcZkYL>U-Jup-lrZ`~VN zDxwk6uIQ}>GB<3_-$mR^TvF?}AVPnMPMV*1B=#7C1EPf^8?9r+wfS*1u~NpBGNFhn zPZE3Rg2SNh8s^boABCfrNy&uEF_dkAl-?;a6b(xM?wa#h0*n+`>*+i|@Trx(X=_G* z*u#JaKx~{DYyyE=(`|0MYmP+2D)%f-Mw2W*S*EP!)96b*8yE2D@=?x;=B($%a~YVv ziT>8wol9+TnP%au)w{{ZD+mjR04YQ%<%krTnL7-Kx*u09L^NtaNj?Y0A3SVK5fTHT zz@to-;52vvw5a{Y&PJR+Xpr4RaR^cFY>-Whc~8cnQy72h2^a*y7`n22>oW|D z6EXZ;D`Kon_2Rpa#E|ob^WAdssm`^^24^a@y^JS5ab~AcRUbURo@({o>hCl2N;XG7 zTz;_p@ZyI*E`OWLbiYWMhcqMUtE3Zt_+~f*ggELXlr$G@ls7j*8CG&&3c;l?xo>4U z%KMhlRy*(JjWhE?|2N(zkKV1i>KUBjhvsj6kSX7j)0CEZaQ+tOpcuMM6Wu5q$5xIb zqXH>s(?`KD)=!EiNT>y83wBbN^Tf>o4GbqIvPG1S9m;}}l&lxDAWI+hKSMw(o zXqU;N2iX7qqk0P4pv_3hn4V4o5>^W}*N$Io2;wNuYHRN>@er+ERajLZq>e7ZvxlF6 z4mo2iNjbqj{?%pABS}8q)Q4PN4a-=UCN_la$IB--jLaM!orz%_LAJuTqzD-xN)0s( z{lJFRp)=zPaT|GEPdW(`jKI!;#(Y3@1{xIP)wb7c*aAYR3S_I}p3=LcU?|i98X(r~y z@}DDcr$763@<1=s1(r|N4Tk%EDIpjOh8vWc=s=M#nVkVC0Xj?#`J!J6x6v>4bl$N7 zM_F5Id}_#ttt5twGv#$J^}(>Vbq z9G#R7S$>pwU{=40K3sCy-oIGAlc}NJYydurY2nKmtH>)OgKp>KR=ZI2B)9Tdb|@!= zh97lm4*_8|pivI4FhP2pzp;I9Mxrjy(@e+F+s9URd8K_ADel(ONnprp?eRzjo#)Ch zP_8MXqtx?8&rPU+3cX4JsNkVp$wUqKG^X=F3^^UjxsV9?G+295{bB782V2Z6?joM~ z|Kxq^jwH90=BpI;mkcNc9`f*zoWUC4_4i-~^8meekH;861|%&E%r9Mh8wjv9_Rg*$ zdn`+`g#`xQ)x{0B+L8wF6J))@KFN~I?5-?kb!BE{1S6sw5UN#GS(yQ=C{S1GBPCvrES!$Ex%?jln)K$;K!NZ6~U-40IBh3<2Q~ zt;B3m2f6Y5kT&p0u{sClrE20F)K(~lpBv%fPXW&hHawaqGAUaaLryTPW(#EUvf{ zsxyn|?4ZbL=WV4in*fUPHHCHvo`XakYQ#Q`6+gL<%DI_}+i0MZ09GWwr|Y^DC{kR4 zHnqvJ`yQ4)5`>oc9))*YRVQ~gHsq%9={HOFc#)=gv2X{zzy7F1OPg-+GU4=DnTap| z^Z5;<$~X6bE3JU34ztNj0I1N8Py$bZbQKxwv+&0Qn(5HM0FdwM&`jgA4QNcqgjm}J zx*G!#AZ914*^?w}LR&lYr@?{~V=IkbQ9GQvFhCQUqV=`lzCb`j!^kIHc1(Xji-IL+ zyOJe2YfY^&&c=q^KoFlH?EUq-9lGZz!@CpP$Myt#q7IDM9EmY{bkAw-z2;rZ&~pPH z^iD_GC)4S1aPtmEm#9hXNe+-$75|*ZZl5^WmqbFZCldA;=p-mhWGGJ50(kBo7J*5W zEhA;0JxrdwmsLw}*RD#;UR6~}o{bI3G0%qLwoDf_LX0_-`a=$!-p^m(8Zy^RmUo&FIPV>?a7hzyLTnb0 zTT|PzXJbRI^K5KsG`_BpVI_=O|0yHoj|#QpMfvZm`nxYPWNpfWTT-cu%eS^nQypkE z&}k=3>i`Pxq-V9)qtD{bs^ecMNL;lIQ_mS_B@$kxNgCEv4$Y%dZEhA+N^CJrm%wPM7+?(Xf<_%v>-+Sft*YYdw zz4oo|e)qrr7yIgW@4a09;velRukC*St=ArZvss?{_vLAC-{;2L9PES24y!~!`y_N% zBVd6lWRNHF?e*inBD=&1k;ul-na+CNNR;_d)>sjdsrDSqEeGEhv(1{je>0zjyie`cL_lrPT4`D`|{}>px$t|1H0yG|qk1RSZf8Vycx8huKZ$j>=gwM|3h(668L+5%>`&_M zUzaN0rr zV4HtlzW2&^F1Fs|{a03h|986%WVyrbt54olg0GOhc*BD2#Zt}(o2uUI@^6`$7jN1m zd&WWOjBkfH-xhGsf>u%=b<4tX0qUrF)XZ;Lt`r<~%NczPV|$VvNe0PbP7siNNp%~; zK>4RG)?JgE0muWJgy=$$^JMm>s6eNL`s(5beF%g5l1f6-o==q99thhcNoI^(sLm(| zhat991by}}_@tb(tmB5g)A=VC}UjM86~3GkY5dT{wh_9WXh{k0s_=Vi#eR-m&7 zTI$tr_DE_IMdeU5PZPBT$!nRp&x+0=hoz4=lkcDiVOKkDHr$T6RR=}TL#blQt>{o7?C1&Ck?n$nIuv)$Qu(wDJDVlYgU#k z(V=%sktSH{_$zu-I9gC$N0gf_y!IEM3Rz|DFH8HZcF9c7%Pk1-*g$ zzJ7c8PVIFrd<0u09UIO^$7JcbNtoeR4EH-miX@%~B45swYG z>;IF%z4#65Uv6(`KVlZ*LMS7-xs$%bspIubC2Cu*cw#0vH7gpq(a~A@d~7{mfYe1n z=P_%jlF6ilIH1}(QvC_Nakd>!VF6VLSgKOf0NaV}Mi#gWZJu&r=qz1Qk-|c?dr2nd z<23zv$~z-;wAViy3Sgc3jTS^`W~Fa9I@|zD4D?>d z&K%)}-!6c0?onkaaguxzxFIe=5bb0$MIX^t9g1lz^@+itj(IcHrCM+>sFh6okiPO< z;f8S&^9@Ww+($);GqD!x97{4*_@0d=xm7BDeDqOCC!ZaI>kEa(MH|Ab#!E*>pM296 zaBt7d6Me*(!46j;abF38`Ug9dLmls0%^~H8GqV&5BQOrYxn-;S39BImTsaz_-BD|uT3)7d9DnnKAk39pdg7>%oR1v{V3d=g1k)!S(d_^FbT4iOI#GtC@@ zl=Tc_u+!YcxqF!TXpE*wVjy%br9E*rM%=Sdd8lV&N!IUeTPABo>+)wkhF`r79GmAN zgDg>FzxZ$#NjD>ukA0;j?+7@2rEil=ddguvx*J~tP*R6_Q8tG)NmW|TZg~pBbmJ?f z1GL&2lpF-7uSY}UcjM#sQtvKg@x-tEy6O`=nLTRRFE8J|YC5}`R%(=LURZxzd#p<( z{f%bsNuJEZqJ>gKQdOc$KJgcpDLkKIG@ zmp@-UwGKfXPY%T%p#%?1ve=LAX%?93rQX*cnkA;voe1iVcYuxdLgOSnMi5O=8fiXT zm}mry)e$y$5Jw4wi?OS2%-}&B37sS7zJ=WZgE&Bob{eq{64{b$`WJUT8#!l+SDv)l zSdz!6^cZh8@bnUUiQP$l;>1&eMj)pq+snNR4CC{aKxB-_^H!Z?me|9`#U8FwbYU7& zXRts{?DY#m0GG^C5{ODf8KUl*8W!`eSLQ-$cKcKdVjkIT$LxD5b4kP}+}`{_-E!jM3?_`0k|+mqa+c05#D2 zuyo6JXpiScVZg?+kyRk`hUvB|W)bFr^2Fj2+T&pbqjro4k%+NLTx20dkjghEvN*^n ztIFgwD0M0cv<%3Z?YWf(hguBIiEtE`OhoO+sAipef0v02300V8ycYk19!>teB`1=G;B3oEJ_W3d2W=0g-XU zz1c%9Ft9kU81T2Hwp{DU54Om3HCvs3_(`3dek%t`4{ukoD(#Oi?L~(jdQvF6A5ylu z&dj2f9lJ(nF?XzEGO23B%pJevijT_OY$SJyP0~OH*(1$hwY{Pz^|O>+e5*%_^oI|u zwDGvnMPDv{Q4X#xpGqO}Y#$7Gezloon2}Td2+x`vCh{bcs?m0LOL7M_;on@3wbl=A zjva$HEuiV9q*pDeCdL^R0kysk;it95|wn>w;8DzbHjqnA~GbWIbTG|lCNM~ z*L|0F9IAj$ma2BVL-d0XJvTe%+ zBZbM0HK=(vOY#ikr|E*9DzJbyHt9qbwKq`X)jp4U7Tq?YD-dS@< z?{B0%oRR~^wpa8dD6z>fIWvlq-*2@Hu1Qxn1;G5H1>&dRe|;g$Uti#zR0mFsLW6}A zs^-G(0|y66nG&1!dEj$EQEs&sv9A`{-S)l^D?Mh9Dq_&iPD5T#PM}iQAUH+>8)~=v zGyrtssiFWp(Xx9~1uw)ydZAG$y5I?8gJga7Fd7X>x0w{cg6uPsKiZE%*Z*0Ijs;vF zR1V}ntv{(k&<~f0r669qlSK2$JhH~>w#Q5|B&Ol{qRS*n5ll;!HA@u5l^nB5Dy*>~ zvPn85sIUfzJ;6L61uTtJwjUft^Sh!{mDy&wD5^rr(Ht&R#t2+QOB2y$azxI2OBG`o zXPfAFHkRa>M^R2M-9{`t(0M0ot)bMUZMbnfd=8f0SQ{OR=Qq9C3S4{)u!gZi6AJb$Hrn{s+%(n+4XDtpvtQh zsqYW-yFa>o^DLuw?Y&3jh7nN$q)H^x9UlP=ce)j?02wWJwXI}6_;>@I^e&y}z*4)z zZlxpcZ**jo&S}^r;CC$!0+=M9ulN!fx0W5!yqN_u(zxnBDn`#3O;RU9gB)W!mL`Q| zQ7neVh9#GjvQ4wdxLaxXENwObinq>4ubVh`53}fE#?NU+bYn2eVOy_{sClf?9P z>)&Kwt%Q-E6xZ$Yjp~hcp(GVr=AcZsvU38QQkBE1&l(*m)UH+l9lC7{h9ukW?KvXQ zp#?ej^b#tT^dXkkk$UL!>Gjq(#v3>!&(lb!cW?w!h^UYz5>_4RJb(agD(}|<5lEpk z9_@igFw%g%k0wEEJUCKX<@KBw8TOIgs@uu>(gFHnt-a-c3I}M1eo&A}0P20Z?CH1kCE39uZv5;!S+3Eny?9f1==#(Al8v5F{>`5Y zVa%JgZ1>sFNy!|rZFB8KRpL>;l5%Zj!2gS*KIa@Q^G#;I5$-$phWb<xluWgUtj|85MFWpz-nm2MjkfAla(MPFqDZ`jt zIL@gR?OmAjz)(qM+OCA9I1eOcc0uhl1I2}?Bl+zWJ*ip+2r1#LEXk2HJzEx@L1FaS zD^_wJm=3n7NMwK|VD|YM%#$8WmIg3KIly`Y8x%4yRVr_L3w>jZH zJ*2=Chv*tRli$L6+p(xS3swLL5X>Q#wwZv>UHIyb?jcnHtvyn98<-Sn{2o#fELh3g z(oeQ7F7SEvkY3mFJEe!T{I+J(N~-H&HVI!{zH|A*+FDvX-OIPKKmA7be#>8PYDk+G zTs4`F=a49;m|;~hqQ67Jli;j|Ks%q!CB#HC%c>si+MK6{eT%cht zFtyO&BEQUNm5$PR9(oT;W(*H4Ynt*>Gd43k`sM93+1G5$xv9B-FU7eoQb`@+qC_eC zwr#td6gH``27+%`ig{=eYO*pdgDp*rszaevQo&5p9fOi_&vj$1rQ*T{8mY5*c-)jR z#E=%w<1KtP4R)fNI2$)5A!jsAfeRRLC7aG17Cn$j{kr3i!Of3qz*a)+5^4`Va`!Aj zr9zC#s-}Jg94YF}?&$JV=Rqv$eDHb+lxVc#x5;^(Yi1;>pz!feJBOG-I44@kCLWjv zla|s8LZ$wh4u9ppc=4k4&wp8KeP5No-n`RA6*gagdSxN=>&~WQzQ*fv z`Gb6gr7%@Sqif~xEYo;+1+Q+kEK}*>&o_GVfjAnkQA;bsq4wF4(lcIoQmJv*B$wLw zor|9XUf)E%_LN=yvtxJl_z;Ll0ibQ@0pS>Od)>4=>k!D56v|XOfw@BTj z2i%i1B@~@>#%tTsAaJad^0TodC!$uVbJkh=Z5sE};`wY@MJpvtjySiCIHCvNwF?eYXuJb* z$&#sr@qN~L7F{^XaAL7+uDOF3ti+gnWZZ&GdnD+64!-h1SPV^ii8(M)tC0@=;NX?R zKNY2&D7!e&d5}D23*0tfF9p27`@jWE5^`~slt@*jaQCxa(wOR|n2ja5p_;fwqE9M> z?eM{TUgQ6-F5fQ0_2mWQgOd~(b%K4#`V@8L$?LO@v#8&xAkoET&`94ZcXjT;M&pn$ zOwwM*&?^GAw;@49l1l+6N|C4NmJLpdO9)}H;N(2ZFP$Vikb~+dLz@o-Qrbm7D`CKE zHstgS^X?~nbN##B40D-gJL=uf;cEGEn~Hq!G@8$IZ|RxR0M<@P+s6A!5xUV>GHzIq zc_>DJCXou9%pK~*O5L_M&Nh=7=c9rHD>2e!m$jZ^yCHKx;V4#)$x#7jpi{*VwD!1c zs2AQF@_jY2hl6@9v=ssm%(9HtnQgOOt$(re*^;s3Nc3yYcs`;2@i=AWPQ6&azy5dy z9mXnA86%BpY$k=2n1FuhF$?}PU`et=l4r93QdrS#lnPHVLPs~`FsFnQbsGJk5dz{W zrrV6rAPqUF^7ZGfdi|2XVN58la|?~%kn{Lb501^heDAf_|MvbX-@gCq{cr!xz3<$2 zuin4+PxbDz-T645{~w+@NdL*j|NFuJglsK7&L-mB#!_w8{hO=y$4|Y!*S`s4Y9t9p z&bn#z?3wk>v^r`f%gQaE{iOYm%GM~!)%QyNG=KAxi}la9>?)fsmNzce|Caa4=e6%D zV^<{;`|*nx>tC-wTz_z(88;W2)QXI_jb{0&t9>H#S0G5x#vtT4DKoF0mZBCRSM0Xo zx~HzmiE$ZdA7}}x@`o1WY&&4HXK4=Cn=e4yW1m>W%E+4FK|sOekT{^H1h;981GsYky*m^fdx6&)Iqk>PPOKy zkEs($gATg=Y|V|0cy;k3fy6+^i!^6~?6OI9vfC6LwROLxz%>UdIm-hc(^xKN_7hag zxS}|VQN>wROwWMpGT~Dd3EzH9__>)L8W^(Qt?fl`l<}LPa3Pd z_G~Q4b#8+3;f9o#9GJbnG7_ZGyz=SyS(!P&4KM@J_T?|RGu((VRevE0&n<0#+Pj{E zmY1U3_0JYTNUG{x(^%?L1H&j{iU%U=nZpfpN(&1;x5Lx_5*qzS3i+=(5L0fnb_`ZX`0+G(&HaD`xm&=tFrz z5}r-e&Ogw35U7kob)XY+teZG@4@+gE*pm?Gvxfn*Mf0r`GiJ|FX_!~<%Wtv|QDz9X z#4Jxb``7u+4mmrkif%`fkrzn?%W4yDpQSpot3$2WZMmwU4xV;FsU?uK99ocb z4>5p#3eHhuw{l4J_q-0^ZtB+h%_PCzUm=^0}%;wJh6q&!E?rVcCrtg=8<@; z1qpO}{V+*NmUg1s8Ca6_?;EDeuM5XmnJ#N+$2J3Jtk1x!z5HLUw%7a(q|7VR@8)R>1fxlvOy-OnZ4Oqk`pnBx?mDh3UF`vfMbSq zoK+kA=$HgC@gj88^9t6MUg0A|ggcI89$Ds0@a_MRRU7C{z3KXJbiD#3bN-KnWF3Vvh_oQg&85 z_9V`t(OW0-u8#f89h7K=V~%7o&qcPXc8UXypoK9tO}F#eh#*pit8t#f@SwzuwWbn3 zEEklNmInBqTK7Ugi9u94#fg}$&>LzcF3>xMv2ujW#*&;0O1cXu_+r|@MNxc;e&OxlMrdcI z8lgIO52KEjJ+xugTJ z##}*33X(dxNg^cyRtZrPO}l$o1*I_cYhoTAltiaK2O{rT6-L;Nl!$q`X+!I?ezQp5 zNnV;ex~41c2ufll$BdK;_X|cj4H2qErIl|ZrDT&+X(Vx}!9j^j!N{;>Gb&*aj=L~X zVeD*BatJ^)2>~KE5u}Wbr_Y3722(#z{}@nue_eFKA6)*+75>}+=0F+0ERc5jc3}rB z{6cj~>5C#U{xE;@=Ym(4?~IRBh*k>_P4MffDLzi1D!h0Ow~Xr*o= zh&&sqq@e(D`_sOsoE(!;*)|^+HvAeBOA zqohev079l{v1JreK3@@=S@`rp9e4ihqB1=^DhO3{NiH&S6(+#P#1CDY#2J=$*3djT zsZ1ixZMW5%Mesz(a~!?|F%n$KJ510X&4?fZFwX2z(}%&3vFx_vJP0F#VkroM1|=zo z(xr2q`)>Y>2sgQ>KfQquVLYcp$iO2UBCs1Nw1}R?P{;FkLkp_`oEypMxTC@T^_6N= zLx3>8Wfqo_wym@>81hV2KC9=)G7|#Vs_#Jh9W67hU`(zWnT!zeI9(6N!0_=cGo|b* z?ByI$ah5~f>r;C3vdmjCsLw9nxqP$A6nwp*s>#Q^qz67Pmikc{E8kMne7yeo`n?gU zX~?64gJu1(Y;qtQc}qCNq9##AkmqBQZ_#eL_H4d?CJ*)pwboI>+&c(MNF);GA31zT!WILkUzSA3LUSW_7zrnGaaUmxGmI#c3KLDPxBx=T^1 zLw%KVI4y@3%NDD4w5t0e6|1=g}2Xw&eWr#S5f60>I*L4S%0w`NoBX|8yD+; zEdkaBYzuWy=`eV!2FFzsqEU5vjECbx9|>W!t3K>*1jd~gNzP8QNv&iD%_adR#=T~X zSwi1|1v%Sn*qA(rHt*cUY;YSaiqJ|dT5b{jQaTKPlTq?0(%tz&pW^vRsQT=d2z^Xi z$?YU;sF2+rvCrbbjnAj*S&>*=KUK3S$Csa6MV2?J7v35GYOR=5x8<4!I;Q9ge|{^& zDQ!?X)Oux~=QIl%A*Y<+t=XL;_z7H*9y9J!&TDFU^*b33#Y%&Fa$U{uMGe=`4qjr2MX2Ns#Fi2(*)ihicEQm6deEqY*C+Toz1WLc$Ro&Rr+_=ct z^dJY1Z1xdbi?T)~*Ef0Tqb3=Y`b zvB+r>=sm4+Ff5VaBe~y$gO&^^Y!b_6{bSk^CTvW@Qb0=>XPDLpAa|TSoR1E(VlRA+ z(xVv5@#+Iwn-0qyOg^gLcZVx!P+@FqTmVc6>Nrs_ix?|e83C4%@sukZljVZStdtj% zWIUPG+Ro3<|U;d!{O)2DM2z!`+RbTYh_BC|``K|od zZ{#0tnpsMIaWjxSIa$RDKp&N3OvRn;dD`xbK77m(f>J6H$xnhl z0Gy<0(MNzx-jBs{GdTJ%g-(E9b{;STC?u;ETD&60GJMuBru!bwkDnZbJ(nJ3R8<*$ zHkM@l+uFrZhAba!83V5xN=l1I?Uj71!)SHn5LL^=MAF-cwV}JulFfr#-Lb^>H2LO; zL%5B04z`hxMG?wmjB0yD zPcr&iXr`)|<23gE)INM;c;09N zaSS*wm8uP0%?s;KFW*^zcKMUdbo6`c57!@eXo=t~p|NfC8xoMEvA7my3O>ZW=Qb=s z_#=bQ9muGTKe)W;&IUWh!9^5Ia^5@zK<1b?BYB&{XYPENb?qwwJv{hCF1cb8A?Ue# zSXv6+&?GGp%sP=Ts0o-E#iWDoR}MJ_e0GQsYfw~qYRiCg&EO^c>>9pzfO}lU%)CnNrVfJmQ>6pKP8{STIk?2i?{VLsE%#WT`vGD0ido zZAlw8HJYP7<2>Go&vL-CQK9;x1Wgaiz2%^%)Ra1r77ES1hgOXh2qc%aHai;}Dx`(9 z!rN;4PhFE!TfLJ7c8K9~4oBqBf}Crpn8Xyrp&^`+n(Y*@;9LWSGW(7^Z`yI5!r&2* z^4@4(VQ#q*kTe#Vt2{#sjDS!Jt6>_Z2+Gl~Bxv?9sh~l3WHLAgjP6caxZe!1e%REQ z&PC|oHixYlmAff^vj~QGwdzATX~9~&=HS)BcnSGjDge83cezu6NLRFAdY4` z<~`VsbLj4&)|2M$I2>4zvmFP7==Qj<`xsrObm6*a8r(?>viSeW`_^5_jw;PpIX|l< zr#seKah)GXas7=L%>&fnYNiLvNX8@n+SsNWnZ|CQhZZ0_hM}d=Xj%ovcKKG8c!E5y z&`&ZEky%xlk*6~E$&)+w-dG@4RpvRlbH|QY-@1NZb!A3{s|y`3;^;DPO@z4@IuDFX zg~Cnb{oHjAD*?jgoixQBM$58ob&Vwf;#8dCaaQg;OEL=E@kNpM7u&h(LI^p2P=A`3 zxdS!}FSKqG@4%%`p_T&r?4DT=Xq8Nc?aRP$-p(nEB%=~&=_LJB&E7tS!k@c;Z5E@I z$d)oV2SvM7sbzC8lOQj7Tqq+6q?nJhpM*e51hRPxm*3dAwqPy_vGe6;U`b99XpN3P zm`nn$o24Qyq~euuw9it_0)KcUfqh#b&cq*FsWC%BupU#QX=V>F`^~Bi%!x&z#bRa; zc*x$Htda%G#UEtaaoblDad(Y|*BV`B52<+y2Z(ajcRF@3uHU z&d`=|?E38jYL9D8ZYx4IKD2Qcq_XYcn2<4%t*QS$Phl2xjS&h>!~$fmNv_zKJotzt zz)eJTm$=JYxG|_G01=_22c|)VTdGU2D6*Hm?5rQtsDoK*BZ#y{pih%9j!3JLHj zn;UD~HQM}z4#r(I25+Xb)VFLMlG*~d%jOtSmX}CsqMNwu9tLAcMmEX7f)WNrYR`{| zLP)ReI4gH1+;kt=W=_cY!fr&m>A?6 zs-W`2J9bzvGO{fVM?r1Tj~gX1$bH9Xo+I1qLi$r_f;QvXFKm(-uh$0S%>+#y+I}#WuygHfuSM`Mucq)LqucepH`iZm z^sqM5LQgV`P8z#npTBlobW}J^Baid;5{2`V+ zrc;%;?l*DEd2L~}Lc84?iwl2*$)UzHT@HxRJ4Xk5*s?<7I?l?SXGzW)yBZyxWDGJp zbgg$JlO`KR>U25}okj;Gj$j=>Sc(~f63G>g*?N~Z1yc@An4^)}mOyFd{6Q`yWtTxM zMlVuG9fdoQ5SlqCG0q`UT&QAK4%`79pN0xFv50UmhpeR{R|mvrV@cM(*#ON!$XB?0 z|9t)C^^Xq&yHQ}s7qRoU69HWkmcC{k;G`8O-_mr<5{6)07!tbZUYJSdk4kF{Pt+Jc zbkdNn>_F34@LO_ODQk3)3!i_D7L06r@s|Qag-goHX|zwcFag|wYIQV5Mm?|W;|~3N z*XC|gsD%@aqsEM7Xmmeq%~>>eD+R_38kQG{s1i`#@~)qh6gGdneE*g2Ty2XE4_;aQ zm;b!|diCvchufdN^=``H5f?AquwaMD11>n~w)enk8}b&I(*Y?|6JtUxS1xEe)w4EI z#21;%PF}O|@*YFaYGQO$1AieyBA8BznTdj>3z+~4EGVF|^A`xUq?4jpt#*H?_0l<8 z^AkJQCc^^le)$<#lA8*BMd)&azcu-IQ|b2R>TO}=Ectjg@gqFgn$!Jqz@rvsyX^pZp9I+0mVdot>dFp_Llv8PQ_GrHl$Q>s6#Mkz&e) z&I5r8Wcn7BFNa<{{M}JYT5d)+d={ z;}S};lE<;i>obKazyy4w89aBW;wv@g;4sKk=0K)t6;>P>ZwVpDx`fd!h0~9$6*+1@ zF)uK4s8W#k0HcKt4$JKE#B{1#Wh9LW@RW>evcZC6OdFlm*;taX0FS(_ON3@C8BG)vg z|F)d8fd%20-LEKT z8>@s#DXFNReV#=Zqe1UQD^og4sFEu&s-lSy45=lP=yc43Pn-^<(2SK2p+tLRNTa_OH!?2hV9Ka?mXK6lCoz zS}xoWNv?U{^6TZ`hNbAyok}*29WU>pz zJ|7q5zFxiaBD>X&@Wd9K1>ndPoso1K%&x>;-T<5rI;`3=3Fg>gy$HJ!b0MgRO<$PA z5R9si?8I%3%C1yz_X&~G^&9KYHmA7$tthiUzPf%p|K*eGch{fR1jnDsbmpUy<9M78 z`!jm!nvVaf=H?%*KdB7Te}4K4_x2w64+b#vJpEoDtpAWd@cs4sgFfOJ5zpoWM&xyp zib8~zys-}~C}nkGsR=>>Vva-V48VL~;TW&eZ;Fm@-ZBqM((GUIPWf=dQNI3kR~7f8 z{J$!L`$C!1`rZ12E6vbc39SrQx22$VRO(X!5K*O4oJAc2xt@eaE6m}D~AETAFb z)PmgA3?Oi+1}PHUVqfZBy0)|;&UEzFji+*rva>6qHYcyJx0S;wyelceEX4H;v5oskWB)C zC6+B*NBYDe?nGfhenKw!(=EN^v${ui4!*eBscIBoVO!P6zp(!7`bSk@^9-E4ZEcgu zL@j|Ux84zrr3`h$g3h9MGkE4xmCNaND$mOl^MVL9wx&n@ix`047%)zmz_NuOS1mp z2_Ve@j8pO=K zOY-vl@4xn~2d}*J;ME5&ee?cz9=KN@-2d+19$>ZBIgJ!u)snE{eUf4yer zKqnyKyDG3B-i>RnYA;-P;-NocjQTK@ZkW2x>sL&RENJm zTR-ejU8G1tgKwfUu02o66tAMs>dvCNC_GaXx_Z)QLY5r2KZa~FRzG>Qb1{Ha45p5J z?p#}{L}14{?iYtF#br{dm2O`cWGSwZaXS(2-gOVN9N2q1jdTr2m%-Au*Uo;77FEi7 zHkM>JRrseZ>&QkG`^orDjj&4d%a`j%*Y9S8`e6OD^&dJQ6VnMrY;(O_31@(m*jVE#beJ_d+>U$9aor-nC?A$ZDh?Z(M%-N6sc;Cz5Wf-_0c2?=scRli% z1S>OUkjex&ZmPOtcWa4?DfI1=7J*?>iy?LqhKdH!vWZ<}p~rP`p@>f;J^52pWg{h8 zFp3mw8E|(Gi=Z`&BayqFXMuMR|3BXPpRhZGQrO4pYxkKH^y2PZTZSN*+&s-mO#dzM3k(=_N`7qS_$7=?$;Gbc;d1ze z&J|XNX(l?N<^o&yr7$2tnpq3xN&He}UZaMsAMW8;ADqfRO?lngSj};ZQ5GA~XC(*X zlw9#+o$(hsmkgK_4i=DEJ+&ZrJ>$~lQ^wtiGSFC~0@0=r+Nmv(0&2UIVxS11f^4fn z3&SZTwN|Xor!NqvlnPFUmRY&a9_B8Gr|6n%OV5Jm9a+0Bf>U&L?^${9YW+$6=NEvfC&z$$43?G-#n7DQ|w`87^TqqD#C*H zTu#!PIlObFru=q#S2A87PS1z_HE@_F2VQ5OqrJt%N0LX2S}{ zjH8IM!>4O?s6RA;mE1tvfns=BAs82eiWQ;ECiaoL$aj5Y?|s!A*cu~1q@ZkjOw1QblS(%G`eD;PE7 z4hw-b%~wR-epI^sGemt{WUzabqPTYweBKAfY;bl@c9^_IqflXOB%e7T zom!AP1Cn$m>Ql`l;~Zw`kww#jAsUSy{If6L+m_!Fkc4AW*D<=~0uneA46B9dB?1zJ zK-x^xwkkkbNR4&PtDn48<<;3(k{v)A9dkfhAMnX@dKLsF!zg^sWJ41ZiO~X}CdWSF z7%BI2j_F`o9Y{u6b->1b<1qyZMJ?mVQ@Dt%4)++rR3YG91PUozlScetGFhEHUEsZ^ zbGYA)Aj6Mafv>9jS!Yn&58Gbwv=Yzy_rt%(H;V4gh!Q%C&{^5)SM)Ld3XCWPZww+MlmqzwFJtxBjvozAy9AZB>LuzNJQ_ zh)dQ*q)3oV+_$>42q5zz8!16_ll2%HDT)q}qD%oj>&xeQ-Z40}Aa^yi6otSLPLx?j zN?m#*y|69&17t5#!?Q1c(Wh|nNKqx!5n9cMaktXNBgO2(M5aUI+4s7MyY6A-A_AT& zosX35;NDByK7J9Sv9>zJv#})Wf6XxZaUJ%4!o_uU{ZAEOzsj)wW}W9^33-}T*trF;W5c``Idm(!+h}b9<=+{=7PAlYNU?kivt+u;GKJzXt3&1=Rp{6sm_Wn5Wvtu zowgFeVKN~;?u6(q(G$D%hs z4}C@l9WKcyWR1C-Bj^;~M?NCxh?JbgQ~e5~DQfT#LsJ*Ql*op$vhWuN9hsa|DK48t ziz^|GT55ewGN%JpH>LX?&OVz;Om4r?(@GLb2waw(JsV4MW7Je~tRK~=sD@0hU%%4< zhX8_Ati_=OR?4x&pw7dgZ4`tZIuMQVL9~UQIRetD1-a{CMvs=qQ~e4fML|I^V6E1s zjF1>NBMos}9FQnw?&{ytr)#KB~L-oDaq-PVnP$anYQy4T@qj`@z1D+|3ZdDkx?YY zvWEbeV=hU(P?|+4HTfu}siavUgh~g*%E|dq69u!eBe<;QjbcI^kE3HP7O1(;$t>!WKUIaQF%xEA5mjiVzKqm9jIjFbQb!SFr$@{ z*jF|7;xGe>8ShWc7ta-DAo0jTs{_$z4+|%xb~VYkb8QJ;d8eLz`59P}8zg5&ha5yq z7OI}v&gyW8UYe>F(Pwq$p>igKlr@1hcgTU2I!4xVcgV?Jm^{UrHIm#0lYz6?SZl5W zx4im_(^%_UPLo;5fZJv3cuHcz#lEV4mxCO|ycDL^NBi$#jUt4W?+lqYIpUdBj^qZ& zxmRpxvx|7iWu_1i`1?B4plGIX+0_AEd3lzplP zbw_f}kZp#`QJ6?d%!;~WbVw5xoJnn#dzO%f<4RNWP&CS?sWmXJP)XN31u26AHX$0^ zvR)=LD#ufzGBbxX#Q~US6BYgL?3NWBUU5n}YNRMiCG8lr&OiV%*~E;qau95KkwE_N*>qnKbw}4y^)?QWGF|)h9zpxx!u&Rn5^jX+Bpp|4of@nqJW{FmG z){xfV8Ec-5Hg*^zq6eX+I(E`8GGk3LsK{|h*Z9r1DHv2qrGtla!;JOzrTQ(lUuJK{ zx?0sA{HO2#x0jy0^6i%&+<&!v#<#!s^7rxu@Bfe2zE}SFcYptKe%HwmqTc>eewu$@ ztEm6=!QXxF)x08rZ1dKC|Mt_5d+^F@4_@6a$nGTf%lE(k+P5CO^3sD>AH4L<``>xs zUVU)?yY-h}`^Nf%VneC|@DH!w%+{nhzfb(Tw=N8pSLSAO#%$5Cg4H}>-S-K%_ekE#*hmi-}Nu^U+c{J)%p*G1F-(1Xn%ZGqL06PevA9~#s&f&l?QN}-+FxKr7GX| z!!m7LmMeer8a0*8P^PQ$%H3o}4gyM#JbF9CZ#iybh8(`3e#>BMhQN(YY8Yb#=T67* zt(kHTNjB7NT&rX`+jnRBGe+!R%Ei2>>B)ZlZQe4~hFn!2=Zn0fiz(R%x|M;xNBNLE z5q#ZRo5x2eAbz`kZ~coAc^w2#!s=6VYa{h3dMQ0tC5fGD3ln0Y@!WgJQ~Rukybjek zY@XkRSsi{=v8n8pdZj_1eHUJbf3I%$r@I6XA3b4U*r7-ux*}fa+|JT4x~0<{xbac9 zDIy9nx{gD*PPSaYgoJ=RU!bq|AKGU#}Mn|7q~hZkCGCINP?4InH_b(nBAmSp|G zdc)7>QXxoq8da4yHUtSj9Us0J<**~Pq6K6UQAjhC&xH<3Pl|%& zaS2LKrxxTnM}Kg*B`}5*_=z;y=IFab+K*4r2fR=Qw$q>JA%A+U$(*>&i-ueL7U9+h z&ypD>ntGi7@n%VUR4%a%cgo{!Ewlz)g)^mu`NgXI!;>`6RsNk4ft6&&)7(#vy*?`z zqZCa`@}xM)*YA$WuxBVGUpt< zQgOBv9X}DGG?13f^sPYI#QZ{~Clqot#3mtoB~m10J2@qs2~y0 z(gceR1z|rr+yVGQCfnK-?;(BUqSlL`Un4pzx)^+RrH(+VO`UeapTv>@Z}+dw8Mh+E zkyu17jz5q?p2%t0Vts;>;t9G+fn5%NM3DJF(Wv&XFq!u2&E=k1_V3v$2pNCF{EWbp6$fSL^?`?ItLtnN1G%VQE48s*IhKAL~$tN!}Y*NnLi`Q529^ zoE1~(7M$1%+mMN|t9#dP<)!@W`i;MN@*?Lqy?F4GO04wmi{k?xDX9r+VQT?^H>OfL zOUXi@L8YBb8w(}0NziidQ8vB8v8AxSam_ffr2`&$P;x2-io5P%kPakc+gCdSp5ctM z%5uGPZNY>q?4;wY+?jy)eg?bJO1){={D)GBT0gqFxBlhdu7CeGMaQ8*zw39d-!7%9 z$F(it$D1t+gXKzV%R`O_%IiJp{CB zEZL>=Zi)CxkD0tiG)mGbR;jUAbDj4nT2&iBp14~|XD0=vHG^drPXz{roKGZxa@Rdf zfob9NBn<$_LsYz-qL+{{&!kyJVugU>`t8z|S;#2X|GfTHhgn`G3I}T3KCq{TRv0Y; zpWRr2Tw#a4OpM%-7j<;y<7X{BPu}|?f5JbO@wblQ6Oka{>vHTYbN&o&3q?z> zWu60eA8^FEGqDR-X3QQR8I>S=N^@@{m5qo_@X&Tb3lq6!BNg~Bj$JZIgyfc8 z@{6G<|TCXt1?(!`*=$G&KAf%Dub1!3c5kC zrxnmTJ^9BMiJc|Be#;W4C^BVr_F)(Qt&_ky63GmgVx$i9)+(w%atTd2Cl=(cr&|SP zZAjBJ<#^5`g9f3pv6RtOet>C=`z@oZN{h|Arid?&P{K&%MO)rm3PK?;i#}~%?HpYN z4_3AFX5^5oQ1hg-u_Wgq6hH~J2#)EKU+5&E;UTaJ>${Ip6u};DyDjBlppqTNCGwic z82B=P>ga;p^^lXz8$n>%2mKFulr~V?IKUuDrD!Rk6e9xkEurATfC`w7M0%q6!#e{N zPgvfVVh?8@MY-4(pmJbpq=A0cbu6F)kXP$}EeXL5;nju+?l63TeV`x3vNiB`0tF_VH^S{_{e(f+X(Dw65RH+phy zfk`HUrF5DrP>w~uY?>6%A<;>DKUcJ3Et-43lrha)uT zIYHZCT1W$9jU)Q3+~6D_?v9=JNC!ryO)JKCC{1@>u(SO5&9XS4;MH$5qpLy;h zZ)Lj-xn(FG8J?m)pVKWL5te%1^Oq~d2hFOg2o$Vrc{{C5ers9=tj1r-SnBRB`v&1k zt0DUdF}ouNoV?6%i>b;o%?6Ijt{Al+3wYvkBEFi!9pGHskHwR5Nc;PEzK$&ufKo2J zml#8m(z1ziNq61Dl!A-WPty-?guw&;KV?aHoL#m1sgP>rR(ifsxzN!-AEnF(ygA=F z7O*Cb#4mlr+RTc176NCGH*3$6b|&(`ijMU-Jm=I7*0lgmPNj5Wa&B{Kb$)_O96Pla z(Y25^K+>(~2p3W)RwJ+zw|P-r3*3Iyn_W%qDet7sirikQv{3GjQS(+OAG_tiBaZ&q$+^IND~1g*c%rcHhfJ*=8Az$H6?oaI zNA5kU?SJxnMN_g&fn2{`ANe!6(kg6H{_^FPZKz1S7Ujs_t$#J5UI|$5t*z=H-9eh0 zeC61V4q{?fsE(5;LqPh3a^(7d7g62(UU`5;@-siRhxs}Fx%DlY>;Oo@Sp#A50V_IyA3I&3WE-%i#Jwx*&Hp2QDhP z@dEq%?AlUD)K>Vc3xs6Hc?y@0JHaVyO;<npd{lH11ZqcwoU*l#$n9Zh?UXE1@XB zB-DcFgb?YVXd`0w4pQ+FXJbj~aLdOvrTtO$JvNEW0#CJ7c>SmAH#-cs2rh+hLs*dv z#88>(`>fZj&^HgVV7U*+; zQd&*LrSD>5i8a?oMLOt;taC9WjnA=qT3{^&x5w)bJGdJGnct}6?mi|jD5RR$?6XwE zdulqk8(a$q_Eby3BCr=$5(Z%}#UQw;y{bF+%qfC*soy>rfW7>ztnFaCC8B3Bw%MRQ zc8d`MbS)PNw-L}(YSU3I{)H@xh_R?WESpeJFwGF%L_#Ka-NQWl(OkE}ot?1Pst`om z{6vmv$JM;z{W6*Lv}tJ*^Y4ZGbzG~hI25v`7N!sTq3W;YUnrmSMvo*mX~~_l?Xqhd z!$yU;&$7=dZ9twRcrk>JXYM#IS1>Gwh74XzR(mYIutYhaxs z=9bO+lD~#fq7~chbrW~p!#pNPm?o*tP*4)1ZL2dpqD@r+Z!U)9D!XIF!|FC{q)asE zMBC%7cyM|wJ;obWW)8G142UIjYJ<*Ula$2#8O;ELTe>JP$+zu5m>(_-qaMRASZR@EsL$$zKd_4 z^3$stJiT4XG1l*||LujV^}nruw*FQ9^ZhbiGM-bx0=bMPlW55hR~lGLV~0FNr}Vt$ zKW`WvBO}fG+aY5K=U`+Vq8iBFv)mm zRcSjNXPwO`Q_XP}HgIR_sOkt$;o>m@XNiIfLvji|Z{n8cL2_ZeUTBOUthAW4onj9| z(C7|442&R6tUU^|u_TjMQ^_QjQp+46yc8n)W8Ic&7V?_GFr{lU>T8ZaIe6kZW;`)j zHxm9xn;plN=!&>^#*Q_ibaDKVDuBh7?|WhRqZrrD;6(G4ciqF>1OQdVEc@?aC6Y_^ zYwlc|VYYMgN_PKsRTNA2S#+%?Je8q;RVT>$Ec@VjdoIQYHI%56WZPw%3wGfb6QHkqqbRl zjRMjnZ8Az|E>cVLClXH(s5l8DJcWxpW(ox_eZB+E$$T9%NFd0b%J$CHF_T^g6XG;` zIO@D#O&j7F1Vv+wC!S|Xb}JCYLA%Pn)}!?ohhA2xK2$BE^(S2jB=WvP-})0m>cH5% z$hgl~irZ>KWFO!1A(%TgEWt`1OW;4}NDnSDDytmVr-XR6M21%8{~tTj7b!AwB`D=% zz5kV%D119rGUmi>E}_U+%8KumSZw<@7|-z#TrjD^BpIQ+-rh&wT$_yHPF5v~`55i_ z6c{;1$!$AOq^wkOgT1q{(;LwQbC#IwZCm7p#dwOXs;r;{q8dlkj8@@21zJ;s?mEaflQ-?Jvg$` z6LVrD$NBOZJK=?~a@k}|q&-Ak6XzUlFH{hKP1F-}q4OX~1{u;qMO;Y)k~mE&GRHc^ZL8rc z$)M1FUX49X{pk9gffb~lU`4`mr>JQ@l_|TY=xw*<9Nw_gfdYUz;4aqG+|HVSP)0e? zZ%u}PRauZ*W0lJeT^-&%b@?AmYs%pWN0K-0I0) zK1<0sFgOs&VJajB`!?XR+wa(eAHH)chXRdf8S>hQlmo*lEQ0`>tZ3VcC3q67nRe`D z8TJavbF=|Be@Zb7H-ACA#i#VMEW#>?z7mQq*Rm8Eb}w3m56rj5QVo#jZdt?%&3KlD zl1Y~8n8``Y5&{#%k6D(BG_nX2SYiim5TIn%>=$rvyv^pt<4>%ABg?~0^UC|{-;DTF zQ5Pz=a`w98g|s4Q-41c0H>d^eM~qW@lJjX^LEzq|8UgMu8dH>boha?IXme;X1j(4S z>_o|T4*MsYW_C;{iU%)WNz>7S9;BDp^CoU9 zYvK~i=W?2xxa%Iq3`Gtm%4tNE%4ltKZ2&}=84^8h;CNvVf^L<^937+>iD=|OqRuJ9 zB73$@W3T5dI^m;}&bD~{bp$CPF)v+hFz@ebI+WV9U4|kVmTV*9K3|aHOnQR0O1LnP z0&v++g&|@dGXyCXkUJkwKc;Z&d)Q8uY6SQ#Ht~ zG4B(&%HVaC|M|xHtLt}a?y9``Zhmoe$ijTbOvwhaSOlAR?TPKPy0ajAVP0EPXa436 zS#l+g)g7OA+${wDETi}QpXjFt2H|LlF+jvU9C=BqUJiUQPj{Be$pB@oA}y%>z2fGg2n?{Gwe)s-2UHERp7)Ya9M z6%l{@-+%o6WRhNzYNS}#{dm*gT>K)v;rUrq3h7Ut=4eVXSYI@c#P>J(6W-L?d`7`9jEoayTPZOF#TWnoQqsgwr#7}?mP#7V(G?iEdf#HM zuos3+!U#znRaj_R2&CoMg|V{HgZmXoORRiZxizjR4Ilgp!Bd%M(wv}QK{2D8cbQyc zF>;YWTsfbTNMIKGbw=~B&&sUMw$CC)Mj*vDs@~lzVi`Rb z`?|x9)dK*?3*SYKIFcUFfpb!FOcUlYF$MShe6b8vY6J}vJxLyJZj1V=0_12C)k`^!fJQIEBVG^b zd)Acmb1o|cyMQ2L%TarC#GbAV*>!LG2D`Xcl&~%mgZAF08dKPNZwCo>ac3-8o;I=b za1M!U1p}Oz{PnlSwQv#FTHibpumHdBteVfWJ^3(Nq+e$O^A!KOv_Us)&u?=CC8ceX z>3UHImIGqhu1!BbiFWRr@xOBhcWKyek%f(jN#F|M+}f}T>cT58^GxIpL78YycjLGS!%KouL1RjOXO2LVdX0! zOu?D5JYn=hy!fg+4pD)(Vej4eaPfXR(q&3$pL}QePi|g%JtvQnx3^RFI|QJ&FHX2o zgipdG!m#I{OA0~Eyhd#~#ca@MTU7Xq_GDj;2e&%9VSK}eBMCv5$veuZ3au|tXWM#@ z3}O`+Mg-#lLpcm^j)n~(=Xf98_puim8>6`B>ggS6+zKG#OlDYLc{aGk9mR}rX6t2jX9YwIyLk8NmaSbKh_1i|+~2YchIn6AA=bIXOfk<~IX90< zZICJJMrI2{K#34ORJCaa2O<)EER0P@d~~irL?z}B_$2eKDYe4Ta&$4FQ6jXNSIx{C z5RK;Q4s@-E6+E%DtnVvOLAhTc`W|~aP zLn46cMKOmBlX#iY84(Sz03Y$GR5z3x1UmkK8?Q(pr9~no^H>yh49E9CXu`GFec=1^VNznG_ukm%(@WL9 z_=o1J)cdsb0}>uwibBc@zewD<>Bm%hpSr59MX~rp^I7vRue7~YslhjOO*~A3^3n3| zo?J8yryo)r?5p(2qZ$B+U~Tb4tRmET=`)A-ssZ4vQ3&Q`0BlL2UE+LMf*O~3=l1O% z`a9`4?M~eN$<150esJ%`oqO#i+Vc&rH@}Jp|4nYk`&lZD?e*FIjn_LrdDq&0nUz-( z=cmbj`E6X;{p{H$L5>P;IUYyHKHUpxl|LS!DF!uhykZhw9=Lt zf}Gx2tcOUhJ_4A&1$`$S2ubwd?3}Rq!#nG6ZL*X!-&6&w<=oFX=qRvR6%lmFz_D7JQX8=AVn7+GKf+SOP+9Gco#n`?kvaedw>$*m zm?$`HvNl8rbDQI~D=p$!8Rj}r>iHx+KFp*9x+r`Y49-PkXe8_TYMP`C@NF?QpzT|I z>w6WvV9$xR5-BW>#SwDj&eCHs022D))raBWFReLhPB>e!H7 zx3@RN8V}kj+sl$*7)$onGV)G0|p(uaI8ko>L<8 zU*EcM_ugOMeBhQn;smvNNAJq9ni#Iv>_&im>)@TN_%$i)cx@uPnE)B}V0%nCb?3}=>Y4A9O zb6H{FD+G)<&Alk|_kGBib*(HA%RKJY7ASyPw`^-35qU6)wk$1YVI%CdRC4HU{lSoD zmk$1L@%G}~=5a1?SaNzUJ~+G9eAs;6{Qi}*5tXxWgkq{EaS5;rR1;i08%ysjRLpnu zQO>DCD6uf7#)RkTh>}Zi7EdfO(>%&rJM&X~v2l=Tu-SKcgi-t<{UVjGtaLMM{KYEW z#q-2?(UQA9Ue-0G*W;hG2ExNva~;g`r$mmCzhM5ub^6#3u2A;0F^KKBx|)v@Uq@>- zrI=o?&pxiM=G*2;t`hz-Wj0$5p?2m&OCD0CwgxNA05+I}IN?4K2GvJSql$uYfmzw;Hm)cQ9#sTL zbKK}e&6>x`FiB1p+L$w2$Aqw!IG(fOs~!xd#7{LywO?(`Chng#zmDMF4meCU!ncW{ z^`Dl7?eRZ9iFlQUKz!M9z2_H4M=ueNjI%t5XiZ0OrcI^^sk6Vm(F<2VFX||Fxa<#~ zDSGYQkR3Ol8L;+caAXg90n#F5cdPT}TLRAQz4-$XfN@7RxJ$qbtlMIazRTP=ob|Wo z!#Q;5!}_C)k55~A$}hRTUfT8-1kK4^$Y%NlbMuJi2*MKUt|HH|N`0+XrkqhpoX47E zs>S)J^4)}96=HTu8@3U0M<$*dn%7{5r9ZJRFtu|}4y;meib#!5qv!BSV|aSoVk&r~ za?eJ6TPy^LY#HY#+DPQe=EB+f6HEh_%%66}9ClzO@l|uC1Nsw$NKE}CBy=2f&>J)N zqD!3IjCqA5A2g}^F+~ycxYA@CEZ(aS&x&Rci}uv|4&i8YfzKmp>+Dc}j{v`V(KVK` zM>&r~D-^Et)IMiepF24B!u56&x9nKCW+Vthxw6=%jtmQIk+dZ(HsjLL(IP`v1fhw%Y8JST z%C^HqXiYFH!U{olRr9%bXMj@uyr-xWjLDVar@icU)j)c!ng!>CEBQb;1{_2=q-IiM zV;MKuH&+Z~phgpR>(x6cxFz@#T zB%xWv>lPCjG>>u6k+Pnn@AsHuM4j5I@@tgT>}35q(j|cC)+-!pX|T*EpW6DWqD5~A zI=(V>34s?ldq)He74ghQ zvvi>&bDAL-Xe$y1b5mV?u#seF|7XSzb=X)G)pVUET_z4By46ynMOnB#V4}8IlFF^u zO`k<^I4*6PWoBRoqK!33bWc_@^|^8B zik53W?vM}X&gzAuBNs#7QAlQavIRAQOZcioRLDv_bPZRVanfhL!s+4%jm`e0 zFmI-yDs8o>Y~#+{@zJuv$b%REb@kkxyZC!1;*q*__fF@0=ulc28OP5jZ}}NWcet;7 z9mA_bF&L8(EU1BD+fEhn-tee$*_S+8r_(J^(`dL3P}N*yR)r&Ap!1NgU3<3_l;S-`;|P)LEg%xI?v z)gy4xT|pSZo-s)7XFE|9Hd5!xvb4s=9w)%Vag)TUQb&c!!MI5*=ZFnNF!AK)^D-TS zBylliKcHuZ55E3gW;R^tE-mxP_Fed3^}sC5vT1n@sS?hH5KI})S`wOBT&WmX11E$y z%WUHVmptE$$9-+#rx)%v+D!BM^Wkfn-4Nw56^>XA!8u!y_z-bVz%oKFZ*+I;)X3 zg^C=pG;9|&ERRnr^7rr5GiE7G4))76m1pc<5Cu_ejAD-QfTEd}(El%ymcj-(jZpRe z`5TuUNsY`Z#hDx3@4HI}-*RWY!m@de}|6=at5w|BZy zh`(-Mq_jO{#rz|+M*qMBUs#iC##Fu?vR$9!t=;ENOjq64zpPO%mE`oP5 zB|O;cHsV9ecRq-TyGeSV;mFXcYoR#MS;-`g(TmYLzYUEGVImd`lfca|sc@;SLKZ`7 z$z?|ERsKQS)DD?t;{8D!npSGsEQ=AzxKFK+T;;~?l{YMUn~k%N;lY5HMG?))Bx zx|EWATqaSJ49pU`7er*H-U_-wFjkHJ<*d3RzSkzhOxm z3(ajFah>1DVC)zIE)bnU>b!MZT}&WTwLUtGN>l+|dL_N*#i5-RA@M1yuXAoRHq+jy zykcyiQRyaL%bs_-K0Z|Lu6{A4ta9Y2y`R=qlnb9ANJQaa!yK`b(rVH6iI*UFLF)`* zT(dyN{1(h4{@bpjARBTTVMS}+weQnIyHxr_iZA3ToR?e|vil#W$JHAA?JmdD-9?<;FWAC{b`Nep zmnVB~-^xFS&$DyevcB;_12gQBQ@&Xx_lW_gD@`X!XJz~xNf1@c)exxaS*1P{_7IRF z^G@Sj13C<8Pgb}YXLIXn1&Cq$XPpraSZWKqzsN`%au7#6qqw`XweWl*(e4h9fYRmU z9OEyFmxww%3?j90_Y~r_RpGKRBKYc17 zxM7ialDBsK2t~`TWmzeN$VZMAF6_hG?Ttjs4wR#--HnX+T{ZHh{w}+jqK9=osWH>) z&6pzP_|C>o-&Z@jVL!zz#Ed8q+0=QpV|Mo`^py3(*vDhka=K}P zC4L1bpSa#aW<-{kVk;#{qjV1tp<-TvBm~g-B!P@m#F1Zvl3A8Fgp+B9OoW~)yvgW? zDo*ha^F`1$&cem3N?1}O4Lwqt)n|J3MO*eq=msf@1YOjQkYGN7!5P;BpgT1xZAs~* z4Dvk#X$%stS70@{`OK}d4C_yPqfAGq+p>`rOg;f}x~e$i9SF@{{-`5D^!QWXqhP}f z#`nRubb>r@GroBgan453(;+|o2u}=E#GjnT;Bygtv#p~otVd}Ob(wn~ysEY!i0Pw9 zaHf}=7dvPnR1JSl#^|;~4Rbg@U2LbTo>M>ubxmotzSrO|iU|b~BuZB(m0C;8Ur-Yl z3N0-$uMC<9-U&|x72r}SzibyQibFkwNWuW0f!5j!Lp(|{H?u`OXC@Sc;-iPR{-PLj zKZ3p`(_*h=Ja4Cb{RL&IW70GF4&__31hl(RUYz69hmYaq{UU&9I{nOKr?8(G|8g07w!yp)W-;M}U^wATtDieOYpV97 zs&2IdZD$cx%@%=_kVGeVbbwoW^+&=)+( zUX0f($a!N%egIQ&og~(o1C)Z*#1Zj*@idi@(0^E-XiBOr9$c3^=5R@Wf6m(b3*D&B z-nc&&gEfVYDHUI>Zjvz#r>J|WA+T~Wjfgg}yw{(|c4zXCwu-WtwKSIrAY=rafL9j{ z&OfoLgC;@}>6C7yi&fxj&|a6oHCxY4O(#SklJ`GdNM;c;Rh%uJHHy{5!Wf@aAe)LZ ztYA^HF$={2$5VRAtYyv>5qFzFc_&u{=B)ux3gQU+c@C!CBje^!Tab26`n{ZhiG3Vs z1MkSqVy?7WC!W&GL*+d(eo>H=2f78T`tnO@#44~QtC22QN?mE_nh$*_a_ka;sES%T zG!uz6TD-}Fbo>%MimO-~rrxov+w%l-BACzuWC|=*1(;#^D=85F;AB*dV%JA~fG(Pu zN{!@~addw5X6s97>!>ZoB23Z-@1>9^>aiev!x+!Mej`2Hq)LG^U{ zx6v*AYhO%5^)xoiOO4xf_MaiosA5T5&M5=x(n-Hlqf`6G_Wc8HUZFyt#`#H2cUAeNnqF{9A3-+!u-eZ0FyaJ{`5(}Ct`>U?i&U5>X?K0F!(DVMs>49-g@+mVK8Kd+(0=}pkZq(2d6H;p&}1P!pWM=?+T z9bfuAi`6xpt(Grh*h7p2T}dsMharc6@T^lsnIVhNFlCH{Art}1FSP4o!Df~8vF(}++mXUF^fgldEgo|6*==|s0lC-tE|MrNe3YsUjM9L0wpuaRxOPB zwyfs7sml9sY$OGeK-H_5ZqXz$E0rr?SER|S zj`yW|yyu#LTd!Qhf4)36yxu%~whu%Qucez(xB?j-o20C0$sN@ttPm5|IUi|qIu6x- zlQ{2F%X}?i&21IvHWKGxv@(Ha7nx&Cqowjs;JP$nAP-PdGfk1-Cr%?-eMEl*>k`L2Rq~ zQVMvA+NQj(QyDc1Q*dF@V+SHt@4pe$*hC&__ zqX%TMD*qmFt3pv6+99kURiDH{b+B}(P-yxnqkNeSl8yf+Lp&>?w~6|E6L<(=m*CDc z3=1yYA~kGcb)(?BMg?_IK9Cr*ny%RF(w94c&3rM+icJrq#+Q>VN;#qe-Ffm834{GG z6b3AY?SyzmQ9YJ|l-d35!W2ZBbi&o7i0VCn13gXg@s3b9Ch7! zW{9NvGu;TSnF0r^7?^cn&3L?%>PQb#56&V8D}C)`+&!?#L-%s}eCE)NP>e^PxrcHQ;zCQDgGV(w!b!IGI&fZQSR6 z%nOhcM`JH^abF+}kH0AV-a;-Yr+{Ve-8Yw|28!++gutf0) z%u7^8Y2Gv1K8=ykPQGrBP>=&b#26YN$tFvHYkdb8=|^@`vr0IZloLbNAyTX&pQl@N zi*&E-5>-pC0z zNLrUjE8S8(`1pfS6mYO=yHOuQ>McS!hx=0ngoxiip#kczuD_TLDP&Y4T%4_`2bl$X z%wYq8#{@JmF|A*$$B5d==5Vq;jWg&-D80eKYBMU53_~NC8Tk$B+11hsFGi zmgJlcMOW1k217hjK^yH5T2JalL+mp}_IwLcuAnH1%Z_8u@*3xLTnizH`K)6mY4-Zr1xknANpT`oG|C1ho?mlONt$mAy-EegFUQ&YmTM-xQke7vxv+BoL>-0eh!+eACL6Kel zwA!Pr(WP>_)i7-tT1awGww&7Zk6`A~r@_O0Bk)o0v*69>{uLcrAyd4<`m|p%&wMRY z{?PvWIOTpCAsAN)OE%G9P=g}anac8bLqwy9K{nEwkIKjS$lMCkE{<1`p$7Leh)0yR z*VU0f*W_gApX~)nto@H@Cf~!SlZu6ubjdkMQ4wHaYCwmSs=$hgw0(1b4_Qfofnw*Q zNlJ=pP;;_4ijF#E83QG(n7BkheQBpU@8M^Xlg5+eq$oC}AG;<-14@6Q$Rj&3Eejr$ zfhaFL_E1_?K7a@_pM(~Q@0dEM2BT8CiG#Tc2GI1X?HA5A=7^xPFq7;vBv;Y4Jec)nnxkgbzlO=F=Ry9>Uw8TgOMfs`(@gI1MUScEeu4i`haamlbpko1NWx{j!P z4f_y(tpdYPPAbf)Zg$73)LqA>c)RbFs<;?8laRRdPdIW z--Bx$F-+V@3JF4CvHO*v2bAQzHIe4lYuheso~xB0m3j%qyejq|xyLiI7f3RK3J~PR zWZ-=+y*W-)`%<|_#}FvRs;lz~mrP--M9VI*gc)34-(e_K zCX_s=cOU@b?x+ke9L$q@;^$D@xcHENbKRk+KJ6a-q7`$Qw@&r%T|7$Mtp9kexT%rW zG~A%HJ!XAO-)cIJiDLT0=~Xcx!rJ$D9}YMm(Z}<7AgX6mXD4+*hJs73M9l7@w`}rD z4DAw`KnJqrg9=vjVkilfPAR*V&fbAD@JS#e&3$-v`wz4jO70_o(AeQTITdr+7|@a_ zt9|JX%P@E$Sto0--EY61XV`y_Tc4g>{&77NXP?Q*V*ft*_;8VV{Nq))veA;9tl$0I z162=7Az4ffhiapup~$PUwXO-XrKSc%OUd(l6cm^4rGXunlcsw$sa;*gDPG~>z&Rg} znqR5f*rC~I00_)wQ)Z6BU%bC+kpm`7ZO}2!Vq;H9GE_KOUD1uBz@wyEb0Y!s7ic!o z?msTPX3bFxz>h%yqKQItb$q+%k|);mQT;>x1-k=u{d(5JS{pN{RStTl9kF26()NA0es-10}2DFZE2~bvMrEw9h4saeEv*9fptRN^O zM1@IK5S@}bM{s3tn!wEwlg0O_f`Ha2T&jIJRRIGcBeJye?EoS}GYzHBiIbfj}N0wv)|dO!Y=K z0%#ce(6KJjz>AY4hJb;*t^m6L)LO3!aacSBO_`~jejy-(XM zayKrGXF;z!rPlNDi6*W}O1G>csLYpA{2-4_{-H0Ao=>8Zp!c)vk3RSLzjf|5`=9we z$vE5BryF^@-OlGAZ}yvQ>o&Jr^mo%mj{73~VfrVR`=vDf`ZeWG>^gV;LwS9Cnyenf zP|R468z&BN;;5l1u0CMa;qAr4nYto>(gYtY-om_=U4`VRu!^E;Pq)?8uNK+4kSD(F z3u0RUrWBQgmiBsgjAY0$m{6r82P6FrCR!6h~S(bZ(K z6P_Dpyrse&J}SFGmkajN&OJz)MzI*UXHt6Ye<%@L-#A11T3?~J|J6xD-wBDZq4+?TS9f|6O(DPk-`_wuYTlBRf9mye3d5)WX(pkTRLv8_K#2v4^A zHf6KjF+}JT27GxgA=&Xt$y#V?;h)xCsQEV$lx_aRWyxpFiII4tsx>Z8u1OQa+RAEB zc1)PgRL!mGFxe#LF=6X)1QXf1ObJP(i20m7+X^R2lu^TZUCi(e)u}AI?86Y#`gc`> zn%Nn-*p4?uVoL&py;dDLW>Z{~_8ld7sz$ zIepj>Sp|K5x%UMTQ_-unf7bteZ;o*5cfF1FWVvs`w}0{9?7ZJ&v;R!}bi3Yfu|}CG z{6-=HnIPI0bJUp_N{TMXk>!z}<9qDKh3!A%EuWD3eUfCm2Q{~(dkmf-6H+oiu_uNh zPUzSxNwm(J5__WeFgTn8lPoSdT{5ha z#&T(UXAgAVA^s;F&HvRsIZDo!3k>A4;YRcaa~_as4KFZ7tEe~>Ge}>KGjM>ZnOeQ5 zVx|%)B$#(iizOWmI8W&Qqe@Uc@gI&F$wJNS%1FGwB(1Z0cENz#J|=O>!M))1l)Hf* zf_2%0KnteUvgp-3kpB;SxjQOQcpZKnBnGYNVqLC>a!(00Pi;uJyL)^lWRoIIXBM(> zd=K-cX}PM>&7%H^Z=L1how%|M4NoYDE;NjgaTz^bv3enR7uFYtsoa0`7Xg&v)Ql+wFtMwyx*(8B0PkDf2_1hN zkV|Owvws3B@tC1**(O<6a@m4^{7%`;abnEr8DwZebktOJ*O0<^2o=_$L4qBzPEfrk zhd$}TNpsofHYfb1n&+ZUvYM>_eHK1ef(;h)*~bZmJ-pvl$Nf<);uvA>c`!JqU0Rnd%_*@sZ2C+)2djKe!NOFrUO#5UL^_@Lfeb~kVIk*;4@o+-p72bam++DkzaK_$L;hahUHjBHe{s5;7{EV^# zf>BN&i!}VovWF>N^ucvk5BJavT`8;w=q$>Qi^JK;TNcPYvr^BEv7&^M< zU0lct5}F125a2{5<&!0DtcX@y@wAcM;(hVs5gBxmHoz_2KYj%km^os4=s=e&O%!u* zXPwh6Va)xQ5h`DtNa-5Luav&cort6RxQnK|gll4eY=@O$o1Yp~C`V8=2*k&KS)dh7 z@^cf;Z9G=!c3Wz^8_WK#^k>Y?oE@@vbF&{Q93L~XJuSrGig-$fZ)RcVtMO8pQ;7LW zo-7mrh@}7tX;ceslVc z%65N$DH;JNJz4nl^LcD}!`|~#1&qWo3r(g=*$>1Hys%xxcu+`(BDdMnS!EoDy~7OR zixU=*G~6cm)Jq30Qh<99iv*+JP>B_0I8GPGR#8rljTI1LIkYt|8PY+b`Mn5+}tCV~3e6j>pVhmCbRs0l8p%{s% zeCtr*+$`b-E6tH;2ZRjP;S~Fd(NJkC+$hkS< zuxhM-4);w$#BU8f?9COdG+XO@WLOKL3nPjX_xF<_!T!i;lYAzPJR_A@(T`V8Yh0u} zQM|&B?@!a4k*3=R1J)vZ7JMfEYPzF8i+MOIMlet!%10C}R@_Q;|8jr`(v>6%Pm9fX zfm)Jvbq=d2=ZhIBdM@*!cUxw#$B8f}Fkn1DHvx#f<_QCebX)Bn_s7EdHFlZ1ygiTm z*GWZ(x7QcB=kqU;1YfA}O7^mG4t=9^mw$Zzj4?ewG{TZ%friigxk<2$AjVFggm3MY z1rI5r)}z2}xfjA9ePqGQ`pzRQS(NmmL*>y4F%f7F_pES3+0s#A#nPTRmKph>LU3Wg zLwL0U0&n=LpdCNkHtO+dtKB3jBR%QBiy>q|dCQ76E7Zm*1$|9LbT*G&Cv- ziHaB&g{fi@SGpVw;0NSd{zV93@OVxs zwfjUN0Jb zK{q5*$n+ko&xPFffC^UT8e|@hnaq>?HsJxTC7GYu>h)0%2CjWdJQ-5%@DmXF87 zbV=AVd>Aa7bXnM+6(0qk%a%eBQ&r5 z%NtX4c4&D4<%2LW&1lhSLw`S3rmH5@|6qg!H-faxTwY4{W#lWRF^^(AE_d{1YSUXw+`pSoqlZB#LbBh-l0zy%;vtVH_cBhTy{%Ojl z$tpwP>B3M=doM&HtC=6G$=A4DM=6O5BDU_P05r_qXuZ5LbhoKgco}Opf|4zetQ5B~ z%5>gL1v{tod)P;zy6jXYEH!hXx<_8fuyi4)JSMgTVjKs#Cf~#ZjinrUCh$?7b})9F zSP>2y*luz(Tp`V3GSUU2 znvv^k(~q2!kROi`e1xm8Kb|HNm+eI)tS{;!4vtrwGVfo7SC5bDfngrGQGn)H4&xk= zAZn}X$_x6kyeJ^$h9`$&uD04#rR#q>U?gGns0rt>xUA>%AcMEl$`imb&@2SoM=;4z zE9JiAC1qfeBhRsN*8~N^OCu4fgKhrgjve6;4wr2~&2&!9YmNe;qJxct4kk2MW*Ggi zSN9ePb9Xe3*@Tr5pyi3_u9`RLMRpiz1#?J-AdE-pBFrzn`iP zPt_QsK%s0)hvnBL8C*3cSrHM}G9IiR^on;B;(4Zo5Tw`7qC~e(iL;I!;zDWw zih!t0%!BS1)^r#z9&-ygb9Jj`Mp~e5sJ@*@5La;NEr>6?1wn#Dygm#GY9Jp`Duk(#FP{I*vOXTU@0VPi@;Q(ZA`5DN0tZ8(q89 zwc*BlrEwe`xqT;T5+Y@qdHdSFyVoMy(Rr{go!pYo5`TNX|C}jtq@-^;^y~X7|92;t z<2$46xFdg{`^mUFmY4O@S&n|=l0rA*vDW)#6-1PLFobfFoovqj5kALOvrE9ItJu=T zrvxIFFE{f?$ARo)P24P;1t^VDBFZ1rxdYGPkSU5CerfFHt18R&(x-MYZDwfO>{&~x zOjBv8S`MEc!{*e!c#cF?Z@HsPuz7A+-?!{d_7T5p-fQac77xP$Uzc=s5p7Xu{ zQQ>_VF#f(n+K9!WJs`}Mk&MGjc`I*b)pm0!DRNZ`e8)b^sA_;j$xqr>&l<$_0;Pnk|+}Q=2tmQbOq;Wd0IIyb%O#6VW;}xsN0FNEWrWl8}R{5$EOaRxM?CBzWAY|hH$b-#s zBIKUn+{%r(+#3W-i;@Xgk`l^V zHw+G#f{k<_gDg{r7rhdI-)l4GoPy{@Kgq7r9?6T=6-{4BQ0>D+ zeo;;kcp#?@mEo5;!lEjGY2m9Sw#evYPvD`Y z>P!Iz`SyJ>E2nUh{z#F(p&sO&Z3w{N(c5EU(7Rx)X%vZm61&f+@FfB%Rh2h*=5G8u z%*(-cDrb7k$5r+u@b=wXkR*wg>T9^*mQqN*tjNX!911RPg}X=qMk4p(jN+eS z2v?6V9N0+*Ma+%_A^7z{1gDB_f~ zcOoCeP2j7o`KxgVPO)mTAwR@<#hr@O&}0trw&pm_Sy2OtaP)W)gmcXlVr{-+KAzah z!y5OILNTL0_J9~kL2#zxv01>(zuMI?;T2Tzpb8dzle3V!VCkmRcm%zR_^6?r^%Iab9hA_E}PX7=TaFd_XJ`BV_IDg~8&|oku zU{&Iqs)R!NqN3w(wKxaPqs8JyqQ5?(!&$V=6~I|=Eebz3m*W3Zyv`QN9#`OdBZ9mMzr+X-)n>uhPGmIj}1u?tXrmniy+Fuu6S@2G$8 z?S1A@6H)Wley^kEQiw#6FW)kn^$Stso~0?;k*)p+q)i8EKBXTp8@}|W1t)cL`Y}I0 zu09^;5q=5pNz8&0e8`^HCf{B@`4zBlhK=Xsdw$6uHcV6f6ODiQzTziS`(!|;v9XWi zf_wd2SW;n9q@#Hbi~)r^r9=ir;*R zB*XvsC3F@N$+7pv1>R9C4Hbv&bf<|BoKo@6`Y`q!au`#IJ=ro2mg?Sg7pQV)vp-tb z)?lRrq_Tc3Rtjos2TvW|ILLu;S&5CK9+}LE)G92vxl^fb^m2YpNrKzX2sJhUd+AC= zpMaID)Kq6MBtaZ{#~H%6>;Ork8224_x!STDP>~Rps77ptjGK(M9`w63^U&_v{K7YG zl0~Yk(oH1+PI#$yK@$v05>kN(L_sF>hwK0KRnX|Go%2z5bB z{c@yI3Xfwk)?U|zWLhejXoF;p*-N!6UD@7Ewj%{v@Y@_PMhSKxQVx&=$|JQ}*&KL^ zCs!>8mtv!Ul8X&XVpO(duxWCwPe?WkxhWk-TuiXC3KmbD%gL4w0OX!}N5u|0J(qf_9Ol`?{_hWx;8etKG8PT0q9rkiL>lI4F_9*vK-$!;KGL95Cco=)Kf<&yR<%6W;<(U_+oyc=}e0_+N4_UqZ_PlyS#rou$!Po%A zk;9Qxua~WLVVR~;0F^+VEn+xN34&?aLUV`8^N1;+4w4VG-`kp|86#A+!g8u~ z07BOmz*c&5Ngk~FubR>gBby4<24jr2-e%-DM0zs2Vu=z{1n@XJNB&L9j|Nd6SH#66 z3xJl@osf;6w9+Mmz>Oib+?6L(#N&4D@M(1i0g`jsH}#Ot2BBxZ_Q~PJ0xbwH9B-g8 zFpi79yGd#hPEm8H1IZWk7gwmPr?=EaKqf%Ulxo184^L8&!S?6}r)E)E2|EOYhq6?8 zX9y+=^uiaKWvb(n2U9E_Z+~#RJw5mYVU0>7L)J8|E3YrZk0_7f&gw zLWf2ajW#9C*ux+^k8DtQHRH*+xY(2vnq7IbOj`Oykl%a%7eTJ>Q%laVe}5up<*g}d zbsO=-(ZYo!wcIn>ZO6xtHt2%rQpeq&*?Lb&AMl+P+BBL2S1>&@cvQrU8Jg@YrW^#S?D_D_QcM9Zw z`7~yJ-lo^#Oy2>1Q9(F|ze5;tJv;yIuxe|hylvb4azHjI-uFy-CH*1EaeM*AnLit^ z-%yt@V^Y>TYOxTXQVjtbaY`uRwh@ynq)(iGO=eV;eZ`3^1UX1Ns@hohK1HjJyR z4gZLqgz&`Kk%EC`ACokJy;0NAB+b)hIHtJ25NDeK1ZDNi$y-15S(k?h8rNP5woF@ zOKOob_xo2R5GuzRnrI3=D6BdN=a;WGmony28_wD?kWRCbrQ-ILL-Mh`v2iX$A~;Ag zBu`5PgY$Ok&8^Rnx|!pniq+I+K#^;59~}V)zliCMBM*i<+3Y0G0>`VXFaT5+ zFH0IS9}=6QU5p+I;J8aY9jS&3!zk|!AEDe%MY-&UUPSe@b|&dsb}nOYL3oC`T&R0! zZYmyE=(5yJXi2T&1?wTIMgD%q=IUu{;{P*A4-1Ed+Hf*k5JSbSdmKeQ1t6sstP#bb z8j>I&Cfqak#Y6)MrxqVEc9597f_bfXR&VN``FLDgbX@+_Ukp&83inv#(VCz@8NE#D za=-ap-;-U_yc+INm$TpT`cp6pYiR37Dx?QGC3dRVm{BfJ8_*GOW-4ER(Pt{$nm&Ky3c%x0>e6|r zhHM485O~8>FlGp+#<8nnLFu^FJgp`Eot3BhX!uCL2>9b&8tRK;yI3}}#%T5JWa!3k znJbdy%AeHzYuE(^i7x^+4VZ8a>tVYQP}JYGlkL z$%&aP0o@l3e4MANZF%eM3T^0XZeKvQVJaG$YSg>Y872#rZMiXm3V6$pZ5Kv zYEdolASkALOsw%&Dgy*?eKM#KmDN}S7-=E`*>T^X9KGYwGLVtRRR+AD)@yr-5KDF0 zpB9dvVPJu9+BLnXf$*6VvZ8)?D-qP6D#$gz=z<_Beds<~E#H5TOrwqB`K{Ja?lsc4 zUubJOY`d}!Omv5>>*<*S5Sihcg7#xGeIehGu=0>9``b2Y7J2ULQw4vACv#>m`p;XX zr_aNmx*xgu?`-g3Qf4s}&jhZ}G_Q+gtPCcJF^1Wgog3s^IwMYFG#$F8L zTOUgc3Z)4DTcaIfhTaNu)oF_mWd*v7mvngo^Od4mu#Q5Ku6PTr!KtRK(NiaJj+d?3m;NZ{IXK!W(-F1ku1M0tZl#?_ z4TzP+dOBKJVtuCbPLoiCw&EqjO^s9^Sc00`p#uj68rUxyk#*?6_}l%6*iXWxcG&B0 zEicc%tM4cN?o^>PrsP?vI$D3;Cg^7r)s@}f4n3Vy?M-dk-QN#3oaNQGUcTN&?fHJ> zrIABb-EhB8N?hP*1nGJoQnLQI^ZFic{7PP!r=Hg>>-+@uX|x{qIGkQx&C1h%v$oib z=7CH~dz?Rci8SCBC)k~j;qP@gw>})sJ-_jdUZoHM^&W4r5pZehHa z-TJ+~oIBI!_54$!a-HjYT05PZ{p0(0Hs;UtpNPJPro7x;zOI)a004lWA7B6lXBX~m?>R?w@FOQQ2n@trS94q zDe*XS++~>i07+bV-*P)Z25#A<98W|6;X0gJU4hz-Jk0_}7~V|je1t=Vk*J@ot5c(2 zw~UouZsv`Ua4gO@yumLaS;}8Y{)eZ_Q{hved5B@PVf|QOogBrYJIP=s;5Ukrr6jnX z+(r;tF!odLtJ(sV*S(?X;!_}m#59(rXmX)IOwB#fA5U{S<;oJb{sY< zil6uafAk6Oj4fGOrDn1Wl2q4LZRZvdUQYz`;V5&gjd>elW$-4so`3}CeIQ8poj(G# zB8U*d_uvb=iq*)mxWkns)8TMI+D;+VwbcX;4GSDO!Ds z4mde58;QjFu}tU^@6H;or?Bdzq*dr3$rZL`fZTLB?|4xA&v5Bz^hVoXa9aOapi8 zfTx$YIC-CL4|hlZ7QpAfVSD*k8;2Y?D6WMrx!-N)S@8O`M&4zu42Vpkc;PX~%|wO7c(N^lEyR>i|`1 z551oCYSgtamH=2V`e&8tN@u-D?@rcnC~UP{+%I>mHu_JW)YtB8^?hNw!AfN9VfSvq zGhm(bo6qb1e#td0u|8WXY*yF&y)1ECtHSnxjiitqwLVMKuL6tOp(7*~qu2f`yLY)p z?d%asby7&1B7gKasuyj?ybBI^Z9^h?Funm2HxF5$1M`sCdG@Vg$l3W;=k*&nN^RRzXgiVLKKvh-{&)e@-^eY};@9Wax$1DEchhOhY z=eB8buxCeK@7vKWJ)gt(=ijM5JRhsED4y?gcYMCDXm$r|tp6Voin3j`pQn9yA0#lYS-VH8aUT0VE?^5wF-LBA1F)G^j9g`0Jvim;f~gLcUG=WY8z$-zl^-G#B~MC7ua4Kj7;^M zgUkXpRKO6~%x{>)%OBy-N0gXvT!oLS%L6*g~(I7*DR9k(6Uz}qlABoMkEp3ERo#QTWF5Dq6Y zPm`pEG|NR;0q4&*DeAIEv}ym?F#jMcCiM0%&!B9>g`A##JKVN?H2@b{JX5VZ0yD?nvDfTV}qIt~Jx^V)QNHZkRS!A9=0lX&>0@{WxL#oO-Nj=qQ8FVItu&4 zJBJCJu|-c9q^|*n^x?c^_AAU0Kx6QNsDjz*0!&CcEhIZy@>a4f% zc}txod-~R$%UNeWdx_aKPF-%^h$P03p~dsPpmlKShsHvbd^3SLvL%Er4CFLW47!Il1h7tD#WOc3uQhClC12tUa2iRZ`nN*dT!Ct z?ePu?Bw==_5KB8+;E{B0QIpGiqFuSxqrji5i=fa*FGSRqE?HpnMPvMO+Mc?Cfnzv^n{iKyT^_mrRt?9m5kObgnaqdF}tS_myFBEZx>a2%g{` z2*H93?(XgZf)m``Ex5Z6?gR-E+#xu@A-KCcg9f{E>^v zzI+~ZeqdzOPK;)6HcY(MxH?kW5Ldn}KJE&PCwwPDftI>Ld25*2>Et0vQI9h0=%i}w z-In67z_~YBe_S0nDMDvv-5@YoW;ROn;d zENjoK5bZ10;tV~(7)@)u)U@M}>b93Ec`Dkd;ap1B(;tGX{TEPgwTnI!DkI8bdG*+0 z(tOY=ND+vps~RNSli@ULJW0B*!%@D^RxrP5^;5l+3Jh8)$DVJ~p}oGhFJ35Kgvt9x zNq4t5?|E}3Zvw`FtnVFt@@}DQrGKHOW%xte>mAZT(&JXx*>`@=nUlj3w;5vHlxvGb zuj={3NyK6EW}VZf46z)%Nv=R^+9H>`rFI*ZI~VO81^-rO)>HFVu^bg-KR;C<)sINy zoa6V@R$rE_FIuja8q4%{!cPL-Sih8c|LZu3lM^KD2m=5xpaB4o|KG+*2O~#EGiwuv zU&hE9wFT=14pdJa-KUOIa1%&GyVVKlpw4XEGMuZ2Zvx#4BUZ#Wf4w36;hIoU@sP|C zt$tTpW;lhD86P<~uf@wlM>U?i6UJ!R-u!D-0mgUC()?j-&IkMW(at>)iN%Bl{g>); z(IPS{ZMP5gGr@sx6#Y_@0ivYXPL=7$pDb~}jg(jUz3W&OlF+N5Gkj^+&1SdATdSE7 zM3s8A?=Q=Wct!{Z&kLbnYRYjh)4+zQ%OZ_DUyw4Y(p{jX{dUT%ahh~MDqbXlgX457=l_M=)?*u zkrr=ojW_OpqPptgDk=-JUH3_KC)Ohgjbjx4-fvN-7Y&)fp#riLxMjri2#vx^K7Hj) zlg#W_)g00(Xg~moLuc8ADuV6?cYAqLftoaDufv1G4)N-zj3SQl40Lp{fYzg&{YH}D z*YMGoW+*-2iWl#fgo$>843@7Wa`F%K&#Y${qS&zlpg-~Y?x*kWPU_4WUgjljei(dj z9o$o=h$Qjw%G68;uY@94RN574$DK2>bWf{a`iecC3d<@mI_os5yVO7G8x3nGQA~#F%FC7ICSl%I1Qso2#Mgq^zkE*t*t=Lba~E4N)xz@9iX3dLyvdtid>Ah03I?!lW$c^ zWJ*G58&{pjx69F^d_Fxe_&iWOA9G`!+2CAoYJkTk@y;_Jk(XFy(|FHTgNRgaH?aTI zSw7~Qi+Lhookzr8r%=H}3NI>*V=MhLT zU3+IqHpyeh--bc2FwK{0&D2J`uSF~!VpO@OzTjO5>8?vk%ZpNV-p2=n8WiSxxg@Fp z12X~npbW0wYe}@0IL4WkW8#z(l0h}N#*^S!#yXxlPs1U>%sB+61;cN07yYT%sE*C< zIc-FIXLg^;ha{IY$r_ez!zgC)Jd~E)XT8zb1v>pVArHlj3xR?yu5c6xDxS2k2sMDOUq4yO%MUBcQ&ya0^|ST* zB|x*Ky0`9qWgDnwkv_x=>onai$l(oFQRmYXG`S|E5H7~LXD9f6rbB4+2={MOnZBC= zKs}^uCWcIQF#wbR11ASZ8!I&{OL{X$BdcF0GH-Ip0F>EpAesK(uhJMnWIqN}(Jw;o zfG|2W)b^NN71`7Vd!+$@>^$E0C|Dbtsa*sux$TFfTcs0~lPc~2Q-oKQ{YbH*(;TMa z@R0)O&2`5>(R$rC#-Y7xmyyXSNm2u*#;07{HGqO8i4F@ngJiPEJk|;d2e1!Kz397v z<*SkJm={d^-Qrh7iO=AI^c3!G_YN&wjuW)q_+EgNswXsUg-p=SS(`9jeZ`M3($!+M z+vq7pH3xOpt`PpMKJqmU=hh+T`5saqxc{gR1$!G?hyPQhq{noacQL#OI`MDyA784C zuQO9wPcX91o~i68FW(>wnnkW-X6s${MCNwt%jl*c_T>L8M`SE?G5~i(<8LVpMFrF@ zJZfLP{M199jT(5=y;-WSOPIcY*Zdi&Pfi3a7rc+2C|I1M)M^W>bLVH{Vg*{Oqe6DA zr+szrn*EaR*78GNrpaRf`heTE^S9n1eY(dNUue_v)v zy^I?-QeAhkwz{aAn#kWUzVy$oGgf2S-lm95>W74d>#m^7fB&$ zHLO80Mbz>5!y>x_j_;}G&J4XJPyKcEg=-0T?pQ@&B1Y8C-LvKLYX9S%F7O*toEVuN z74LFW-t9Df+s&Rl-&fv&@aBMRC^!jlo|$V4D^=Ls_=wzVx!r`#tV%rD+Y!dWg8WsT z>Vpibe(UY(qZnC}{19yj#4W2cQ1-O1aU(%zEBgl zKxYeo=fNsdP-VtnCHSgnMR9eAYto<$Y}@Zj*F z1KIT3RgO6G|l;T>KAqr*)7{7X3I(dzQw zV8qF*p!FdjSAHP|L4hhx#rpC&3Xf<3Ck1|8X08|OTt;|!2MGGCOt}n67~g z>{skB;d6fS%o&cMH=a=5vx^BD-0FBA*M}b&1hZn-LLS}2-sWkS(nGVMe&u>_s$fO% z-RvWpIGSuNQ9(RM?uv}*54OT_`#aSgrkJUqm|>;I#(MskcL|&0;A`TH(3ZjL0ukFE z8n|TZGhkOYTeHUl#L_&|lIko460WRlFscw65zIIicB6CMWil9Uht4~YOTk77Zr^5K zz$1-oOjikRer3`(zlPoJ4FWhBE^H#?n)LkolmXyG7$q2KO5i^`#sN#4WA{Q)a055N zr z$v4Ke2YQzdy{~r?L|r-(qxr0SH!Za2g++#p`u18{g;mEshFbXUNPa-#k$JmLj;OM~IPXoIT#Arsn7A}{eV8LzN1iBEa` zA#6Dkx1WUHGzpLPM4YOKqMJBnWI!+&&g!hibr2jKJRZ}1mugsQ|+FP@aPn3uHEvjT=isi8Xyezg1fVzfdV$KO98EoG2~#g)H@!7(4DgY^2`(PB`y>C zXjejd_ni^8`0}?H-L_=NW(wIjVst+sn0g0C!A?K25xy*aXyqbLE+qDW-3E@dI6q~U zpPTBot;_h`hA|^R4v{5);W*$$+I1a*>v(L!efeE=$SmfOE43zj0&h^lc?aR#P3TK# zFv55ABPIibGqM-bgJ})C0%4r{-5a{i0btQ{cE`;!vuA@Q%{)UPab$W!6N~dzU9q5& z>+&+@czM4X>rNvfAuc^h5#}z=6f3t@9vY%S*V&JAFG|ctlg=*l;e+CPEWaW%&uUw! zV;usG4^Y&0z`pJx1=ELEk?XfL=9C|k^~b8&L1?Y|TD;B^x-A5frE16O8l48n)0%YR z{Xozi2y~hZ2LdS;0ztCwu3}Yb^8&LrVOgS)Ch%F5$Qve(@jjmEC`1$J#oS_3FBF|&ahqNeOl<@##K_l zC7i&WBUL(%IsVB@Ka}+E>9DmNymv^dK=s~3@dHPLpo$T0WB7yThCvkrB4Q4Z=h5V; z?Yw0UaEfCR&aTEfM6;bkoZqOzs&VO8LG2;eti^>%CN2$zHioZJAbzex2uFW5vJBu)7LGcI*qNjsNi$#|t>)E)n1w*IT*C;Uq>?*z@@{W;149{f82|6#}@j) z472K~Da}y$-3HNZ2_4hzp+I7Wwxg(eCBf54dhF#@T3q?0k&_bQNtBPBQtEgFH!Qfo zvMfayhkeU*7}dRjirFG)tV8xzjd>AC#NNxa)nu=*WBpOlXACn6zq1W5hl+++^*vWm zX9f9igzjJ_UI$2w`B|7e>5EJ?X3SJQ=7d*M3dU-mmjcbj+7(}-r5C|694iY`ntUdP zq%bh*7YD&ZQsb-fIzr6>8*;1x_67JtjqhGIGto?;LP@iVv@0%E3A1%JD80-{FAh?$ zR_^K`1eu5Ue8MNug@EOhp>bUxWXw~j1Cizmz7ngVy!8 zmBFe4FAK?l&%956147k6BxlVC~ zZn|nvRBnS(ff^ucTa^$g*CoeCD+=tI?0jEUwl8Jn#$Z;xO^LLK+^$V$N}eMgkky~m z32jeLRbQ~q8&ZWzmr5z6siXH08qMm+h%8b@+ zxP*mnoMZ3QL7PFRL9z7=y?Yjqtxh9zylUtvRF$^Gy{%?LJ2KHoF0l;~`^|+Q(ar9W z9rLu=uT@ctVO#cuoRznZl~G!h%38H09&I!H30xq45aJFW=m&_Hm_0mAj$>@kEwn<* zxx6X4l%8AFdICE@SX5#LmzcVqLsY^=JD^l*FVa*sKV^af;I1s8XtNm=*A&7ofmC#{nadxRfadAlSWE zmG!?L47ncl)_Qy@wbWiPwcTDpin;ilL7Y?yz#u*lp`JIh2XK6(gm`w8rMb>URDd$7KzG$HrYby1t*R{iOV ziKq^Wd{*iJSYV~^bEFgX{E+XQ;&^>-ZgioL>}O9AYBpX%ql0r^VA9E&cKLQa-`ei= z&Zci-Je(^9FnSJ~fQWVI0q3;tc%|O{iEsJAe12!I;VG2kzI|W~&NaA%Z#O>VTAa@P z)uOlQ)}wICT}cU&Jo7R;tDDH`)WUfnT&*=teR&EeNiUR?QwhAeKK#&QLXv6s5Q>Wu zXCbhyB_({780`1{SSGM}o9vy93VrLvbGjY+QHjh;=Pl5yR9dZ8f*i<=&k{5*7%duy zvu5F25;RHKY9>P}-HYTN%v8M7CU4dtYbs8XPHB-gk@JN6W;miE(hGXtymcX-$%2=v+kmzRT9!;3MK!q|Jw52o>72i@Kj z1%`gbzyPg7qoCxtP+{*W_o*-TkT;6+#f9iQ86O<;;H(T}kCWLm#FWLV!VlVjzA-x}{0?mkbXVN<>#q ztC85^k)&JqugTJ@XmV3NZue1R?cYK)<~hd_wpF#Vk(bj`tuN$y8RnYDGT~x9P5k%w=_YWA{Z-ltDJRC{|J$Y{4?nPcKL^d4P;e_ z_BjB6`NztJi;=$4U*Z|*6HC^eZ!iI?cjO+yK^~vDSfveE)v=S7Xr$|S0iDI<&kCWm zoaFh7rlwpCT$GT)tAZ5>>pZz=Nhq|g}%0$I}1KYEtKMw8h=hG|UvZ~agN z>U75^+fFK7KcHJsyqm}Wg?n{!g_?EC$Yfx zw22pRTyhh5W_TXqexk&jJftgT3~l{|*vhEm4T>tq`BU|#tQzmsH&?aPqE*D@naxIq zOzmOJ`f0gn?ipwb%8GJ?eo$JGls)>G@#}ts8R9s+!;3Bx6gHlT&CO!w=2mn}f5Mu8 z>MqA&^x~L8OG{p^Oh3&%?8_Jl>DAg+@7Hpp!v37au@};ZR1jm+{Ptp@W)F{N*EJ~B z=Wr^fSv1qgG?860 zRHZ8`AB2KG@SOM1L#qFu7l>cAvw-{=0KfWbd=~Y7}L3 zXKn2)-_UUrJ7BzoBO``mJvBvW_ksHHwyIUL8;#>L5_RNu$;}Y4mzMYa=@^Z49-)ZZ z7ro+H>hkoGB*|x`>tUVUlUfE(JWe+Z7}`KKSP^10 zqQZUBpB1z_67tk<6v-V|2*szX*`}@Ooz1NavI88d_k#+H#(3Wje-V&kuxL-P_8WHO zMx>;Xmkdd`f0-N!ZK&$Qxlw2rA=)QVVgC)ShhwB=Cq%#fwt4skphpjrB<;i18d2NF zcE3)nDUQXh2y`83!ZJ!_Z*<7Ro{~{Qj(jA$J_O6~jnt^4@BqDo!f3x9*H$`G#0Dtg zt?7zF9iF)IJ)#MDAvV>2LXz5pcC=c0Xna>asZ4At{ApGl4V`rg)-|k=wC8HPfHnoq zMpew7>GGQ63`t#-))oZ;i9Jn)t{DCN? zVf(M53=N~?hQ?4%h8z<}*=)r**YCdCZ+bC$;D|TPg|vlwZduEPWQ9K&2=Q&yZN4PR zw52;A30>{|dfDOf;N>t5Q}GB1RQ}VbBuXfsk|C`gAJQkFL1bePt=O-N!1M+-_P^TH zf3;$erUrRM#7WC_L9}Am5{ty=e6D8^Em==6V77^`6Xq^{v7RqqdOL%$AK(mCs#twA z&p}ZZXrNiATGoPe;uC|qc#7;s7KMSYwHl@+vT}R5b3!n2up?&VVfz8UbtrtCV^jc1 zNwQUY`+Do3I-CdWdk_Z9(@P<0-gLqcaVk-7`2ZYHb}C4ESr*P z5v9;kJdMiY{NON?S`$0*Z1!W8oFb}cedAaH*J;__WTwA>V=EwI-FsC`nx-!#i4vQ& zq1ksdQXMWz#+mF$+Te#J)oxzSqj0_;Xye;=R^AwadA(+iLV}y*c8dnb(_ekPD2!>H za?%*D72G0!5Qz*t@HaRrymGiJd+>WAI=a3Bk_#94n~8>PMPO+^^PA`%+1-7^N3JoD z-M%vAI(&+gm zy)QULmVOjxkB^M8NswNdV^vSU-+y_XFg=Vyw`^I+Y3P<4mHjZsyR|eq8uEiwpwq>g z%8Svk2Z&?$&jG-ZpVPe)Vic5+R`VLtV*U(}{w5y&Pnh(-%HiLd&adwgqm^NhuqW*5 z!|HN}sZIK#!T?&KG?gQ_6mk>3xTK81pqjbaO51h;&~cYC^y%(hb8DceHe+?6X?C%> z0xsc8J~>#gy9aaVu%6xyI?VBQLcF@A9dVED9w~&gLyVGK5jKYKe4DblVO$#31P0Kc z1g9F6L8fEXu_eW%j#KOO?N_L!_+n&#-;cQX3J<(%+-#9~E)AqE2)J9KfzCMCh=mpR zhSZUt>)nJHS7EwVJ{N}}G+A6ucrX3O`G{R zDGc#5Arf*OWj9+R2kl?FQU&S16TFVauRnq0mV>ycNPi>v3@P$AWBS#Geg-zCPH7Cf zLjg2m(SB7?{fQlbXpnymu>MuS{xkgV!uLPH06@1d)Nk}UAj)e3)t0f2=VsDINg{7mro@cv&34q|^M_%qo5Gt19G z?mu~e@qe7fe?s0rgMXe!{t1T3{~i3(tnz1upC>whG8BCJo#AiOo}cl5_i6t`0|0l0 zP=J4UxIe@H?nC?)KJfW3@ZUX(pV5EsPydR(FZ=5i__y9wK^g{P@c;lah|ZQHhO+kM)$ZQHi()3$A%wvFlUZD!3+xVIkarE2ZUipt206}d}6 z8W;ox01N;E004jxz?KiGI35rHU>6(!02u%RNL$$MkF)6?XMGh9ds8P}I(J(efvfSRop3t=p*cFRWbxBA4(GX+7B`*36ERJ zr&6HZmh4FiDskY;U2dE+^d!T{1`o65mWI_=r0Hy1=ZaGX;k{)7M!a~rL3=efY|eQa+5y)r+5|D?-%7^w-NgS5C%gDe09Y`@&6t!-pS z7SBYq(aj0m`*A$``l_6#!(H|laebAsMws~Az2#%cA{_@GrA}C4|HF6dUEa5dgeYzj{m`ddNxD48oh;nwx zn53yF*FkmlCEb@fKZ9|3#Y#fk3%rt7v^NyDa|Y8F%8b7ujhQw+Zg8hj_pi!%Qae+O z73C8RmJI_vX?B89H5Aru_x!nMQD50`LVw3yPbaqY1r%(d+wQiF7EQg5cC&@S5q^?V<(R1wCv}8a*{jfrS+v&ccbTi z1ky7z8^cDQv(IaPA*F4X54Zq zqbBBmZ)OKg%$yI?EJ1Q<=7`=e=g+7QlWndqbaq!+e%C!dC-*Bm+&6l-nGtn=uJqrB zOLC+?@Y6XXu;iOu{!MT@Rgdwwa15FH7CgbcPaSVVZ*qSQx~Fcl%XN3T9osyA-rjm> zystmLU2g6pZ*sS@dhH?{Q`&p5nHv_z%V;yH#* zKFpZ;dN}Zmd%1w$?i}abwZGIUkyNNQv@(DWnFvkYGq36HNUH1c6O%$%45Ea|8>Ghj zow}2z!Gg)_@vP3v;L?dQ<=uhUm;t%?VpGzLIB~4wn9sGyKN|(V*Lii_=;chgS~jfvvKg-51l=zg)kg1? zWz4kP5QcB zf%~-I-v+Gzi+mc5^cuAdjo<%Lb%K6yxm?pzlZT15!1p48AWnW+CKi0XDc?l@@K3YI zUhlPyT@IlzBN7uvhTqc(o)4xyF_z<#VawP0Vms$+ecw(FHdOU8MGm-coj=Vxhey&^ zA~%{(N{^IYybY{qmuyy?T?{|AHcP*o#ZQlP7OV(++^tAHscd{eezsrv_9gf0 z;vOe&^!mO{k{2n=s@B%mjLnn3?X?2jpq(Hws@l(0twW?ke~=uT%X?(hqmCd-A3X zS`%KZ0uU%&Sa2)PmDPk6iVedAqR_C57x(Bkp-a>xT^avC&{z_bf;ZHiSnq6cg%kvOdv81eEETKK|POziI0IG0> zfrvDMw@*Q}F``>?_{bQ33sqr&q%xwq`)@!LCAcSU)Y?)aI1ic#qcGj{(t2V$X156MA})%k^>vVtOc0UnBLT*=vOkTvMD>AC!w^C%Oe_JzR1 zrd#*}p2a9vd(ya{U8_ozUG5hK=reT<3C?%KxZwZ; zg7#I*fx%P7%US|$$91`l4>rWfPMR1jfQSNlIoL$;qKlErulY|8hWa-xdK;pDVJCT` zGVOtC(UAn)($ay7hULP1f~8WZ0qqcj`&^DX{C^Q|Be)ut+r?$xwKxea zX^Ri&Mo6yYR_XTd#j(Oxi{w2Jk#`D0I}zZ54B1KGLLI>WI(0x__mX)-N5rm?#4iWi zz3peEEa?ko3GRiFjI0gNmPq@$2gM&ogC#3QXoMC;JD^5En&*U@$D#6vC9?9)N{0H*@8s_4#4=K=pz7jgJCbPxS(Y<*9Dz zFP}23>}z@gq>R!jL-O&R*!Rm^DvH5{~l% zSKruL+>z>BVgU$hk$g;3ZeiZfy#Onqy!(dQn3}tj%c5d^LGf^w8xtoy^6UzZ&%4T) z{~H}a=Vw!Z%-f_6_BUL?2CHRs(h1czVTS@AIr0Ea{W;@@IX7gGw-!q`welI|X^1BN zT)5RxNF88fL9zO7yB{EfK(RAHGqXEtbJCHq)w>g6Qaz>4S97C_gR@0%^taj*&y)x) zSV&z-iSFROD{WSUr7(3VL+ntg;so(Q4m`0eL=p7Uhc1bCz(%U{{cbP?Z%Z@>wq_1= zbl;{T@P8gj_nwmiqzWr{{Om_YQX0d4`x7&v0yO`5TbfOb%iRmZ$kid={7n82HKv=| zBzeZX)tm~~{`4kk^h5$b#?B{Bo~tZAmLEj=rvmmqum}FI4;X+iAl4ZwV|C!PQhSaElpcqAOt$7%EAElxwz3cgAY?69Ux> zaf-t0f(;EY9tNH|4p3QCfTV=S^*{=0TJveh9h^Lo!?h~B6hM`;USP!5o3wHj+VWt^ zN~gdXEX}4t>;Zjpw(yS@YX;<(k~h33xGrM?mWTO(tU(#7 zK2S#|fFi8382F;?b-kOyV{V8`rsU#47{cRZ#3u zYo4YQP?)4!j0-y$NvWoj=o5nkuS#lpqz9T}uGn$%}_|evC zFXwe`1k!K{5z#l`8G+m_+qKAIiEu}IYp_<(69G5C*~KcmG{yDKzv?Z6PSj@w0d;)8 z!C^ujaZ@;&IlDz8ad99lO|Z|=1;|5q>6CGS!oR+6CoRcmK2Qc2`mXh z0$4}twMb(w;zNkw-bD|0ama=~<4@kntV#Vr)%2UzIv`|+(sht0lY8ac`-&E``75l zK!SkcVB|9qp~39>E%iS!92Bxcw;VW2p$yEO7j}Na_N99f1`DVW1W8t|vn%M^#Mx`! z?0l*T{Qc>9fHHuIAa(cvp2^L+z>DagN|IYLs>M-WGyD&p8cOKY5+b{Pk-v)o;X~#Nv&_03cThn&6wY|tuWLXC z7}J&}@epsAC5{9fm2xq-;t-r8Cmq}9;MXwBU2j9Em!|Js-%PKH|5Q@shq0|_C&dqf zV3`jiJW(6H)n{9N61<-}vw;U2{{fCdZbUce3Ob^eaHv1uX*kmVD6$xjtH>5axvMDj zcja|+!>(ifsElKj9mifq^ciUp#*Pr%9$z7h6RC^|D$+-4g(lMv zr!1zAY11?Fno+g}cUy<3)+*04!S2SE?P{C3UEO89(B$TApH>$f>^7bsCO6OvZ4itU zY#g2Kj!85WY;*uIO%!>6=pNl^x4@*vmTk~*qowX}z`&@B!y%dyl!*YJHy9rqkn zdJ(c`tiZCUR!Jur=CUFMquV4W^56F?`^jHTGhC!zo(sR9$N8AvJxi#gH zuwz;OB7CWuawMvCKWAlYKTYp3pU6rNoRbncM9}&I^x>DdC?%oC1S@$w9H+S#8Ra zeNxJ`%gm=y9@De+rpy;k)kiBFHVIMEjl1}lX#6cT-x+u`=Z z4BDt_M+kl1G4CawXEvH}Eb#@omGfMU$6_k+q9{>LsGG9Dg@(jjS55$a9Fcy;*HJIE zl~-t+74UMw6u<_qO!aJlaR^M&H21B*v}8~|#-rj+%IJT)rpUH(^G~6AVk!p{{8w+p zSzQ3d1)b5pjsv;OndEcAGi(`^Sj809&RX<2W>MEUm{QKFRcbTxr#!;Q;ZlDVOnp2x zZ*?vE!!?TQMgNJVwhl-Rs^AZ}(1S3LL}OY_`|1SEP_xRsHs_$+1oKg>oB@ojwTDXw zg4Ak9Bvs67jG7^B6Rg1f>RR7tRxkn^->nI|StsZMhpX6+%c}EzQf!zX;nJP=99^(J zK|PLFSGd#jJNMfpJ`PZbSaSsrWbh9sD$21p&{n)&Uh1_ z5@!72*mDT3OV7gJfvPu6>uN$tK`+t{U0I9^NWx_DgCK1pz%sgM>um--fDy;;_p1}b z-^^GjHEAV;(?R02)N`PJ>yB(S5G68`T7ClLNW~eyd7>5YFKSL-(wO}B*j7D z!XOp#QZjCi=W?dy%=x?pyPM5PPl8aDE$3cwbDQe1K6=ru7D#E3{u~?SFzwphS6@`4 zRwr0FUs8^pjM^xG!eJ--7O}tuw$tplcHr+obl-|-KlQ|@+sB#OD$^%A~SE^>oF% zxd0g9sTH*yiZBkTa5X;V!0&uuWuhD9FNug(42RVBjP}|&DkA%wgxBB7q&}=YsT=xZ z)515TRSaW_veZ$h)#^nRurUEuTDTIoI`R}>S1J9RPCwIKh(oV=Mop_g>z5ju=9&Tu zyZaItE(PBZ?Xot{cJpO?QJQlkxc*uZ6RSxRbVj+htWWMYxV9V^5zawZ3M`<`U26c* zv~ywkb36D(&0uvnZOys#2KKOxCld09rKu81MMZDVF=D)EuGW!)FOG=68};rBlde#} zNKvv^ck$`q-j?bgSgt?`dTVhzXsc#?E2q!MnW9c`Fo{~ta7#Geg)uvfF(%&6URE9xrrUas=rB?whzE|wEW0(E+1%; zqS03H(0pzeJJL#Q4EYNPi&_g@cQ$H*2oHqLU>pdXD170;0(TT{ZckQ!)gzy&_KEFzD!>xl^Ni%+(_O={*TtkpZ?pP4hT5H)eeS_iE@pEs%iFcOm zQkTj1sI3jbm#49ihc&xEX6gqp!S-U7uK`ysCMH4ZwJg3|nR;@S80lj_3o-Pt7A-3n zS(FM+u}ztGVq;5q3f69dE-KiObyx>pYl8_Z;k}MBsVR17h;Mf;o3#hogd1ezCVtU* z0p^F8%0YTz%>{D=@A^*_X=&ZMoH~vV=R{nSmHgrq^#q^|-bt+y2K<>4p!d_XGyA`` zsI;BlcH{3|_M+X*4UfaW;G5jsT{pmY0|$l(H2hwr?;un@q;FXU@HXVILA-H$qaSSa z5Ly-eH~FE17g~k$jSgO_!G=62+2T40<@!^GTvw7^TZl+SqmGg~wj_petqZklyE2^= z2Ce&%Ss@e0{fHA$DkeQEUjt2>6?u~a031=rl=|zBLfXN{u>r6aF|#%^R`^i$%?E%s z5{xQCfePS!RKxDPFalh$7x{@9DrcS!Ca{sY%>LO=Ogzy6CT@c@R&KMO9S=zvgF{XF z)+3Tp)<)&%Gk&!h{M5cd<6;VkF)rZ~dRK5cF|Lkln@tdx75!ol zVP#dStv4p39aiH{pNCjztgClV_s|34Xg;WDv!Mc7ybvUq``UB7Z5gh5-&WO6^!@E# z9Q#CuH*~Pv2`64U)iw(~(=f7`#Oh8I^IjuUbkVp0lpC3hEb9x~j)%0Q=-qlJAdd-> zYr{bsaAn?s2R$k4CFhWY-CEj?sq>{w2#B=W6Gw=qV_12{$^Ri$sxDKoL1uPqRQ6$8 zAPsuQp;!4S?ap^3cNtr>9v3@iNS?|t$(FCu8@i9y%axZw63wPN3Re*Z*vL>r$V?>h z1u=mjn_d=s+&3NZi7hG$asO@6Mf#}z=f7^{+Dr)12@|XWh#Xvmw8gbFW5aRoAxBN^ z$-pi}Onn+GcB{-NfA_?OH_=}dduR+Xi%8Py0EgrKFcfwBHGF-|o!0ie^Y-?=g7?}? z9}pfmpx#QCCH%VkV|5^P;hUwQk022EPa2FcalsE~=SI8iulHBac|m+T$yl`ojT92%HNG zb5cALAhhsQuwya@kyu-%U>n4=NYxGsP`{qH@eLh-LbRlZQAj6g3#P;)hi9WyNz{*r z3_D+djh(wjPTNNm%z%H(@HrU=e87=oj=WTGE=dg!Zy>%hlSS9Z(&S)Yw5gLZb(q5? zzz(B5Zp8MX;Sp1-gAuK&&g~)C7CV>@xkIgS`dCO-pGOzKBKAnYqvB6jlgjbM{q#?495L;Y{W&{<0>OECEt zfkKZXziQ`!BP3gV?$dh3B}$C{sCYS9fqyUlTQC66JFq!K`3}e_Gf0BD(%neK zM#;cYWl=!dYasGwP6h4-YvQf^xO)3*GX!g#u?l83>txb;{*#cn+aD|lY-FVzFP!K^ zAxCq^s*WR>e0Oy|jd|Bd&>i0~rba5G^zsO`DOeYOL48cb>rDw7D4&NRZHFL!Y|vA) za}O*GE)e!5mpO=udun_FYtvhaat-Mz+LV$%%~KZ!<5V{;1RE*SX!gq22b3JOTmCZU zGP!mTK57ppGhrY_d(grpTlA@Fy3Ato*qSA)QtWyzxB~0IGU6<>Lu2r`GWd&EOL%U);=z1mJ*OBJ)ZkdS zNHXJi2d{Wf3UKwY{%XqXt%Jb!C~Gvrx>d@xbwdcq)Y{M?xTNu8ggJEwhMZ^32bm+I z`4{Nn=*}h6p|nj34uTBtf)XO(lakw0aES_ zG2)yG90|3>ILJBS;j!aKpIQEizk-osw{$=f+cC41C^y-emjyqU1>QTTa}$lL;FMX0 zptWoIK#N($TF@uPB@u{l6G2OLlv}FToK{p8|rrZ36j(vwSl+SkFnDffsR_(ncd@$ zwQ~_2T&i6nRG0_XpiLtjy%bvp{!adfrLhkJ{<3Z(T$A*#g|Ty9y_hJ^AI;a0R;t%3 zauf~lchKdZ^@)5#$8DsefHWG2-rkF}imZ#&=R6Ue{e?p@jrD{V!^P-~29217qOgSn z#t;~{a5d7WS^>UiLQXk<*=}k7mh)&t5|~EaLUm}^`k{gl1d`6BN{fqA+Q>v%MD(N5 z1d5t!Y<_gG;E}`B@S{sbJbOQV&j_&IY!T_{;BvfCV5pK}DXz*BG^X|Wp<(8)(ULkH zNVC_5S~?OnFS`_SF$di|`{68iS{f3wK3wd&LEJT41`7BzF4kfcFM2xbcq;F;lm98r zMe1RDMyX)BK)aDd!yoHJ?5EVUHq^52W`3jx=qX`?4CaEf z_9UdtL|4O$6As&2X^6H6Z{Hreu~kLaFv5EwyEXTt68KT7U>LTU%E@S>P?Iy+;}V3A z{<+w^fGBx`Xg?{fCe6c61(q$pVOjcgkeW&a5xylJg*c~+S<3Or!Ov8;t8NOv+|zi| zL^d0Y8q^c?5E(8e9k%FkgR^&u<`vXqJrmERd~Z&p^nME_C48g#b%b)I`8IhF+Pbb^ z9g`6eLWaZPa2sxdIB~j6-Q~vuldsZ45m#w)i zQ?e?0uqgvSh)+9;906Yc#o=|fQcY#WRbSMeoNi_DK2V5Wjec8r3HE=Y)$FDTLyC3a z{ISTHl9Z2|%&bmmwWAluqV-u#pd+K2N>>pao<2Y-9*5U&d)_RtKe8%ks0BTSLbZzR zxV4yq__H~Tzj%R#Z=1}Uy-z?dyc?&Zg1aAXy$XmjAjlU-5hd8W1KCX>_=f~)NsyRV zY_$GT>#4}$w;1Lw=9!}@#YT~Y>t3O756}anKMY|n1QuUZQi!Rp*o?!Rl0}HEOA-xN z2n$WkyPR-Z+0BygarPR*EM$$pj1Yuu;^qnD_>^C{TAbIZe5>Kqor)=GqZW?F9<9d0 zr!w;L(l}>dJrhW!CS%E!^R;VX?-U(F5w$>vxcjmcgC8$0wDOG7?OmGe2}$+3X>qEM zmK9WyhI&;qV-)JgDdoT^MK%TcD9p@;2aU#Gx&qKL;jPUPZ3%qM zK_!`I=%pV6Y_t0HvdMn~CWTj55Cxw59_y#Io0c_x#zM|AdARK#R88tCO&md2QHgU= zefCFSkWG-Ms~L(q>>(9v??FxC7l@G| zX^k^`?RGqdZtqJ~#VSbt8||G2_y;X$j7*|DyQU#Yb;9BnHTp$p!HEJ*enp#?Z~j|z zV#N4wjrLI+`HfomBm3k~MQ@jBRhs!0OfvwH8+D7fH?9^~%wc>?YYsq&ZX`_k3%H?46 zrktl32@mlK99M8IB4|%DD^7~E_rTc?tFe;Qc6l*;JgH=jnmoPkot>+$hFfK@&bzZJ z-#X+3bTm{s!#fBvnN{YGuLX3@AYk@t?DYry`gvTXBaA1+7QseA2dpWALc0e>Tz_ycs-o-00yQHK+WR|-A#yU2cf z!;vnf5Xj(ija>wUx^h_8V9|Q0{3_+*;s(pX83=UyvjXE=YI7$4KelGi1uejrs1SVU zbhWl@kGFNG(SlT%h>6B$U+*m4G+`aYYYrVWA5c94p;=(_i!Fq_EN=DfIQg0Zm(b#s z2Mf#~HQ{C9X?HW#V~#S;;|+0Bb+^Cy>eHcR?F^ByVOmzS4C*Ib${9**Hq8?uRT8*} zKq%6bM{PDhG{2Gd<+~@DV|e5BsYnDjXp+Aj>K>?rF0xC!h&p~?9MX*3;k{S=mpcwT zsd%P(^O!>3L_X$$dOrQ_UgP?4ceE{lUK-e%)dpWDT>EawO6s zK|c+pkF_ID3Pbn{&IQW4*gX1X{93QFG3w3jIc7L@ zC{Df!?FoF#OX5a5Z;JupZuM4@6`LJ(nJoAtqmw6Eso$aHmP8LDTonzz3C>gb)rm}d zTACX0d51zF(l$+fP144k3RI)eEBl9D@9dd^AfqU(GmX9Rzj|YN_4hAgwSM$vYrxnBh3EFp9VQkPKby@269(M7$Jxnn<7>mh=-vx2f()k zS|AqH|R@oR~|`dZ!oXuNUMl`uid+;wt1L_yP_B=WnBc7cc5gi37MKCS_~eQ(P%59XzTW`B)~0pbpo zrM7}S%3B6Z23gzbwN(V3Y`Xmsx$V#E_|A4uz$sOgH$bwjWn8c7P7tr5^YCY}r@33X zsDZqgt!K{&Y`f`XtfUqG!nLnowJj( z5i&vbIz6@j46x2@#hT!#@$@UW&bNA_mGB2oG-(hv`!x!l7`j{_W(1~ye0hv|;PL?j z*pbIn-Ic>9c`@D3bMi7a5XJL+Fx=9u^ud46U{>}=p=5-`S=3&4bNwd;A!(+Aw|8cY zMjci?mcK5pfI8i(h^5R>FKfd2EduyLCvqHEs33m;7Ha%x63-?L+O*niA#@!@SXb=9 znhV6p-I8)UHrn@RbG~y?BICNktoZA(f=PmFioiAkPw0Wt`pfy#*&y`zIgI|KL>Glo5 zr6Ym57AI|ws7AMA&j~{_1WL9{&q-%d!j~&3mpW9~ISG){!uLu-)k%@KuaP zi$pK41c0A?*Dmnpk5b>Y16rvJv`k#pzoWwJX+^`o9T?vQhZw5OtLTFbwww;9iTHdz zbZDNUv;l}{lfD6`x0NGR^P^}u^n|US6aLWt&pxh-hmh^scK+Za0I;6q-haBtw?>`i z47lQj!Z5Ddt8CTlZ_cC8q07u&$KxO8bYHPtiwaeL_i>z+D3Q4G0O%o~5sSgT2nF%+ zce^}Grpnr{2EHQ}r+ORW#!^;QP{8SB5)K=Mt!EPOj$Tz(!eY(?OaCEwpH3W)T2-)4 z9xo5H(0bz`K{B~drLCA^HTO%lCovJ=Oz8y(cG#0}*Z7U_4hbQ*g zmopjAPU^7eWn>%16&??9Bt8}(35d*C!AKgs(=^FoNn||^Wd}$Y8AMhw3{=<#Y$%?y zkklO&#e|67cm*+IMS<34hrSM#E)=o-S*V_Z9uZqexbfO@m9jb-%??$)p&c0gyiMht zuB)~ieI{-2#mhQ;^=hZFRYi`fFdzf0ld#h`$fU9?^2L+|LfyZy>FU_x3u_NFFf!qa zPNvq4=D0<5;<-hyNl#Ka)1t+qNm)q}#Q`%Fd2N4=%V}61GT_UnWC8hLfd18h{e|2Q zs`qog0F={xGqL+gur(E`Ga|q9;jUfS)QG~!CTVup5?4jbR@)9J@=u1iCf(ZCU!Jb+ zSpNY>DArpQKcVq8Wlze)(QG7*k6adNOac%D>$sR@qhhL7 z%W}wCb{|@DDqJETgjBH26rQp1m=x8NAO`dPv)!%WcKSYtCg}HPjm*TM2SkM4dHQ3D zY4%i%3wRyies9}2Ta;%HZUju15?GbcCAbG~4j=n*?oRK3K!dU-C1@f)PsOwJ#9a^;#b{fj*x*! zjXGAlEl&vAGQwuI!2Ue(Sav&B;zU15w3(DOD1|<&s4A+r4Zk#@=urrs*w`_miOZ|X zzK|4mW!!QgjR`m#v<0+1HQ57IOv_926TVJp<2$CsjhL~tmnzmwFegq;@*!yJ$!KB( zZJcTp{>%}M6t5X*b!CuAWIA~h5$8)%oz;hBbz$k>Y#JloLj~zp$dweA#LeqY9PNxl zuq9IreqT2(pIZJs^OL;YC0rqi@M4!KSIA?LUb*Z2F#6f_Ij;L{fFbjc(uOFvWpS0_ z7NAYwvWhMPum-?vOqB5nqnao@{Aey9MS+dU8Mx&ttHByBAnET(HHI(4M@WrqW;leZ zEp-&!3Inw*C*TqWxNx38cIK)rw9~m0+`%^ihqU(PC)})+5M!voCIRW*!1!gLiBFnQ zx`m%TlkEogToc6f!sWWLeQnWcZrw*HL#RZ}T;IOK#hGakPPRs1~xk zr>)TRqdezbvG`pW>?Z0~eyk@o@Y^#nzF7^OOV<*{OW;qmCp?wai}kp0@N${7ez{wG zT#R}_BhDG738EMu3lUK3a0@P9{-H^zZV^r5>V5l;6b$n?c$@`hz61EA%?kn1&rYGMPFX7;RaIf9ZfI^V3lZObgs z_G$w}%LTq{koH`}o|pu63bJISpE{W>SE3v@D3Vv*9Ws|YH>de5ywkaq*^VuRB$P)L zmJVVOeA&4S1vu<=E}U@xa-7~%EjpLmE$Jc_(RGQ6rMui<1f9=8r}1xbm{4<~iO*Cq z)7i1RaKzU#!A_&0X$b-WMv3mBFfCIoCQP3FMKpHstSNkzXks~+Qgun0;o}ldFLdBM zc8cYb!t=kVcKtJBIPOA`js|UzZq!QRoYPNPTDs7$ZVyiy7D(G8<5aZQku<*8`6VvG z$u{2X2;>#co`gSuGx`wa)RO8&ysr+bjh^`kk)X-ECcs=fJ)(K+pz3cYlh6WD;bCE& zK${RSC3&RWG}RXENH?HMS+4kXuTwaP-c#&}P1>1xPo$2?joJ{cdLph=;!IF|HJ7Jx zu3JR6F^FKgN?o=&WvWhA)`Tl%x9mSTuc1<&2+H)FaZyCq?^-IHMj{-jnT|HA(SA)7 zdHwNdF^E zBXW0Lnw?%7RGjs$+!;v5*^E{l<)T56pLDnI#ow(v}6CO8Nw^?UGjcvFCR6duL;lz z!hYlOGTKek6ew#F5jxF6MfECnO%+s7uFQIsv4P9Nq}^&AwQ?(hIE5bcWa3EbhDwPR z=(v`^!CO;Kfx`7=5bR>{5q9if&Yv8ci+o-{wN8q-a$I#d(Guh9kn+!-Yl#j@Kf99C zUx%h%f-V%)O6&g9(m^)4Zz?GPS$WAe(=_n?09?K8#g$Ii!@S<@Inm>AXO>RG>FJ=v z`lHJWAH!k6AJNOMboB1w3*NPLy8NZpb%&$j7>M2ftF*7iB&HRG(4sPLCLH7pkVmXi zhGwcA1x{UGQZSYr2VM2CRvHWh6m4&&$+j`RG=?@Zl)-Azg>eS9XUYWuRpb~tjQPSZ z!&QiTFf9N8w8HC*K3m#1xL`Kas#j?gwfW{F5NY$;3hNz_xIzA5t}M5(Rb-X%k=v_T zb30^XwZ+Wu5G97A&=jLrR>%TfBqx6quER3VD`m1GcpqsdA1tiWeWJ7lK5m+=4MRT&wT8I)L^GQ%fqwl>&@^>=gbby z?Qj$oIEFHBxs^+|+DsL+x)k>bDFJsFvTpC|-#TVZS!a{(CU06145|>65j`(UA6>C$exfPxD%H_1FCQ^&rtc;twi>ixmuN148uy`bBp?HtJsXIN`JC;#t zRg*q<_>ekX~)p3}U;cVU$Ts^aBkP$c;$>CxfMqc&jN^`r~) z3M0p$E_NCbn#t)ydm@w1G~G!rE9dow-wH{*c#+u_7CR&u%@9PbW?a9zsk{1L-WepU z{l=4+NKkj0guoJ}Zgl;}^3!!8>Cc-NK3j|?$89k_9*Yd4A*>oR^)MO?n{*{ZyCt*Z z1hPbt2*=P}$96CyeT76Q*&sSCOrag6d7hD$qw}b|O3Wx@B%|1W-qhQ4b@QPhfR&_d z@YSG*2R7lPcu$}>M?*Xt^>%wpBU_v4P|TD>F!xv9EI&!hx%6z{EPXDnO;Z_;ymRVr zKMoTw4b+N`{iAY=MAk=4l1Pof<89dwP@wIDAVYMqc$PSo3Mc_Z$JKAt9DUasK@Fw^2p=195Q&fdS3F$M{H8v74C>NJP`Lg?WlYW|^t zAci^rQ!(@b#6&a+kywH4>_}|C+$#KtsP>^)c>rP@n23%EXs{VAHQeC?@L$<^AD1r71e>xyd_niiZGphNTWKAhUn7cMjVWy z=o~WrWy27ar1p4P+-0zE=+sCCH0TEkoaIpnUyD-a1f~M05JVpQoSRh;1w%YxWa#!{ zK8~&qu7$Vk8D|STJ7)ed7zOBc(sn7qJk{cjjnR@wOeu}f2+nEGigOk1Kl@kxH+9Qz ziq@Rfj?EeLzkj3x>fQd` zwpu-7If4|+Db7G+>%UrCgU9i-vByZ-MK(SDXM$3vWqJlqNA=F_B9t6iyaQNx@IoY(1I^0d+Bng>t%WNk>wXrz$8K(*cU}26y6+{um>a^Jb8-;$_8@ zO$4E6#*sd3l}@1yS_4kNsKw%4?pzVu5|+=j2%0L+i^+W;pKMp@Iu+f}HH=5oTnyp- z-IZB%yRkjqNAu(CW^k1p21681BE9f$T*0(L&*W?(^{%GRI`#S~w=m^v4(m|Kj7cql za56F*FHqPzxf`ezzS2V3F$w7qN;ysV$7|VZHg(^z_?9ii+Jj^*#^MA7$&7}qwrI^(Dw1fle{#}ahk%BTj!<@`mN<1jI-m_fonKrJGvm1=vimJGa|*bd*Z=cF&B<} zK3Z_CnEsLosRVOOkfads=)Ce4Ty{Tr+qZ^4s`0&7O5b z)a7bAS*Em3UGBPASZ4r12!%{|raVK=tWwny3a`J5-pFsRoEHzQyiRSrm%a6TCQUj= zE^EO|;tcon3B*+R3=Sa^Mhs%4G_xbicPqp99E`!(B{UQQ7H@m$e}Oqet=}8QjVk3O z*yiJ45NDWXClCnjA5Mucmf~O#)RVFv>1sj3ZoCf>X+W*UHU#g;tvXrxIZKUX7o#nv zIxAwvv%oMQ1`RceD4%W5-}6HHMoUHM0I)jgZ-5v8Z|LhV zX)Uy5H;!qUSR#y2lKngBZw6uNT+ue~1IT23kEcT>Jf3T{oeoZ>35SGFHI=kY z?7Y2HWt$#amZ}#qtIr;`8CkD`&YIN&D!|sMp*%7XJo7M}Z{{S2RE-cZRgsr!$?N&3 z694*; z-+9l%{~~!+?ASSI>3{ZW~{J)w|q*AyOprdw&zg2|i~4c&|kpVl^dx zUF{D|?nURyvS1=&!SPI8=eZk<1q`z!S|xyLjf}GxUHP);AYy}RG)sHZZsVip*8*^S zp-79ya8qPrPK5ib0y3tVBRu0b)#mfT(2sUaQXN#pMI9|PTLiY^&9Umo((BIOXoiA9 zn50nNB$Y+~thYe2g5^lMG)JQ$ODtf# z!#Zc4hY3e`3546--(WUt*cbS9bD5b;OL>b(3PX*yC?2jpY~5Z$l3sc@thi5nQr}^m{aOXRBu9s5c z)LD4>w|SAT1wXS7K*}z3oU#`L`(W9Ha<5$E5yFuSL*betFK2s)VxuhZv>CM~`vT8| zmlhu7+9y16G}A&PAtp__C#lm&M|_yR{k^lg9zi4u${2oYmFcO|vo2iyIb3!uBRqqv zP(y0_*2}x5-Lk#MM}6F-%vy^&#)C&)M2Qely$4StcU9S?le%i8bXPIjp-^_OAyO2ko&fuoGZ% zXu|k(t4R`_@C&ACnq{!20j_^B;c+17!o+2xv+{TO?ff@K9(0MqYRVXf3^QSr+=JOO zH4A)^e|cm9#{#UyjvBxMnkGyVwTHYbp#&dj`Q9t*7QSi6g-r;N)RU0t-sDMCXnSX; z8G2%G@2;7;)0?i(M6DoU$7R#J^DI`}2#Jxu5dds}39HZ;dH(t3_S8t&IxsX5ig|*lT)Ao|0AX{=I&OVF&3($5HIqo!|{yPid?Z> zUtwRl6a-_C2<@(hxJ8bT>mC@L-m0v|9g;9h(H8FTXkZM6IuEpBBE&?( zdP*f03Yret$L7^sD^i-;a+n|r*0zt`R>vkD6M_V=VmLX)$vAI1lAjhy0kG@`+xr0NoS@e~aPE?Q7ruLB zP(VYXP!PlOZEHhT1pq&mJ3Wn4+en(YnzhUDXtRQ3!|;jrHl;%K)n?Vqc0y^B*gNLJ zPBX;$Aiv3FJAutM9-Zt;@S0xpNkV(m^4iXN2~_xBf~Ytl$lH=s(t)? zO0ANL1ish1`4_8e*5-6AfG%=+!BG9~$IgU(k-wUx@%9yvWok4??6gxVWLa%iK5o=0 zRT5K-Fc~-gcy}6%vM5j*b5ETwP+fL_0Ds?0cW>Jybe%d(M3*}Q9kOl~>Fz6cQ+1FL zn7b+?TnlMnZp&Ho{#qwok+aUcXMNI7`B#ID4Av&v%!8H%c^D_C1d)hP3c+k74~Cqu zVUfY#x%x9WcBkM`{JnDny>v?FS@l1A^mfouNOgj#=8ZLtd@+xPg;s|Tb}brZFS`bV zq(cJEXs9rG1wkfMkGhBH<4;X(9F79zV&6DhD@+7mF&4#&WAtNBnpcNU6j=SQv-b+9 z#=^x3Q30qQbFBa#K;E+}izytS-=mUggs^5ajbRBBE6br9P(8nGN@0BFyOmrdqS3Oj z2nHPaRS`GSgx`*tgr30%BpDm@uOnm7<~aeM%lSWB{YE$r`9Af--^_6~IiEqo{uiQ7RX;dfx?@H);1r7IX@f z4s+i%a{x)T5n3(DtK*S*Rq)fJq}wl>$#pPgqad!O38<4>SBA|DC8{;!?#O1HY{u4V zN;Z>G92puf$%6A@T0zd?D_2lA7}J$O4|3kYj>LfhK7R z?yNbv1qD@kqsZxjA2vpLD*M&E4@8EFasf`I<(!(+vX?o44Q$RvEer8@C>$&;sL{2a(p#WuMvZouAeZ*2jnh;$QVl$Vn6oB> zB#9HTEOe*iS@WMYvDQ6UZ zzTrBEBepOg|D*4wdtnX^c1ndtsbMCJmnCFxm8ar)nSb>j+_Jv5Kfb-nZ?_$fsuFE_ zH>GQ;&ij0=*5Y~(L;PesF8GyTLAhqtF3s4DXl6laD2p}0r1G@Uw}AzR+ElHXpN-6U zTUf>tex#1qia%f{Cgcyrtssf_5o?&*=5A&UCd3;fp>ujj{1eeyzA@BZFC`}B*LzIG zJ8j&mdx_>zpSmK45x1?JujQVzxs@S;^M!f+zdXO_=C3x0=Bq9?U$q-iQK_F5HO zb)V#)xcl3cpgUh1OlKKNXrx1wA8xMW+^vBEp_D;|#O4!0MYVmk3(naMC@0ImDX}S9 zyj<`;ndsEPZTmjrvEHxQZ{N@FVQThO!gxYaw{b;DL_Dn6uyfVn<8NCd0AT^g;8pRv zZCW5uPd!J3Q6)mUhp^z_P1}ZBU9DI7_icRDeQD?ont*!kYjy7eoUY0GM@=_zG!8qa za$mE-1q_l^lai(I#OUcA+|a-=eXUW6f1W`)y=BV4OR*fl4#D zi1-B#e%dFhrR5FkYa=G=9=#AWsFpTNa1|(u5j1VzZ{WM?@NK?xv#c382{ZPXVZ1q^ zww51W2vmoUzYp#dfqR2)S5{3ousv^UATiTwv=F>q0hb+kFo14a$&7_A+pE*Pm=Qtn zEflK5r>Q6bRs0}-cn0;sFPy*ysXSWTUJ1?=>tM>T1CO$Vq#Dy(V?M^H`JEw+>3)9i zNPd?l;@buo+vZ#>UN8_e*(X&PwVH8R_+wvfe0VSO=g?&PBiA3Jz?^#tR-XM;S*Lcx zc{d$Y)af~d06b~$0M5dDwz`(zv;V$38bx5h?yAU2?37?+cHb19*lL%JN4%d~$XUPd zo&D17j+4&26<%#Ditw7c`mi>-6*L+3m8FRYgeO$4g|`6taBIfmB-Q5bVR@4Up^BFk zf!eNOZ0Ee!N)yR???>!LG?QM$I%5h2IXssk;=M9G$-jlZOBda8x8h+Nf9G#3yR>F7 z>X;{@)xbY;+lJeCi}2f{4i=Ko&_sJ^Mmdc@x~Nh+vdTHDh_#v0$W>9q0-a)9N>#h6 zlLh={*pGLo!4n;F=04apjW)s3FpcW)UYz(lmxbZls)4<2{|$W*IuitdVXxVT@7Fsb z3}D#-6s0^(W0_(SZRgv{-3|-x5?tHe*U$+9qXZ+F^HF&B50E(9bNIVnG2-j)QTTKT z35xN^iI9allo(TYE++KYJI#lD=YL1tc~UJcldXl4=_hFsAM6Gxa&QhAHy0V&Ge z)**51dH$sM!D-1nM>L>SXmHoL-qeC(gL^@fLFL$)jfrufLtw-_n^ksCP0-nJQcfI>nSKZYfZ4pgr znr3`Sz{v>s({V&RV$|1n1nMw{W$1adNf;+Wrzqjj;tp)$s><*V86}8_gQBVU!W}-P zSlN$QxDp&{E!HXHP*PaKR=IvVTdX0oREx-UmfGUbesXVO%NFWH3*Z}doe*z;r)#2D zi9Jwjb(jK^W%x8Rk+PPpR1A}`w^vh4OB$vTq|+}%%(bGIRqe5QZFCLzwXv$MnHrjh zI+X&m4F}FHc-4S`i*i=M?dR*usScV>C|m0(tqu}V&SJJCTXs4-JqTEwC73Ate9V2j z$VWKuRRP&s?zmc&b=#UWUt_=?DB)2`7$)K}-@5HgYw%MA@B* zdi1!UJkVi+;K3|VI>jr{>hLMD2cXpQVSypA4H?kfo*9L4o`z{mT_5nS#Tz9F-&E~& zF1|W^3J-v%KXZ*Y+GtephBP`53WX*?ML@N}lnrF5-~yjWJ1;6hr78TjVbQjco#*qU zKotM0H}KM6I2b>TDJPlQLppnPo#PpGyN;u6f8&J5zSQe-e;Z82zL8ASmj)OrdmM+` zoYq?Ew$oTXz7`m?1;zvo!vJGdMn*&guN)2{0X7Mw1t1N;(VSk=uC7fqwU>TWxGUz7 z3^I&Z?@83^@H$a{_U^y_^zFCa{O5mKz5Um3+AqHSxBo~Tlm6_@e|zU&-hS6gxensL z{ddJC{QW!czV%Z(>fe9z*5CZ-Cjs~cV8O+2Er;B72xLIwhk(c7P&kU(yuUz;2pgF`%YZ2^^mqqvv|MNyjv={?Oko5X!ovxAf(N- zu&-4q3-(~V$V?jnI;b}-##IJ%P4y}rR@7RZ!MkS&Ov1t}O2Q?@b}LOco$Kvp1;VH6 zT)$QlUaa+$?R}V)hCviyG=5b~>`|&TY5d>jw~kP2jsaK;^85e>ph*;D29*ynF9Yl( z``pey%kNsQ_~gh2g&dgD(j&}7p+R}0=VOCAXa7-10GAZ=1l%JpO9P{`#mZ~N4EBaM zDd-hT(kx&YQ!}8Pr?bTBk6oX3=}zlq*v<6R83}|T7&nuk%D6H`Bt0v`JJM?zqbbp- z(m1J=NqXF1D#LrRRV|731LuAJ&i?&0FX7Zzu9)E5`2_$0E}!Ns>6HH`7iZX_1Mldz1Jw;|!ru17%o2+V^M)^F-xz_m} zzk*%zqfTwh7AU~Jv+$gC7IGfCjtt9DwUvP8D*r0KWB(d`sh?4pTRVGT{{_$KjtH|N zd0A9K7)1GZXCFhmHJ7t+1M=b=eoTp&1k(FO{_4PVb@ZY`;aNS3#e`bv3@Eb{-)Xlb z2t+Js7A|PcJJ~LqQZ)c?-&DTb$JM>4#6+n=wYzJJl}@|Bow}E?rvXM?`t%Jo6q|dx z)nLnAY7_OGt%#^JVtYuWx0)evVfg;6ch5@U0`Cw~G2l#nzsf&@J1eBCVyx=ETQ*|1 zuL!e`e3WxifGc>ZTJ%)X-qX{?V(u-&y##`5%>*iFI9F-Y){Tnu6(@m~0@I33#Ia@^ zWpmA^4|`N0xa0v(r2XT|sb!i~g&yrT8MzvCWhBP=Leh}N%0U2hS}FUklW@2G$?GJb zRp}|{lU4pZ`!8tGe40OA<+q@nQGu&!|1Q{dNWFy01SOPWygHNaAWjBtIy7Va@hnP2 zAPojiXD%7!DZuL?n2socpr_?Jm^3;swMi0!;gr3L4Yn7t0bc(1oR0x2=^k#bf%z?m zK?}D;_n(Ni?wuk;nwZBS!(0{j3NswCj4@QN`I(M?E6mLO#xBDk-%F^9i`b0w7=5@A z^{1tPC?aOyIC3#Ga24e**G?xqb(K|+OI{9w-#!L8Qv~=27F>DcZX#1*%(Bv(8#-*% z_TU)ocA{0S$&}7lDk;?}z$8A+#|(dHI6F^v55=f6o8tA_Y!qujvopt*-f~gWC0z{OkN~{z;F5uahfO zf6u2iB$+k%B3vcM@_CE@@ZC`WIv!C|0%9wZa&FkNG~y>07UNM9`WZnFE41`5g4IJ& zB$veqw{s}=g4Rvoj=164_cUH3j$Gp561kRBBL9+<8)ICHjD>r#?$p@=IrpQ|W z??Roypup6(W$^Kk+q2R?GxHz*=h0hM$Sr?&!~q=1f;b7N1FP!dNSf(XTrl6<9N8?) z!1}SK&L3Q5=mTp&x3S(H>}OxSY5|)~$n_)Bx&o{K6=+OFNKAx@_{4@1hEKY$4)2%T z)hf)iHl$6Moj|H?{+)|KmR<8UL4k8A3S12Q45c~`fptF2zq{V2$KnZG2%zNedx&;g z23`;I`Ye)n)S6;&R7t>-G)1)n-lwCQ8N!65OTx=RwWe_~@*3D<8{4K8~ z-l7;k-j9e4adf2*NG2-j)QLpqUa9;`O5o#)o@N;*P zbCEc^ZGC9e<)w%MGNmY>N(*HoII_zT1s(?QrWd$3Fp@ZQA@6J7SUE(;{Hd!ae|h#H z;7hw(p4BkWp!djM1$yt4{6)f)1u9xrK4G1|u37eSe(QoG&OSNuX=hGx4m)w{b`d(9?!uK6k(Jv>)_+?qbJ(5D;=xT_U&3jEVo`$I_>0QnuKRsWUs}!xS>UfZf8n$5> zu+yyuUBgzLXfqcI7V1b4OiX>gFu|wJqxl5vFhHq*h9x%~7e0od@6L}JBT60try{#x z6q3VXq9U$AcTn|EHZMh|2~})SpcI{EhoDiSt=L=8oVThCy2bkHT7JjM$j>o2cQmFV zj0{GJ1py0EyopsE-fOL&*_9M=rxrNZ*Gi!4p;zp^O{s{;qx!!oLKI6;_S%7X%$}I1 z_WV4zrqe6%?i{^^z;trWyg{hLG2PCrJWOX;5-Nqs0-cZPpg;#Mf?y1|qT|&?QL?oq z%3_C8@Y8I$9tzhDII`jH`2LYMiz4MIF?e|>RT{#%rHw<_lpcAuI+q>*5O; zQ%O9zCJlU19o|(&76=sv?t_Q)0#cP^S>hz)axRNsTsWP3}qgf;On>bRCw^-c3a^ zLbzPka<{#k%qlo7P%ZFS6e~gZP=+&gfU*bVZlM#L8}Zdn1oN*hX{54AXjnVgdxwP4 zhv_qb3!LoC-6L9v)IsceDR$aw8IcTHg5emnI=s%HO-R4)U`~wm>*4nQXPFf+c%Fmk z0sb}n_Y zE51Ix(9ljdLscj!_fxyn(ao4g%H(AzCwh40lq5QFY1#f+_CQNN@t6GJKGy47<380R zk@*CbwVEV?i4eXy@p1H{uXW6ONPRd6LuX!I7}DnrB|aV}79m1e81^n>4z6cl-d_bn|7I6&R-T6(hc03qqoro$)9VkrbGmvcvE}lhx=q@%m!wzD`DuM-ZezEF{CYtPa8e z!^(gzH6t`pldT0RMKq==2_(kHwm@n^?&zxxg6gxK(#oqu&PiKB2p%Mn$S^MSxyX)! z0tN;sE!BsvF5Dp*tsp_){SYkTXIA$=DqYg$0S6wsIsvrio#JB6Yv3>*0WLU?BZ;x( zL?F3qsdjm2kJtdlNGzimQ)V)o%qv(HZd^rx;VA@L%A3~{7iO`h>qi$YFD5Zh+sM1P zN1LP~U-KyuRz$`^8o5Ncg`bR;iw{NuBr@h)FG}e*sL{-uKzfu#B57az{ z14g~`b+boUtIF%MUCk##CMFXC1z$g(%4>i-9A?!cL;|#ok^u^AZnh1$24$?U26wKV zE3WV{mR;P=e(ey3UV(0KS&)?ha0fU#=-~JuVWw2X(j-Cwm00W0aC`!2b$D0SWEL`m zOWvICDBf+%SSWqNYiFK(=-kB6TIJDJnW=Lee{=RRJpbA;BaG_KzTk3As+n!g{7C~t z(yR{FB(#VULN{fuvoeN9wNDb{y7Xd)wp>&PsA$48OE^PymP@2z_@wUY@S(Sp@maew zjVp$XtQ8mN=@1;N5+wr$gYNA zArx)JHL26OPEKbEPS8?xUW!VLdzFMq!W617{%~gxfA3g6Q81a8iZW*9;j)PGr8^H$ z1y(UT;g;w?GtcuCR@crxxCoTEY+Toh>W}$nmr5ieFEly|0~s#t0Ac;u1$6G_X0c7$ zsbjKqO)(`LEFytQlO?$bJh4$^>jK|i!B=QX0^No~;Q92!UeGjUWT-f*FRt_J%-{G7 zdvF|oUiQ0#T-UlzVmHFWx;#w`i7^iEMDf`1IF5Cz!+S{rY=e!5n+W1LpOEY1$S00Z z#F`Alg=^*$6=+5R2hP{UCz-Y)0`CH=4&Mi#?5OtB)enEpe{cWe8H~>#{qWu8WSJ(q z^R>d5&{AbgP=-M$B9g@B!i&^J&+71A^!$yxhJtdxu>r7fSt~6v;I1FR>@_>@!K962 zRTKzmFc~cK@dxs}LzBO+OO3EnRwEpP9l#-M&4wiydN?Ew6CDK@4q>t28h?kV4&RIA z&>Fjbt++z28Kw}6DixW+p4$#FFdbPwhz>&SV~C-JtYS?ucraWO`xFYpYH^3SJjGVr ze{=Rx{_yOV1;F#|{L4DL?4@CX<^!rQ2h?85c}6l!LoSs9rahXH)!`j6YMx~zFsSOS zglIwVu8`{RvFRf9bX9-W7>oxe;*(FcnkeW z^ zsvl@#(Ff!G@DychGbKfp4s;Tt{E#x>ECKs00#U5gWX-s(d!d%)k2~9lO!cZqS^vST2SZf-U9p4|HW&N-jBq?S6)_Duk}0DnF7wJpTJd8sV~t*2r}qB;38Mri~wpSr)BBY7_PFAtNa_`{>GL1QlwS zF$xV-pB5?1rH-*zsQ5I&{xgR@Sl>6mvTZd*8NhZ| zWtaQ32to?vzY(n!1j3T}!Eo`2A@FkMJKQ z*?j01O&S3dLfgkWW#LIpos@X+(3I}9>{`9m%vJI9wxTz%nEjGuuS@W54}yx#(aiu!Pi2m7); zim*e}+FRQIgOgOK&?6FyH?;QcT(T82@yb2gCy6N&s3vedkE;=a^37GQXSP>yA%{!* z_bUjSIqVYWCH};TSxDOfF=NS4)1y3H*un7 zx3~+M*GoH}IWIa`bk7~20mSFFo1B&%7T}@x{q_*{kPJ8xlo68|wg=%lc&|MtV%KSJ z_jo&YH+J_folI;x>^s;y^KOL4PCz08>4fo=)a4HeRieoj1nS|LaeTV|l~&Xv9-Y*0 zp@a$ot}u!uAv$$Z5XVnElu8ZruHSQMj-WG~261Y^+f%2D)mwSg&!wo>ULmeZv`AI! zMFg;Sy(QR(+b(Rd2~}(%sL)X+YPD~S2h3W<7fBxjjze|$u^MVBT|N+SZEsU5bU6x4 zUK_)NG_~wc5o7^nvWo6k6{h=>y@%H2Bgd6IVMZfGw7kC{aP1S#1m-5}oadAs%(kI%yyuFwyB z1?Ntf2KUUxAm8@GY}!)7>J(|-R;B}L2&w{PzHRMtsf^`Fw{@4@3e)R8xk__cVLP*G zW;-fK$WvA``FRv)+$0xpXmhgN(W5f&qejq#x2E(L9u2wDS^Qd&b_9`)CmqrA^san(X`Y6@uCXUN0-5L% z+J@s08peVlhHzi;irSMA+j$hiFltgE%rY&57=>AUC=)Tn15qX_?cLvjx-2`E&boHXw$amkw|GWsM@l?6_7-fjYxaV}7C8?bwVs8^d3O^ohZ>z)i1%Tl#Sl(FJ7zSfWYOtuq^K8ON zSt$*;Kd;>N0SpFbTWq?Wzu4_{+JQO81F5ygKy2eia67qPLvHUK1>nkp*I*}C2f5zJ zwe;5G9%f2KQf6&d&8$w-FjX2=;5eD0Zn{nI*ieHyaZ9bUY~Ejyij*@{qku^bp*Hr| z^+J>|mc`nxH5}~+m#ICdQEM?eK-Tj9!U0?RL^JuBNt2Y;lOws|+OQ}&2>E*&7z?BC zKImCE6;bJN!en6_xw4*1a-1*Ixs_|a@4gi~pJ=ADG%}%Cy>FlpL00K&dpx&?Bay@%T=iNZ9*SYPw)&c1Wa=M-#e zt@d4nweyK)QVVN(#FW-5<~e2d5|Gu3ux29lB`>wwqhzawvYH7>lT6E0F6-=G6^n$^ zdZF|_=*%&6<}wXK9n=mkivgxuUU)c<2e+SOw)Wt#zCF12mnLWR6U_uBip5l9a4Fm( zFcDD_1!2vr9T5}b30xiinh{v7<*BkVKUfW+oBl(@yklP+-`}CmgZr(FV;!rYz$y`5LrUT{QLay98jsg}sSM4^b z6Qk4AUEJm;_3_HxIu1sm>r^l-pj4Pr9bpo&kGAXpO}LaxD9;iq!m!rNNwFlPlw8nn z0Z094%MP+-WyFF^FieKV|7Y*pcjq>)G+(9vQ~&%TgjG_IICG(wlgz< z?XfH+@yxw6R=-lo@DDB^4HyD^K#f^v)NKRKy2C7WUDd?OC?tCE?m8vAL?OMKDbBiIjSbRKcaKO(QE86t?StEqsftT)XC{M=z|s zqL~AvRL(e64@<<(WLjPYeTnN}6%`6ulRBxRM90!m>STxV!12i7S5N0quBBS*)`<4` zK7fqNO>w)mh(gU2Wgc18kM3p0cDEakx1O8{brdhkgR>xaHTm$3A~9>VtjPwT>`wM;+m1t4mK4!DBz@ez3zl*wPTPzZm2Hr)A>RrL2O7f z(Pv`HPSDIERJQrwn~wlGvzV;9c~HaBJPwDrg-*t*M3Rcx1|E?2$P>Gr#V|`Iuy2=d zo5V7ytm>3lXX`M8LmzRbjTeaz5`>}+({V^oTijSqAe+Q0takorXaETdhP18&o9c#1Sy5@bd+&NnlyhxFJ6Z#4n3Gm!PThd_+aFty>O1vc}5Qa_*q zW@3$HKoirU>JW|#7IYowksj5%K0uVji5P6?bWM66ai)!z!3Gjko{Te@B_z<*j`uc* zKy~>P!3NK?-)|m35OI}1_5ABq&gKtZLVkYd__u{w7wE_w?5dd!4NJVoB5M~jBqEbg z?J_#>3NDx(fc#cnK0&c>*MOUutSaidk}uq;8;}oP(M)6+J1rEWm_2jpnwEfL!Yv={s+sY07%LrTwd9>nQzk5e z1n>4Ymml7xT|8?&_GaK`-pcJ|u?x~f-VZ!!V5al~NxdbZWFn}~ukqd?&%8rWVTi8O zP6I<6ZTKHCfk4Mxqc%N)$-17~Z(tI1-({-4iM6I#vvUrZY0;VoyJ{8^qe7KMW?4uY)H*Oqk_OC$ z$24ILFx$o|I=qQnIj8TVPb1go`zaxxt2-F?e8)vg@gD5GSt7I&N;yTrwe|)kM|=&M zL{yje6@#Uj3B!O=lQvK=Bma539@}~Rsj-6kb^gg!OoxbRZ8Fs&j*BX$q^VlMW>ISE zR=#kKCtU8jGmnsu^YSD|2*yjjAqda&Y2B1*7HiJ9 zNgWB6I!sK2B?~lpsxBWSPmh|u2Zg6)eDZV1|G(b${$rN@N&Xcj_pXCPy9^s?W;=ie zy=Ga;L`KR<%tZ$>gh2a%&Ccg9A+{k-j}BjZMKc!~X#=a0S-B8)(bRblFcvdSOnwB~ z5j6bfLoA=)%JO5ZrhyK6|A$X;lswH@4zOEw?*_Fcud_hE=K1BJAt55Um~bq(_W+dtEt``s`Dqxj|_1vnyxxljc#* zkJ0!B^R*miUo>x&e|Q8v93>0)jIwW0#+HRTNS9>s)ReJt#?YE_rEtpswWv?|Wb+Y_ zr%mB(`&#RY<+NZN%?D`0I7@g^>v2Ex0X7)A-xp`PG`-tponY5C%HMZs?op3!C(e?8ii(`Cb!%F2 z=q_6B0M5168Kpn%%)#ltuGLDr&TYi(=vsgC*NH9*B%h(7v53&6S;A(GUE&sNMtta! z)Zk2>g|os5ql=0qVPMVd(fW=4O>9(>=`u zGJ#=nW#J8o6xhP>MBRSie-UHW0=7VPE^v99rjmtRQK{s=hzdy%VhR@PCa zy;drxxu6((lb&#=Oz+38oH5EWN~}>jomq#-27RAmV#cxk_vGqnKs5cTwsz+Rn4=U0 zp?H|3F#>l^O!Mk;ih{ropM3J(-!~ubYl53vQqTifPx>hqX28U}_c1G1)|C!c1l;qu zU?kY{ftP#tNe)v4ru8oC+gP3dT23L9I!TjREzVQukX2bU|2qF3Dt$Kh^B<8j%A)y6 z`ihsKD7g0~j{2Gw2FN1M19hmeGv9}M39G*slQQ#PR{4LSK@T;`VD(dzRW?rJI8I4& zex?iGNk^LGD5OoK3nbEnRE%}Tn2RVi(Oi7Yw*O;gMU_*QtVVb_B4S4fB%vKNM0qA(m&qw2!&?Lx@$i#dnWO+Y)2e;r)1Nt z)p7V6Ep!)AC?i9u$eNGtf8Lh*yvELKK%FadyuUA73K!M+BNC@$V<@0*%e(vTZx0)6 z)~k#aWfRAR>6+PtF&-ouA;1*w11myxc&w`Yj zEWXSL!_~?`^hjuDnq2LQRv7;{`2J6*_Z*{K+Vd+hAcm!F<3^ zsBgWRz1mpF4t#BotGjKxIe452(s1h8Ylfg}3-U?D#lYB|@de>;1q;ZIN!G_`1mo3# z2`R<{(_C4|Ih~vZo}f+j%8UN4Htf6nDcWRcbFFS6e*oxbp)nv9hJomxyp877$c5$( zCs!Bkw?`jE@ewU`zQlaMs8_ci(2{>z9y=+uV4ar`L#i9=!mVu(z3TFw!ci~%O0byX zg-y1NUJbA-94(Q3i(#-(G61!p4}VjXjlSOe0TUsp0=~*0=3jyB@EN-0I64-p(tZM7 ztQin3_aS$ol@Uc5&UX|IPSZp+SZ}Q^9P!fz3fN$+)w)ZW#i@+a7EJWw8H&=&q`gK^ zJOVc9W4|Pnp`zc#)#ZcO@4r3!VZTaaf#*Xk@PT_7*t0AEqexl`Wf7R7Ue2fP7kFrG z0>wy^i_+LcQd4}Yfl7l(CERhJ(pZhv#llA-qmv4}>OD_>RXbDxX*2C&KjNnsr{a3Q z6;ziZj)34c3AI%rfsJD;l6W`KvR5Jvlkzw=eq06yppzME$jaEzo+?5R>Bc&9lI&_} z4u-d!RSmUP+wXJ}e09K=;KWyIjKkAMp=~c zcv)^IR2&o_Ju{*xosVOeqUVrn2t30gYrTWNtjl??0vu6f-T}T@N-VHb*F`GIx&wg& zz}xSReAj@=fxD!HMW$`+q9u9D4Uz!!r9R6aT?Jw;fdEBH>4Y;niXv_(mv0wuH?U82 z`5^Wgm&v>`(gu5MUM6HN|9oYoIaw(nu##|T7)GRKfeV+zO^8IZ`KWLcDr0C55o(Az#3*%%NhxvA z^IadV*235PDLi!nizCYXhq*qb1AOd8DR>+H%lwe7+VG??XpvA_LN(*SX4PX_(x<&2jpCN7Gp! zzn6^q*ZhmZ&3_1g`{K%HbNc!uI3JVnj0V3MTOJwUWg3fCm-p1%OQxKahH_yjWr7eq zGTJsw$d4P}*CHv9P;Zz|-zg|vTP`TJEx~x+^&D?HDC|sXe@+E28q_?*ZhyvW;00a- zKbF1Pg~td2-#&2xAK!=0*pdOiHSR#X%6O9hr$6V<^Cu*fYwuS@N>c(o0~x5gyoZmi z2xJ(Zf{$bW)ZG)t^YNcC#t$fj=;is7Zms5doxd8%-aA?nNGWudq?Xi#ITPxyT4r#b1CwsLbttoT%|~~j zcRatCI8u8>GdD;TD#Hb-V{T1hrGQ?2d~oIwS_38C@+8X=2bNmjhegs_goLJjSao?{*dbtv(3WB!&3AFU zwZjtiTAg}W;=wCgE*xhROEpEV=A-+=G7YmgH{`2rb2-ioDGEC=G+T!98)k+yeJ*#F z(Sm%5@U9EpqpmLR3yvt08Lk)P*kfd(){4Ciq3utlKB<^B6U}6qmMo$q4+70I-VzsV zIIZgPkp+EIolvo{%MN2mwRTe?1B+P4OvRMzX+9QsoCCZ%WEY`8hdA%w_g9#y0r^rCS!)Wu4D>E zs<}X#wvX04|jt|3^a<5W`6DX!E%KlSz64(M9zr9Su6&orYX4FwlTO4qa1 z<>#jWus~10{+x?(35;hbXa9WXTp$@X_!w@U%6$vYn@N2*oEYnRwi&uwM?m(TiUCdQ2o`IHa6NQ zL$NLAQgQ9YRhy47#DxKd%>&3HAWT&^09K&V7>e{;DSIn_lz&5~>|IjHk&8ncMiirM zzMJDPK(o4zsNOpur`PgQDott|ZRSE5CNgH4BHT%6lZ>uos>|zK*fdKUudj(`X}4&K zhfuZ-0rN`F0${M-v@ab7%VAahM0+P}8|SQ5mLlboo^Pj=*CuRR!=@a=Dl!*mn$+^p zB?Z$ew&TZXADTiPXsefJv#2#Ap_3(H$cfyh@fRgB=wFBqE1_k_Q->GsbT8p=rA}aX-256g{;1-=w(QfliTY1~& z)_Y;21QnzaNgOLmP+?MG>tu`n=T#rn6nqFi;41$+AOnIR{HbgSqqp~Q!-NQNgUk86 z?VTv)O4>k+pc;3l@?G;Mn^@>LA?2>Mw8?;i-sctl z|6~Q;qhpw6-^agAEJylQ$kFIlpJ?cDH8ZA_amWH25*RZ~wHVMkIVy9oMgN-u@Au-k zqgf%jYAY=DAe!keocG*WMxlF`gg4N=x_l7bYg2mBm~SjV-`w9h#Jik8tz8s`NoQXV#Iy#Dq!Q_ZGf-(o43CHLW!E{OvD+(X&KA8(-DZSK4MX@ zJFUfB_`W{(r=>IY&A0of`{w2D{I1f9IhZ4>gj@J6de?+foZCgglWDO6xfRv(=3@-~!1Pd5Y|kmY0S{-HHOCCYJkW21TY;M} zOrrD@QaY`X4_~);8>04p0shF?mXT$L!>fF=&+p)LL7Gv?u>y{MQ+e*F=gC|r#e%PElG#m&A+PZiTqi!p14sI zD|5B~3g!@Neq7l{Gjk}XLy?A*Z0h2ex7_QbIVNAb*uZ_uoCwOz&eoAV}vmos4G#pmfJI37u?9B~%_|qK)E=2MMDjE@tGm zVNnfmTyLZ4>Hh{<+6#4Ko0N-MI|^KY)tTg3M6nOgNycj8>2{;X`MqC)#Z4>!UtU7w z`#m%%>&3^-2f-q)oyjPHnE4I@fVB&=2a0iCY+%?I4B!S(ywVDKur-j`HAh?WzF5m@ zuWmERwM;Dw5#wz+B&P-A%V_u2uxg~gT(c>oEQSYyGeM~|nvYLv^?5g1;OZrBd7zfW zX{N1=oUkrfmJS%={ca;Ca5FsLpUO}osd`OuZ`-*D7ErNZ=N=PIiCgW2izq3q`Ctwk z>gTIN3~%kp#OT(cnbslisE`$FZg9-&O;s(5STPfuj8YlaH7~2-h^uThKBdrB2r#`W6*AxgmTA0QeJG?-R>fae#=-EDJuVjC z%s4i*ainl>OJN)`kKBY|FweGvX0>nD{6e8zCgu`ehp!mNB|MReC+LpP7N*17w8pG} zS`!&cD(%c#?i+|s4GpliPufK8@NX?}soJRiKOg)%o#uBr_E0~{A9lSo6wdMs>_FE;lN%7D69jZ$YW6KU5bkd)#QrP4?%bX_La5oxAa z0IV?lTN**_x|Hj&gUit-ni5iyw3#IZI-FUH)`pl7Uo%1n(KZfh>0s|I@+!H?Vn=~> z9SGc5U0&z$COAxd%sg zrSMcmv7`iVPp(oBLUUr30-)Ovg}hhbhi>hp98p9c!XG#H3;rtumkp*EwQP=df7L&s{9=L8Wmhrg-p2Eon6bm&-m9})ay6W91KpNG^%Gzvz6Eq|A8iJ!Lod2X zc+@UwKgC_hdL{UXU9?;?p^zDqC-8Brk;M55NWmccbN(k93M0>AneuE&T6mHk$^J0z zv86_LZ`Yt~HV+QUB=hH29a7+}PMJiLF6KH!o>~a6cEU0ZY@H-=ZCj}7kANO_8|`CGj^GUyXIwi?>Nr~{Z^)}DTJnZm>nZhy;fcu-oU^p=!W_76EOIxY!e{1?Dp;NZIT4iw_-I32_?d?Ae1qw z8sD;Dz;wCl@}6|P_Nw1G64;Vv)&+DR+UoMYZ3I>&38(lhb53!>HiV~}2i}f=y1Lgz zw$2L%m>55RN_c@Sk41LwoBY%Kb4qs3N-d)h@5beP?P-hjFFpaG*Yez#zYCa&I+agR zw_n?6GY^_nIBuLF@L(FK6x{+E4_22CwEMslgo_ms1F<|c|H7O800-c&)}w}5i%eyS zpt!vAedvC*s&+O|wa9Vvr|2kTL8hTFqW8`Sq;%Wz)80=Bjf&iH9@_B2{f@2SGmk9X ze*s0RSe=LqHV?cLxM#(91>Rk=+P5vLuIR8H`d$HfPTgIaf7~udYM%a$7unF--kZ5t z#w-;&rD&e6g3Bf@7TRfe?r<*tq=Yr_x&_ki5RQ5u?R+eKt<}*F&^}BjEDAU&^*c;t zqsYWKz375P7QL#20`sn&Nb6N*S7jI!wfB~%pH|d|NLK&%cyHT~AQPnyvJ?U2Cl;&f za!PqR%HTX5FOMNYv@;eOdR}TK!|;9=o;q$-LNAwQ z;VIoco=L71iC3l8QqZ@N_%B3!ouMZ>S=&w5hPN83T`P7yx~p!#N6#$zr>Nyj9dn_X zft9dX#5hG3)6j-7J#JQAK1dcnD+>alv+mXABZwFNTba1}Zk0dA_%+;0kd62b>wKTW zf1)UL?;0>hf%@6bV?@~2T|LW|DmL|ScoVbkuO`p5j} zU6?&a0lP0@4N_ElGDnKZ+w*NOr@A`>16?_f{Q-__+~1L;)& z^iq%iz9?ycME3K2Ttz@NZEaG7*HyzD&D==m#gU-etfpK*uE)rKv zS?Xa##)CAXDC~huFv1}Dx=Y9PU;XI#^+BMIdc|A9U$oD8US>kpcDFh5gctpD==z zr(Q?qG}YM*KjdqgnbbccVJ@RodT=g_k`N-3R+b-8*K#ZWe)AxIy7{n3a($jZ$-kKd z{`D;=Z&a=51jpQY8B0=*R9uST)1s*M>i@Pd!I-1#5)u(BX}b{LnqP+ZCCvW>&3J!M zSj_Lp-?UFrVgAzXN%wBfadLy?qpyH}!LzgMX&B9n4%Fv={ zMZm4Jl<4xAg{(dy@Tzi)?9Ze#w>h(Mq$&ADEf^nATw7hxu?_-C-s)Q6x(pd~X048EESm0XXcevp z8*NbnntK*x6kHjnO~hO7pjps)0*;OS!`vt`-Z*`t1cg3MmIga^zkx1XdUVR+kp%{!SjnMQ4)Z& zaMEj$j1u0Nl$D#x+3r4{VfwI-DG};&xo^LG+ZOh&}9!=Fl!g9leh2-1Bc8&jeB%m&DA_Y6Va4lmpFfHTH zN{x3ayy)In&lfiAB3p3^keu$U+vt5num8e@36vl~|D0U;Vd8Wi<@d)jBMxa7YJ#?$yS$7SP^rg`*`YgC>mmINi84=3o}can>J95rjbb5aYGsZZxvhs zI=Vr}Jzv>7qonbMrknBh>%h$%rt zjbhR}=%j+H4rXtldUg5qd9fjXT{#DBZ$2q7n9YJDPD!=ZCj_YBHi(lbf#nOo6N|)J z*L5PaRjj4NryycpV9R4=M3I8KUEC%2FpN{g|1dFk-!HxCe1(5eq~{(Ffs4OO!m6=h z6h_GjB3{=_-ib7Uvuk(U{OakxhL*`Y*l3F?%F(7x|9{yTAq8tpr)%V$sD>BI#_ zoWik*v}8x7Vh5vO^g4LQpkR!8;k)I4o3%J`Y{-Uzjl!5xH#Cq>jWH}dE;jUK!6>zh zuGS}cWg{{h@sqQW2vY4;-qP4;TikmJC3g)e9;MMvok`T0;z^K^Oo|F`&BTh=e!D71 z=#G|@V=lBhiJPTeU&D(c^7!dIug9EQYR^A`%St`FATm zwCoD0B&Q9vXfH@SB26Kmk4jYlY${2xt!UH%pKBcwR;_C=TH^?7b)XXCC^0l1vIv{s zPpo~(V>oLvIqI6aTd)uPWTEr^Na633l8#fTGVkWWO5B#6bxRW}ey>tUqXdJ@I+2pP zUIVT&ae9tAR#lvwfSzkbciCCrTRN`%j>GNw>4>+Ua>HPalJHx#HCimqq&yhcPz$5a z!EEiiVi2J&--NXk>>iyl7eu5woLSju^T{ib|yC`A=AK^yBsikQsiAL-ro!k0>c$uDLN0&JgN# zM`IHvbXrxH_htSacWJCCUh#aiI$h>@rggAMr;nXROM8AXhNSk2W?o~N03=#Ur^9?i z{t}v3uoL>QF>}|H@XY^@JO&_2MWjj7o@V^ay(BIUA+Z!3UoMSeB3qUUt$CooMdJOk z53q>3@(1io`e|QZ{)mGk5$llf@it9_4%M35ex{LRoxU|1~Gno&ZpA{E?fgl<}l9IV%?)thfu>-B}`csy^h zwo_t?Y86TqW)z%{Gjl&woZVFId{p9_@7zAm%db{@P8|-hJ}^>7*SgP1X}MNYPAKQr zrcp*5Ryx;B^!SE;{j|Fv(s}ELo!-Ezy`q`wR=GILG$o1pHr#H66VXa~4=jamT8jx5}nU$g+7aa|!rGP$E1fj-b@u z_bHBkA%yDy&8b{PPs{XY(Ti{sOs<7RZuwt)n*a5JDs-9^FO==5S{Gn5L6ymPq7fiy zkDxNvu}aJi>tjwyJioT%>tIT4r%YhN)Go;$-xrPl`QYDqZ7y)}?`~l?2()a!EJ7vE zS2+0t^xn^i!&S^^d5$Z*VmzjF&>KDWxO^(@`Gs9odqp#ycoL>b98pqo3!;++_aF7x z4;6YHL636^9e`LK=LFOF;NTU_d;r6QY+`|47sLm0b!%s@th_P(oi|5r);!C9zNoTO zzGf#>3eA`1ji#W%Z*pfOj*DEd0gDQI&xG|{BI;$Vz)hFM8I#W6VK%ZhAO)=v-t@n2K3;_X!PoA%fEVrg#(6`Rh@Yxr=4dUq zXQH$gsKTLC^LOA{deZ&_s;)2U8rR1H*OQ*#rMZnGX>O-e$rh%$w`_1(nz$YQ>j+IO zm}9Bov*zsZQ)>JXGiwqAo?Q-q929d8s&@M`xz0^yil+>U;+OO7Z%HvnsT}p`a|pFp zw2<10EaQ@5_sCd>*t$(4b#?h5Qa|yG`?7$aXo0(Z2-A^rn343a1B%UrRywkd1eY?~ z$5x8Xlwq`DGn)pPO~PeeUlq9CVnEjB{~+Oh_4K@tfufu7xnQbRCtc;u0NJCf&U*y$ zxCkHZ`K2IIx;~T*rEw&Pn=>c#o_PAf&GQ2Un_wvOKuo&IUuV|Z@N!6M9fu0lOi3fs zATda@WsBzhvZv=hjNSOo3*Km?ftl~n(NlT)MVB&9M`nq3DG5MyK7!X%?oHO>vr8nr z7gsiA?F>}TI9Z2tG)c@{D$kSoYHO>+3loa8&z@5rL@-0U0lAVYvZT4i^NG>J{6F%? zmn9vFVm~Tvr8Fc!uQLX&FX`a<+D-~k!&smkX)Mth33M~I>pjRT0A%&yHB$hJmj%h? zb+gK!Zrj5s0SS@GI87yNdNGG_D}M-)mZDOvQm=YZ%2^y+&e)CQKjKst zZXrH~MdX1Au(r?pNuC`*)^C(tS+olIneEhsHnQ~X8ecbXW;H(3C@F_O(<>_o$ovCF z-H$^sY6%iR*+Csc_Tv>G|DsI2fXe~SZ}b2Q2ted869cMUy3v?YBV!2x{b6r-^KIFm z@EYnVpk4eG{sBsBUckln=H*F_5H-|uWUuWsOq>c)bix0;R~zkFl5&d*&n}6g*?iUo zbOEa_?~!w!rYs9JMcpKUh&6rkLUs8dIseKZA`0>fZwlxN#DQyg2SD8NdD&G3^`fQ7 zzwXGjeC0idKT=E^Y17PELosdUJB`C!3vyZU*;gp}f5z~W9G$|Mc1uOXs9 zoWNysY_VkXfwEYs%m$QlgL9g8c&%<7vNN*pd4Ad=$D?7OP9n#Y0#_9$G3V(CJc?AX zEZxo!8ms)f2O{)ZVlBav&O82Hu?!oHkB+=dm3h%B2y;B<3uGwguqG`8OjA5(os+sRNi*+0;O0I4`zI#%HrNKK88cEl+rZoA*gbcF6+f; zp8o@6P5w{>yxS+?&Padn#~e9Ej`sY*RjR$BnbI-~WTfj?`*|sSk)X9|?eyw+!EOOA z!&^?1I{5{QB#%-`-YV6S;j94~C9BJa^$l$9Ari+^FQ*UlPx8+%41-CW8jI`T70txu zLV1hGQTmh5L)>36mNPO1{C@u3 zYBz512Rv{{Fuz8rDNGkkz<+;7ve7-*u<9+yI_uFGNz-nrY=W)ss+k?F)KSP|iUL?V zJ8}-{K=R|7!q3iHlXIn6U}o-MSIu0>6CK$wfQU*TR|bqn5xwNSy8QH9$+>|UHU5Sw zO5_0HZAeW;_sv9#+Uvl2OY9VfIdL?!cET+O+;&p9|JX*|LxFEBfmQx@G%Ly(Lce%V z==Cc91l|V(8TFEOVVeJ^4M*T@$kzLcc8Ii#MXE%TrYaA-SgQLQA;PT^+-)rO2}&O! z7yMHsuIfmo_mQh-7eg+SX0}oZ6I>y*`BLnaG0JSKj(YPq{Zfg&J}>f@cj$LXM=q)F zuOlujm_XNRoRQe0Wxpfh)8$}1N>_7se56L3!5%!%Pn+&8v$j*hMhTVi zB+@77$+~jIj9eksZpxVvCb5olwygHhD_0z$E2fS8Nnry?NqNl46hc~40h<|>Wu(}*47D+I{;w|Y*@j_J9Lt2_ zLkvVLahcHBan%A-B9;W9F-c3;F1~IcVoB3}0V(0D)thhg&+y`a3AV4H_F^z_z#+kks1z z7HPf%5y75G_y>UCh2sa57C^6fQop%djy??{ml{e)aK3LoEqcXF>tK`49t*8cdwx+a zQ+q`Vp;;v3q&^?+%!K|6K>v6m0|Nu>isxEylETarFiuyV5uj8GW3yO3MH}m`;v|U@ zM=Eig=~KH=4FEdaI?I`{lzJJCTNw#ow~JT=k~A9ooHx|8P53i%ISk@D427^}Sq^hWU$3`LbBVxtNrdKW zbE=7+J3`lrh?@zm(l`l>tC^p|r8?H(E<|{h#gDEZ}Jn<4}=>9}^w{BJ{rpW7jV1g5#Yii?QKq@3g6} zr2lj$Jfv&T8V$2%YRNp#6L0_M9ks98aTpuuwVnjS?Ibi;GEPkp)zkVevnJ8Yx)G14 z(K@sEYf598VNn=qEQH&mfU+VALL38rmAYe2U#vN$l-%l6WI;$NV3^PJe~S0{MCA+f zvb-cULu3KdS}!Z`|3x{&VB4jK*sMjItOfMRXd;j`6V%@K5ff?ap?+5@rp1}92rtA-8J4Y0im0zAX&&1BTX)T zr+vjViCLnSrL1di;RSK0v+MuQ-k0^tZC&a9m4csSz~$_DlWAB0$D0QFA?P%^9~-iD z;s}aNlLy&JT8U-ZzDeMyCCko$iy#-W25Xjp{DP{#(7)vFwa8OdWO3Let5~c- ziFH(UHp$JszPuRyyY+NzbHK(yJRqi-al0`&dXOjcf+X(|!fhmmX zhz8CU7>*b86c7qVSODhfaxf+6D4327E%3IAWOS@L8_c@TqkU;Y=~KsLY*;phuIeo) zw4Y#gn&e+L#zpCPz8lJ6iHqird9 zwiaT#V=2bmriKNPj7#CK;b>Bk61-hYo=+$D!Ek{cu^-LknK^AobZen63nZBz@yxlJG!JWNC9NB!#gWjr|5Y4TgWG$eEag&xje1v7)3lJQovd+P(r$f zeRG|4IB%E|Y&56DHlF~sGIFl|RPOS~6JA_-c}+jHx~G?xdA56cWsno&DhR=>(v0@5 zm1{!Aam>ihDB8CZ<@)C2y2Z;26$>ZA?RHSE*U468-fF+uwqc>OYFHIzlA!eZyC^B2 zv=2$H08R^x7(U-KjQL&jZxovCi&U`KQND_Yv}CI&%q1fx;@GN8;f9fLZTd01WGdxX zQ4^^Rr!ahv`T!ip)|3{3j9n?LD%bT!=>oCxn`A+Z#`thCKzW;vTE5;UR%weetJB<# zB0oTL`*4W9JAvmsAO62FLNgTv#LI_}4w2y%l%-h>+uIlh-1Qebuxo@A_(2@duulvW zNMYJ#BvhhTBYn{{{J`Z@Z(Ftp9)!=w)1>WcV)Mh^s^;(eBco>L1V^Z_S|cx66)Pj! zb6sZBM2ktLypmY6Rj!sB`mDt?L0_`>qh#!7H`>%`8{_#FJo< z+}w+Ct$3_FVduDQhU@I`nlpjuIF>%Pxv!fB;WEaS7(y??^Ea*rq> zwDu?oTpOo66@o0(@2Demc6cK~e>Q<+_M zEMAm2DsV|KEJWu5g~2cc9`3~L`kr}r1NHJwheJg6nu}Z}A-%arlp#CzrLgLoeIR%j zg0G#GEj^-ShsUww2A&No>sk0&rtpX+uIBe&-7Z?|bp?*iX`OpS$>xsTh{e%X(0ZFF ztj2uZwH%fnQL>wvM})Ifgt~~rl0u@nHHEXo>s+oL<*s8Dw8*GrXrQ*6h8Hp66?VX> zUd@V<5(_#-84+=!9;0Eq9-iQ`0=W!}c}=fOKSaI6U>#Ju_uZUV}#RzBDrJ7s`INKhpr54{QN6B5DM6Z_LPdLunM_dl^v)Z9Zebk=Me*I;C;Yevfy)EdeM0}P8A2KB4ZUxZ@^Drc1d_V z&IXKEYnTy|+pIxyY~6kZElKGoh(i zn45bEykkaKXxDYCnOM;Q-k)O&T*&qWkpi1R{-4x?Xa0HJ>|99PdX!`X!IxD;s@j$7 zBT`S7786wxhd9!+5t@}liDRFvo*iDJsHo5tp2W7$gArM0vBGn~>?HpNgjW<@P7-t0 z%8iOCr#&y=l-M}e`&+W|0OPJJv>ltQdU-%<>Kwed+9{>7oK=MpFJghh8breZ+${`K z05uX*m|;Iouk0Pxa1kRCVT-jY__4}b61BJJ@btMAEs;2^iiSF&&q9o5TtFNg)5>LY zB=w27-DOT(j7d9ZOEK}Zuj5d9u>1?ezT}8rq z;_-u=mLz5|R}TV2(!@vj5$cC0hSmF%M=NA|B66to(4Tn_%eRJkiqeSiO)}5itcn3A zxuau34r2LsU`>tPm2@jyE!LK1Rg5)8DS<*ES*$7FcZ3t>dg&cxx{h?=bS&FR0L8>3 zj%J>3SLmpr{njTcYL|1?h*8u{ZI=LH^{$W(ODZcHH(9P?*l@;!&{w(hh3X*I9?c5p zhdtkQ&l^Tu-ZlV6Z^lJY`_%Lhv8s=&xbMah%>jypjxYWA0H_rM%BbL-tFEnfN~vMM zriGxUQU(F`N?WucDakztYi7;o=eo=x_E5VJV;cm;*9cZIujZsE8V?qZW5$b3I^X=sxxP&K~-d}W8%#N9IHQjw$| z*G+@_(!r9`cGJiXZv^vsB_c@Az|0J6k=wl*6ZbveqrT0muk3XTR^5o|j?h-6A^KbO zlBC3Ec@YO>!|knewC-v!OOGf4qBQ$1qBeyG`$NE=QZhr1;hnU}&7+Z#IUt1Q?n$kq zq#k-vR@ADgTEaP*3Zjtpx`%6*E>}n=DV~-Q(`GGf5{7nrzq zAy-UTRbK9i{3SWP1+w}w2u7z+(MG;Hc`&{5GE_~-{@E~2kp5~c*I9WxHGSHIpir(N z?c}?eZ+QFLlKMH+h?_!hiG?DQFW{e0KyLDA(;afty{^_x>!nAO(AsE9PT*UW)8B@@ z-uzEPI;4BGyT`Y7uUffprK_|Etjf^#wpYhvqd|+zW}kFL$m~>$rC>r!;$pzcV8DIKNagoYGfU1Eu;)*&CH8#C zS53p-C(tMND)`6YGseUt*ZOFiI<#{-cGlnah1u{q?h-%d(k8NUon{5n|=BSumJ1ncU|4NXw-?dIf* z(#-&OkEBpRNgh%K^I3%vi>X++j&H+wLPndAIXk=#ZN%lm2;-|Ka|a7~LARR%df(5` zyDJZYQCn|Jmn#r4Ry(C6LCs1k(SZ{=+N#Qs<7>)7Yba)i*X#(wBE~egVSMZ4zveVj z4v*l0b<=Po?qb0_yJ=*Hx8%Q2cSFytFLcN{Z5jL<&KR=Rdehi;fG`wpPH}rj(c^ap(1on0k!^v{ zh;b}+j0dAZQUn^kJLs`}xDs=YIPtOegI;L#VSxKq@-5X^!`?1Cpx@sY8;+6YV52(ZXoxF5`e`@#;$9_>{be}AN}IT zN5|*SU3hDB{M~criO2tZHpyK5(YbdnT|EAUnOO}GkH4R+#}6+3;{1^r_0u!wUwi3{ z3#=4gIQcDzlSWN{A9MhyVVzd623GV8_i1s+)^`>rSjwOj6N2Eo4`*v$Hwx3O(a0gp z9Wj>+ZC5Kt2fiQsHXu-u5?Jff?p3nG^RM#y#fxvfedhSBA6z^ zUVG_3zjyvEN|h9xGAE^L(Rm#?%J9kFAzVp_KW5LwuA9AX>DSJ$^hz>TYG0wOthv$r zZ$oFvhLe~x!`%E!kmN+3W8|YOl89uniZR>1exjS7)hM2W za>iPWgg@~g|jm*R%C6_JoJgk8GTp~`BC6*hEc5?UYohJfCF8z!$}1f&)jrp177WvggTRT_%R-bfo!QCPq=nSUQDuQdtz+MyrdK2uum;Vc za0eZhCUtAU+Y6C`XwgY*=Cek0z&ajd;T-78m-IwJ4g#*Gq$S2ZXpNpQ6AOaShy*^- zVALPXN@V+^flY7Tp{%$;nZ=7L9r{XH`5HHA*TPozDGI849DbGqksXOo9zBrED_^z zL@2ZIO7_We3#vGzp*G7L_$h?llyl&ZbBHanHQ@_nY)!&ZLZA(?DNsw>B!2}G=><{yMpZ&51vo+!(FIB_4;$i6zXe?v2+Pw=0G8gV?6CLZ1u2Bs;9) z@Z0*hCUf4d#D=ljfT5*X6$4&@--Tj5;#yAATbtzTSSR-bR1MK{oN29E)FwIKUbXmT zY2ZlBv7Gpdw-up;`R%rqQT3sC$26%Ed>^wEfVp9F*^>aE|GE4-D(L7`)k#=2<=GZS zNq%zA9lhJCQ*|1-`)jfBFm)Ow^l1)n;!%df~cv}eNMTQO7L_pCS{V_q7ix6DA=FgMCH2^e3)ncteZ z)y|oC(2|5&Ri9xxNx-n1b9Q(`p$u~F&|o?S^C_AD-%ooU-kx3^fngsFioY=o^}3NY z{yNk=cCI|lh_E^E1k(ze!`rQIc6g1JCxjD5G_WzE_eJIsBYH`N#=9s?g7lqw>+WC* znZZHl(qWt9S}W8H^_Vn`k6H7Sl7c(AS(PzP>P3!~@uxq{@Fpe$LpaE@B;NQdR26?? zWH!_duS3yzgULs!$Hz`DWTE0wU{z3}KYp9IfRo~mAE)IV4UbFe1l^guFjB@dG=#y{ z%zD22h1sC?+W=FymS$B9LKT`bDGY4<_5FeHR&v5me}yMJoB;-a?&rcFm zz={75&x6!qX#RZ{KbaF^J26@WG&OcRdkR($w53@U15Nmj(h;*t`w}cJli&-0mL0xg zpiM6)Vu$(uR}d07M&ScGYym@j*4-H0(>Mf>9MjG=O|}s!@nt^=;yz`aJuV zj=9k$ZS2G0JaUjC<~jjl^8Z>Jw|b3l&c7h$3l7BEhT*!f%uT zY!dfFVgTiBdN;`ctQzn_Pu0kiHh%5?u=Z&pz>YC^?1K~G;x5Xr5c;;&((8)Rrv`ca zEX}GIeVhtSTw+zgzjyS3RSj7l)Ihsq*xjk=N9LOk(TwqY^62Fe9Zi3W>i)L}C?@^N zJ16+B1B$s>6+@AP1~Q(v1}GBB9X&IvuM3K03tu2{)OuKMubFfJ!T{L14&uNZlsfOd?{^_e;I=fYVz>z|V^^~wx!zZgj#M^B~X)GQQs;Hv|rmkRMEPPKMzdp1Ziq4R+81TYQZu$ zs}iJX-{ArEERd!gO0Zaf9n!MHYeE|cjg;$JIkRF(oQ1Tax@icZT(2;WzGf9mLK|*? ze_?tRGHstvKTLfIS1JQkeMv(F2J?oGg5D?pb&|a>xl{QJ5h^DvS(OA7*`(n$%y;yU zzjc~nMJ!2@+Psc6F3gs$d{S*3(rM_*@#o2x*=VNX?MIYn;LL4;CSpQaY|rSk3(_p< zx{{2U{baw;`8;lWj#;)lPBvmi^pMqr;a0Pa-04m`q+!;tnmJ)usf4w;<*M2y$;6Y> zF*o;;?J2nHahi8P#U2mCXuj?0-nL+SW~bR(F6CBYvBRar@W8U*?gR~KX046Afiun= zkJ)%5`ipS8g*o_!ug=>b{{dSFy$cbSp8~H<<7`T*Y8JU&bmWCmXyf8zTGF}su>M6| zu3OeQZrJsEb~e~>_f>DRj^hxQZ0z>XG|tM-=4b;ifqE@dT^ZktT0nC^nah7;mF>NrqCx_96}*QOuC;eJxx>;>jQLlnZD z#199dj(GkhEDFOVaVR?IARESfb?6n9AdPQ2YH+0jt5PBkT&okaKfM0M5|X1+VECE7 z|LOsoK=syVXfZTs7)69rt2R@;LE~lt27dpY$=3%200Kls4tATvEQ;MIlwcxU6kJ+RRvc4L6G*p_Bh3_TutzNUedK@`fd+6PT! zhu7F;wd9T#Ry%-5NqB>TqnY9MJK+48cP{c#v-{(*Y^beDpTXHb1<)BOKNp@A-y+9Iw(=D>K?=dGv8LDm? zt`L76B{1TA9+5<8vd}V?;Bo#;%V8QM?6;4ElltD0P_FL ze-G?=M~mW?786PP+uBd#bZUKF1nceIWOEp`Pa!BmYNJ+FQBb>MA;;Q=12fNTEZ?e0 zM8ndX?duvkW5Qe`v^ry{$4Wv`rLQKpY>pG|NTMQ}GD=R&WIX?BoqXJI<`-!-DCh)| zvTW#T@uJBl+hN<27%QusMRTZ!RM}L`TWe^!3Y{p9J&S2Hv~)U3g>IqHQj4-%m@x_Q zSg4V=loLja_sNL}Ir4Y6IvE|tCqZnZZF-dYv;=Df>zEy0Lr&p&K@uH*Y zbsOjcq5Hp1gVmrY+d_x37YUV-+Th^&0+bOOO;Ty20Xfl--n>!y$0~Swq2wqrmalO^ zpr1WAK6sW&7uJzuwaF@YFv`(fRZF=^bXIPnCFhP&4`b!ph!y>Dh`%RhCgc;?3gcC% zMTxz!($L)dO{(ngG#qnnj{08+TR2+vVlzScn)zm-^FN;meNWIn`UNifmL9E)Z~KpG3=dlfFlNrJF5&8rkc2p z&ukp7#8E-epaOVic+)(B>4(^g8iJj$m-9D(1I)j}f*A)WlqoN2>^SRFUP@RGJk)~q zD8T~Xmo~}AP3`rrCINWIn}V&x%vmH$8l|vmMVpx6Hx8$cm)6^Kp#wp6ufn=pY-r+X z_XL~xP{ygx1J7GMoI5Gr5dZcO9-9C7TN)B~FNuDeUMcq^?bRWw#l1%Cv;q zTWo0JX|NaQA>tDY)+Xo4JebOP(?5@Wn^rJ##%ENTSfj1eGB_B+$ zP9CL3nxr}HSCc;<%rhzK2iW0jX;#Ic6d|XKX`6V?*c0Y#u?A&!cwIavH7`$@P2h)$ zh-?t}ksaP>Z`^>^b_->V(jWsU@{?Mol5C_A6yy7gO?ZW-9wm_r(^>IrhJhehHn{m~ z7KX0>rHU6;&8-IH9WLFv6SKpmB2a;tiCaZvQ_k3R^5vUK_PFOe0rA&>x(=J`8Xi0E znLYGq@~kWSJiw>}jFiroBq@dw3j)cdvhgOlKGU+~xdkxF4sYl;K<6%SXzWM&_yDE# zTdklL@5&YehE^#y>Ggk~d|h=1LXDtU#nM_N zz|@V*3|)dh;P=9{7^(r(&s&Q4N-*HG(NVo}>+ z#UohO{9Mk{onBq*w$D*vpU#_ltBq1)uI=I@MZ`!fu;Nf1@Uon5oxr;Z5^&|F6*NR~ ztNb1>($qRUoT~0sznrfm2}s~-%Eji)w}m~}TX5m3m9GIyhf5E8s$frL&w}DTrKpT$ zj9m%_6~2Lt9DBu8g00T~R#w2^%gL>B0p-B-djhCc9xIDnS9>;QkNyC9BT3qte2YvK zQthbGBo@UuDh_GVYr0gr(k0c=?i4KN(k6yPL!}Ca02wm8SRP)^{&{UWT-xLj_0~41 zgCfSIPxH+5bf4}%(+6mQ?L#^w|2SV|=Rx+D%pq_w{OvkJ zrz2@#FnwwBFf9YQu-7|qCB}@DQxJYkYpAWnV}IH4R{1>+wb)j%2tIY8Zgvx_!~^l z#J?3+2GV5OV{ecE-jw9Nf5I_{IvHM2(!`6=AKqyt$UkExYnUX^6vgt*q8Bf3!6mL- zT@kEt5r0Fm?y8pY<-_ytR|Pb+kcl(r8o`N|W&ZokDVo|vWscj+s4#7OxH?5tct*>{ za`$&v+V*;=lx*FBhrdyA+slxtB--7c0NI-X{sKt?aVDw&jHw!lUf?$v?w>;_y5SBL z(0jC#zps?D1RzvZD?)OL_?aOfQwUgw!hT|He;MIuPj})fTo6O6$+M^obRc|9UaJ)@ z=Bun7w~X7QRz)$b;sj`R6^Du=b`!9+A?frCYr;_QP+6nb0AT>O9e=|$djcDN^9VT> zUf1;^sA?N23yspt%80%ajKnwrD}{{VCBuaRS`aKv%VM}n0O6}=@noDhH{lY zhD!(e{I8~Ep9*T@FD!JVh;lS;oe?BgXo4~Zn5=jUjR2sM|Wf}P> zB29M3wTmPzm94K!vqnj6Q%kb48>o5@NP>qY<3!#s=-#*dm4t0 z_X72Pj8xpE}*4EARV0iPF@DL~}#L-!Yq{_DI_`>;i zF*Mc~%|dynYJMGHuq*DEDLDN;jJj@7#408^`&dw7vo_9L#ZY8KGa+o_mb@B@{P`2R zVF2eRr#95e3Oz;)Nl;J|Pvp-)p_Y8|`2}ZVXNb}A_kN@SH?oFgb&_W|OX=c)5_q+0;JO#@dWI zNsvBA8b^bV;pEml96o+Y9}-f``ndWQ51`&8@z7q2Nn7o*!AQfrHRGQej`GrE8eZ>? zaqzG6(GF@AlxzmA2^{e$n_|F(31F*HgSLNW{iU5lS+{{ z9CS4dI+=V;jA;zLIZNC>JW4K!6Q>Xxpi(JGs@h?R`dmJ&IZ$MV*`$ndSHOza-6GDr zx||=|!qj5*U)n^eOQu-MMX;yjt)@N*1aRxiO*c`T`~66=jJb9tahT-KdwedtcqFlK zn@`=sPj~Cm6-6LvhKCFePuNuAN&U--53)vX_bF(+&?qG2_LeM?_o5VqB72i(_cCsjy=djKy z5S!7)5#1{er?L{ozxE_lq8c%y3>WE@U>h{G8y&Fde(SvYj9gJ?kcWw_>eE{bAQlpq zC^VJzOD0)6hJK78TOrqzwN2aEqR@iuEJ9957WkE`RGHX0FX8rQ;n}!YL37O3l9m^a z!IF7j=_-gZ@b98+XPa9yJXPJ@6*JoXER+o_SNuqrU60yNL4l}0eIPwyoeI)Q#lr|} zVOPYX?qc0OCb>#%%9n<5-1wb&q+zHzj^7w!-RU@>I$u35J5stC3Uck|_~(#!Y^$_=!c>1~BpKx=eOF;l+e zVP_X!&l&{GCubSl#Kqxej~hjl6;jFME)-v@D*dEUk*+u%v$Ym(hR16bhObJp+7-Nccv$?)Sz=LyQ`bVVx8uvGJ86U+NT z%q2M@L9^t``FitzD=rPah2Ta1nW<2y;Anydqo=Z44+QkngECA*#CITK35V5&eP@zo zZ;hT`L8%;qk{!OS@WOn0**=_pq@(6av2S^zL-gcBt_VVJeW zRvwFMX-u8cY&LM%AW_}R-xElUZ{d*@;&!YTxMM=$XG3gEII2gv{^whx*ZFUG!z^a! zt*?lABy}>)sdv}lHkjEC2mCJg+w~5P3hF?}K4G@#6nfL=fjSKsj##;U3=Pdn-O<=5 z<=%9ZNZRq#vGT|m`6t0{kTf%8{|+wC2BkVucR69oz(N*MeUXnOF)={n=8lF?e5p2V zi>pLl#*~U>7%_FLMCF~L^qLwS38}ZI+hNB6jl>W5d~O(1OVrvx^I`LMV36`mSST0z z)f~$q>qKcVq`r`Zw9-O_HHWdB!pWGD_f0mW`KubFnJt3Wkk}fL{`uG5y80XY8mP8P8nA2)UNvAhJS{H@>QuLv1OX*YrcA_V6~ zkoQ}3ybE%e7GRO(9cnv%CYz=IUXvo!JTrPNXh-1dCJ%`S(dtyrd^28xl}bi2H<6>0Nz!T{I$0Izg18-soJ55 z#H50SI>=8x8fa^qi!ccWpMS?#p|H}FN#kO{_16c+YBg8Zrrv7PwEyBBr_)eHm8~uX zBe=w8bGdejSL@Y?0r}0jcO`BBhel_z6&(<|e&7r5<;_nIu zCO@G!SVf_0y9?(FhjzOhnU%PkB}RHd5Q=-XtVP5Z;`h5;EzKTvOWny9$l^I;Hc;bN zBd1|>y`TT%@(s9|j7>8LFeM3Mm*(jmL(k*e>*L7F-P0uh*Fe-~Iu^u=_S;Y_T*l1D z;r!6rt>3WGw^^K>=!x+3*T@x&?Xg41> zE4uw{#hGBakHbR`7_k@xE?=jizmFQ*pPwRA>2$n1u9iklwm$$D;<+9ADX*tqTXf$q zuBjl?^%LK3uYQd4>tkCI2}Vy_1UcNkC-XhJJcLXkCR2QS^nW5x{O+HFgLlljTkY?> zzS3cUHVzkha=kOA48V)OUA(VpJ|1Kr7B-E7Mh%3D>WzPB!z47D`-kJwBZXj(UdltA z#to*Qh~qpYB&>laJ$p|Ua-e)y(T6vWVA~SxAk*%Ru+Qx1=-eQgFelTwo#WoHzEam& zPP2favdIxTYh@|9&dOKF%M-9p*qw62tGG&5tCrTaOxo-aRDJfH2gd>vDywk)*^@aEggiJ~<1gkFG+|B*(ycgz57jPpiS6*KD`1%}fkA@Gb}E zz4^I2Yi+{xtuQNO_zQv7kPvtdSU!dkK{nT-k*+yI&S2$y#IL+SWkVCuj*zil zYit@)){h2%aR7<7<SHNUJSBit=ZoK%HCgCK3j1OJV$SomuN zgQSV*>@u+PS%uX+JEA#^Y^yy;X1n$$;{(5;LnZg0peE!j%3u~O><&69K@Fs06$x#@ zU!{4qVAvJQ%Js8kQ^oQ!!mNSZ!Mx0Dk>-MU*9s;}U~Oh17@U%7LFW5lJd5SvBp`w; zOM`p9JQT$s=@MdxayZcN@Jm_4Np(eUR>A@<@pC?+rOP>-lWSuw!s1Pay0`}TQ}zlz zCWN+qCnY7EqI{G9>b7ZHe4Lga_qE31;B1;3F897}h+U^Ph#dUAM%f$%HySUF^1 zu)qL^!G8u=+%jMmmzXDkhGJ0*Hv%lN2Lqt94Z`vL#Kp-#&*A1f4p7L_m?_LmsT43& z3?~Y(eM#m>IIZAeP$Lg?XD)&$u8g$){y{RXh_(s1g-IxuWRJDg=xmqup4fk)CDKNx zw?jLq_x=+CpnJd}kzT=n(U{>t#aN!mI{MQ!Ob(H>X#*R%<+k&*J*!-$NV@dFy?i#nZBY6 zJ)On>@^;tusA7+6zwGS2M}obB*!tXQC=^MIfTSV38Ax11Jw$6E9fXX(!1neQGmnnK zsX2?LF>cRJ%ghyT*gtISyV^LBi4GsqXRA5ID`X5?uwk%(K8NN@B5a0Wh%{@kaT~ORdpLD!Gl3L#@Nc{!e0E)S zoXez*Hgb?w-@HHOvB|IU3&qqs0$i|FWkxU_ zpwW#5lT@z8pP9uHJ_1Cg`Sr-+B?o zWq>*mU=C3%JBQ1v(KE7Dhy4*$9Ou7)>hshu4G8IA7a6QsC6dyt(6QNOV94TJ?9@hLd zL++Lzg`tXWK1A=TY)=>w#Io-664x=@sa@bb;`T!lt&gUWq%IV6aPtc`X?)ve?Vm_I zYtl9Yk~VED?2p_N4QQr{@9A*eiD+DKl&kysE!nYz|pPC z41{qjoeAFFQ793y*D!M7>+9;>J49S&G811vm~5g_t&L0@2)ZkTF^!Lz_WhpB6#u%L zOK(9QH!M3$6u~oAMJOR?f*IJ5ofB*2ngtcCp8?+&uD$+65`}C$eas8L+{O60ba?hi z#S&pYK?BTqn`P3&~a^xb1&)*KQfsF&V*^EwH9xuHt0o zd9*$OszX&?dv{Lt8~B9%zgObj2@w`17=oVSxP0NyW@RU zqIC#+2!qHSH(XJrJ_7HmTqmS-6pFZa_$z|moWwWfU;9RF;TEc{vA%1>;|rJQy15cs z_W5|*P&FBzAS0OJl8~iYa4PvIHNIR<^ByWUHWbQR(5(K<60VBg6Xut$Hr)F-9is~# zIkdEDYXsVrWe$rGaFXSgp6cW4%OC#{NvE$A0((oQm7C^Q*LFyl>y?JhPpcAJyy>ugRs5760r+i;RNLR=a3 zZS3gh`APz0%+kj9YUya@42_Ky%Y>=pj>$7#xL87Qn9TF-%w|OF*5;Zl6l-yIw6@%v zT;ut+WXnwJgBk_Pdj`I1X7yDd%4|YHUB{kdo#Ld-Z{zrK^ox(#hz4v+msANhCnpPs z-}gY#)0XDZ3s0$=!PvKv<%}Adc2+FXNA&KXvgY(7Rd8L*`T2bkL+3rhvN++@1Sgow zbOPO5Rs^60Xu$5=wW3SPk}ouB0Sw%4sWVpSF2m1dfkOew!Dk=b;L$=GuJ>Ub2s#n5 zllYzdg``8*e4p-9AQD++?WIO1%FxYZWnk%Q7nR>Jya;Lw{(q?D`e}GBSXz9f!9ny_ z+^vsPkjkimp7_w&58P>Y zzx(giy4N0KXh+W&Jywbk6XrBztbNZ)H6FL?4d)2y7=+&!0mjTXDc{BTYXODI`YWq`473y9NAu0gDmyeXCY}{5B_kh4P66jY|m1@F8$G&eX`F&*!1Ta}qEZk}T2m&w85yNy zn}}?T{ndo)&3;d3KwCBxc}kCHy}Xn|3=GVxk+fEbH&TG2s1ik-Lbc%TF>t-JpxU3- z2Q~b#)Tur%*Y~8Ob@xh*3nsyI7!n(Ja7m$Jo^uBhQ1apEIM$_pll0BGZX{4uxj0fH zo5*my!R}IwLdurgfh>E^$5G4xr-sOzsTK0=t1_45=9%-0qX>o-xTfbk+~t?%D_M>9 zb)12UY7J?mXq^2OS9z>}0FK(W9ugs8!5$bf$$5qKM2ah%Q`qR6Z>!#YDjK_d7z4y% z&z@N@JV7=bt7xF2FW}rRx1Ez(8*ncba?~kw6!XB-Gj;Z^rH;51vaG=qwENp-d(1E| z;b3I-z5q$57zg20rvPX%X^pgGBgk*JknQgjEqx38&oz;M16gC%tp{C?-1LWP?i`=} zeY14stRJw?1-ovBa({7ybmF9M(i+Y&a^9td%T%n`fHfrB^=aMx6Od&9<9Zao@-80^ zV%rnkP){*Ysb1`J_aw4afU1ku$}qXEz|Oplu}s^#AzSLzCEYx`nB=k&y7_lqxEm!5XDpCQ2CD8FLU zCK?h}ixzdnBF`@))l2g65XqE(9p)_BKRP~{yZX4AxVkvfZR^?osk*)y$LZRCW5?ljLL3TX%xC(DOS)lqKq}~hu z>M8bi#@B?dKKdHPdT2DEh*mXhI8fW z;UNN93yTih=>aUJ$JN-QSaWKW0c8y)s%a+8xnyD!WViph%OA;#Q?{+^nb`7059%Yu zFBKzF0T+}JRWs8GZ^rdY|IzD^Rhn`37w+a`YzAyt>BU_~nlW?0o~B1~{(e7>VwMex%6oBQM$T z5Hg%d+egr3J%|krX1HnPQ5jhgV1n4}iCR~DQ0dKA+@y*qU5k$wX`_z^?j_$0NzA95 z*~2cIgSP;G8;eJF~S&hzbVxWTgJBC--Gk@ zP6)ifmu9aal_O3QMBWJ@G2gE7dw0QVZi|kGEr7bAwAw|A^d>@DL$x+=y}Q$wQ#R-f zD5{5~T{$w4g^5nK+LSt^OX-sdEWUHFiT4vOLWxA8rBAHDb^k|xLBFysDR|yAePi>- z1s5q%i{LE9f{G$EAogQuCn7It_ULStUkAJRF!#+Z^H`{6B$z9+F*LMeQA(U<@0t4vOWmld!X%_oSlIU65W@c_E-8> zg}9X6_*vHSsxY7B{x!{}H<&)Izt}=94#C{`+;b57Wow`ZUYMm8*EIsr^m-BYqW?pplO&&O5Lc z?c-`A+1NY-dL+YTfJuVPXJ7TG49Kt!dL{%4 zeK#?ehiCKt5uW|h^Y)NZb1LLGi=3B*RueX^q=TySEb~~5XL{~`{aMw*FvK33P3Pyx z!;SSJ2K#i6Ug#}thV_K1OqiTLCv}-Ix*BVwB}fB(euNK!CmtySw2G4Ph)Y&Z>&H$P(!%1T)R$;qJG$GMZK2hH8-tcCOJd~tNMvrtLs93^Fvy)>tJ zbjvM)vR)B*Al)d-43^%wpjBrYU!>Y=W?i^Gb-|3DS+0CcLbdSrqg7@FlN*d{8_8q4 z?oSh_OdWo&7eq`?HnLL9SzfW2!9+tJw2)q?Y#lrW6dQV^!g=n*b0HW?Qioe>RQ*zp4jraWGAGT>J=z1cC?0I&F)%X zsM(6yO5VYf!KFbL6RuFvHm4MB5b<1*`h%v`c@`DGf!G8GJlU7iK*wJO%zF^hPHYxLtmMAir*}$aI_6oPTW>Q1T zAPFNQALnd$=~6m}yRNbMW*j53Y&Y};^?#Bbb2&Br2j*{0yk$myo5zcw1bohdixIb# z_K_mqiM4&2%xQ-tMr#FP#|{<9ve&x**+aKT>0SB=>(-M?65D1a)(){x-H5zf(ei|GhSw~u)nRzbhB>b{*$u-F- zK;7Te?o+vr5AVZNRJm`Wm?4^7!^t>oTza2O3Q>bLunpy-D2w{iN}|>s{)>9{5_&-` zmV9ZZPUG7nV-%YLCTYec#jN!7=2ax6Ua8->Kg%bJHYl$%sr8L`K}7Y$Cu@{RDdB)i zI;)b30rz|{3yT&Vs-%Q(rOA{ULx!11VQaAVaHh#{m77u%ZO|l#H4+2vJc|9IVa7H7 z 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 literal 0 HcmV?d00001 diff --git a/frontend/public/handbookBACK.docx b/frontend/public/handbookBACK.docx new file mode 100644 index 0000000000000000000000000000000000000000..2a1cdbed01ec2795c54dc8f2ab4bd5624d951e2e GIT binary patch literal 108167 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�W!wLIuT;&tGjU!|9MV)@;7Q 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 + + + + + + + + + + + + + Инфокиоск + + + +
      + + + + diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 0000000..080d6c7 --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,25 @@ +{ + "short_name": "React App", + "name": "Create React App Sample", + "icons": [ + { + "src": "favicon.ico", + "sizes": "64x64 32x32 24x24 16x16", + "type": "image/x-icon" + }, + { + "src": "logo192.png", + "type": "image/png", + "sizes": "192x192" + }, + { + "src": "logo512.png", + "type": "image/png", + "sizes": "512x512" + } + ], + "start_url": ".", + "display": "standalone", + "theme_color": "#000000", + "background_color": "#ffffff" +} diff --git a/frontend/public/payslips/012025/23959.pdf b/frontend/public/payslips/012025/23959.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a4ad00d14fc02c327477d39323cdfdd378f0591c GIT binary patch literal 672232 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 literal 0 HcmV?d00001 diff --git a/frontend/public/payslips/test.pdf b/frontend/public/payslips/test.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a4ad00d14fc02c327477d39323cdfdd378f0591c GIT binary patch literal 672232 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

      6ycc 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Ī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�A9bBHbos_PtKtu)Bo!hN^S)Gb-XSl!H- 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 literal 0 HcmV?d00001 diff --git a/frontend/public/pdf.worker.js b/frontend/public/pdf.worker.js new file mode 100644 index 0000000..878da52 --- /dev/null +++ b/frontend/public/pdf.worker.js @@ -0,0 +1,75390 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2022 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ + +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define("pdfjs-dist/build/pdf.worker", [], factory); + else if(typeof exports === 'object') + exports["pdfjs-dist/build/pdf.worker"] = factory(); + else + root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory(); +})(globalThis, () => { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.WorkerTask = exports.WorkerMessageHandler = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _core_utils = __w_pdfjs_require__(6); + +var _pdf_manager = __w_pdfjs_require__(8); + +var _cleanup_helper = __w_pdfjs_require__(71); + +var _writer = __w_pdfjs_require__(65); + +var _is_node = __w_pdfjs_require__(4); + +var _message_handler = __w_pdfjs_require__(102); + +var _worker_stream = __w_pdfjs_require__(103); + +class WorkerTask { + constructor(name) { + this.name = name; + this.terminated = false; + this._capability = (0, _util.createPromiseCapability)(); + } + + get finished() { + return this._capability.promise; + } + + finish() { + this._capability.resolve(); + } + + terminate() { + this.terminated = true; + } + + ensureNotTerminated() { + if (this.terminated) { + throw new Error("Worker task was terminated"); + } + } + +} + +exports.WorkerTask = WorkerTask; + +class WorkerMessageHandler { + static setup(handler, port) { + let testMessageProcessed = false; + handler.on("test", function wphSetupTest(data) { + if (testMessageProcessed) { + return; + } + + testMessageProcessed = true; + handler.send("test", data instanceof Uint8Array); + }); + handler.on("configure", function wphConfigure(data) { + (0, _util.setVerbosityLevel)(data.verbosity); + }); + handler.on("GetDocRequest", function wphSetupDoc(data) { + return WorkerMessageHandler.createDocumentHandler(data, port); + }); + } + + static createDocumentHandler(docParams, port) { + let pdfManager; + let terminated = false; + let cancelXHRs = null; + const WorkerTasks = []; + const verbosity = (0, _util.getVerbosityLevel)(); + const apiVersion = docParams.apiVersion; + const workerVersion = '2.16.105'; + + if (apiVersion !== workerVersion) { + throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); + } + + const enumerableProperties = []; + + for (const property in []) { + enumerableProperties.push(property); + } + + if (enumerableProperties.length) { + throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); + } + + if (typeof ReadableStream === "undefined") { + const partialMsg = "The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. `ReadableStream`); "; + + if (_is_node.isNodeJS) { + throw new Error(partialMsg + "please use a `legacy`-build instead."); + } + + throw new Error(partialMsg + "please update to a supported browser."); + } + + const docId = docParams.docId; + const docBaseUrl = docParams.docBaseUrl; + const workerHandlerName = docParams.docId + "_worker"; + let handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); + + function ensureNotTerminated() { + if (terminated) { + throw new Error("Worker was terminated"); + } + } + + function startWorkerTask(task) { + WorkerTasks.push(task); + } + + function finishWorkerTask(task) { + task.finish(); + const i = WorkerTasks.indexOf(task); + WorkerTasks.splice(i, 1); + } + + async function loadDocument(recoveryMode) { + await pdfManager.ensureDoc("checkHeader"); + await pdfManager.ensureDoc("parseStartXRef"); + await pdfManager.ensureDoc("parse", [recoveryMode]); + await pdfManager.ensureDoc("checkFirstPage", [recoveryMode]); + await pdfManager.ensureDoc("checkLastPage", [recoveryMode]); + const isPureXfa = await pdfManager.ensureDoc("isPureXfa"); + + if (isPureXfa) { + const task = new WorkerTask("loadXfaFonts"); + startWorkerTask(task); + await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]); + } + + const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprints")]); + const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc("htmlForXfa") : null; + return { + numPages, + fingerprints, + htmlForXfa + }; + } + + function getPdfManager(data, evaluatorOptions, enableXfa) { + const pdfManagerCapability = (0, _util.createPromiseCapability)(); + let newPdfManager; + const source = data.source; + + if (source.data) { + try { + newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, handler, evaluatorOptions, enableXfa, docBaseUrl); + pdfManagerCapability.resolve(newPdfManager); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + + return pdfManagerCapability.promise; + } + + let pdfStream, + cachedChunks = []; + + try { + pdfStream = new _worker_stream.PDFWorkerStream(handler); + } catch (ex) { + pdfManagerCapability.reject(ex); + return pdfManagerCapability.promise; + } + + const fullRequest = pdfStream.getFullReader(); + fullRequest.headersReady.then(function () { + if (!fullRequest.isRangeSupported) { + return; + } + + const disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; + newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { + msgHandler: handler, + password: source.password, + length: fullRequest.contentLength, + disableAutoFetch, + rangeChunkSize: source.rangeChunkSize + }, evaluatorOptions, enableXfa, docBaseUrl); + + for (const chunk of cachedChunks) { + newPdfManager.sendProgressiveData(chunk); + } + + cachedChunks = []; + pdfManagerCapability.resolve(newPdfManager); + cancelXHRs = null; + }).catch(function (reason) { + pdfManagerCapability.reject(reason); + cancelXHRs = null; + }); + let loaded = 0; + + const flushChunks = function () { + const pdfFile = (0, _util.arraysToBytes)(cachedChunks); + + if (source.length && pdfFile.length !== source.length) { + (0, _util.warn)("reported HTTP length is different from actual"); + } + + try { + newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, handler, evaluatorOptions, enableXfa, docBaseUrl); + pdfManagerCapability.resolve(newPdfManager); + } catch (ex) { + pdfManagerCapability.reject(ex); + } + + cachedChunks = []; + }; + + const readPromise = new Promise(function (resolve, reject) { + const readChunk = function ({ + value, + done + }) { + try { + ensureNotTerminated(); + + if (done) { + if (!newPdfManager) { + flushChunks(); + } + + cancelXHRs = null; + return; + } + + loaded += (0, _util.arrayByteLength)(value); + + if (!fullRequest.isStreamingSupported) { + handler.send("DocProgress", { + loaded, + total: Math.max(loaded, fullRequest.contentLength || 0) + }); + } + + if (newPdfManager) { + newPdfManager.sendProgressiveData(value); + } else { + cachedChunks.push(value); + } + + fullRequest.read().then(readChunk, reject); + } catch (e) { + reject(e); + } + }; + + fullRequest.read().then(readChunk, reject); + }); + readPromise.catch(function (e) { + pdfManagerCapability.reject(e); + cancelXHRs = null; + }); + + cancelXHRs = function (reason) { + pdfStream.cancelAllRequests(reason); + }; + + return pdfManagerCapability.promise; + } + + function setupDoc(data) { + function onSuccess(doc) { + ensureNotTerminated(); + handler.send("GetDoc", { + pdfInfo: doc + }); + } + + function onFailure(ex) { + ensureNotTerminated(); + + if (ex instanceof _util.PasswordException) { + const task = new WorkerTask(`PasswordException: response ${ex.code}`); + startWorkerTask(task); + handler.sendWithPromise("PasswordRequest", ex).then(function ({ + password + }) { + finishWorkerTask(task); + pdfManager.updatePassword(password); + pdfManagerReady(); + }).catch(function () { + finishWorkerTask(task); + handler.send("DocException", ex); + }); + } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) { + handler.send("DocException", ex); + } else { + handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString())); + } + } + + function pdfManagerReady() { + ensureNotTerminated(); + loadDocument(false).then(onSuccess, function (reason) { + ensureNotTerminated(); + + if (!(reason instanceof _core_utils.XRefParseException)) { + onFailure(reason); + return; + } + + pdfManager.requestLoadedStream(); + pdfManager.onLoadedStream().then(function () { + ensureNotTerminated(); + loadDocument(true).then(onSuccess, onFailure); + }); + }); + } + + ensureNotTerminated(); + const evaluatorOptions = { + maxImageSize: data.maxImageSize, + disableFontFace: data.disableFontFace, + ignoreErrors: data.ignoreErrors, + isEvalSupported: data.isEvalSupported, + fontExtraProperties: data.fontExtraProperties, + useSystemFonts: data.useSystemFonts, + cMapUrl: data.cMapUrl, + standardFontDataUrl: data.standardFontDataUrl + }; + getPdfManager(data, evaluatorOptions, data.enableXfa).then(function (newPdfManager) { + if (terminated) { + newPdfManager.terminate(new _util.AbortException("Worker was terminated.")); + throw new Error("Worker was terminated"); + } + + pdfManager = newPdfManager; + pdfManager.onLoadedStream().then(function (stream) { + handler.send("DataLoaded", { + length: stream.bytes.byteLength + }); + }); + }).then(pdfManagerReady, onFailure); + } + + handler.on("GetPage", function wphSetupGetPage(data) { + return pdfManager.getPage(data.pageIndex).then(function (page) { + return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) { + return { + rotate, + ref, + userUnit, + view + }; + }); + }); + }); + handler.on("GetPageIndex", function wphSetupGetPageIndex(data) { + const pageRef = _primitives.Ref.get(data.num, data.gen); + + return pdfManager.ensureCatalog("getPageIndex", [pageRef]); + }); + handler.on("GetDestinations", function wphSetupGetDestinations(data) { + return pdfManager.ensureCatalog("destinations"); + }); + handler.on("GetDestination", function wphSetupGetDestination(data) { + return pdfManager.ensureCatalog("getDestination", [data.id]); + }); + handler.on("GetPageLabels", function wphSetupGetPageLabels(data) { + return pdfManager.ensureCatalog("pageLabels"); + }); + handler.on("GetPageLayout", function wphSetupGetPageLayout(data) { + return pdfManager.ensureCatalog("pageLayout"); + }); + handler.on("GetPageMode", function wphSetupGetPageMode(data) { + return pdfManager.ensureCatalog("pageMode"); + }); + handler.on("GetViewerPreferences", function (data) { + return pdfManager.ensureCatalog("viewerPreferences"); + }); + handler.on("GetOpenAction", function (data) { + return pdfManager.ensureCatalog("openAction"); + }); + handler.on("GetAttachments", function wphSetupGetAttachments(data) { + return pdfManager.ensureCatalog("attachments"); + }); + handler.on("GetJavaScript", function wphSetupGetJavaScript(data) { + return pdfManager.ensureCatalog("javaScript"); + }); + handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) { + return pdfManager.ensureCatalog("jsActions"); + }); + handler.on("GetPageJSActions", function ({ + pageIndex + }) { + return pdfManager.getPage(pageIndex).then(function (page) { + return pdfManager.ensure(page, "jsActions"); + }); + }); + handler.on("GetOutline", function wphSetupGetOutline(data) { + return pdfManager.ensureCatalog("documentOutline"); + }); + handler.on("GetOptionalContentConfig", function (data) { + return pdfManager.ensureCatalog("optionalContentConfig"); + }); + handler.on("GetPermissions", function (data) { + return pdfManager.ensureCatalog("permissions"); + }); + handler.on("GetMetadata", function wphSetupGetMetadata(data) { + return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]); + }); + handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) { + return pdfManager.ensureCatalog("markInfo"); + }); + handler.on("GetData", function wphSetupGetData(data) { + pdfManager.requestLoadedStream(); + return pdfManager.onLoadedStream().then(function (stream) { + return stream.bytes; + }); + }); + handler.on("GetAnnotations", function ({ + pageIndex, + intent + }) { + return pdfManager.getPage(pageIndex).then(function (page) { + const task = new WorkerTask(`GetAnnotations: page ${pageIndex}`); + startWorkerTask(task); + return page.getAnnotationsData(handler, task, intent).then(data => { + finishWorkerTask(task); + return data; + }, reason => { + finishWorkerTask(task); + }); + }); + }); + handler.on("GetFieldObjects", function (data) { + return pdfManager.ensureDoc("fieldObjects"); + }); + handler.on("HasJSActions", function (data) { + return pdfManager.ensureDoc("hasJSActions"); + }); + handler.on("GetCalculationOrderIds", function (data) { + return pdfManager.ensureDoc("calculationOrderIds"); + }); + handler.on("SaveDocument", function ({ + isPureXfa, + numPages, + annotationStorage, + filename + }) { + pdfManager.requestLoadedStream(); + const newAnnotationsByPage = !isPureXfa ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null; + const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")]; + + if (newAnnotationsByPage) { + for (const [pageIndex, annotations] of newAnnotationsByPage) { + promises.push(pdfManager.getPage(pageIndex).then(page => { + const task = new WorkerTask(`Save (editor): page ${pageIndex}`); + return page.saveNewAnnotations(handler, task, annotations).finally(function () { + finishWorkerTask(task); + }); + })); + } + } + + if (isPureXfa) { + promises.push(pdfManager.serializeXfaData(annotationStorage)); + } else { + for (let pageIndex = 0; pageIndex < numPages; pageIndex++) { + promises.push(pdfManager.getPage(pageIndex).then(function (page) { + const task = new WorkerTask(`Save: page ${pageIndex}`); + return page.save(handler, task, annotationStorage).finally(function () { + finishWorkerTask(task); + }); + })); + } + } + + return Promise.all(promises).then(function ([stream, acroForm, acroFormRef, xref, startXRef, ...refs]) { + let newRefs = []; + let xfaData = null; + + if (isPureXfa) { + xfaData = refs[0]; + + if (!xfaData) { + return stream.bytes; + } + } else { + newRefs = refs.flat(2); + + if (newRefs.length === 0) { + return stream.bytes; + } + } + + const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || null; + let xfaDatasetsRef = null; + let hasXfaDatasetsEntry = false; + + if (Array.isArray(xfa)) { + for (let i = 0, ii = xfa.length; i < ii; i += 2) { + if (xfa[i] === "datasets") { + xfaDatasetsRef = xfa[i + 1]; + acroFormRef = null; + hasXfaDatasetsEntry = true; + } + } + + if (xfaDatasetsRef === null) { + xfaDatasetsRef = xref.getNewRef(); + } + } else if (xfa) { + acroFormRef = null; + (0, _util.warn)("Unsupported XFA type."); + } + + let newXrefInfo = Object.create(null); + + if (xref.trailer) { + const infoObj = Object.create(null); + const xrefInfo = xref.trailer.get("Info") || null; + + if (xrefInfo instanceof _primitives.Dict) { + xrefInfo.forEach((key, value) => { + if (typeof value === "string") { + infoObj[key] = (0, _util.stringToPDFString)(value); + } + }); + } + + newXrefInfo = { + rootRef: xref.trailer.getRaw("Root") || null, + encryptRef: xref.trailer.getRaw("Encrypt") || null, + newRef: xref.getNewRef(), + infoRef: xref.trailer.getRaw("Info") || null, + info: infoObj, + fileIds: xref.trailer.get("ID") || null, + startXRef, + filename + }; + } + + xref.resetNewRef(); + return (0, _writer.incrementalUpdate)({ + originalData: stream.bytes, + xrefInfo: newXrefInfo, + newRefs, + xref, + hasXfa: !!xfa, + xfaDatasetsRef, + hasXfaDatasetsEntry, + acroFormRef, + acroForm, + xfaData + }); + }); + }); + handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) { + const pageIndex = data.pageIndex; + pdfManager.getPage(pageIndex).then(function (page) { + const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`); + startWorkerTask(task); + const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; + page.getOperatorList({ + handler, + sink, + task, + intent: data.intent, + cacheKey: data.cacheKey, + annotationStorage: data.annotationStorage + }).then(function (operatorListInfo) { + finishWorkerTask(task); + + if (start) { + (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`); + } + + sink.close(); + }, function (reason) { + finishWorkerTask(task); + + if (task.terminated) { + return; + } + + handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList + }); + sink.error(reason); + }); + }); + }); + handler.on("GetTextContent", function wphExtractText(data, sink) { + const pageIndex = data.pageIndex; + pdfManager.getPage(pageIndex).then(function (page) { + const task = new WorkerTask("GetTextContent: page " + pageIndex); + startWorkerTask(task); + const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; + page.extractTextContent({ + handler, + task, + sink, + includeMarkedContent: data.includeMarkedContent, + combineTextItems: data.combineTextItems + }).then(function () { + finishWorkerTask(task); + + if (start) { + (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`); + } + + sink.close(); + }, function (reason) { + finishWorkerTask(task); + + if (task.terminated) { + return; + } + + sink.error(reason); + }); + }); + }); + handler.on("GetStructTree", function wphGetStructTree(data) { + return pdfManager.getPage(data.pageIndex).then(function (page) { + return pdfManager.ensure(page, "getStructTree"); + }); + }); + handler.on("FontFallback", function (data) { + return pdfManager.fontFallback(data.id, handler); + }); + handler.on("Cleanup", function wphCleanup(data) { + return pdfManager.cleanup(true); + }); + handler.on("Terminate", function wphTerminate(data) { + terminated = true; + const waitOn = []; + + if (pdfManager) { + pdfManager.terminate(new _util.AbortException("Worker was terminated.")); + const cleanupPromise = pdfManager.cleanup(); + waitOn.push(cleanupPromise); + pdfManager = null; + } else { + (0, _cleanup_helper.clearGlobalCaches)(); + } + + if (cancelXHRs) { + cancelXHRs(new _util.AbortException("Worker was terminated.")); + } + + for (const task of WorkerTasks) { + waitOn.push(task.finished); + task.terminate(); + } + + return Promise.all(waitOn).then(function () { + handler.destroy(); + handler = null; + }); + }); + handler.on("Ready", function wphReady(data) { + setupDoc(docParams); + docParams = null; + }); + return workerHandlerName; + } + + static initializeFromPort(port) { + const handler = new _message_handler.MessageHandler("worker", "main", port); + WorkerMessageHandler.setup(handler, port); + handler.send("ready", null); + } + +} + +exports.WorkerMessageHandler = WorkerMessageHandler; + +function isMessagePort(maybePort) { + return typeof maybePort.postMessage === "function" && "onmessage" in maybePort; +} + +if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) { + WorkerMessageHandler.initializeFromPort(self); +} + +/***/ }), +/* 2 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.LINE_FACTOR = exports.LINE_DESCENT_FACTOR = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FeatureTest = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationEditorType = exports.AnnotationEditorPrefix = exports.AnnotationEditorParamsType = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; +exports.arrayByteLength = arrayByteLength; +exports.arraysToBytes = arraysToBytes; +exports.assert = assert; +exports.bytesToString = bytesToString; +exports.createPromiseCapability = createPromiseCapability; +exports.createValidAbsoluteUrl = createValidAbsoluteUrl; +exports.escapeString = escapeString; +exports.getModificationDate = getModificationDate; +exports.getVerbosityLevel = getVerbosityLevel; +exports.info = info; +exports.isArrayBuffer = isArrayBuffer; +exports.isArrayEqual = isArrayEqual; +exports.isAscii = isAscii; +exports.objectFromMap = objectFromMap; +exports.objectSize = objectSize; +exports.setVerbosityLevel = setVerbosityLevel; +exports.shadow = shadow; +exports.string32 = string32; +exports.stringToBytes = stringToBytes; +exports.stringToPDFString = stringToPDFString; +exports.stringToUTF16BEString = stringToUTF16BEString; +exports.stringToUTF8String = stringToUTF8String; +exports.unreachable = unreachable; +exports.utf8StringToString = utf8StringToString; +exports.warn = warn; + +__w_pdfjs_require__(3); + +const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; +exports.IDENTITY_MATRIX = IDENTITY_MATRIX; +const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; +exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; +const LINE_FACTOR = 1.35; +exports.LINE_FACTOR = LINE_FACTOR; +const LINE_DESCENT_FACTOR = 0.35; +exports.LINE_DESCENT_FACTOR = LINE_DESCENT_FACTOR; +const RenderingIntentFlag = { + ANY: 0x01, + DISPLAY: 0x02, + PRINT: 0x04, + ANNOTATIONS_FORMS: 0x10, + ANNOTATIONS_STORAGE: 0x20, + ANNOTATIONS_DISABLE: 0x40, + OPLIST: 0x100 +}; +exports.RenderingIntentFlag = RenderingIntentFlag; +const AnnotationMode = { + DISABLE: 0, + ENABLE: 1, + ENABLE_FORMS: 2, + ENABLE_STORAGE: 3 +}; +exports.AnnotationMode = AnnotationMode; +const AnnotationEditorPrefix = "pdfjs_internal_editor_"; +exports.AnnotationEditorPrefix = AnnotationEditorPrefix; +const AnnotationEditorType = { + DISABLE: -1, + NONE: 0, + FREETEXT: 3, + INK: 15 +}; +exports.AnnotationEditorType = AnnotationEditorType; +const AnnotationEditorParamsType = { + FREETEXT_SIZE: 1, + FREETEXT_COLOR: 2, + FREETEXT_OPACITY: 3, + INK_COLOR: 11, + INK_THICKNESS: 12, + INK_OPACITY: 13 +}; +exports.AnnotationEditorParamsType = AnnotationEditorParamsType; +const PermissionFlag = { + PRINT: 0x04, + MODIFY_CONTENTS: 0x08, + COPY: 0x10, + MODIFY_ANNOTATIONS: 0x20, + FILL_INTERACTIVE_FORMS: 0x100, + COPY_FOR_ACCESSIBILITY: 0x200, + ASSEMBLE: 0x400, + PRINT_HIGH_QUALITY: 0x800 +}; +exports.PermissionFlag = PermissionFlag; +const TextRenderingMode = { + FILL: 0, + STROKE: 1, + FILL_STROKE: 2, + INVISIBLE: 3, + FILL_ADD_TO_PATH: 4, + STROKE_ADD_TO_PATH: 5, + FILL_STROKE_ADD_TO_PATH: 6, + ADD_TO_PATH: 7, + FILL_STROKE_MASK: 3, + ADD_TO_PATH_FLAG: 4 +}; +exports.TextRenderingMode = TextRenderingMode; +const ImageKind = { + GRAYSCALE_1BPP: 1, + RGB_24BPP: 2, + RGBA_32BPP: 3 +}; +exports.ImageKind = ImageKind; +const AnnotationType = { + TEXT: 1, + LINK: 2, + FREETEXT: 3, + LINE: 4, + SQUARE: 5, + CIRCLE: 6, + POLYGON: 7, + POLYLINE: 8, + HIGHLIGHT: 9, + UNDERLINE: 10, + SQUIGGLY: 11, + STRIKEOUT: 12, + STAMP: 13, + CARET: 14, + INK: 15, + POPUP: 16, + FILEATTACHMENT: 17, + SOUND: 18, + MOVIE: 19, + WIDGET: 20, + SCREEN: 21, + PRINTERMARK: 22, + TRAPNET: 23, + WATERMARK: 24, + THREED: 25, + REDACT: 26 +}; +exports.AnnotationType = AnnotationType; +const AnnotationStateModelType = { + MARKED: "Marked", + REVIEW: "Review" +}; +exports.AnnotationStateModelType = AnnotationStateModelType; +const AnnotationMarkedState = { + MARKED: "Marked", + UNMARKED: "Unmarked" +}; +exports.AnnotationMarkedState = AnnotationMarkedState; +const AnnotationReviewState = { + ACCEPTED: "Accepted", + REJECTED: "Rejected", + CANCELLED: "Cancelled", + COMPLETED: "Completed", + NONE: "None" +}; +exports.AnnotationReviewState = AnnotationReviewState; +const AnnotationReplyType = { + GROUP: "Group", + REPLY: "R" +}; +exports.AnnotationReplyType = AnnotationReplyType; +const AnnotationFlag = { + INVISIBLE: 0x01, + HIDDEN: 0x02, + PRINT: 0x04, + NOZOOM: 0x08, + NOROTATE: 0x10, + NOVIEW: 0x20, + READONLY: 0x40, + LOCKED: 0x80, + TOGGLENOVIEW: 0x100, + LOCKEDCONTENTS: 0x200 +}; +exports.AnnotationFlag = AnnotationFlag; +const AnnotationFieldFlag = { + READONLY: 0x0000001, + REQUIRED: 0x0000002, + NOEXPORT: 0x0000004, + MULTILINE: 0x0001000, + PASSWORD: 0x0002000, + NOTOGGLETOOFF: 0x0004000, + RADIO: 0x0008000, + PUSHBUTTON: 0x0010000, + COMBO: 0x0020000, + EDIT: 0x0040000, + SORT: 0x0080000, + FILESELECT: 0x0100000, + MULTISELECT: 0x0200000, + DONOTSPELLCHECK: 0x0400000, + DONOTSCROLL: 0x0800000, + COMB: 0x1000000, + RICHTEXT: 0x2000000, + RADIOSINUNISON: 0x2000000, + COMMITONSELCHANGE: 0x4000000 +}; +exports.AnnotationFieldFlag = AnnotationFieldFlag; +const AnnotationBorderStyleType = { + SOLID: 1, + DASHED: 2, + BEVELED: 3, + INSET: 4, + UNDERLINE: 5 +}; +exports.AnnotationBorderStyleType = AnnotationBorderStyleType; +const AnnotationActionEventType = { + E: "Mouse Enter", + X: "Mouse Exit", + D: "Mouse Down", + U: "Mouse Up", + Fo: "Focus", + Bl: "Blur", + PO: "PageOpen", + PC: "PageClose", + PV: "PageVisible", + PI: "PageInvisible", + K: "Keystroke", + F: "Format", + V: "Validate", + C: "Calculate" +}; +exports.AnnotationActionEventType = AnnotationActionEventType; +const DocumentActionEventType = { + WC: "WillClose", + WS: "WillSave", + DS: "DidSave", + WP: "WillPrint", + DP: "DidPrint" +}; +exports.DocumentActionEventType = DocumentActionEventType; +const PageActionEventType = { + O: "PageOpen", + C: "PageClose" +}; +exports.PageActionEventType = PageActionEventType; +const StreamType = { + UNKNOWN: "UNKNOWN", + FLATE: "FLATE", + LZW: "LZW", + DCT: "DCT", + JPX: "JPX", + JBIG: "JBIG", + A85: "A85", + AHX: "AHX", + CCF: "CCF", + RLX: "RLX" +}; +exports.StreamType = StreamType; +const FontType = { + UNKNOWN: "UNKNOWN", + TYPE1: "TYPE1", + TYPE1STANDARD: "TYPE1STANDARD", + TYPE1C: "TYPE1C", + CIDFONTTYPE0: "CIDFONTTYPE0", + CIDFONTTYPE0C: "CIDFONTTYPE0C", + TRUETYPE: "TRUETYPE", + CIDFONTTYPE2: "CIDFONTTYPE2", + TYPE3: "TYPE3", + OPENTYPE: "OPENTYPE", + TYPE0: "TYPE0", + MMTYPE1: "MMTYPE1" +}; +exports.FontType = FontType; +const VerbosityLevel = { + ERRORS: 0, + WARNINGS: 1, + INFOS: 5 +}; +exports.VerbosityLevel = VerbosityLevel; +const CMapCompressionType = { + NONE: 0, + BINARY: 1, + STREAM: 2 +}; +exports.CMapCompressionType = CMapCompressionType; +const OPS = { + dependency: 1, + setLineWidth: 2, + setLineCap: 3, + setLineJoin: 4, + setMiterLimit: 5, + setDash: 6, + setRenderingIntent: 7, + setFlatness: 8, + setGState: 9, + save: 10, + restore: 11, + transform: 12, + moveTo: 13, + lineTo: 14, + curveTo: 15, + curveTo2: 16, + curveTo3: 17, + closePath: 18, + rectangle: 19, + stroke: 20, + closeStroke: 21, + fill: 22, + eoFill: 23, + fillStroke: 24, + eoFillStroke: 25, + closeFillStroke: 26, + closeEOFillStroke: 27, + endPath: 28, + clip: 29, + eoClip: 30, + beginText: 31, + endText: 32, + setCharSpacing: 33, + setWordSpacing: 34, + setHScale: 35, + setLeading: 36, + setFont: 37, + setTextRenderingMode: 38, + setTextRise: 39, + moveText: 40, + setLeadingMoveText: 41, + setTextMatrix: 42, + nextLine: 43, + showText: 44, + showSpacedText: 45, + nextLineShowText: 46, + nextLineSetSpacingShowText: 47, + setCharWidth: 48, + setCharWidthAndBounds: 49, + setStrokeColorSpace: 50, + setFillColorSpace: 51, + setStrokeColor: 52, + setStrokeColorN: 53, + setFillColor: 54, + setFillColorN: 55, + setStrokeGray: 56, + setFillGray: 57, + setStrokeRGBColor: 58, + setFillRGBColor: 59, + setStrokeCMYKColor: 60, + setFillCMYKColor: 61, + shadingFill: 62, + beginInlineImage: 63, + beginImageData: 64, + endInlineImage: 65, + paintXObject: 66, + markPoint: 67, + markPointProps: 68, + beginMarkedContent: 69, + beginMarkedContentProps: 70, + endMarkedContent: 71, + beginCompat: 72, + endCompat: 73, + paintFormXObjectBegin: 74, + paintFormXObjectEnd: 75, + beginGroup: 76, + endGroup: 77, + beginAnnotations: 78, + endAnnotations: 79, + beginAnnotation: 80, + endAnnotation: 81, + paintJpegXObject: 82, + paintImageMaskXObject: 83, + paintImageMaskXObjectGroup: 84, + paintImageXObject: 85, + paintInlineImageXObject: 86, + paintInlineImageXObjectGroup: 87, + paintImageXObjectRepeat: 88, + paintImageMaskXObjectRepeat: 89, + paintSolidColorImageMask: 90, + constructPath: 91 +}; +exports.OPS = OPS; +const UNSUPPORTED_FEATURES = { + unknown: "unknown", + forms: "forms", + javaScript: "javaScript", + signatures: "signatures", + smask: "smask", + shadingPattern: "shadingPattern", + font: "font", + errorTilingPattern: "errorTilingPattern", + errorExtGState: "errorExtGState", + errorXObject: "errorXObject", + errorFontLoadType3: "errorFontLoadType3", + errorFontState: "errorFontState", + errorFontMissing: "errorFontMissing", + errorFontTranslate: "errorFontTranslate", + errorColorSpace: "errorColorSpace", + errorOperatorList: "errorOperatorList", + errorFontToUnicode: "errorFontToUnicode", + errorFontLoadNative: "errorFontLoadNative", + errorFontBuildPath: "errorFontBuildPath", + errorFontGetPath: "errorFontGetPath", + errorMarkedContent: "errorMarkedContent", + errorContentSubStream: "errorContentSubStream" +}; +exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; +const PasswordResponses = { + NEED_PASSWORD: 1, + INCORRECT_PASSWORD: 2 +}; +exports.PasswordResponses = PasswordResponses; +let verbosity = VerbosityLevel.WARNINGS; + +function setVerbosityLevel(level) { + if (Number.isInteger(level)) { + verbosity = level; + } +} + +function getVerbosityLevel() { + return verbosity; +} + +function info(msg) { + if (verbosity >= VerbosityLevel.INFOS) { + console.log(`Info: ${msg}`); + } +} + +function warn(msg) { + if (verbosity >= VerbosityLevel.WARNINGS) { + console.log(`Warning: ${msg}`); + } +} + +function unreachable(msg) { + throw new Error(msg); +} + +function assert(cond, msg) { + if (!cond) { + unreachable(msg); + } +} + +function _isValidProtocol(url) { + if (!url) { + return false; + } + + switch (url.protocol) { + case "http:": + case "https:": + case "ftp:": + case "mailto:": + case "tel:": + return true; + + default: + return false; + } +} + +function createValidAbsoluteUrl(url, baseUrl = null, options = null) { + if (!url) { + return null; + } + + try { + if (options && typeof url === "string") { + if (options.addDefaultProtocol && url.startsWith("www.")) { + const dots = url.match(/\./g); + + if (dots && dots.length >= 2) { + url = `http://${url}`; + } + } + + if (options.tryConvertEncoding) { + try { + url = stringToUTF8String(url); + } catch (ex) {} + } + } + + const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); + + if (_isValidProtocol(absoluteUrl)) { + return absoluteUrl; + } + } catch (ex) {} + + return null; +} + +function shadow(obj, prop, value) { + Object.defineProperty(obj, prop, { + value, + enumerable: true, + configurable: true, + writable: false + }); + return value; +} + +const BaseException = function BaseExceptionClosure() { + function BaseException(message, name) { + if (this.constructor === BaseException) { + unreachable("Cannot initialize BaseException."); + } + + this.message = message; + this.name = name; + } + + BaseException.prototype = new Error(); + BaseException.constructor = BaseException; + return BaseException; +}(); + +exports.BaseException = BaseException; + +class PasswordException extends BaseException { + constructor(msg, code) { + super(msg, "PasswordException"); + this.code = code; + } + +} + +exports.PasswordException = PasswordException; + +class UnknownErrorException extends BaseException { + constructor(msg, details) { + super(msg, "UnknownErrorException"); + this.details = details; + } + +} + +exports.UnknownErrorException = UnknownErrorException; + +class InvalidPDFException extends BaseException { + constructor(msg) { + super(msg, "InvalidPDFException"); + } + +} + +exports.InvalidPDFException = InvalidPDFException; + +class MissingPDFException extends BaseException { + constructor(msg) { + super(msg, "MissingPDFException"); + } + +} + +exports.MissingPDFException = MissingPDFException; + +class UnexpectedResponseException extends BaseException { + constructor(msg, status) { + super(msg, "UnexpectedResponseException"); + this.status = status; + } + +} + +exports.UnexpectedResponseException = UnexpectedResponseException; + +class FormatError extends BaseException { + constructor(msg) { + super(msg, "FormatError"); + } + +} + +exports.FormatError = FormatError; + +class AbortException extends BaseException { + constructor(msg) { + super(msg, "AbortException"); + } + +} + +exports.AbortException = AbortException; + +function bytesToString(bytes) { + if (typeof bytes !== "object" || bytes === null || bytes.length === undefined) { + unreachable("Invalid argument for bytesToString"); + } + + const length = bytes.length; + const MAX_ARGUMENT_COUNT = 8192; + + if (length < MAX_ARGUMENT_COUNT) { + return String.fromCharCode.apply(null, bytes); + } + + const strBuf = []; + + for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { + const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); + const chunk = bytes.subarray(i, chunkEnd); + strBuf.push(String.fromCharCode.apply(null, chunk)); + } + + return strBuf.join(""); +} + +function stringToBytes(str) { + if (typeof str !== "string") { + unreachable("Invalid argument for stringToBytes"); + } + + const length = str.length; + const bytes = new Uint8Array(length); + + for (let i = 0; i < length; ++i) { + bytes[i] = str.charCodeAt(i) & 0xff; + } + + return bytes; +} + +function arrayByteLength(arr) { + if (arr.length !== undefined) { + return arr.length; + } + + if (arr.byteLength !== undefined) { + return arr.byteLength; + } + + unreachable("Invalid argument for arrayByteLength"); +} + +function arraysToBytes(arr) { + const length = arr.length; + + if (length === 1 && arr[0] instanceof Uint8Array) { + return arr[0]; + } + + let resultLength = 0; + + for (let i = 0; i < length; i++) { + resultLength += arrayByteLength(arr[i]); + } + + let pos = 0; + const data = new Uint8Array(resultLength); + + for (let i = 0; i < length; i++) { + let item = arr[i]; + + if (!(item instanceof Uint8Array)) { + if (typeof item === "string") { + item = stringToBytes(item); + } else { + item = new Uint8Array(item); + } + } + + const itemLength = item.byteLength; + data.set(item, pos); + pos += itemLength; + } + + return data; +} + +function string32(value) { + return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); +} + +function objectSize(obj) { + return Object.keys(obj).length; +} + +function objectFromMap(map) { + const obj = Object.create(null); + + for (const [key, value] of map) { + obj[key] = value; + } + + return obj; +} + +function isLittleEndian() { + const buffer8 = new Uint8Array(4); + buffer8[0] = 1; + const view32 = new Uint32Array(buffer8.buffer, 0, 1); + return view32[0] === 1; +} + +function isEvalSupported() { + try { + new Function(""); + return true; + } catch (e) { + return false; + } +} + +class FeatureTest { + static get isLittleEndian() { + return shadow(this, "isLittleEndian", isLittleEndian()); + } + + static get isEvalSupported() { + return shadow(this, "isEvalSupported", isEvalSupported()); + } + + static get isOffscreenCanvasSupported() { + return shadow(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas !== "undefined"); + } + +} + +exports.FeatureTest = FeatureTest; +const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); + +class Util { + static makeHexColor(r, g, b) { + return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; + } + + static scaleMinMax(transform, minMax) { + let temp; + + if (transform[0]) { + if (transform[0] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + + minMax[0] *= transform[0]; + minMax[1] *= transform[0]; + + if (transform[3] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + + minMax[2] *= transform[3]; + minMax[3] *= transform[3]; + } else { + temp = minMax[0]; + minMax[0] = minMax[2]; + minMax[2] = temp; + temp = minMax[1]; + minMax[1] = minMax[3]; + minMax[3] = temp; + + if (transform[1] < 0) { + temp = minMax[2]; + minMax[2] = minMax[3]; + minMax[3] = temp; + } + + minMax[2] *= transform[1]; + minMax[3] *= transform[1]; + + if (transform[2] < 0) { + temp = minMax[0]; + minMax[0] = minMax[1]; + minMax[1] = temp; + } + + minMax[0] *= transform[2]; + minMax[1] *= transform[2]; + } + + minMax[0] += transform[4]; + minMax[1] += transform[4]; + minMax[2] += transform[5]; + minMax[3] += transform[5]; + } + + static transform(m1, m2) { + return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; + } + + static applyTransform(p, m) { + const xt = p[0] * m[0] + p[1] * m[2] + m[4]; + const yt = p[0] * m[1] + p[1] * m[3] + m[5]; + return [xt, yt]; + } + + static applyInverseTransform(p, m) { + const d = m[0] * m[3] - m[1] * m[2]; + const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; + const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; + return [xt, yt]; + } + + static getAxialAlignedBoundingBox(r, m) { + const p1 = Util.applyTransform(r, m); + const p2 = Util.applyTransform(r.slice(2, 4), m); + const p3 = Util.applyTransform([r[0], r[3]], m); + const p4 = Util.applyTransform([r[2], r[1]], m); + return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; + } + + static inverseTransform(m) { + const d = m[0] * m[3] - m[1] * m[2]; + return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; + } + + static apply3dTransform(m, v) { + return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; + } + + static singularValueDecompose2dScale(m) { + const transpose = [m[0], m[2], m[1], m[3]]; + const a = m[0] * transpose[0] + m[1] * transpose[2]; + const b = m[0] * transpose[1] + m[1] * transpose[3]; + const c = m[2] * transpose[0] + m[3] * transpose[2]; + const d = m[2] * transpose[1] + m[3] * transpose[3]; + const first = (a + d) / 2; + const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; + const sx = first + second || 1; + const sy = first - second || 1; + return [Math.sqrt(sx), Math.sqrt(sy)]; + } + + static normalizeRect(rect) { + const r = rect.slice(0); + + if (rect[0] > rect[2]) { + r[0] = rect[2]; + r[2] = rect[0]; + } + + if (rect[1] > rect[3]) { + r[1] = rect[3]; + r[3] = rect[1]; + } + + return r; + } + + static intersect(rect1, rect2) { + const xLow = Math.max(Math.min(rect1[0], rect1[2]), Math.min(rect2[0], rect2[2])); + const xHigh = Math.min(Math.max(rect1[0], rect1[2]), Math.max(rect2[0], rect2[2])); + + if (xLow > xHigh) { + return null; + } + + const yLow = Math.max(Math.min(rect1[1], rect1[3]), Math.min(rect2[1], rect2[3])); + const yHigh = Math.min(Math.max(rect1[1], rect1[3]), Math.max(rect2[1], rect2[3])); + + if (yLow > yHigh) { + return null; + } + + return [xLow, yLow, xHigh, yHigh]; + } + + static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { + const tvalues = [], + bounds = [[], []]; + let a, b, c, t, t1, t2, b2ac, sqrtb2ac; + + for (let i = 0; i < 2; ++i) { + if (i === 0) { + b = 6 * x0 - 12 * x1 + 6 * x2; + a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; + c = 3 * x1 - 3 * x0; + } else { + b = 6 * y0 - 12 * y1 + 6 * y2; + a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; + c = 3 * y1 - 3 * y0; + } + + if (Math.abs(a) < 1e-12) { + if (Math.abs(b) < 1e-12) { + continue; + } + + t = -c / b; + + if (0 < t && t < 1) { + tvalues.push(t); + } + + continue; + } + + b2ac = b * b - 4 * c * a; + sqrtb2ac = Math.sqrt(b2ac); + + if (b2ac < 0) { + continue; + } + + t1 = (-b + sqrtb2ac) / (2 * a); + + if (0 < t1 && t1 < 1) { + tvalues.push(t1); + } + + t2 = (-b - sqrtb2ac) / (2 * a); + + if (0 < t2 && t2 < 1) { + tvalues.push(t2); + } + } + + let j = tvalues.length, + mt; + const jlen = j; + + while (j--) { + t = tvalues[j]; + mt = 1 - t; + bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; + bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; + } + + bounds[0][jlen] = x0; + bounds[1][jlen] = y0; + bounds[0][jlen + 1] = x3; + bounds[1][jlen + 1] = y3; + bounds[0].length = bounds[1].length = jlen + 2; + return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; + } + +} + +exports.Util = Util; +const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; + +function stringToPDFString(str) { + if (str[0] >= "\xEF") { + let encoding; + + if (str[0] === "\xFE" && str[1] === "\xFF") { + encoding = "utf-16be"; + } else if (str[0] === "\xFF" && str[1] === "\xFE") { + encoding = "utf-16le"; + } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") { + encoding = "utf-8"; + } + + if (encoding) { + try { + const decoder = new TextDecoder(encoding, { + fatal: true + }); + const buffer = stringToBytes(str); + return decoder.decode(buffer); + } catch (ex) { + warn(`stringToPDFString: "${ex}".`); + } + } + } + + const strBuf = []; + + for (let i = 0, ii = str.length; i < ii; i++) { + const code = PDFStringTranslateTable[str.charCodeAt(i)]; + strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); + } + + return strBuf.join(""); +} + +function escapeString(str) { + return str.replace(/([()\\\n\r])/g, match => { + if (match === "\n") { + return "\\n"; + } else if (match === "\r") { + return "\\r"; + } + + return `\\${match}`; + }); +} + +function isAscii(str) { + return /^[\x00-\x7F]*$/.test(str); +} + +function stringToUTF16BEString(str) { + const buf = ["\xFE\xFF"]; + + for (let i = 0, ii = str.length; i < ii; i++) { + const char = str.charCodeAt(i); + buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); + } + + return buf.join(""); +} + +function stringToUTF8String(str) { + return decodeURIComponent(escape(str)); +} + +function utf8StringToString(str) { + return unescape(encodeURIComponent(str)); +} + +function isArrayBuffer(v) { + return typeof v === "object" && v !== null && v.byteLength !== undefined; +} + +function isArrayEqual(arr1, arr2) { + if (arr1.length !== arr2.length) { + return false; + } + + for (let i = 0, ii = arr1.length; i < ii; i++) { + if (arr1[i] !== arr2[i]) { + return false; + } + } + + return true; +} + +function getModificationDate(date = new Date()) { + const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; + return buffer.join(""); +} + +function createPromiseCapability() { + const capability = Object.create(null); + let isSettled = false; + Object.defineProperty(capability, "settled", { + get() { + return isSettled; + } + + }); + capability.promise = new Promise(function (resolve, reject) { + capability.resolve = function (data) { + isSettled = true; + resolve(data); + }; + + capability.reject = function (reason) { + isSettled = true; + reject(reason); + }; + }); + return capability; +} + +/***/ }), +/* 3 */ +/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { + + + +var _is_node = __w_pdfjs_require__(4); + +; + +/***/ }), +/* 4 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.isNodeJS = void 0; +const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); +exports.isNodeJS = isNodeJS; + +/***/ }), +/* 5 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = exports.CIRCULAR_REF = void 0; +exports.clearPrimitiveCaches = clearPrimitiveCaches; +exports.isCmd = isCmd; +exports.isDict = isDict; +exports.isName = isName; +exports.isRefsEqual = isRefsEqual; + +var _util = __w_pdfjs_require__(2); + +const CIRCULAR_REF = Symbol("CIRCULAR_REF"); +exports.CIRCULAR_REF = CIRCULAR_REF; +const EOF = Symbol("EOF"); +exports.EOF = EOF; + +const Name = function NameClosure() { + let nameCache = Object.create(null); + + class Name { + constructor(name) { + this.name = name; + } + + static get(name) { + return nameCache[name] || (nameCache[name] = new Name(name)); + } + + static _clearCache() { + nameCache = Object.create(null); + } + + } + + return Name; +}(); + +exports.Name = Name; + +const Cmd = function CmdClosure() { + let cmdCache = Object.create(null); + + class Cmd { + constructor(cmd) { + this.cmd = cmd; + } + + static get(cmd) { + return cmdCache[cmd] || (cmdCache[cmd] = new Cmd(cmd)); + } + + static _clearCache() { + cmdCache = Object.create(null); + } + + } + + return Cmd; +}(); + +exports.Cmd = Cmd; + +const nonSerializable = function nonSerializableClosure() { + return nonSerializable; +}; + +class Dict { + constructor(xref = null) { + this._map = Object.create(null); + this.xref = xref; + this.objId = null; + this.suppressEncryption = false; + this.__nonSerializable__ = nonSerializable; + } + + assignXref(newXref) { + this.xref = newXref; + } + + get size() { + return Object.keys(this._map).length; + } + + get(key1, key2, key3) { + let value = this._map[key1]; + + if (value === undefined && key2 !== undefined) { + value = this._map[key2]; + + if (value === undefined && key3 !== undefined) { + value = this._map[key3]; + } + } + + if (value instanceof Ref && this.xref) { + return this.xref.fetch(value, this.suppressEncryption); + } + + return value; + } + + async getAsync(key1, key2, key3) { + let value = this._map[key1]; + + if (value === undefined && key2 !== undefined) { + value = this._map[key2]; + + if (value === undefined && key3 !== undefined) { + value = this._map[key3]; + } + } + + if (value instanceof Ref && this.xref) { + return this.xref.fetchAsync(value, this.suppressEncryption); + } + + return value; + } + + getArray(key1, key2, key3) { + let value = this._map[key1]; + + if (value === undefined && key2 !== undefined) { + value = this._map[key2]; + + if (value === undefined && key3 !== undefined) { + value = this._map[key3]; + } + } + + if (value instanceof Ref && this.xref) { + value = this.xref.fetch(value, this.suppressEncryption); + } + + if (Array.isArray(value)) { + value = value.slice(); + + for (let i = 0, ii = value.length; i < ii; i++) { + if (value[i] instanceof Ref && this.xref) { + value[i] = this.xref.fetch(value[i], this.suppressEncryption); + } + } + } + + return value; + } + + getRaw(key) { + return this._map[key]; + } + + getKeys() { + return Object.keys(this._map); + } + + getRawValues() { + return Object.values(this._map); + } + + set(key, value) { + this._map[key] = value; + } + + has(key) { + return this._map[key] !== undefined; + } + + forEach(callback) { + for (const key in this._map) { + callback(key, this.get(key)); + } + } + + static get empty() { + const emptyDict = new Dict(null); + + emptyDict.set = (key, value) => { + (0, _util.unreachable)("Should not call `set` on the empty dictionary."); + }; + + return (0, _util.shadow)(this, "empty", emptyDict); + } + + static merge({ + xref, + dictArray, + mergeSubDicts = false + }) { + const mergedDict = new Dict(xref), + properties = new Map(); + + for (const dict of dictArray) { + if (!(dict instanceof Dict)) { + continue; + } + + for (const [key, value] of Object.entries(dict._map)) { + let property = properties.get(key); + + if (property === undefined) { + property = []; + properties.set(key, property); + } else if (!mergeSubDicts || !(value instanceof Dict)) { + continue; + } + + property.push(value); + } + } + + for (const [name, values] of properties) { + if (values.length === 1 || !(values[0] instanceof Dict)) { + mergedDict._map[name] = values[0]; + continue; + } + + const subDict = new Dict(xref); + + for (const dict of values) { + for (const [key, value] of Object.entries(dict._map)) { + if (subDict._map[key] === undefined) { + subDict._map[key] = value; + } + } + } + + if (subDict.size > 0) { + mergedDict._map[name] = subDict; + } + } + + properties.clear(); + return mergedDict.size > 0 ? mergedDict : Dict.empty; + } + +} + +exports.Dict = Dict; + +const Ref = function RefClosure() { + let refCache = Object.create(null); + + class Ref { + constructor(num, gen) { + this.num = num; + this.gen = gen; + } + + toString() { + if (this.gen === 0) { + return `${this.num}R`; + } + + return `${this.num}R${this.gen}`; + } + + static get(num, gen) { + const key = gen === 0 ? `${num}R` : `${num}R${gen}`; + return refCache[key] || (refCache[key] = new Ref(num, gen)); + } + + static _clearCache() { + refCache = Object.create(null); + } + + } + + return Ref; +}(); + +exports.Ref = Ref; + +class RefSet { + constructor(parent = null) { + this._set = new Set(parent && parent._set); + } + + has(ref) { + return this._set.has(ref.toString()); + } + + put(ref) { + this._set.add(ref.toString()); + } + + remove(ref) { + this._set.delete(ref.toString()); + } + + [Symbol.iterator]() { + return this._set.values(); + } + + clear() { + this._set.clear(); + } + +} + +exports.RefSet = RefSet; + +class RefSetCache { + constructor() { + this._map = new Map(); + } + + get size() { + return this._map.size; + } + + get(ref) { + return this._map.get(ref.toString()); + } + + has(ref) { + return this._map.has(ref.toString()); + } + + put(ref, obj) { + this._map.set(ref.toString(), obj); + } + + putAlias(ref, aliasRef) { + this._map.set(ref.toString(), this.get(aliasRef)); + } + + [Symbol.iterator]() { + return this._map.values(); + } + + clear() { + this._map.clear(); + } + +} + +exports.RefSetCache = RefSetCache; + +function isName(v, name) { + return v instanceof Name && (name === undefined || v.name === name); +} + +function isCmd(v, cmd) { + return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); +} + +function isDict(v, type) { + return v instanceof Dict && (type === undefined || isName(v.get("Type"), type)); +} + +function isRefsEqual(v1, v2) { + return v1.num === v2.num && v1.gen === v2.gen; +} + +function clearPrimitiveCaches() { + Cmd._clearCache(); + + Name._clearCache(); + + Ref._clearCache(); +} + +/***/ }), +/* 6 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.MissingDataException = exports.DocStats = void 0; +exports.collectActions = collectActions; +exports.encodeToXmlString = encodeToXmlString; +exports.escapePDFName = escapePDFName; +exports.getArrayLookupTableFactory = getArrayLookupTableFactory; +exports.getInheritableProperty = getInheritableProperty; +exports.getLookupTableFactory = getLookupTableFactory; +exports.getNewAnnotationsMap = getNewAnnotationsMap; +exports.isWhiteSpace = isWhiteSpace; +exports.log2 = log2; +exports.numberToString = numberToString; +exports.parseXFAPath = parseXFAPath; +exports.readInt8 = readInt8; +exports.readUint16 = readUint16; +exports.readUint32 = readUint32; +exports.recoverJsURL = recoverJsURL; +exports.toRomanNumerals = toRomanNumerals; +exports.validateCSSFont = validateCSSFont; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _base_stream = __w_pdfjs_require__(7); + +function getLookupTableFactory(initializer) { + let lookup; + return function () { + if (initializer) { + lookup = Object.create(null); + initializer(lookup); + initializer = null; + } + + return lookup; + }; +} + +function getArrayLookupTableFactory(initializer) { + let lookup; + return function () { + if (initializer) { + let arr = initializer(); + initializer = null; + lookup = Object.create(null); + + for (let i = 0, ii = arr.length; i < ii; i += 2) { + lookup[arr[i]] = arr[i + 1]; + } + + arr = null; + } + + return lookup; + }; +} + +class MissingDataException extends _util.BaseException { + constructor(begin, end) { + super(`Missing data [${begin}, ${end})`, "MissingDataException"); + this.begin = begin; + this.end = end; + } + +} + +exports.MissingDataException = MissingDataException; + +class ParserEOFException extends _util.BaseException { + constructor(msg) { + super(msg, "ParserEOFException"); + } + +} + +exports.ParserEOFException = ParserEOFException; + +class XRefEntryException extends _util.BaseException { + constructor(msg) { + super(msg, "XRefEntryException"); + } + +} + +exports.XRefEntryException = XRefEntryException; + +class XRefParseException extends _util.BaseException { + constructor(msg) { + super(msg, "XRefParseException"); + } + +} + +exports.XRefParseException = XRefParseException; + +class DocStats { + constructor(handler) { + this._handler = handler; + this._streamTypes = new Set(); + this._fontTypes = new Set(); + } + + _send() { + const streamTypes = Object.create(null), + fontTypes = Object.create(null); + + for (const type of this._streamTypes) { + streamTypes[type] = true; + } + + for (const type of this._fontTypes) { + fontTypes[type] = true; + } + + this._handler.send("DocStats", { + streamTypes, + fontTypes + }); + } + + addStreamType(type) { + if (this._streamTypes.has(type)) { + return; + } + + this._streamTypes.add(type); + + this._send(); + } + + addFontType(type) { + if (this._fontTypes.has(type)) { + return; + } + + this._fontTypes.add(type); + + this._send(); + } + +} + +exports.DocStats = DocStats; + +function getInheritableProperty({ + dict, + key, + getArray = false, + stopWhenFound = true +}) { + let values; + const visited = new _primitives.RefSet(); + + while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) { + if (dict.objId) { + visited.put(dict.objId); + } + + const value = getArray ? dict.getArray(key) : dict.get(key); + + if (value !== undefined) { + if (stopWhenFound) { + return value; + } + + if (!values) { + values = []; + } + + values.push(value); + } + + dict = dict.get("Parent"); + } + + return values; +} + +const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; + +function toRomanNumerals(number, lowerCase = false) { + (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); + const romanBuf = []; + let pos; + + while (number >= 1000) { + number -= 1000; + romanBuf.push("M"); + } + + pos = number / 100 | 0; + number %= 100; + romanBuf.push(ROMAN_NUMBER_MAP[pos]); + pos = number / 10 | 0; + number %= 10; + romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); + romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); + const romanStr = romanBuf.join(""); + return lowerCase ? romanStr.toLowerCase() : romanStr; +} + +function log2(x) { + if (x <= 0) { + return 0; + } + + return Math.ceil(Math.log2(x)); +} + +function readInt8(data, offset) { + return data[offset] << 24 >> 24; +} + +function readUint16(data, offset) { + return data[offset] << 8 | data[offset + 1]; +} + +function readUint32(data, offset) { + return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; +} + +function isWhiteSpace(ch) { + return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; +} + +function parseXFAPath(path) { + const positionPattern = /(.+)\[(\d+)\]$/; + return path.split(".").map(component => { + const m = component.match(positionPattern); + + if (m) { + return { + name: m[1], + pos: parseInt(m[2], 10) + }; + } + + return { + name: component, + pos: 0 + }; + }); +} + +function escapePDFName(str) { + const buffer = []; + let start = 0; + + for (let i = 0, ii = str.length; i < ii; i++) { + const char = str.charCodeAt(i); + + if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) { + if (start < i) { + buffer.push(str.substring(start, i)); + } + + buffer.push(`#${char.toString(16)}`); + start = i + 1; + } + } + + if (buffer.length === 0) { + return str; + } + + if (start < str.length) { + buffer.push(str.substring(start, str.length)); + } + + return buffer.join(""); +} + +function _collectJS(entry, xref, list, parents) { + if (!entry) { + return; + } + + let parent = null; + + if (entry instanceof _primitives.Ref) { + if (parents.has(entry)) { + return; + } + + parent = entry; + parents.put(parent); + entry = xref.fetch(entry); + } + + if (Array.isArray(entry)) { + for (const element of entry) { + _collectJS(element, xref, list, parents); + } + } else if (entry instanceof _primitives.Dict) { + if ((0, _primitives.isName)(entry.get("S"), "JavaScript")) { + const js = entry.get("JS"); + let code; + + if (js instanceof _base_stream.BaseStream) { + code = js.getString(); + } else if (typeof js === "string") { + code = js; + } + + code = code && (0, _util.stringToPDFString)(code).replace(/\u0000/g, ""); + + if (code) { + list.push(code); + } + } + + _collectJS(entry.getRaw("Next"), xref, list, parents); + } + + if (parent) { + parents.remove(parent); + } +} + +function collectActions(xref, dict, eventType) { + const actions = Object.create(null); + const additionalActionsDicts = getInheritableProperty({ + dict, + key: "AA", + stopWhenFound: false + }); + + if (additionalActionsDicts) { + for (let i = additionalActionsDicts.length - 1; i >= 0; i--) { + const additionalActions = additionalActionsDicts[i]; + + if (!(additionalActions instanceof _primitives.Dict)) { + continue; + } + + for (const key of additionalActions.getKeys()) { + const action = eventType[key]; + + if (!action) { + continue; + } + + const actionDict = additionalActions.getRaw(key); + const parents = new _primitives.RefSet(); + const list = []; + + _collectJS(actionDict, xref, list, parents); + + if (list.length > 0) { + actions[action] = list; + } + } + } + } + + if (dict.has("A")) { + const actionDict = dict.get("A"); + const parents = new _primitives.RefSet(); + const list = []; + + _collectJS(actionDict, xref, list, parents); + + if (list.length > 0) { + actions.Action = list; + } + } + + return (0, _util.objectSize)(actions) > 0 ? actions : null; +} + +const XMLEntities = { + 0x3c: "<", + 0x3e: ">", + 0x26: "&", + 0x22: """, + 0x27: "'" +}; + +function encodeToXmlString(str) { + const buffer = []; + let start = 0; + + for (let i = 0, ii = str.length; i < ii; i++) { + const char = str.codePointAt(i); + + if (0x20 <= char && char <= 0x7e) { + const entity = XMLEntities[char]; + + if (entity) { + if (start < i) { + buffer.push(str.substring(start, i)); + } + + buffer.push(entity); + start = i + 1; + } + } else { + if (start < i) { + buffer.push(str.substring(start, i)); + } + + buffer.push(`&#x${char.toString(16).toUpperCase()};`); + + if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) { + i++; + } + + start = i + 1; + } + } + + if (buffer.length === 0) { + return str; + } + + if (start < str.length) { + buffer.push(str.substring(start, str.length)); + } + + return buffer.join(""); +} + +function validateCSSFont(cssFontInfo) { + const DEFAULT_CSS_FONT_OBLIQUE = "14"; + const DEFAULT_CSS_FONT_WEIGHT = "400"; + const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]); + const { + fontFamily, + fontWeight, + italicAngle + } = cssFontInfo; + + if (/^".*"$/.test(fontFamily)) { + if (/[^\\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) { + (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`); + return false; + } + } else if (/^'.*'$/.test(fontFamily)) { + if (/[^\\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) { + (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`); + return false; + } + } else { + for (const ident of fontFamily.split(/[ \t]+/)) { + if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\\]+$/.test(ident)) { + (0, _util.warn)(`XFA - FontFamily contains some invalid : ${fontFamily}.`); + return false; + } + } + } + + const weight = fontWeight ? fontWeight.toString() : ""; + cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT; + const angle = parseFloat(italicAngle); + cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString(); + return true; +} + +function recoverJsURL(str) { + const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"]; + const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i"); + const jsUrl = regex.exec(str); + + if (jsUrl && jsUrl[2]) { + const url = jsUrl[2]; + let newWindow = false; + + if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { + newWindow = true; + } + + return { + url, + newWindow + }; + } + + return null; +} + +function numberToString(value) { + if (Number.isInteger(value)) { + return value.toString(); + } + + const roundedValue = Math.round(value * 100); + + if (roundedValue % 100 === 0) { + return (roundedValue / 100).toString(); + } + + if (roundedValue % 10 === 0) { + return value.toFixed(1); + } + + return value.toFixed(2); +} + +function getNewAnnotationsMap(annotationStorage) { + if (!annotationStorage) { + return null; + } + + const newAnnotationsByPage = new Map(); + + for (const [key, value] of annotationStorage) { + if (!key.startsWith(_util.AnnotationEditorPrefix)) { + continue; + } + + let annotations = newAnnotationsByPage.get(value.pageIndex); + + if (!annotations) { + annotations = []; + newAnnotationsByPage.set(value.pageIndex, annotations); + } + + annotations.push(value); + } + + return newAnnotationsByPage.size > 0 ? newAnnotationsByPage : null; +} + +/***/ }), +/* 7 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.BaseStream = void 0; + +var _util = __w_pdfjs_require__(2); + +class BaseStream { + constructor() { + if (this.constructor === BaseStream) { + (0, _util.unreachable)("Cannot initialize BaseStream."); + } + } + + get length() { + (0, _util.unreachable)("Abstract getter `length` accessed"); + } + + get isEmpty() { + (0, _util.unreachable)("Abstract getter `isEmpty` accessed"); + } + + get isDataLoaded() { + return (0, _util.shadow)(this, "isDataLoaded", true); + } + + getByte() { + (0, _util.unreachable)("Abstract method `getByte` called"); + } + + getBytes(length) { + (0, _util.unreachable)("Abstract method `getBytes` called"); + } + + peekByte() { + const peekedByte = this.getByte(); + + if (peekedByte !== -1) { + this.pos--; + } + + return peekedByte; + } + + peekBytes(length) { + const bytes = this.getBytes(length); + this.pos -= bytes.length; + return bytes; + } + + getUint16() { + const b0 = this.getByte(); + const b1 = this.getByte(); + + if (b0 === -1 || b1 === -1) { + return -1; + } + + return (b0 << 8) + b1; + } + + getInt32() { + const b0 = this.getByte(); + const b1 = this.getByte(); + const b2 = this.getByte(); + const b3 = this.getByte(); + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; + } + + getByteRange(begin, end) { + (0, _util.unreachable)("Abstract method `getByteRange` called"); + } + + getString(length) { + return (0, _util.bytesToString)(this.getBytes(length)); + } + + skip(n) { + this.pos += n || 1; + } + + reset() { + (0, _util.unreachable)("Abstract method `reset` called"); + } + + moveStart() { + (0, _util.unreachable)("Abstract method `moveStart` called"); + } + + makeSubStream(start, length, dict = null) { + (0, _util.unreachable)("Abstract method `makeSubStream` called"); + } + + getBaseStreams() { + return null; + } + +} + +exports.BaseStream = BaseStream; + +/***/ }), +/* 8 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NetworkPdfManager = exports.LocalPdfManager = void 0; + +var _util = __w_pdfjs_require__(2); + +var _chunked_stream = __w_pdfjs_require__(9); + +var _core_utils = __w_pdfjs_require__(6); + +var _document = __w_pdfjs_require__(11); + +var _stream = __w_pdfjs_require__(10); + +function parseDocBaseUrl(url) { + if (url) { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url); + + if (absoluteUrl) { + return absoluteUrl.href; + } + + (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`); + } + + return null; +} + +class BasePdfManager { + constructor() { + if (this.constructor === BasePdfManager) { + (0, _util.unreachable)("Cannot initialize BasePdfManager."); + } + } + + get docId() { + return this._docId; + } + + get password() { + return this._password; + } + + get docBaseUrl() { + const catalog = this.pdfDocument.catalog; + return (0, _util.shadow)(this, "docBaseUrl", catalog.baseUrl || this._docBaseUrl); + } + + onLoadedStream() { + (0, _util.unreachable)("Abstract method `onLoadedStream` called"); + } + + ensureDoc(prop, args) { + return this.ensure(this.pdfDocument, prop, args); + } + + ensureXRef(prop, args) { + return this.ensure(this.pdfDocument.xref, prop, args); + } + + ensureCatalog(prop, args) { + return this.ensure(this.pdfDocument.catalog, prop, args); + } + + getPage(pageIndex) { + return this.pdfDocument.getPage(pageIndex); + } + + fontFallback(id, handler) { + return this.pdfDocument.fontFallback(id, handler); + } + + loadXfaFonts(handler, task) { + return this.pdfDocument.loadXfaFonts(handler, task); + } + + loadXfaImages() { + return this.pdfDocument.loadXfaImages(); + } + + serializeXfaData(annotationStorage) { + return this.pdfDocument.serializeXfaData(annotationStorage); + } + + cleanup(manuallyTriggered = false) { + return this.pdfDocument.cleanup(manuallyTriggered); + } + + async ensure(obj, prop, args) { + (0, _util.unreachable)("Abstract method `ensure` called"); + } + + requestRange(begin, end) { + (0, _util.unreachable)("Abstract method `requestRange` called"); + } + + requestLoadedStream() { + (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); + } + + sendProgressiveData(chunk) { + (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); + } + + updatePassword(password) { + this._password = password; + } + + terminate(reason) { + (0, _util.unreachable)("Abstract method `terminate` called"); + } + +} + +class LocalPdfManager extends BasePdfManager { + constructor(docId, data, password, msgHandler, evaluatorOptions, enableXfa, docBaseUrl) { + super(); + this._docId = docId; + this._password = password; + this._docBaseUrl = parseDocBaseUrl(docBaseUrl); + this.msgHandler = msgHandler; + this.evaluatorOptions = evaluatorOptions; + this.enableXfa = enableXfa; + const stream = new _stream.Stream(data); + this.pdfDocument = new _document.PDFDocument(this, stream); + this._loadedStreamPromise = Promise.resolve(stream); + } + + async ensure(obj, prop, args) { + const value = obj[prop]; + + if (typeof value === "function") { + return value.apply(obj, args); + } + + return value; + } + + requestRange(begin, end) { + return Promise.resolve(); + } + + requestLoadedStream() {} + + onLoadedStream() { + return this._loadedStreamPromise; + } + + terminate(reason) {} + +} + +exports.LocalPdfManager = LocalPdfManager; + +class NetworkPdfManager extends BasePdfManager { + constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) { + super(); + this._docId = docId; + this._password = args.password; + this._docBaseUrl = parseDocBaseUrl(docBaseUrl); + this.msgHandler = args.msgHandler; + this.evaluatorOptions = evaluatorOptions; + this.enableXfa = enableXfa; + this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { + msgHandler: args.msgHandler, + length: args.length, + disableAutoFetch: args.disableAutoFetch, + rangeChunkSize: args.rangeChunkSize + }); + this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); + } + + async ensure(obj, prop, args) { + try { + const value = obj[prop]; + + if (typeof value === "function") { + return value.apply(obj, args); + } + + return value; + } catch (ex) { + if (!(ex instanceof _core_utils.MissingDataException)) { + throw ex; + } + + await this.requestRange(ex.begin, ex.end); + return this.ensure(obj, prop, args); + } + } + + requestRange(begin, end) { + return this.streamManager.requestRange(begin, end); + } + + requestLoadedStream() { + this.streamManager.requestAllChunks(); + } + + sendProgressiveData(chunk) { + this.streamManager.onReceiveData({ + chunk + }); + } + + onLoadedStream() { + return this.streamManager.onLoadedStream(); + } + + terminate(reason) { + this.streamManager.abort(reason); + } + +} + +exports.NetworkPdfManager = NetworkPdfManager; + +/***/ }), +/* 9 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ChunkedStreamManager = exports.ChunkedStream = void 0; + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _stream = __w_pdfjs_require__(10); + +class ChunkedStream extends _stream.Stream { + constructor(length, chunkSize, manager) { + super(new Uint8Array(length), 0, length, null); + this.chunkSize = chunkSize; + this._loadedChunks = new Set(); + this.numChunks = Math.ceil(length / chunkSize); + this.manager = manager; + this.progressiveDataLength = 0; + this.lastSuccessfulEnsureByteChunk = -1; + } + + getMissingChunks() { + const chunks = []; + + for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { + if (!this._loadedChunks.has(chunk)) { + chunks.push(chunk); + } + } + + return chunks; + } + + get numChunksLoaded() { + return this._loadedChunks.size; + } + + get isDataLoaded() { + return this.numChunksLoaded === this.numChunks; + } + + onReceiveData(begin, chunk) { + const chunkSize = this.chunkSize; + + if (begin % chunkSize !== 0) { + throw new Error(`Bad begin offset: ${begin}`); + } + + const end = begin + chunk.byteLength; + + if (end % chunkSize !== 0 && end !== this.bytes.length) { + throw new Error(`Bad end offset: ${end}`); + } + + this.bytes.set(new Uint8Array(chunk), begin); + const beginChunk = Math.floor(begin / chunkSize); + const endChunk = Math.floor((end - 1) / chunkSize) + 1; + + for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + this._loadedChunks.add(curChunk); + } + } + + onReceiveProgressiveData(data) { + let position = this.progressiveDataLength; + const beginChunk = Math.floor(position / this.chunkSize); + this.bytes.set(new Uint8Array(data), position); + position += data.byteLength; + this.progressiveDataLength = position; + const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); + + for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + this._loadedChunks.add(curChunk); + } + } + + ensureByte(pos) { + if (pos < this.progressiveDataLength) { + return; + } + + const chunk = Math.floor(pos / this.chunkSize); + + if (chunk > this.numChunks) { + return; + } + + if (chunk === this.lastSuccessfulEnsureByteChunk) { + return; + } + + if (!this._loadedChunks.has(chunk)) { + throw new _core_utils.MissingDataException(pos, pos + 1); + } + + this.lastSuccessfulEnsureByteChunk = chunk; + } + + ensureRange(begin, end) { + if (begin >= end) { + return; + } + + if (end <= this.progressiveDataLength) { + return; + } + + const beginChunk = Math.floor(begin / this.chunkSize); + + if (beginChunk > this.numChunks) { + return; + } + + const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks); + + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this._loadedChunks.has(chunk)) { + throw new _core_utils.MissingDataException(begin, end); + } + } + } + + nextEmptyChunk(beginChunk) { + const numChunks = this.numChunks; + + for (let i = 0; i < numChunks; ++i) { + const chunk = (beginChunk + i) % numChunks; + + if (!this._loadedChunks.has(chunk)) { + return chunk; + } + } + + return null; + } + + hasChunk(chunk) { + return this._loadedChunks.has(chunk); + } + + getByte() { + const pos = this.pos; + + if (pos >= this.end) { + return -1; + } + + if (pos >= this.progressiveDataLength) { + this.ensureByte(pos); + } + + return this.bytes[this.pos++]; + } + + getBytes(length) { + const bytes = this.bytes; + const pos = this.pos; + const strEnd = this.end; + + if (!length) { + if (strEnd > this.progressiveDataLength) { + this.ensureRange(pos, strEnd); + } + + return bytes.subarray(pos, strEnd); + } + + let end = pos + length; + + if (end > strEnd) { + end = strEnd; + } + + if (end > this.progressiveDataLength) { + this.ensureRange(pos, end); + } + + this.pos = end; + return bytes.subarray(pos, end); + } + + getByteRange(begin, end) { + if (begin < 0) { + begin = 0; + } + + if (end > this.end) { + end = this.end; + } + + if (end > this.progressiveDataLength) { + this.ensureRange(begin, end); + } + + return this.bytes.subarray(begin, end); + } + + makeSubStream(start, length, dict = null) { + if (length) { + if (start + length > this.progressiveDataLength) { + this.ensureRange(start, start + length); + } + } else { + if (start >= this.progressiveDataLength) { + this.ensureByte(start); + } + } + + function ChunkedStreamSubstream() {} + + ChunkedStreamSubstream.prototype = Object.create(this); + + ChunkedStreamSubstream.prototype.getMissingChunks = function () { + const chunkSize = this.chunkSize; + const beginChunk = Math.floor(this.start / chunkSize); + const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; + const missingChunks = []; + + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!this._loadedChunks.has(chunk)) { + missingChunks.push(chunk); + } + } + + return missingChunks; + }; + + Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { + get() { + if (this.numChunksLoaded === this.numChunks) { + return true; + } + + return this.getMissingChunks().length === 0; + }, + + configurable: true + }); + const subStream = new ChunkedStreamSubstream(); + subStream.pos = subStream.start = start; + subStream.end = start + length || this.end; + subStream.dict = dict; + return subStream; + } + + getBaseStreams() { + return [this]; + } + +} + +exports.ChunkedStream = ChunkedStream; + +class ChunkedStreamManager { + constructor(pdfNetworkStream, args) { + this.length = args.length; + this.chunkSize = args.rangeChunkSize; + this.stream = new ChunkedStream(this.length, this.chunkSize, this); + this.pdfNetworkStream = pdfNetworkStream; + this.disableAutoFetch = args.disableAutoFetch; + this.msgHandler = args.msgHandler; + this.currRequestId = 0; + this._chunksNeededByRequest = new Map(); + this._requestsByChunk = new Map(); + this._promisesByRequest = new Map(); + this.progressiveDataLength = 0; + this.aborted = false; + this._loadedStreamCapability = (0, _util.createPromiseCapability)(); + } + + onLoadedStream() { + return this._loadedStreamCapability.promise; + } + + sendRequest(begin, end) { + const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); + + if (!rangeReader.isStreamingSupported) { + rangeReader.onProgress = this.onProgress.bind(this); + } + + let chunks = [], + loaded = 0; + return new Promise((resolve, reject) => { + const readChunk = chunk => { + try { + if (!chunk.done) { + const data = chunk.value; + chunks.push(data); + loaded += (0, _util.arrayByteLength)(data); + + if (rangeReader.isStreamingSupported) { + this.onProgress({ + loaded + }); + } + + rangeReader.read().then(readChunk, reject); + return; + } + + const chunkData = (0, _util.arraysToBytes)(chunks); + chunks = null; + resolve(chunkData); + } catch (e) { + reject(e); + } + }; + + rangeReader.read().then(readChunk, reject); + }).then(data => { + if (this.aborted) { + return; + } + + this.onReceiveData({ + chunk: data, + begin + }); + }); + } + + requestAllChunks() { + const missingChunks = this.stream.getMissingChunks(); + + this._requestChunks(missingChunks); + + return this._loadedStreamCapability.promise; + } + + _requestChunks(chunks) { + const requestId = this.currRequestId++; + const chunksNeeded = new Set(); + + this._chunksNeededByRequest.set(requestId, chunksNeeded); + + for (const chunk of chunks) { + if (!this.stream.hasChunk(chunk)) { + chunksNeeded.add(chunk); + } + } + + if (chunksNeeded.size === 0) { + return Promise.resolve(); + } + + const capability = (0, _util.createPromiseCapability)(); + + this._promisesByRequest.set(requestId, capability); + + const chunksToRequest = []; + + for (const chunk of chunksNeeded) { + let requestIds = this._requestsByChunk.get(chunk); + + if (!requestIds) { + requestIds = []; + + this._requestsByChunk.set(chunk, requestIds); + + chunksToRequest.push(chunk); + } + + requestIds.push(requestId); + } + + if (chunksToRequest.length > 0) { + const groupedChunksToRequest = this.groupChunks(chunksToRequest); + + for (const groupedChunk of groupedChunksToRequest) { + const begin = groupedChunk.beginChunk * this.chunkSize; + const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); + this.sendRequest(begin, end).catch(capability.reject); + } + } + + return capability.promise.catch(reason => { + if (this.aborted) { + return; + } + + throw reason; + }); + } + + getStream() { + return this.stream; + } + + requestRange(begin, end) { + end = Math.min(end, this.length); + const beginChunk = this.getBeginChunk(begin); + const endChunk = this.getEndChunk(end); + const chunks = []; + + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + chunks.push(chunk); + } + + return this._requestChunks(chunks); + } + + requestRanges(ranges = []) { + const chunksToRequest = []; + + for (const range of ranges) { + const beginChunk = this.getBeginChunk(range.begin); + const endChunk = this.getEndChunk(range.end); + + for (let chunk = beginChunk; chunk < endChunk; ++chunk) { + if (!chunksToRequest.includes(chunk)) { + chunksToRequest.push(chunk); + } + } + } + + chunksToRequest.sort(function (a, b) { + return a - b; + }); + return this._requestChunks(chunksToRequest); + } + + groupChunks(chunks) { + const groupedChunks = []; + let beginChunk = -1; + let prevChunk = -1; + + for (let i = 0, ii = chunks.length; i < ii; ++i) { + const chunk = chunks[i]; + + if (beginChunk < 0) { + beginChunk = chunk; + } + + if (prevChunk >= 0 && prevChunk + 1 !== chunk) { + groupedChunks.push({ + beginChunk, + endChunk: prevChunk + 1 + }); + beginChunk = chunk; + } + + if (i + 1 === chunks.length) { + groupedChunks.push({ + beginChunk, + endChunk: chunk + 1 + }); + } + + prevChunk = chunk; + } + + return groupedChunks; + } + + onProgress(args) { + this.msgHandler.send("DocProgress", { + loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, + total: this.length + }); + } + + onReceiveData(args) { + const chunk = args.chunk; + const isProgressive = args.begin === undefined; + const begin = isProgressive ? this.progressiveDataLength : args.begin; + const end = begin + chunk.byteLength; + const beginChunk = Math.floor(begin / this.chunkSize); + const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); + + if (isProgressive) { + this.stream.onReceiveProgressiveData(chunk); + this.progressiveDataLength = end; + } else { + this.stream.onReceiveData(begin, chunk); + } + + if (this.stream.isDataLoaded) { + this._loadedStreamCapability.resolve(this.stream); + } + + const loadedRequests = []; + + for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { + const requestIds = this._requestsByChunk.get(curChunk); + + if (!requestIds) { + continue; + } + + this._requestsByChunk.delete(curChunk); + + for (const requestId of requestIds) { + const chunksNeeded = this._chunksNeededByRequest.get(requestId); + + if (chunksNeeded.has(curChunk)) { + chunksNeeded.delete(curChunk); + } + + if (chunksNeeded.size > 0) { + continue; + } + + loadedRequests.push(requestId); + } + } + + if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { + let nextEmptyChunk; + + if (this.stream.numChunksLoaded === 1) { + const lastChunk = this.stream.numChunks - 1; + + if (!this.stream.hasChunk(lastChunk)) { + nextEmptyChunk = lastChunk; + } + } else { + nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); + } + + if (Number.isInteger(nextEmptyChunk)) { + this._requestChunks([nextEmptyChunk]); + } + } + + for (const requestId of loadedRequests) { + const capability = this._promisesByRequest.get(requestId); + + this._promisesByRequest.delete(requestId); + + capability.resolve(); + } + + this.msgHandler.send("DocProgress", { + loaded: this.stream.numChunksLoaded * this.chunkSize, + total: this.length + }); + } + + onError(err) { + this._loadedStreamCapability.reject(err); + } + + getBeginChunk(begin) { + return Math.floor(begin / this.chunkSize); + } + + getEndChunk(end) { + return Math.floor((end - 1) / this.chunkSize) + 1; + } + + abort(reason) { + this.aborted = true; + + if (this.pdfNetworkStream) { + this.pdfNetworkStream.cancelAllRequests(reason); + } + + for (const capability of this._promisesByRequest.values()) { + capability.reject(reason); + } + } + +} + +exports.ChunkedStreamManager = ChunkedStreamManager; + +/***/ }), +/* 10 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StringStream = exports.Stream = exports.NullStream = void 0; + +var _base_stream = __w_pdfjs_require__(7); + +var _util = __w_pdfjs_require__(2); + +class Stream extends _base_stream.BaseStream { + constructor(arrayBuffer, start, length, dict) { + super(); + this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); + this.start = start || 0; + this.pos = this.start; + this.end = start + length || this.bytes.length; + this.dict = dict; + } + + get length() { + return this.end - this.start; + } + + get isEmpty() { + return this.length === 0; + } + + getByte() { + if (this.pos >= this.end) { + return -1; + } + + return this.bytes[this.pos++]; + } + + getBytes(length) { + const bytes = this.bytes; + const pos = this.pos; + const strEnd = this.end; + + if (!length) { + return bytes.subarray(pos, strEnd); + } + + let end = pos + length; + + if (end > strEnd) { + end = strEnd; + } + + this.pos = end; + return bytes.subarray(pos, end); + } + + getByteRange(begin, end) { + if (begin < 0) { + begin = 0; + } + + if (end > this.end) { + end = this.end; + } + + return this.bytes.subarray(begin, end); + } + + reset() { + this.pos = this.start; + } + + moveStart() { + this.start = this.pos; + } + + makeSubStream(start, length, dict = null) { + return new Stream(this.bytes.buffer, start, length, dict); + } + +} + +exports.Stream = Stream; + +class StringStream extends Stream { + constructor(str) { + super((0, _util.stringToBytes)(str)); + } + +} + +exports.StringStream = StringStream; + +class NullStream extends Stream { + constructor() { + super(new Uint8Array(0)); + } + +} + +exports.NullStream = NullStream; + +/***/ }), +/* 11 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Page = exports.PDFDocument = void 0; + +var _annotation = __w_pdfjs_require__(12); + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _primitives = __w_pdfjs_require__(5); + +var _xfa_fonts = __w_pdfjs_require__(51); + +var _base_stream = __w_pdfjs_require__(7); + +var _crypto = __w_pdfjs_require__(67); + +var _catalog = __w_pdfjs_require__(69); + +var _cleanup_helper = __w_pdfjs_require__(71); + +var _dataset_reader = __w_pdfjs_require__(100); + +var _parser = __w_pdfjs_require__(17); + +var _stream = __w_pdfjs_require__(10); + +var _object_loader = __w_pdfjs_require__(75); + +var _operator_list = __w_pdfjs_require__(62); + +var _evaluator = __w_pdfjs_require__(15); + +var _decode_stream = __w_pdfjs_require__(19); + +var _struct_tree = __w_pdfjs_require__(74); + +var _writer = __w_pdfjs_require__(65); + +var _factory = __w_pdfjs_require__(76); + +var _xref = __w_pdfjs_require__(101); + +const DEFAULT_USER_UNIT = 1.0; +const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; + +class Page { + constructor({ + pdfManager, + xref, + pageIndex, + pageDict, + ref, + globalIdFactory, + fontCache, + builtInCMapCache, + standardFontDataCache, + globalImageCache, + nonBlendModesSet, + xfaFactory + }) { + this.pdfManager = pdfManager; + this.pageIndex = pageIndex; + this.pageDict = pageDict; + this.xref = xref; + this.ref = ref; + this.fontCache = fontCache; + this.builtInCMapCache = builtInCMapCache; + this.standardFontDataCache = standardFontDataCache; + this.globalImageCache = globalImageCache; + this.nonBlendModesSet = nonBlendModesSet; + this.evaluatorOptions = pdfManager.evaluatorOptions; + this.resourcesPromise = null; + this.xfaFactory = xfaFactory; + const idCounters = { + obj: 0 + }; + this._localIdFactory = class extends globalIdFactory { + static createObjId() { + return `p${pageIndex}_${++idCounters.obj}`; + } + + static getPageObjId() { + return `page${ref.toString()}`; + } + + }; + } + + _getInheritableProperty(key, getArray = false) { + const value = (0, _core_utils.getInheritableProperty)({ + dict: this.pageDict, + key, + getArray, + stopWhenFound: false + }); + + if (!Array.isArray(value)) { + return value; + } + + if (value.length === 1 || !(value[0] instanceof _primitives.Dict)) { + return value[0]; + } + + return _primitives.Dict.merge({ + xref: this.xref, + dictArray: value + }); + } + + get content() { + return this.pageDict.getArray("Contents"); + } + + get resources() { + const resources = this._getInheritableProperty("Resources"); + + return (0, _util.shadow)(this, "resources", resources instanceof _primitives.Dict ? resources : _primitives.Dict.empty); + } + + _getBoundingBox(name) { + if (this.xfaData) { + return this.xfaData.bbox; + } + + const box = this._getInheritableProperty(name, true); + + if (Array.isArray(box) && box.length === 4) { + if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { + return box; + } + + (0, _util.warn)(`Empty /${name} entry.`); + } + + return null; + } + + get mediaBox() { + return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX); + } + + get cropBox() { + return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox); + } + + get userUnit() { + let obj = this.pageDict.get("UserUnit"); + + if (typeof obj !== "number" || obj <= 0) { + obj = DEFAULT_USER_UNIT; + } + + return (0, _util.shadow)(this, "userUnit", obj); + } + + get view() { + const { + cropBox, + mediaBox + } = this; + let view; + + if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) { + view = mediaBox; + } else { + const box = _util.Util.intersect(cropBox, mediaBox); + + if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { + view = box; + } else { + (0, _util.warn)("Empty /CropBox and /MediaBox intersection."); + } + } + + return (0, _util.shadow)(this, "view", view || mediaBox); + } + + get rotate() { + let rotate = this._getInheritableProperty("Rotate") || 0; + + if (rotate % 90 !== 0) { + rotate = 0; + } else if (rotate >= 360) { + rotate %= 360; + } else if (rotate < 0) { + rotate = (rotate % 360 + 360) % 360; + } + + return (0, _util.shadow)(this, "rotate", rotate); + } + + _onSubStreamError(handler, reason, objId) { + if (this.evaluatorOptions.ignoreErrors) { + handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorContentSubStream + }); + (0, _util.warn)(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`); + return; + } + + throw reason; + } + + getContentStream(handler) { + return this.pdfManager.ensure(this, "content").then(content => { + if (content instanceof _base_stream.BaseStream) { + return content; + } + + if (Array.isArray(content)) { + return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this, handler)); + } + + return new _stream.NullStream(); + }); + } + + get xfaData() { + return (0, _util.shadow)(this, "xfaData", this.xfaFactory ? { + bbox: this.xfaFactory.getBoundingBox(this.pageIndex) + } : null); + } + + async saveNewAnnotations(handler, task, annotations) { + if (this.xfaFactory) { + throw new Error("XFA: Cannot save new annotations."); + } + + const partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + options: this.evaluatorOptions + }); + const pageDict = this.pageDict; + const annotationsArray = this.annotations.slice(); + const newData = await _annotation.AnnotationFactory.saveNewAnnotations(partialEvaluator, task, annotations); + + for (const { + ref + } of newData.annotations) { + annotationsArray.push(ref); + } + + const savedDict = pageDict.get("Annots"); + pageDict.set("Annots", annotationsArray); + const buffer = []; + let transform = null; + + if (this.xref.encrypt) { + transform = this.xref.encrypt.createCipherTransform(this.ref.num, this.ref.gen); + } + + (0, _writer.writeObject)(this.ref, pageDict, buffer, transform); + + if (savedDict) { + pageDict.set("Annots", savedDict); + } + + const objects = newData.dependencies; + objects.push({ + ref: this.ref, + data: buffer.join("") + }, ...newData.annotations); + return objects; + } + + save(handler, task, annotationStorage) { + const partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + options: this.evaluatorOptions + }); + return this._parsedAnnotations.then(function (annotations) { + const newRefsPromises = []; + + for (const annotation of annotations) { + if (!annotation.mustBePrinted(annotationStorage)) { + continue; + } + + newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) { + (0, _util.warn)("save - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); + return null; + })); + } + + return Promise.all(newRefsPromises).then(function (newRefs) { + return newRefs.filter(newRef => !!newRef); + }); + }); + } + + loadResources(keys) { + if (!this.resourcesPromise) { + this.resourcesPromise = this.pdfManager.ensure(this, "resources"); + } + + return this.resourcesPromise.then(() => { + const objectLoader = new _object_loader.ObjectLoader(this.resources, keys, this.xref); + return objectLoader.load(); + }); + } + + getOperatorList({ + handler, + sink, + task, + intent, + cacheKey, + annotationStorage = null + }) { + const contentStreamPromise = this.getContentStream(handler); + const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]); + const partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + options: this.evaluatorOptions + }); + const newAnnotationsByPage = !this.xfaFactory ? (0, _core_utils.getNewAnnotationsMap)(annotationStorage) : null; + let newAnnotationsPromise = Promise.resolve(null); + + if (newAnnotationsByPage) { + const newAnnotations = newAnnotationsByPage.get(this.pageIndex); + + if (newAnnotations) { + newAnnotationsPromise = _annotation.AnnotationFactory.printNewAnnotations(partialEvaluator, task, newAnnotations); + } + } + + const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); + const pageListPromise = dataPromises.then(([contentStream]) => { + const opList = new _operator_list.OperatorList(intent, sink); + handler.send("StartRenderPage", { + transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet), + pageIndex: this.pageIndex, + cacheKey + }); + return partialEvaluator.getOperatorList({ + stream: contentStream, + task, + resources: this.resources, + operatorList: opList + }).then(function () { + return opList; + }); + }); + return Promise.all([pageListPromise, this._parsedAnnotations, newAnnotationsPromise]).then(function ([pageOpList, annotations, newAnnotations]) { + if (newAnnotations) { + annotations = annotations.concat(newAnnotations); + } + + if (annotations.length === 0 || intent & _util.RenderingIntentFlag.ANNOTATIONS_DISABLE) { + pageOpList.flush(true); + return { + length: pageOpList.totalLength + }; + } + + const renderForms = !!(intent & _util.RenderingIntentFlag.ANNOTATIONS_FORMS), + intentAny = !!(intent & _util.RenderingIntentFlag.ANY), + intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), + intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); + const opListPromises = []; + + for (const annotation of annotations) { + if (intentAny || intentDisplay && annotation.mustBeViewed(annotationStorage) || intentPrint && annotation.mustBePrinted(annotationStorage)) { + opListPromises.push(annotation.getOperatorList(partialEvaluator, task, intent, renderForms, annotationStorage).catch(function (reason) { + (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); + return null; + })); + } + } + + return Promise.all(opListPromises).then(function (opLists) { + let form = false, + canvas = false; + + for (const { + opList, + separateForm, + separateCanvas + } of opLists) { + pageOpList.addOpList(opList); + + if (separateForm) { + form = separateForm; + } + + if (separateCanvas) { + canvas = separateCanvas; + } + } + + pageOpList.flush(true, { + form, + canvas + }); + return { + length: pageOpList.totalLength + }; + }); + }); + } + + extractTextContent({ + handler, + task, + includeMarkedContent, + sink, + combineTextItems + }) { + const contentStreamPromise = this.getContentStream(handler); + const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]); + const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); + return dataPromises.then(([contentStream]) => { + const partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + options: this.evaluatorOptions + }); + return partialEvaluator.getTextContent({ + stream: contentStream, + task, + resources: this.resources, + includeMarkedContent, + combineTextItems, + sink, + viewBox: this.view + }); + }); + } + + async getStructTree() { + const structTreeRoot = await this.pdfManager.ensureCatalog("structTreeRoot"); + + if (!structTreeRoot) { + return null; + } + + const structTree = await this.pdfManager.ensure(this, "_parseStructTree", [structTreeRoot]); + return structTree.serializable; + } + + _parseStructTree(structTreeRoot) { + const tree = new _struct_tree.StructTreePage(structTreeRoot, this.pageDict); + tree.parse(); + return tree; + } + + async getAnnotationsData(handler, task, intent) { + const annotations = await this._parsedAnnotations; + + if (annotations.length === 0) { + return []; + } + + const textContentPromises = []; + const annotationsData = []; + let partialEvaluator; + const intentAny = !!(intent & _util.RenderingIntentFlag.ANY), + intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), + intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); + + for (const annotation of annotations) { + const isVisible = intentAny || intentDisplay && annotation.viewable; + + if (isVisible || intentPrint && annotation.printable) { + annotationsData.push(annotation.data); + } + + if (annotation.hasTextContent && isVisible) { + if (!partialEvaluator) { + partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: this.pageIndex, + idFactory: this._localIdFactory, + fontCache: this.fontCache, + builtInCMapCache: this.builtInCMapCache, + standardFontDataCache: this.standardFontDataCache, + globalImageCache: this.globalImageCache, + options: this.evaluatorOptions + }); + } + + textContentPromises.push(annotation.extractTextContent(partialEvaluator, task, this.view).catch(function (reason) { + (0, _util.warn)(`getAnnotationsData - ignoring textContent during "${task.name}" task: "${reason}".`); + })); + } + } + + await Promise.all(textContentPromises); + return annotationsData; + } + + get annotations() { + const annots = this._getInheritableProperty("Annots"); + + return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []); + } + + get _parsedAnnotations() { + const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => { + const annotationPromises = []; + + for (const annotationRef of this.annotations) { + annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this._localIdFactory, false).catch(function (reason) { + (0, _util.warn)(`_parsedAnnotations: "${reason}".`); + return null; + })); + } + + return Promise.all(annotationPromises).then(function (annotations) { + if (annotations.length === 0) { + return annotations; + } + + const sortedAnnotations = []; + let popupAnnotations; + + for (const annotation of annotations) { + if (!annotation) { + continue; + } + + if (annotation instanceof _annotation.PopupAnnotation) { + if (!popupAnnotations) { + popupAnnotations = []; + } + + popupAnnotations.push(annotation); + continue; + } + + sortedAnnotations.push(annotation); + } + + if (popupAnnotations) { + sortedAnnotations.push(...popupAnnotations); + } + + return sortedAnnotations; + }); + }); + return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations); + } + + get jsActions() { + const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType); + return (0, _util.shadow)(this, "jsActions", actions); + } + +} + +exports.Page = Page; +const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]); +const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]); +const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]); +const FINGERPRINT_FIRST_BYTES = 1024; +const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; +const PDF_HEADER_VERSION_REGEXP = /^[1-9]\.\d$/; + +function find(stream, signature, limit = 1024, backwards = false) { + const signatureLength = signature.length; + const scanBytes = stream.peekBytes(limit); + const scanLength = scanBytes.length - signatureLength; + + if (scanLength <= 0) { + return false; + } + + if (backwards) { + const signatureEnd = signatureLength - 1; + let pos = scanBytes.length - 1; + + while (pos >= signatureEnd) { + let j = 0; + + while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) { + j++; + } + + if (j >= signatureLength) { + stream.pos += pos - signatureEnd; + return true; + } + + pos--; + } + } else { + let pos = 0; + + while (pos <= scanLength) { + let j = 0; + + while (j < signatureLength && scanBytes[pos + j] === signature[j]) { + j++; + } + + if (j >= signatureLength) { + stream.pos += pos; + return true; + } + + pos++; + } + } + + return false; +} + +class PDFDocument { + constructor(pdfManager, stream) { + if (stream.length <= 0) { + throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); + } + + this.pdfManager = pdfManager; + this.stream = stream; + this.xref = new _xref.XRef(stream, pdfManager); + this._pagePromises = new Map(); + this._version = null; + const idCounters = { + font: 0 + }; + this._globalIdFactory = class { + static getDocId() { + return `g_${pdfManager.docId}`; + } + + static createFontId() { + return `f${++idCounters.font}`; + } + + static createObjId() { + (0, _util.unreachable)("Abstract method `createObjId` called."); + } + + static getPageObjId() { + (0, _util.unreachable)("Abstract method `getPageObjId` called."); + } + + }; + } + + parse(recoveryMode) { + this.xref.parse(recoveryMode); + this.catalog = new _catalog.Catalog(this.pdfManager, this.xref); + + if (this.catalog.version) { + this._version = this.catalog.version; + } + } + + get linearization() { + let linearization = null; + + try { + linearization = _parser.Linearization.create(this.stream); + } catch (err) { + if (err instanceof _core_utils.MissingDataException) { + throw err; + } + + (0, _util.info)(err); + } + + return (0, _util.shadow)(this, "linearization", linearization); + } + + get startXRef() { + const stream = this.stream; + let startXRef = 0; + + if (this.linearization) { + stream.reset(); + + if (find(stream, ENDOBJ_SIGNATURE)) { + startXRef = stream.pos + 6 - stream.start; + } + } else { + const step = 1024; + const startXRefLength = STARTXREF_SIGNATURE.length; + let found = false, + pos = stream.end; + + while (!found && pos > 0) { + pos -= step - startXRefLength; + + if (pos < 0) { + pos = 0; + } + + stream.pos = pos; + found = find(stream, STARTXREF_SIGNATURE, step, true); + } + + if (found) { + stream.skip(9); + let ch; + + do { + ch = stream.getByte(); + } while ((0, _core_utils.isWhiteSpace)(ch)); + + let str = ""; + + while (ch >= 0x20 && ch <= 0x39) { + str += String.fromCharCode(ch); + ch = stream.getByte(); + } + + startXRef = parseInt(str, 10); + + if (isNaN(startXRef)) { + startXRef = 0; + } + } + } + + return (0, _util.shadow)(this, "startXRef", startXRef); + } + + checkHeader() { + const stream = this.stream; + stream.reset(); + + if (!find(stream, PDF_HEADER_SIGNATURE)) { + return; + } + + stream.moveStart(); + const MAX_PDF_VERSION_LENGTH = 12; + let version = "", + ch; + + while ((ch = stream.getByte()) > 0x20) { + if (version.length >= MAX_PDF_VERSION_LENGTH) { + break; + } + + version += String.fromCharCode(ch); + } + + if (!this._version) { + this._version = version.substring(5); + } + } + + parseStartXRef() { + this.xref.setStartXRef(this.startXRef); + } + + get numPages() { + let num = 0; + + if (this.catalog.hasActualNumPages) { + num = this.catalog.numPages; + } else if (this.xfaFactory) { + num = this.xfaFactory.getNumPages(); + } else if (this.linearization) { + num = this.linearization.numPages; + } else { + num = this.catalog.numPages; + } + + return (0, _util.shadow)(this, "numPages", num); + } + + _hasOnlyDocumentSignatures(fields, recursionDepth = 0) { + const RECURSION_LIMIT = 10; + + if (!Array.isArray(fields)) { + return false; + } + + return fields.every(field => { + field = this.xref.fetchIfRef(field); + + if (!(field instanceof _primitives.Dict)) { + return false; + } + + if (field.has("Kids")) { + if (++recursionDepth > RECURSION_LIMIT) { + (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"); + return false; + } + + return this._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth); + } + + const isSignature = (0, _primitives.isName)(field.get("FT"), "Sig"); + const rectangle = field.get("Rect"); + const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0); + return isSignature && isInvisible; + }); + } + + get _xfaStreams() { + const acroForm = this.catalog.acroForm; + + if (!acroForm) { + return null; + } + + const xfa = acroForm.get("XFA"); + const entries = { + "xdp:xdp": "", + template: "", + datasets: "", + config: "", + connectionSet: "", + localeSet: "", + stylesheet: "", + "/xdp:xdp": "" + }; + + if (xfa instanceof _base_stream.BaseStream && !xfa.isEmpty) { + entries["xdp:xdp"] = xfa; + return entries; + } + + if (!Array.isArray(xfa) || xfa.length === 0) { + return null; + } + + for (let i = 0, ii = xfa.length; i < ii; i += 2) { + let name; + + if (i === 0) { + name = "xdp:xdp"; + } else if (i === ii - 2) { + name = "/xdp:xdp"; + } else { + name = xfa[i]; + } + + if (!entries.hasOwnProperty(name)) { + continue; + } + + const data = this.xref.fetchIfRef(xfa[i + 1]); + + if (!(data instanceof _base_stream.BaseStream) || data.isEmpty) { + continue; + } + + entries[name] = data; + } + + return entries; + } + + get xfaDatasets() { + const streams = this._xfaStreams; + + if (!streams) { + return (0, _util.shadow)(this, "xfaDatasets", null); + } + + for (const key of ["datasets", "xdp:xdp"]) { + const stream = streams[key]; + + if (!stream) { + continue; + } + + try { + const str = (0, _util.stringToUTF8String)(stream.getString()); + const data = { + [key]: str + }; + return (0, _util.shadow)(this, "xfaDatasets", new _dataset_reader.DatasetReader(data)); + } catch (_) { + (0, _util.warn)("XFA - Invalid utf-8 string."); + break; + } + } + + return (0, _util.shadow)(this, "xfaDatasets", null); + } + + get xfaData() { + const streams = this._xfaStreams; + + if (!streams) { + return null; + } + + const data = Object.create(null); + + for (const [key, stream] of Object.entries(streams)) { + if (!stream) { + continue; + } + + try { + data[key] = (0, _util.stringToUTF8String)(stream.getString()); + } catch (_) { + (0, _util.warn)("XFA - Invalid utf-8 string."); + return null; + } + } + + return data; + } + + get xfaFactory() { + let data; + + if (this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) { + data = this.xfaData; + } + + return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null); + } + + get isPureXfa() { + return this.xfaFactory ? this.xfaFactory.isValid() : false; + } + + get htmlForXfa() { + return this.xfaFactory ? this.xfaFactory.getPages() : null; + } + + async loadXfaImages() { + const xfaImagesDict = await this.pdfManager.ensureCatalog("xfaImages"); + + if (!xfaImagesDict) { + return; + } + + const keys = xfaImagesDict.getKeys(); + const objectLoader = new _object_loader.ObjectLoader(xfaImagesDict, keys, this.xref); + await objectLoader.load(); + const xfaImages = new Map(); + + for (const key of keys) { + const stream = xfaImagesDict.get(key); + + if (stream instanceof _base_stream.BaseStream) { + xfaImages.set(key, stream.getBytes()); + } + } + + this.xfaFactory.setImages(xfaImages); + } + + async loadXfaFonts(handler, task) { + const acroForm = await this.pdfManager.ensureCatalog("acroForm"); + + if (!acroForm) { + return; + } + + const resources = await acroForm.getAsync("DR"); + + if (!(resources instanceof _primitives.Dict)) { + return; + } + + const objectLoader = new _object_loader.ObjectLoader(resources, ["Font"], this.xref); + await objectLoader.load(); + const fontRes = resources.get("Font"); + + if (!(fontRes instanceof _primitives.Dict)) { + return; + } + + const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions); + options.useSystemFonts = false; + const partialEvaluator = new _evaluator.PartialEvaluator({ + xref: this.xref, + handler, + pageIndex: -1, + idFactory: this._globalIdFactory, + fontCache: this.catalog.fontCache, + builtInCMapCache: this.catalog.builtInCMapCache, + standardFontDataCache: this.catalog.standardFontDataCache, + options + }); + const operatorList = new _operator_list.OperatorList(); + const pdfFonts = []; + const initialState = { + get font() { + return pdfFonts.at(-1); + }, + + set font(font) { + pdfFonts.push(font); + }, + + clone() { + return this; + } + + }; + const fonts = new Map(); + fontRes.forEach((fontName, font) => { + fonts.set(fontName, font); + }); + const promises = []; + + for (const [fontName, font] of fonts) { + const descriptor = font.get("FontDescriptor"); + + if (!(descriptor instanceof _primitives.Dict)) { + continue; + } + + let fontFamily = descriptor.get("FontFamily"); + fontFamily = fontFamily.replace(/[ ]+(\d)/g, "$1"); + const fontWeight = descriptor.get("FontWeight"); + const italicAngle = -descriptor.get("ItalicAngle"); + const cssFontInfo = { + fontFamily, + fontWeight, + italicAngle + }; + + if (!(0, _core_utils.validateCSSFont)(cssFontInfo)) { + continue; + } + + promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) { + (0, _util.warn)(`loadXfaFonts: "${reason}".`); + return null; + })); + } + + await Promise.all(promises); + const missingFonts = this.xfaFactory.setFonts(pdfFonts); + + if (!missingFonts) { + return; + } + + options.ignoreErrors = true; + promises.length = 0; + pdfFonts.length = 0; + const reallyMissingFonts = new Set(); + + for (const missing of missingFonts) { + if (!(0, _xfa_fonts.getXfaFontName)(`${missing}-Regular`)) { + reallyMissingFonts.add(missing); + } + } + + if (reallyMissingFonts.size) { + missingFonts.push("PdfJS-Fallback"); + } + + for (const missing of missingFonts) { + if (reallyMissingFonts.has(missing)) { + continue; + } + + for (const fontInfo of [{ + name: "Regular", + fontWeight: 400, + italicAngle: 0 + }, { + name: "Bold", + fontWeight: 700, + italicAngle: 0 + }, { + name: "Italic", + fontWeight: 400, + italicAngle: 12 + }, { + name: "BoldItalic", + fontWeight: 700, + italicAngle: 12 + }]) { + const name = `${missing}-${fontInfo.name}`; + const dict = (0, _xfa_fonts.getXfaFontDict)(name); + promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(name), 1], null, operatorList, task, initialState, dict, { + fontFamily: missing, + fontWeight: fontInfo.fontWeight, + italicAngle: fontInfo.italicAngle + }).catch(function (reason) { + (0, _util.warn)(`loadXfaFonts: "${reason}".`); + return null; + })); + } + } + + await Promise.all(promises); + this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts); + } + + async serializeXfaData(annotationStorage) { + return this.xfaFactory ? this.xfaFactory.serializeData(annotationStorage) : null; + } + + get formInfo() { + const formInfo = { + hasFields: false, + hasAcroForm: false, + hasXfa: false, + hasSignatures: false + }; + const acroForm = this.catalog.acroForm; + + if (!acroForm) { + return (0, _util.shadow)(this, "formInfo", formInfo); + } + + try { + const fields = acroForm.get("Fields"); + const hasFields = Array.isArray(fields) && fields.length > 0; + formInfo.hasFields = hasFields; + const xfa = acroForm.get("XFA"); + formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || xfa instanceof _base_stream.BaseStream && !xfa.isEmpty; + const sigFlags = acroForm.get("SigFlags"); + const hasSignatures = !!(sigFlags & 0x1); + + const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields); + + formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures; + formInfo.hasSignatures = hasSignatures; + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`Cannot fetch form information: "${ex}".`); + } + + return (0, _util.shadow)(this, "formInfo", formInfo); + } + + get documentInfo() { + let version = this._version; + + if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) { + (0, _util.warn)(`Invalid PDF header version number: ${version}`); + version = null; + } + + const docInfo = { + PDFFormatVersion: version, + Language: this.catalog.lang, + EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null, + IsLinearized: !!this.linearization, + IsAcroFormPresent: this.formInfo.hasAcroForm, + IsXFAPresent: this.formInfo.hasXfa, + IsCollectionPresent: !!this.catalog.collection, + IsSignaturesPresent: this.formInfo.hasSignatures + }; + let infoDict; + + try { + infoDict = this.xref.trailer.get("Info"); + } catch (err) { + if (err instanceof _core_utils.MissingDataException) { + throw err; + } + + (0, _util.info)("The document information dictionary is invalid."); + } + + if (!(infoDict instanceof _primitives.Dict)) { + return (0, _util.shadow)(this, "documentInfo", docInfo); + } + + for (const key of infoDict.getKeys()) { + const value = infoDict.get(key); + + switch (key) { + case "Title": + case "Author": + case "Subject": + case "Keywords": + case "Creator": + case "Producer": + case "CreationDate": + case "ModDate": + if (typeof value === "string") { + docInfo[key] = (0, _util.stringToPDFString)(value); + continue; + } + + break; + + case "Trapped": + if (value instanceof _primitives.Name) { + docInfo[key] = value; + continue; + } + + break; + + default: + let customValue; + + switch (typeof value) { + case "string": + customValue = (0, _util.stringToPDFString)(value); + break; + + case "number": + case "boolean": + customValue = value; + break; + + default: + if (value instanceof _primitives.Name) { + customValue = value; + } + + break; + } + + if (customValue === undefined) { + (0, _util.warn)(`Bad value, for custom key "${key}", in Info: ${value}.`); + continue; + } + + if (!docInfo.Custom) { + docInfo.Custom = Object.create(null); + } + + docInfo.Custom[key] = customValue; + continue; + } + + (0, _util.warn)(`Bad value, for key "${key}", in Info: ${value}.`); + } + + return (0, _util.shadow)(this, "documentInfo", docInfo); + } + + get fingerprints() { + function validate(data) { + return typeof data === "string" && data.length > 0 && data !== EMPTY_FINGERPRINT; + } + + function hexString(hash) { + const buf = []; + + for (let i = 0, ii = hash.length; i < ii; i++) { + const hex = hash[i].toString(16); + buf.push(hex.padStart(2, "0")); + } + + return buf.join(""); + } + + const idArray = this.xref.trailer.get("ID"); + let hashOriginal, hashModified; + + if (Array.isArray(idArray) && validate(idArray[0])) { + hashOriginal = (0, _util.stringToBytes)(idArray[0]); + + if (idArray[1] !== idArray[0] && validate(idArray[1])) { + hashModified = (0, _util.stringToBytes)(idArray[1]); + } + } else { + hashOriginal = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); + } + + return (0, _util.shadow)(this, "fingerprints", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]); + } + + async _getLinearizationPage(pageIndex) { + const { + catalog, + linearization, + xref + } = this; + + const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0); + + try { + const obj = await xref.fetchAsync(ref); + + if (obj instanceof _primitives.Dict) { + let type = obj.getRaw("Type"); + + if (type instanceof _primitives.Ref) { + type = await xref.fetchAsync(type); + } + + if ((0, _primitives.isName)(type, "Page") || !obj.has("Type") && !obj.has("Kids")) { + if (!catalog.pageKidsCountCache.has(ref)) { + catalog.pageKidsCountCache.put(ref, 1); + } + + if (!catalog.pageIndexCache.has(ref)) { + catalog.pageIndexCache.put(ref, 0); + } + + return [obj, ref]; + } + } + + throw new _util.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary."); + } catch (reason) { + (0, _util.warn)(`_getLinearizationPage: "${reason.message}".`); + return catalog.getPageDict(pageIndex); + } + } + + getPage(pageIndex) { + const cachedPromise = this._pagePromises.get(pageIndex); + + if (cachedPromise) { + return cachedPromise; + } + + const { + catalog, + linearization, + xfaFactory + } = this; + let promise; + + if (xfaFactory) { + promise = Promise.resolve([_primitives.Dict.empty, null]); + } else if (linearization && linearization.pageFirst === pageIndex) { + promise = this._getLinearizationPage(pageIndex); + } else { + promise = catalog.getPageDict(pageIndex); + } + + promise = promise.then(([pageDict, ref]) => { + return new Page({ + pdfManager: this.pdfManager, + xref: this.xref, + pageIndex, + pageDict, + ref, + globalIdFactory: this._globalIdFactory, + fontCache: catalog.fontCache, + builtInCMapCache: catalog.builtInCMapCache, + standardFontDataCache: catalog.standardFontDataCache, + globalImageCache: catalog.globalImageCache, + nonBlendModesSet: catalog.nonBlendModesSet, + xfaFactory + }); + }); + + this._pagePromises.set(pageIndex, promise); + + return promise; + } + + async checkFirstPage(recoveryMode = false) { + if (recoveryMode) { + return; + } + + try { + await this.getPage(0); + } catch (reason) { + if (reason instanceof _core_utils.XRefEntryException) { + this._pagePromises.delete(0); + + await this.cleanup(); + throw new _core_utils.XRefParseException(); + } + } + } + + async checkLastPage(recoveryMode = false) { + const { + catalog, + pdfManager + } = this; + catalog.setActualNumPages(); + let numPages; + + try { + await Promise.all([pdfManager.ensureDoc("xfaFactory"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("numPages")]); + + if (this.xfaFactory) { + return; + } else if (this.linearization) { + numPages = this.linearization.numPages; + } else { + numPages = catalog.numPages; + } + + if (!Number.isInteger(numPages)) { + throw new _util.FormatError("Page count is not an integer."); + } else if (numPages <= 1) { + return; + } + + await this.getPage(numPages - 1); + } catch (reason) { + this._pagePromises.delete(numPages - 1); + + await this.cleanup(); + + if (reason instanceof _core_utils.XRefEntryException && !recoveryMode) { + throw new _core_utils.XRefParseException(); + } + + (0, _util.warn)(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`); + let pagesTree; + + try { + pagesTree = await catalog.getAllPageDicts(recoveryMode); + } catch (reasonAll) { + if (reasonAll instanceof _core_utils.XRefEntryException && !recoveryMode) { + throw new _core_utils.XRefParseException(); + } + + catalog.setActualNumPages(1); + return; + } + + for (const [pageIndex, [pageDict, ref]] of pagesTree) { + let promise; + + if (pageDict instanceof Error) { + promise = Promise.reject(pageDict); + promise.catch(() => {}); + } else { + promise = Promise.resolve(new Page({ + pdfManager, + xref: this.xref, + pageIndex, + pageDict, + ref, + globalIdFactory: this._globalIdFactory, + fontCache: catalog.fontCache, + builtInCMapCache: catalog.builtInCMapCache, + standardFontDataCache: catalog.standardFontDataCache, + globalImageCache: catalog.globalImageCache, + nonBlendModesSet: catalog.nonBlendModesSet, + xfaFactory: null + })); + } + + this._pagePromises.set(pageIndex, promise); + } + + catalog.setActualNumPages(pagesTree.size); + } + } + + fontFallback(id, handler) { + return this.catalog.fontFallback(id, handler); + } + + async cleanup(manuallyTriggered = false) { + return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _cleanup_helper.clearGlobalCaches)(); + } + + _collectFieldObjects(name, fieldRef, promises) { + const field = this.xref.fetchIfRef(fieldRef); + + if (field.has("T")) { + const partName = (0, _util.stringToPDFString)(field.get("T")); + + if (name === "") { + name = partName; + } else { + name = `${name}.${partName}`; + } + } + + if (!promises.has(name)) { + promises.set(name, []); + } + + promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, this._localIdFactory, true).then(annotation => annotation && annotation.getFieldObject()).catch(function (reason) { + (0, _util.warn)(`_collectFieldObjects: "${reason}".`); + return null; + })); + + if (field.has("Kids")) { + const kids = field.get("Kids"); + + for (const kid of kids) { + this._collectFieldObjects(name, kid, promises); + } + } + } + + get fieldObjects() { + if (!this.formInfo.hasFields) { + return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null)); + } + + const allFields = Object.create(null); + const fieldPromises = new Map(); + + for (const fieldRef of this.catalog.acroForm.get("Fields")) { + this._collectFieldObjects("", fieldRef, fieldPromises); + } + + const allPromises = []; + + for (const [name, promises] of fieldPromises) { + allPromises.push(Promise.all(promises).then(fields => { + fields = fields.filter(field => !!field); + + if (fields.length > 0) { + allFields[name] = fields; + } + })); + } + + return (0, _util.shadow)(this, "fieldObjects", Promise.all(allPromises).then(() => allFields)); + } + + get hasJSActions() { + const promise = this.pdfManager.ensureDoc("_parseHasJSActions"); + return (0, _util.shadow)(this, "hasJSActions", promise); + } + + async _parseHasJSActions() { + const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog("jsActions"), this.pdfManager.ensureDoc("fieldObjects")]); + + if (catalogJsActions) { + return true; + } + + if (fieldObjects) { + return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null)); + } + + return false; + } + + get calculationOrderIds() { + const acroForm = this.catalog.acroForm; + + if (!acroForm || !acroForm.has("CO")) { + return (0, _util.shadow)(this, "calculationOrderIds", null); + } + + const calculationOrder = acroForm.get("CO"); + + if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) { + return (0, _util.shadow)(this, "calculationOrderIds", null); + } + + const ids = []; + + for (const id of calculationOrder) { + if (id instanceof _primitives.Ref) { + ids.push(id.toString()); + } + } + + if (ids.length === 0) { + return (0, _util.shadow)(this, "calculationOrderIds", null); + } + + return (0, _util.shadow)(this, "calculationOrderIds", ids); + } + +} + +exports.PDFDocument = PDFDocument; + +/***/ }), +/* 12 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PopupAnnotation = exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; +exports.getQuadPoints = getQuadPoints; + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _default_appearance = __w_pdfjs_require__(13); + +var _primitives = __w_pdfjs_require__(5); + +var _writer = __w_pdfjs_require__(65); + +var _base_stream = __w_pdfjs_require__(7); + +var _bidi = __w_pdfjs_require__(60); + +var _catalog = __w_pdfjs_require__(69); + +var _colorspace = __w_pdfjs_require__(14); + +var _file_spec = __w_pdfjs_require__(72); + +var _object_loader = __w_pdfjs_require__(75); + +var _operator_list = __w_pdfjs_require__(62); + +var _stream = __w_pdfjs_require__(10); + +var _factory = __w_pdfjs_require__(76); + +class AnnotationFactory { + static create(xref, ref, pdfManager, idFactory, collectFields) { + return Promise.all([pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("baseUrl"), pdfManager.ensureDoc("xfaDatasets"), collectFields ? this._getPageIndex(xref, ref, pdfManager) : -1]).then(([acroForm, baseUrl, xfaDatasets, pageIndex]) => pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, xfaDatasets, collectFields, pageIndex])); + } + + static _create(xref, ref, pdfManager, idFactory, acroForm, xfaDatasets, collectFields, pageIndex = -1) { + const dict = xref.fetchIfRef(ref); + + if (!(dict instanceof _primitives.Dict)) { + return undefined; + } + + const id = ref instanceof _primitives.Ref ? ref.toString() : `annot_${idFactory.createObjId()}`; + let subtype = dict.get("Subtype"); + subtype = subtype instanceof _primitives.Name ? subtype.name : null; + const parameters = { + xref, + ref, + dict, + subtype, + id, + pdfManager, + acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty, + xfaDatasets, + collectFields, + pageIndex + }; + + switch (subtype) { + case "Link": + return new LinkAnnotation(parameters); + + case "Text": + return new TextAnnotation(parameters); + + case "Widget": + let fieldType = (0, _core_utils.getInheritableProperty)({ + dict, + key: "FT" + }); + fieldType = fieldType instanceof _primitives.Name ? fieldType.name : null; + + switch (fieldType) { + case "Tx": + return new TextWidgetAnnotation(parameters); + + case "Btn": + return new ButtonWidgetAnnotation(parameters); + + case "Ch": + return new ChoiceWidgetAnnotation(parameters); + + case "Sig": + return new SignatureWidgetAnnotation(parameters); + } + + (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field type."); + return new WidgetAnnotation(parameters); + + case "Popup": + return new PopupAnnotation(parameters); + + case "FreeText": + return new FreeTextAnnotation(parameters); + + case "Line": + return new LineAnnotation(parameters); + + case "Square": + return new SquareAnnotation(parameters); + + case "Circle": + return new CircleAnnotation(parameters); + + case "PolyLine": + return new PolylineAnnotation(parameters); + + case "Polygon": + return new PolygonAnnotation(parameters); + + case "Caret": + return new CaretAnnotation(parameters); + + case "Ink": + return new InkAnnotation(parameters); + + case "Highlight": + return new HighlightAnnotation(parameters); + + case "Underline": + return new UnderlineAnnotation(parameters); + + case "Squiggly": + return new SquigglyAnnotation(parameters); + + case "StrikeOut": + return new StrikeOutAnnotation(parameters); + + case "Stamp": + return new StampAnnotation(parameters); + + case "FileAttachment": + return new FileAttachmentAnnotation(parameters); + + default: + if (!collectFields) { + if (!subtype) { + (0, _util.warn)("Annotation is missing the required /Subtype."); + } else { + (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base annotation."); + } + } + + return new Annotation(parameters); + } + } + + static async _getPageIndex(xref, ref, pdfManager) { + try { + const annotDict = await xref.fetchIfRefAsync(ref); + + if (!(annotDict instanceof _primitives.Dict)) { + return -1; + } + + const pageRef = annotDict.getRaw("P"); + + if (!(pageRef instanceof _primitives.Ref)) { + return -1; + } + + const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [pageRef]); + return pageIndex; + } catch (ex) { + (0, _util.warn)(`_getPageIndex: "${ex}".`); + return -1; + } + } + + static async saveNewAnnotations(evaluator, task, annotations) { + const xref = evaluator.xref; + let baseFontRef; + const dependencies = []; + const promises = []; + + for (const annotation of annotations) { + switch (annotation.annotationType) { + case _util.AnnotationEditorType.FREETEXT: + if (!baseFontRef) { + const baseFont = new _primitives.Dict(xref); + baseFont.set("BaseFont", _primitives.Name.get("Helvetica")); + baseFont.set("Type", _primitives.Name.get("Font")); + baseFont.set("Subtype", _primitives.Name.get("Type1")); + baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); + const buffer = []; + baseFontRef = xref.getNewRef(); + (0, _writer.writeObject)(baseFontRef, baseFont, buffer, null); + dependencies.push({ + ref: baseFontRef, + data: buffer.join("") + }); + } + + promises.push(FreeTextAnnotation.createNewAnnotation(xref, annotation, dependencies, { + evaluator, + task, + baseFontRef + })); + break; + + case _util.AnnotationEditorType.INK: + promises.push(InkAnnotation.createNewAnnotation(xref, annotation, dependencies)); + } + } + + return { + annotations: await Promise.all(promises), + dependencies + }; + } + + static async printNewAnnotations(evaluator, task, annotations) { + if (!annotations) { + return null; + } + + const xref = evaluator.xref; + const promises = []; + + for (const annotation of annotations) { + switch (annotation.annotationType) { + case _util.AnnotationEditorType.FREETEXT: + promises.push(FreeTextAnnotation.createNewPrintAnnotation(xref, annotation, { + evaluator, + task + })); + break; + + case _util.AnnotationEditorType.INK: + promises.push(InkAnnotation.createNewPrintAnnotation(xref, annotation)); + break; + } + } + + return Promise.all(promises); + } + +} + +exports.AnnotationFactory = AnnotationFactory; + +function getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) { + if (!Array.isArray(color)) { + return defaultColor; + } + + const rgbColor = defaultColor || new Uint8ClampedArray(3); + + switch (color.length) { + case 0: + return null; + + case 1: + _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); + + return rgbColor; + + case 3: + _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); + + return rgbColor; + + case 4: + _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); + + return rgbColor; + + default: + return defaultColor; + } +} + +function getQuadPoints(dict, rect) { + if (!dict.has("QuadPoints")) { + return null; + } + + const quadPoints = dict.getArray("QuadPoints"); + + if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) { + return null; + } + + const quadPointsLists = []; + + for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) { + quadPointsLists.push([]); + + for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) { + const x = quadPoints[j]; + const y = quadPoints[j + 1]; + + if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) { + return null; + } + + quadPointsLists[i].push({ + x, + y + }); + } + } + + return quadPointsLists.map(quadPointsList => { + const [minX, maxX, minY, maxY] = quadPointsList.reduce(([mX, MX, mY, MY], quadPoint) => [Math.min(mX, quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)], [Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]); + return [{ + x: minX, + y: maxY + }, { + x: maxX, + y: maxY + }, { + x: minX, + y: minY + }, { + x: maxX, + y: minY + }]; + }); +} + +function getTransformMatrix(rect, bbox, matrix) { + const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); + + if (minX === maxX || minY === maxY) { + return [1, 0, 0, 1, rect[0], rect[1]]; + } + + const xRatio = (rect[2] - rect[0]) / (maxX - minX); + const yRatio = (rect[3] - rect[1]) / (maxY - minY); + return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; +} + +class Annotation { + constructor(params) { + const dict = params.dict; + this.setTitle(dict.get("T")); + this.setContents(dict.get("Contents")); + this.setModificationDate(dict.get("M")); + this.setFlags(dict.get("F")); + this.setRectangle(dict.getArray("Rect")); + this.setColor(dict.getArray("C")); + this.setBorderStyle(dict); + this.setAppearance(dict); + this.setOptionalContent(dict); + const MK = dict.get("MK"); + this.setBorderAndBackgroundColors(MK); + this.setRotation(MK); + this._streams = []; + + if (this.appearance) { + this._streams.push(this.appearance); + } + + this.data = { + annotationFlags: this.flags, + borderStyle: this.borderStyle, + color: this.color, + backgroundColor: this.backgroundColor, + borderColor: this.borderColor, + rotation: this.rotation, + contentsObj: this._contents, + hasAppearance: !!this.appearance, + id: params.id, + modificationDate: this.modificationDate, + rect: this.rectangle, + subtype: params.subtype, + hasOwnCanvas: false + }; + + if (params.collectFields) { + const kids = dict.get("Kids"); + + if (Array.isArray(kids)) { + const kidIds = []; + + for (const kid of kids) { + if (kid instanceof _primitives.Ref) { + kidIds.push(kid.toString()); + } + } + + if (kidIds.length !== 0) { + this.data.kidIds = kidIds; + } + } + + this.data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); + this.data.fieldName = this._constructFieldName(dict); + this.data.pageIndex = params.pageIndex; + } + + this._fallbackFontDict = null; + } + + _hasFlag(flags, flag) { + return !!(flags & flag); + } + + _isViewable(flags) { + return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); + } + + _isPrintable(flags) { + return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE); + } + + mustBeViewed(annotationStorage) { + const storageEntry = annotationStorage && annotationStorage.get(this.data.id); + + if (storageEntry && storageEntry.hidden !== undefined) { + return !storageEntry.hidden; + } + + return this.viewable && !this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN); + } + + mustBePrinted(annotationStorage) { + const storageEntry = annotationStorage && annotationStorage.get(this.data.id); + + if (storageEntry && storageEntry.print !== undefined) { + return storageEntry.print; + } + + return this.printable; + } + + get viewable() { + if (this.data.quadPoints === null) { + return false; + } + + if (this.flags === 0) { + return true; + } + + return this._isViewable(this.flags); + } + + get printable() { + if (this.data.quadPoints === null) { + return false; + } + + if (this.flags === 0) { + return false; + } + + return this._isPrintable(this.flags); + } + + _parseStringHelper(data) { + const str = typeof data === "string" ? (0, _util.stringToPDFString)(data) : ""; + const dir = str && (0, _bidi.bidi)(str).dir === "rtl" ? "rtl" : "ltr"; + return { + str, + dir + }; + } + + setTitle(title) { + this._title = this._parseStringHelper(title); + } + + setContents(contents) { + this._contents = this._parseStringHelper(contents); + } + + setModificationDate(modificationDate) { + this.modificationDate = typeof modificationDate === "string" ? modificationDate : null; + } + + setFlags(flags) { + this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; + } + + hasFlag(flag) { + return this._hasFlag(this.flags, flag); + } + + setRectangle(rectangle) { + if (Array.isArray(rectangle) && rectangle.length === 4) { + this.rectangle = _util.Util.normalizeRect(rectangle); + } else { + this.rectangle = [0, 0, 0, 0]; + } + } + + setColor(color) { + this.color = getRgbColor(color); + } + + setLineEndings(lineEndings) { + this.lineEndings = ["None", "None"]; + + if (Array.isArray(lineEndings) && lineEndings.length === 2) { + for (let i = 0; i < 2; i++) { + const obj = lineEndings[i]; + + if (obj instanceof _primitives.Name) { + switch (obj.name) { + case "None": + continue; + + case "Square": + case "Circle": + case "Diamond": + case "OpenArrow": + case "ClosedArrow": + case "Butt": + case "ROpenArrow": + case "RClosedArrow": + case "Slash": + this.lineEndings[i] = obj.name; + continue; + } + } + + (0, _util.warn)(`Ignoring invalid lineEnding: ${obj}`); + } + } + } + + setRotation(mk) { + this.rotation = 0; + + if (mk instanceof _primitives.Dict) { + let angle = mk.get("R") || 0; + + if (Number.isInteger(angle) && angle !== 0) { + angle %= 360; + + if (angle < 0) { + angle += 360; + } + + if (angle % 90 === 0) { + this.rotation = angle; + } + } + } + } + + setBorderAndBackgroundColors(mk) { + if (mk instanceof _primitives.Dict) { + this.borderColor = getRgbColor(mk.getArray("BC"), null); + this.backgroundColor = getRgbColor(mk.getArray("BG"), null); + } else { + this.borderColor = this.backgroundColor = null; + } + } + + setBorderStyle(borderStyle) { + this.borderStyle = new AnnotationBorderStyle(); + + if (!(borderStyle instanceof _primitives.Dict)) { + return; + } + + if (borderStyle.has("BS")) { + const dict = borderStyle.get("BS"); + const dictType = dict.get("Type"); + + if (!dictType || (0, _primitives.isName)(dictType, "Border")) { + this.borderStyle.setWidth(dict.get("W"), this.rectangle); + this.borderStyle.setStyle(dict.get("S")); + this.borderStyle.setDashArray(dict.getArray("D")); + } + } else if (borderStyle.has("Border")) { + const array = borderStyle.getArray("Border"); + + if (Array.isArray(array) && array.length >= 3) { + this.borderStyle.setHorizontalCornerRadius(array[0]); + this.borderStyle.setVerticalCornerRadius(array[1]); + this.borderStyle.setWidth(array[2], this.rectangle); + + if (array.length === 4) { + this.borderStyle.setDashArray(array[3], true); + } + } + } else { + this.borderStyle.setWidth(0); + } + } + + setAppearance(dict) { + this.appearance = null; + const appearanceStates = dict.get("AP"); + + if (!(appearanceStates instanceof _primitives.Dict)) { + return; + } + + const normalAppearanceState = appearanceStates.get("N"); + + if (normalAppearanceState instanceof _base_stream.BaseStream) { + this.appearance = normalAppearanceState; + return; + } + + if (!(normalAppearanceState instanceof _primitives.Dict)) { + return; + } + + const as = dict.get("AS"); + + if (!(as instanceof _primitives.Name) || !normalAppearanceState.has(as.name)) { + return; + } + + this.appearance = normalAppearanceState.get(as.name); + } + + setOptionalContent(dict) { + this.oc = null; + const oc = dict.get("OC"); + + if (oc instanceof _primitives.Name) { + (0, _util.warn)("setOptionalContent: Support for /Name-entry is not implemented."); + } else if (oc instanceof _primitives.Dict) { + this.oc = oc; + } + } + + loadResources(keys, appearance) { + return appearance.dict.getAsync("Resources").then(resources => { + if (!resources) { + return undefined; + } + + const objectLoader = new _object_loader.ObjectLoader(resources, keys, resources.xref); + return objectLoader.load().then(function () { + return resources; + }); + }); + } + + async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { + const data = this.data; + let appearance = this.appearance; + const isUsingOwnCanvas = !!(this.data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY); + + if (!appearance) { + if (!isUsingOwnCanvas) { + return { + opList: new _operator_list.OperatorList(), + separateForm: false, + separateCanvas: false + }; + } + + appearance = new _stream.StringStream(""); + appearance.dict = new _primitives.Dict(); + } + + const appearanceDict = appearance.dict; + const resources = await this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance); + const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; + const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; + const transform = getTransformMatrix(data.rect, bbox, matrix); + const opList = new _operator_list.OperatorList(); + let optionalContent; + + if (this.oc) { + optionalContent = await evaluator.parseMarkedContentProps(this.oc, null); + } + + if (optionalContent !== undefined) { + opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); + } + + opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]); + await evaluator.getOperatorList({ + stream: appearance, + task, + resources, + operatorList: opList, + fallbackFontDict: this._fallbackFontDict + }); + opList.addOp(_util.OPS.endAnnotation, []); + + if (optionalContent !== undefined) { + opList.addOp(_util.OPS.endMarkedContent, []); + } + + this.reset(); + return { + opList, + separateForm: false, + separateCanvas: isUsingOwnCanvas + }; + } + + async save(evaluator, task, annotationStorage) { + return null; + } + + get hasTextContent() { + return false; + } + + async extractTextContent(evaluator, task, viewBox) { + if (!this.appearance) { + return; + } + + const resources = await this.loadResources(["ExtGState", "Font", "Properties", "XObject"], this.appearance); + const text = []; + const buffer = []; + const sink = { + desiredSize: Math.Infinity, + ready: true, + + enqueue(chunk, size) { + for (const item of chunk.items) { + buffer.push(item.str); + + if (item.hasEOL) { + text.push(buffer.join("")); + buffer.length = 0; + } + } + } + + }; + await evaluator.getTextContent({ + stream: this.appearance, + task, + resources, + includeMarkedContent: true, + combineTextItems: true, + sink, + viewBox + }); + this.reset(); + + if (buffer.length) { + text.push(buffer.join("")); + } + + if (text.length > 0) { + this.data.textContent = text; + } + } + + getFieldObject() { + if (this.data.kidIds) { + return { + id: this.data.id, + actions: this.data.actions, + name: this.data.fieldName, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + type: "", + kidIds: this.data.kidIds, + page: this.data.pageIndex, + rotation: this.rotation + }; + } + + return null; + } + + reset() { + for (const stream of this._streams) { + stream.reset(); + } + } + + _constructFieldName(dict) { + if (!dict.has("T") && !dict.has("Parent")) { + (0, _util.warn)("Unknown field name, falling back to empty field name."); + return ""; + } + + if (!dict.has("Parent")) { + return (0, _util.stringToPDFString)(dict.get("T")); + } + + const fieldName = []; + + if (dict.has("T")) { + fieldName.unshift((0, _util.stringToPDFString)(dict.get("T"))); + } + + let loopDict = dict; + const visited = new _primitives.RefSet(); + + if (dict.objId) { + visited.put(dict.objId); + } + + while (loopDict.has("Parent")) { + loopDict = loopDict.get("Parent"); + + if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) { + break; + } + + if (loopDict.objId) { + visited.put(loopDict.objId); + } + + if (loopDict.has("T")) { + fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T"))); + } + } + + return fieldName.join("."); + } + +} + +exports.Annotation = Annotation; + +class AnnotationBorderStyle { + constructor() { + this.width = 1; + this.style = _util.AnnotationBorderStyleType.SOLID; + this.dashArray = [3]; + this.horizontalCornerRadius = 0; + this.verticalCornerRadius = 0; + } + + setWidth(width, rect = [0, 0, 0, 0]) { + if (width instanceof _primitives.Name) { + this.width = 0; + return; + } + + if (typeof width === "number") { + if (width > 0) { + const maxWidth = (rect[2] - rect[0]) / 2; + const maxHeight = (rect[3] - rect[1]) / 2; + + if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) { + (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`); + width = 1; + } + } + + this.width = width; + } + } + + setStyle(style) { + if (!(style instanceof _primitives.Name)) { + return; + } + + switch (style.name) { + case "S": + this.style = _util.AnnotationBorderStyleType.SOLID; + break; + + case "D": + this.style = _util.AnnotationBorderStyleType.DASHED; + break; + + case "B": + this.style = _util.AnnotationBorderStyleType.BEVELED; + break; + + case "I": + this.style = _util.AnnotationBorderStyleType.INSET; + break; + + case "U": + this.style = _util.AnnotationBorderStyleType.UNDERLINE; + break; + + default: + break; + } + } + + setDashArray(dashArray, forceStyle = false) { + if (Array.isArray(dashArray) && dashArray.length > 0) { + let isValid = true; + let allZeros = true; + + for (const element of dashArray) { + const validNumber = +element >= 0; + + if (!validNumber) { + isValid = false; + break; + } else if (element > 0) { + allZeros = false; + } + } + + if (isValid && !allZeros) { + this.dashArray = dashArray; + + if (forceStyle) { + this.setStyle(_primitives.Name.get("D")); + } + } else { + this.width = 0; + } + } else if (dashArray) { + this.width = 0; + } + } + + setHorizontalCornerRadius(radius) { + if (Number.isInteger(radius)) { + this.horizontalCornerRadius = radius; + } + } + + setVerticalCornerRadius(radius) { + if (Number.isInteger(radius)) { + this.verticalCornerRadius = radius; + } + } + +} + +exports.AnnotationBorderStyle = AnnotationBorderStyle; + +class MarkupAnnotation extends Annotation { + constructor(parameters) { + super(parameters); + const dict = parameters.dict; + + if (dict.has("IRT")) { + const rawIRT = dict.getRaw("IRT"); + this.data.inReplyTo = rawIRT instanceof _primitives.Ref ? rawIRT.toString() : null; + const rt = dict.get("RT"); + this.data.replyType = rt instanceof _primitives.Name ? rt.name : _util.AnnotationReplyType.REPLY; + } + + if (this.data.replyType === _util.AnnotationReplyType.GROUP) { + const parent = dict.get("IRT"); + this.setTitle(parent.get("T")); + this.data.titleObj = this._title; + this.setContents(parent.get("Contents")); + this.data.contentsObj = this._contents; + + if (!parent.has("CreationDate")) { + this.data.creationDate = null; + } else { + this.setCreationDate(parent.get("CreationDate")); + this.data.creationDate = this.creationDate; + } + + if (!parent.has("M")) { + this.data.modificationDate = null; + } else { + this.setModificationDate(parent.get("M")); + this.data.modificationDate = this.modificationDate; + } + + this.data.hasPopup = parent.has("Popup"); + + if (!parent.has("C")) { + this.data.color = null; + } else { + this.setColor(parent.getArray("C")); + this.data.color = this.color; + } + } else { + this.data.titleObj = this._title; + this.setCreationDate(dict.get("CreationDate")); + this.data.creationDate = this.creationDate; + this.data.hasPopup = dict.has("Popup"); + + if (!dict.has("C")) { + this.data.color = null; + } + } + + if (dict.has("RC")) { + this.data.richText = _factory.XFAFactory.getRichTextAsHtml(dict.get("RC")); + } + } + + setCreationDate(creationDate) { + this.creationDate = typeof creationDate === "string" ? creationDate : null; + } + + _setDefaultAppearance({ + xref, + extra, + strokeColor, + fillColor, + blendMode, + strokeAlpha, + fillAlpha, + pointsCallback + }) { + let minX = Number.MAX_VALUE; + let minY = Number.MAX_VALUE; + let maxX = Number.MIN_VALUE; + let maxY = Number.MIN_VALUE; + const buffer = ["q"]; + + if (extra) { + buffer.push(extra); + } + + if (strokeColor) { + buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`); + } + + if (fillColor) { + buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`); + } + + let pointsArray = this.data.quadPoints; + + if (!pointsArray) { + pointsArray = [[{ + x: this.rectangle[0], + y: this.rectangle[3] + }, { + x: this.rectangle[2], + y: this.rectangle[3] + }, { + x: this.rectangle[0], + y: this.rectangle[1] + }, { + x: this.rectangle[2], + y: this.rectangle[1] + }]]; + } + + for (const points of pointsArray) { + const [mX, MX, mY, MY] = pointsCallback(buffer, points); + minX = Math.min(minX, mX); + maxX = Math.max(maxX, MX); + minY = Math.min(minY, mY); + maxY = Math.max(maxY, MY); + } + + buffer.push("Q"); + const formDict = new _primitives.Dict(xref); + const appearanceStreamDict = new _primitives.Dict(xref); + appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); + const appearanceStream = new _stream.StringStream(buffer.join(" ")); + appearanceStream.dict = appearanceStreamDict; + formDict.set("Fm0", appearanceStream); + const gsDict = new _primitives.Dict(xref); + + if (blendMode) { + gsDict.set("BM", _primitives.Name.get(blendMode)); + } + + if (typeof strokeAlpha === "number") { + gsDict.set("CA", strokeAlpha); + } + + if (typeof fillAlpha === "number") { + gsDict.set("ca", fillAlpha); + } + + const stateDict = new _primitives.Dict(xref); + stateDict.set("GS0", gsDict); + const resources = new _primitives.Dict(xref); + resources.set("ExtGState", stateDict); + resources.set("XObject", formDict); + const appearanceDict = new _primitives.Dict(xref); + appearanceDict.set("Resources", resources); + const bbox = this.data.rect = [minX, minY, maxX, maxY]; + appearanceDict.set("BBox", bbox); + this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do"); + this.appearance.dict = appearanceDict; + + this._streams.push(this.appearance, appearanceStream); + } + + static async createNewAnnotation(xref, annotation, dependencies, params) { + const annotationRef = xref.getNewRef(); + const apRef = xref.getNewRef(); + const annotationDict = this.createNewDict(annotation, xref, { + apRef + }); + const ap = await this.createNewAppearanceStream(annotation, xref, params); + const buffer = []; + let transform = xref.encrypt ? xref.encrypt.createCipherTransform(apRef.num, apRef.gen) : null; + (0, _writer.writeObject)(apRef, ap, buffer, transform); + dependencies.push({ + ref: apRef, + data: buffer.join("") + }); + buffer.length = 0; + transform = xref.encrypt ? xref.encrypt.createCipherTransform(annotationRef.num, annotationRef.gen) : null; + (0, _writer.writeObject)(annotationRef, annotationDict, buffer, transform); + return { + ref: annotationRef, + data: buffer.join("") + }; + } + + static async createNewPrintAnnotation(xref, annotation, params) { + const ap = await this.createNewAppearanceStream(annotation, xref, params); + const annotationDict = this.createNewDict(annotation, xref, { + ap + }); + return new this.prototype.constructor({ + dict: annotationDict, + xref + }); + } + +} + +exports.MarkupAnnotation = MarkupAnnotation; + +class WidgetAnnotation extends Annotation { + constructor(params) { + super(params); + const dict = params.dict; + const data = this.data; + this.ref = params.ref; + data.annotationType = _util.AnnotationType.WIDGET; + + if (data.fieldName === undefined) { + data.fieldName = this._constructFieldName(dict); + } + + if (data.actions === undefined) { + data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); + } + + let fieldValue = (0, _core_utils.getInheritableProperty)({ + dict, + key: "V", + getArray: true + }); + data.fieldValue = this._decodeFormValue(fieldValue); + const defaultFieldValue = (0, _core_utils.getInheritableProperty)({ + dict, + key: "DV", + getArray: true + }); + data.defaultFieldValue = this._decodeFormValue(defaultFieldValue); + + if (fieldValue === undefined && params.xfaDatasets) { + const path = this._title.str; + + if (path) { + this._hasValueFromXFA = true; + data.fieldValue = fieldValue = params.xfaDatasets.getValue(path); + } + } + + if (fieldValue === undefined && data.defaultFieldValue !== null) { + data.fieldValue = data.defaultFieldValue; + } + + data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || ""); + const defaultAppearance = (0, _core_utils.getInheritableProperty)({ + dict, + key: "DA" + }) || params.acroForm.get("DA"); + this._defaultAppearance = typeof defaultAppearance === "string" ? defaultAppearance : ""; + data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance); + const fieldType = (0, _core_utils.getInheritableProperty)({ + dict, + key: "FT" + }); + data.fieldType = fieldType instanceof _primitives.Name ? fieldType.name : null; + const localResources = (0, _core_utils.getInheritableProperty)({ + dict, + key: "DR" + }); + const acroFormResources = params.acroForm.get("DR"); + const appearanceResources = this.appearance && this.appearance.dict.get("Resources"); + this._fieldResources = { + localResources, + acroFormResources, + appearanceResources, + mergedResources: _primitives.Dict.merge({ + xref: params.xref, + dictArray: [localResources, appearanceResources, acroFormResources], + mergeSubDicts: true + }) + }; + data.fieldFlags = (0, _core_utils.getInheritableProperty)({ + dict, + key: "Ff" + }); + + if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { + data.fieldFlags = 0; + } + + data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); + data.required = this.hasFieldFlag(_util.AnnotationFieldFlag.REQUIRED); + data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN); + } + + _decodeFormValue(formValue) { + if (Array.isArray(formValue)) { + return formValue.filter(item => typeof item === "string").map(item => (0, _util.stringToPDFString)(item)); + } else if (formValue instanceof _primitives.Name) { + return (0, _util.stringToPDFString)(formValue.name); + } else if (typeof formValue === "string") { + return (0, _util.stringToPDFString)(formValue); + } + + return null; + } + + hasFieldFlag(flag) { + return !!(this.data.fieldFlags & flag); + } + + static _getRotationMatrix(rotation, width, height) { + switch (rotation) { + case 90: + return [0, 1, -1, 0, width, 0]; + + case 180: + return [-1, 0, 0, -1, width, height]; + + case 270: + return [0, -1, 1, 0, 0, height]; + + default: + throw new Error("Invalid rotation"); + } + } + + getRotationMatrix(annotationStorage) { + const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; + let rotation = storageEntry && storageEntry.rotation; + + if (rotation === undefined) { + rotation = this.rotation; + } + + if (rotation === 0) { + return _util.IDENTITY_MATRIX; + } + + const width = this.data.rect[2] - this.data.rect[0]; + const height = this.data.rect[3] - this.data.rect[1]; + return WidgetAnnotation._getRotationMatrix(rotation, width, height); + } + + getBorderAndBackgroundAppearances(annotationStorage) { + const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; + let rotation = storageEntry && storageEntry.rotation; + + if (rotation === undefined) { + rotation = this.rotation; + } + + if (!this.backgroundColor && !this.borderColor) { + return ""; + } + + const width = this.data.rect[2] - this.data.rect[0]; + const height = this.data.rect[3] - this.data.rect[1]; + const rect = rotation === 0 || rotation === 180 ? `0 0 ${width} ${height} re` : `0 0 ${height} ${width} re`; + let str = ""; + + if (this.backgroundColor) { + str = `${(0, _default_appearance.getPdfColor)(this.backgroundColor, true)} ${rect} f `; + } + + if (this.borderColor) { + const borderWidth = this.borderStyle.width || 1; + str += `${borderWidth} w ${(0, _default_appearance.getPdfColor)(this.borderColor, false)} ${rect} S `; + } + + return str; + } + + async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { + if (renderForms && !(this instanceof SignatureWidgetAnnotation)) { + return { + opList: new _operator_list.OperatorList(), + separateForm: true, + separateCanvas: false + }; + } + + if (!this._hasText) { + return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); + } + + const content = await this._getAppearance(evaluator, task, annotationStorage); + + if (this.appearance && content === null) { + return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); + } + + const opList = new _operator_list.OperatorList(); + + if (!this._defaultAppearance || content === null) { + return { + opList, + separateForm: false, + separateCanvas: false + }; + } + + const matrix = [1, 0, 0, 1, 0, 0]; + const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; + const transform = getTransformMatrix(this.data.rect, bbox, matrix); + let optionalContent; + + if (this.oc) { + optionalContent = await evaluator.parseMarkedContentProps(this.oc, null); + } + + if (optionalContent !== undefined) { + opList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); + } + + opList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, this.getRotationMatrix(annotationStorage), false]); + const stream = new _stream.StringStream(content); + await evaluator.getOperatorList({ + stream, + task, + resources: this._fieldResources.mergedResources, + operatorList: opList + }); + opList.addOp(_util.OPS.endAnnotation, []); + + if (optionalContent !== undefined) { + opList.addOp(_util.OPS.endMarkedContent, []); + } + + return { + opList, + separateForm: false, + separateCanvas: false + }; + } + + _getMKDict(rotation) { + const mk = new _primitives.Dict(null); + + if (rotation) { + mk.set("R", rotation); + } + + if (this.borderColor) { + mk.set("BC", Array.from(this.borderColor).map(c => c / 255)); + } + + if (this.backgroundColor) { + mk.set("BG", Array.from(this.backgroundColor).map(c => c / 255)); + } + + return mk.size > 0 ? mk : null; + } + + async save(evaluator, task, annotationStorage) { + const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; + let value = storageEntry && storageEntry.value; + let rotation = storageEntry && storageEntry.rotation; + + if (value === this.data.fieldValue || value === undefined) { + if (!this._hasValueFromXFA && rotation === undefined) { + return null; + } + + value = value || this.data.fieldValue; + } + + if (rotation === undefined && !this._hasValueFromXFA && Array.isArray(value) && Array.isArray(this.data.fieldValue) && value.length === this.data.fieldValue.length && value.every((x, i) => x === this.data.fieldValue[i])) { + return null; + } + + if (rotation === undefined) { + rotation = this.rotation; + } + + let appearance = await this._getAppearance(evaluator, task, annotationStorage); + + if (appearance === null) { + return null; + } + + const { + xref + } = evaluator; + const dict = xref.fetchIfRef(this.ref); + + if (!(dict instanceof _primitives.Dict)) { + return null; + } + + const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; + const xfa = { + path: (0, _util.stringToPDFString)(dict.get("T") || ""), + value + }; + const newRef = xref.getNewRef(); + const AP = new _primitives.Dict(xref); + AP.set("N", newRef); + const encrypt = xref.encrypt; + let originalTransform = null; + let newTransform = null; + + if (encrypt) { + originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); + newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen); + appearance = newTransform.encryptString(appearance); + } + + const encoder = val => (0, _util.isAscii)(val) ? val : (0, _util.stringToUTF16BEString)(val); + + dict.set("V", Array.isArray(value) ? value.map(encoder) : encoder(value)); + dict.set("AP", AP); + dict.set("M", `D:${(0, _util.getModificationDate)()}`); + + const maybeMK = this._getMKDict(rotation); + + if (maybeMK) { + dict.set("MK", maybeMK); + } + + const appearanceDict = new _primitives.Dict(xref); + appearanceDict.set("Length", appearance.length); + appearanceDict.set("Subtype", _primitives.Name.get("Form")); + appearanceDict.set("Resources", this._getSaveFieldResources(xref)); + appearanceDict.set("BBox", bbox); + const rotationMatrix = this.getRotationMatrix(annotationStorage); + + if (rotationMatrix !== _util.IDENTITY_MATRIX) { + appearanceDict.set("Matrix", rotationMatrix); + } + + const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`]; + (0, _writer.writeDict)(dict, bufferOriginal, originalTransform); + bufferOriginal.push("\nendobj\n"); + const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`]; + (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform); + bufferNew.push(" stream\n", appearance, "\nendstream\nendobj\n"); + return [{ + ref: this.ref, + data: bufferOriginal.join(""), + xfa + }, { + ref: newRef, + data: bufferNew.join(""), + xfa: null + }]; + } + + async _getAppearance(evaluator, task, annotationStorage) { + const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD); + + if (isPassword) { + return null; + } + + const storageEntry = annotationStorage ? annotationStorage.get(this.data.id) : undefined; + let value, rotation; + + if (storageEntry) { + value = storageEntry.formattedValue || storageEntry.value; + rotation = storageEntry.rotation; + } + + if (rotation === undefined && value === undefined) { + if (!this._hasValueFromXFA || this.appearance) { + return null; + } + } + + if (value === undefined) { + value = this.data.fieldValue; + + if (!value) { + return ""; + } + } + + if (Array.isArray(value) && value.length === 1) { + value = value[0]; + } + + (0, _util.assert)(typeof value === "string", "Expected `value` to be a string."); + value = value.trim(); + + if (value === "") { + return ""; + } + + if (rotation === undefined) { + rotation = this.rotation; + } + + let lineCount = -1; + + if (this.data.multiLine) { + lineCount = value.split(/\r\n|\r|\n/).length; + } + + const defaultPadding = 2; + const hPadding = defaultPadding; + let totalHeight = this.data.rect[3] - this.data.rect[1]; + let totalWidth = this.data.rect[2] - this.data.rect[0]; + + if (rotation === 90 || rotation === 270) { + [totalWidth, totalHeight] = [totalHeight, totalWidth]; + } + + if (!this._defaultAppearance) { + this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); + } + + const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources); + + const [defaultAppearance, fontSize] = this._computeFontSize(totalHeight - defaultPadding, totalWidth - 2 * hPadding, value, font, lineCount); + + let descent = font.descent; + + if (isNaN(descent)) { + descent = 0; + } + + const defaultVPadding = Math.min(Math.floor((totalHeight - fontSize) / 2), defaultPadding); + const vPadding = defaultVPadding + Math.abs(descent) * fontSize; + const alignment = this.data.textAlignment; + + if (this.data.multiLine) { + return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding, annotationStorage); + } + + const encodedString = font.encodeString(value).join(""); + + if (this.data.comb) { + return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding, annotationStorage); + } + + const colors = this.getBorderAndBackgroundAppearances(annotationStorage); + + if (alignment === 0 || alignment > 2) { + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(encodedString)}) Tj` + " ET Q EMC"; + } + + const renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding); + + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; + } + + static async _getFontData(evaluator, task, appearanceData, resources) { + const operatorList = new _operator_list.OperatorList(); + const initialState = { + font: null, + + clone() { + return this; + } + + }; + const { + fontName, + fontSize + } = appearanceData; + await evaluator.handleSetFont(resources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null); + return initialState.font; + } + + _getTextWidth(text, font) { + return font.charsToGlyphs(text).reduce((width, glyph) => width + glyph.width, 0) / 1000; + } + + _computeFontSize(height, width, text, font, lineCount) { + let { + fontSize + } = this.data.defaultAppearanceData; + + if (!fontSize) { + const roundWithTwoDigits = x => Math.floor(x * 100) / 100; + + if (lineCount === -1) { + const textWidth = this._getTextWidth(text, font); + + fontSize = roundWithTwoDigits(Math.min(height / _util.LINE_FACTOR, width / textWidth)); + } else { + const lines = text.split(/\r\n?|\n/); + const cachedLines = []; + + for (const line of lines) { + const encoded = font.encodeString(line).join(""); + const glyphs = font.charsToGlyphs(encoded); + const positions = font.getCharPositions(encoded); + cachedLines.push({ + line: encoded, + glyphs, + positions + }); + } + + const isTooBig = fsize => { + let totalHeight = 0; + + for (const cache of cachedLines) { + const chunks = this._splitLine(null, font, fsize, width, cache); + + totalHeight += chunks.length * fsize; + + if (totalHeight > height) { + return true; + } + } + + return false; + }; + + fontSize = 12; + let lineHeight = fontSize * _util.LINE_FACTOR; + let numberOfLines = Math.round(height / lineHeight); + numberOfLines = Math.max(numberOfLines, lineCount); + + while (true) { + lineHeight = height / numberOfLines; + fontSize = roundWithTwoDigits(lineHeight / _util.LINE_FACTOR); + + if (isTooBig(fontSize)) { + numberOfLines++; + continue; + } + + break; + } + } + + const { + fontName, + fontColor + } = this.data.defaultAppearanceData; + this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({ + fontSize, + fontName, + fontColor + }); + } + + return [this._defaultAppearance, fontSize]; + } + + _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) { + let shift; + + if (alignment === 1) { + const width = this._getTextWidth(text, font) * fontSize; + shift = (totalWidth - width) / 2; + } else if (alignment === 2) { + const width = this._getTextWidth(text, font) * fontSize; + shift = totalWidth - width - hPadding; + } else { + shift = hPadding; + } + + shift = (0, _core_utils.numberToString)(shift); + vPadding = (0, _core_utils.numberToString)(vPadding); + return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`; + } + + _getSaveFieldResources(xref) { + const { + localResources, + appearanceResources, + acroFormResources + } = this._fieldResources; + const fontName = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName; + + if (!fontName) { + return localResources || _primitives.Dict.empty; + } + + for (const resources of [localResources, appearanceResources]) { + if (resources instanceof _primitives.Dict) { + const localFont = resources.get("Font"); + + if (localFont instanceof _primitives.Dict && localFont.has(fontName)) { + return resources; + } + } + } + + if (acroFormResources instanceof _primitives.Dict) { + const acroFormFont = acroFormResources.get("Font"); + + if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) { + const subFontDict = new _primitives.Dict(xref); + subFontDict.set(fontName, acroFormFont.getRaw(fontName)); + const subResourcesDict = new _primitives.Dict(xref); + subResourcesDict.set("Font", subFontDict); + return _primitives.Dict.merge({ + xref, + dictArray: [subResourcesDict, localResources], + mergeSubDicts: true + }); + } + } + + return localResources || _primitives.Dict.empty; + } + + getFieldObject() { + return null; + } + +} + +class TextWidgetAnnotation extends WidgetAnnotation { + constructor(params) { + super(params); + this._hasText = true; + const dict = params.dict; + + if (typeof this.data.fieldValue !== "string") { + this.data.fieldValue = ""; + } + + let alignment = (0, _core_utils.getInheritableProperty)({ + dict, + key: "Q" + }); + + if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { + alignment = null; + } + + this.data.textAlignment = alignment; + let maximumLength = (0, _core_utils.getInheritableProperty)({ + dict, + key: "MaxLen" + }); + + if (!Number.isInteger(maximumLength) || maximumLength < 0) { + maximumLength = 0; + } + + this.data.maxLen = maximumLength; + this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); + this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== 0; + this.data.doNotScroll = this.hasFieldFlag(_util.AnnotationFieldFlag.DONOTSCROLL); + } + + _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding, annotationStorage) { + const combWidth = (0, _core_utils.numberToString)(width / this.data.maxLen); + const buf = []; + const positions = font.getCharPositions(text); + + for (const [start, end] of positions) { + buf.push(`(${(0, _util.escapeString)(text.substring(start, end))}) Tj`); + } + + const colors = this.getBorderAndBackgroundAppearances(annotationStorage); + const renderedComb = buf.join(` ${combWidth} 0 Td `); + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC"; + } + + _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding, annotationStorage) { + const lines = text.split(/\r\n?|\n/); + const buf = []; + const totalWidth = width - 2 * hPadding; + + for (const line of lines) { + const chunks = this._splitLine(line, font, fontSize, totalWidth); + + for (const chunk of chunks) { + const padding = buf.length === 0 ? hPadding : 0; + buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize)); + } + } + + const renderedText = buf.join("\n"); + const colors = this.getBorderAndBackgroundAppearances(annotationStorage); + return `/Tx BMC q ${colors}BT ` + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC"; + } + + _splitLine(line, font, fontSize, width, cache = {}) { + line = cache.line || font.encodeString(line).join(""); + const glyphs = cache.glyphs || font.charsToGlyphs(line); + + if (glyphs.length <= 1) { + return [line]; + } + + const positions = cache.positions || font.getCharPositions(line); + const scale = fontSize / 1000; + const chunks = []; + let lastSpacePosInStringStart = -1, + lastSpacePosInStringEnd = -1, + lastSpacePos = -1, + startChunk = 0, + currentWidth = 0; + + for (let i = 0, ii = glyphs.length; i < ii; i++) { + const [start, end] = positions[i]; + const glyph = glyphs[i]; + const glyphWidth = glyph.width * scale; + + if (glyph.unicode === " ") { + if (currentWidth + glyphWidth > width) { + chunks.push(line.substring(startChunk, start)); + startChunk = start; + currentWidth = glyphWidth; + lastSpacePosInStringStart = -1; + lastSpacePos = -1; + } else { + currentWidth += glyphWidth; + lastSpacePosInStringStart = start; + lastSpacePosInStringEnd = end; + lastSpacePos = i; + } + } else { + if (currentWidth + glyphWidth > width) { + if (lastSpacePosInStringStart !== -1) { + chunks.push(line.substring(startChunk, lastSpacePosInStringEnd)); + startChunk = lastSpacePosInStringEnd; + i = lastSpacePos + 1; + lastSpacePosInStringStart = -1; + currentWidth = 0; + } else { + chunks.push(line.substring(startChunk, start)); + startChunk = start; + currentWidth = glyphWidth; + } + } else { + currentWidth += glyphWidth; + } + } + } + + if (startChunk < line.length) { + chunks.push(line.substring(startChunk, line.length)); + } + + return chunks; + } + + getFieldObject() { + return { + id: this.data.id, + value: this.data.fieldValue, + defaultValue: this.data.defaultFieldValue || "", + multiline: this.data.multiLine, + password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD), + charLimit: this.data.maxLen, + comb: this.data.comb, + editable: !this.data.readOnly, + hidden: this.data.hidden, + name: this.data.fieldName, + rect: this.data.rect, + actions: this.data.actions, + page: this.data.pageIndex, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + rotation: this.rotation, + type: "text" + }; + } + +} + +class ButtonWidgetAnnotation extends WidgetAnnotation { + constructor(params) { + super(params); + this.checkedAppearance = null; + this.uncheckedAppearance = null; + this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); + this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); + this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); + this.data.isTooltipOnly = false; + + if (this.data.checkBox) { + this._processCheckBox(params); + } else if (this.data.radioButton) { + this._processRadioButton(params); + } else if (this.data.pushButton) { + this.data.hasOwnCanvas = true; + + this._processPushButton(params); + } else { + (0, _util.warn)("Invalid field flags for button widget annotation"); + } + } + + async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { + if (this.data.pushButton) { + return super.getOperatorList(evaluator, task, intent, false, annotationStorage); + } + + let value = null; + let rotation = null; + + if (annotationStorage) { + const storageEntry = annotationStorage.get(this.data.id); + value = storageEntry ? storageEntry.value : null; + rotation = storageEntry ? storageEntry.rotation : null; + } + + if (value === null && this.appearance) { + return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); + } + + if (value === null || value === undefined) { + if (this.data.checkBox) { + value = this.data.fieldValue === this.data.exportValue; + } else { + value = this.data.fieldValue === this.data.buttonValue; + } + } + + const appearance = value ? this.checkedAppearance : this.uncheckedAppearance; + + if (appearance) { + const savedAppearance = this.appearance; + + const savedMatrix = appearance.dict.getArray("Matrix") || _util.IDENTITY_MATRIX; + + if (rotation) { + appearance.dict.set("Matrix", this.getRotationMatrix(annotationStorage)); + } + + this.appearance = appearance; + const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); + this.appearance = savedAppearance; + appearance.dict.set("Matrix", savedMatrix); + return operatorList; + } + + return { + opList: new _operator_list.OperatorList(), + separateForm: false, + separateCanvas: false + }; + } + + async save(evaluator, task, annotationStorage) { + if (this.data.checkBox) { + return this._saveCheckbox(evaluator, task, annotationStorage); + } + + if (this.data.radioButton) { + return this._saveRadioButton(evaluator, task, annotationStorage); + } + + return null; + } + + async _saveCheckbox(evaluator, task, annotationStorage) { + if (!annotationStorage) { + return null; + } + + const storageEntry = annotationStorage.get(this.data.id); + let rotation = storageEntry && storageEntry.rotation; + let value = storageEntry && storageEntry.value; + + if (rotation === undefined) { + if (value === undefined) { + return null; + } + + const defaultValue = this.data.fieldValue === this.data.exportValue; + + if (defaultValue === value) { + return null; + } + } + + const dict = evaluator.xref.fetchIfRef(this.ref); + + if (!(dict instanceof _primitives.Dict)) { + return null; + } + + if (rotation === undefined) { + rotation = this.rotation; + } + + if (value === undefined) { + value = this.data.fieldValue === this.data.exportValue; + } + + const xfa = { + path: (0, _util.stringToPDFString)(dict.get("T") || ""), + value: value ? this.data.exportValue : "" + }; + + const name = _primitives.Name.get(value ? this.data.exportValue : "Off"); + + dict.set("V", name); + dict.set("AS", name); + dict.set("M", `D:${(0, _util.getModificationDate)()}`); + + const maybeMK = this._getMKDict(rotation); + + if (maybeMK) { + dict.set("MK", maybeMK); + } + + const encrypt = evaluator.xref.encrypt; + let originalTransform = null; + + if (encrypt) { + originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); + } + + const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; + (0, _writer.writeDict)(dict, buffer, originalTransform); + buffer.push("\nendobj\n"); + return [{ + ref: this.ref, + data: buffer.join(""), + xfa + }]; + } + + async _saveRadioButton(evaluator, task, annotationStorage) { + if (!annotationStorage) { + return null; + } + + const storageEntry = annotationStorage.get(this.data.id); + let rotation = storageEntry && storageEntry.rotation; + let value = storageEntry && storageEntry.value; + + if (rotation === undefined) { + if (value === undefined) { + return null; + } + + const defaultValue = this.data.fieldValue === this.data.buttonValue; + + if (defaultValue === value) { + return null; + } + } + + const dict = evaluator.xref.fetchIfRef(this.ref); + + if (!(dict instanceof _primitives.Dict)) { + return null; + } + + if (value === undefined) { + value = this.data.fieldValue === this.data.buttonValue; + } + + if (rotation === undefined) { + rotation = this.rotation; + } + + const xfa = { + path: (0, _util.stringToPDFString)(dict.get("T") || ""), + value: value ? this.data.buttonValue : "" + }; + + const name = _primitives.Name.get(value ? this.data.buttonValue : "Off"); + + let parentBuffer = null; + const encrypt = evaluator.xref.encrypt; + + if (value) { + if (this.parent instanceof _primitives.Ref) { + const parent = evaluator.xref.fetch(this.parent); + let parentTransform = null; + + if (encrypt) { + parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen); + } + + parent.set("V", name); + parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`]; + (0, _writer.writeDict)(parent, parentBuffer, parentTransform); + parentBuffer.push("\nendobj\n"); + } else if (this.parent instanceof _primitives.Dict) { + this.parent.set("V", name); + } + } + + dict.set("AS", name); + dict.set("M", `D:${(0, _util.getModificationDate)()}`); + + const maybeMK = this._getMKDict(rotation); + + if (maybeMK) { + dict.set("MK", maybeMK); + } + + let originalTransform = null; + + if (encrypt) { + originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); + } + + const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; + (0, _writer.writeDict)(dict, buffer, originalTransform); + buffer.push("\nendobj\n"); + const newRefs = [{ + ref: this.ref, + data: buffer.join(""), + xfa + }]; + + if (parentBuffer !== null) { + newRefs.push({ + ref: this.parent, + data: parentBuffer.join(""), + xfa: null + }); + } + + return newRefs; + } + + _getDefaultCheckedAppearance(params, type) { + const width = this.data.rect[2] - this.data.rect[0]; + const height = this.data.rect[3] - this.data.rect[1]; + const bbox = [0, 0, width, height]; + const FONT_RATIO = 0.8; + const fontSize = Math.min(width, height) * FONT_RATIO; + let metrics, char; + + if (type === "check") { + metrics = { + width: 0.755 * fontSize, + height: 0.705 * fontSize + }; + char = "\x33"; + } else if (type === "disc") { + metrics = { + width: 0.791 * fontSize, + height: 0.705 * fontSize + }; + char = "\x6C"; + } else { + (0, _util.unreachable)(`_getDefaultCheckedAppearance - unsupported type: ${type}`); + } + + const xShift = (0, _core_utils.numberToString)((width - metrics.width) / 2); + const yShift = (0, _core_utils.numberToString)((height - metrics.height) / 2); + const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`; + const appearanceStreamDict = new _primitives.Dict(params.xref); + appearanceStreamDict.set("FormType", 1); + appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); + appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); + appearanceStreamDict.set("BBox", bbox); + appearanceStreamDict.set("Matrix", [1, 0, 0, 1, 0, 0]); + appearanceStreamDict.set("Length", appearance.length); + const resources = new _primitives.Dict(params.xref); + const font = new _primitives.Dict(params.xref); + font.set("PdfJsZaDb", this.fallbackFontDict); + resources.set("Font", font); + appearanceStreamDict.set("Resources", resources); + this.checkedAppearance = new _stream.StringStream(appearance); + this.checkedAppearance.dict = appearanceStreamDict; + + this._streams.push(this.checkedAppearance); + } + + _processCheckBox(params) { + const customAppearance = params.dict.get("AP"); + + if (!(customAppearance instanceof _primitives.Dict)) { + return; + } + + const normalAppearance = customAppearance.get("N"); + + if (!(normalAppearance instanceof _primitives.Dict)) { + return; + } + + const asValue = this._decodeFormValue(params.dict.get("AS")); + + if (typeof asValue === "string") { + this.data.fieldValue = asValue; + } + + const yes = this.data.fieldValue !== null && this.data.fieldValue !== "Off" ? this.data.fieldValue : "Yes"; + const exportValues = normalAppearance.getKeys(); + + if (exportValues.length === 0) { + exportValues.push("Off", yes); + } else if (exportValues.length === 1) { + if (exportValues[0] === "Off") { + exportValues.push(yes); + } else { + exportValues.unshift("Off"); + } + } else if (exportValues.includes(yes)) { + exportValues.length = 0; + exportValues.push("Off", yes); + } else { + const otherYes = exportValues.find(v => v !== "Off"); + exportValues.length = 0; + exportValues.push("Off", otherYes); + } + + if (!exportValues.includes(this.data.fieldValue)) { + this.data.fieldValue = "Off"; + } + + this.data.exportValue = exportValues[1]; + this.checkedAppearance = normalAppearance.get(this.data.exportValue) || null; + this.uncheckedAppearance = normalAppearance.get("Off") || null; + + if (this.checkedAppearance) { + this._streams.push(this.checkedAppearance); + } else { + this._getDefaultCheckedAppearance(params, "check"); + } + + if (this.uncheckedAppearance) { + this._streams.push(this.uncheckedAppearance); + } + + this._fallbackFontDict = this.fallbackFontDict; + } + + _processRadioButton(params) { + this.data.fieldValue = this.data.buttonValue = null; + const fieldParent = params.dict.get("Parent"); + + if (fieldParent instanceof _primitives.Dict) { + this.parent = params.dict.getRaw("Parent"); + const fieldParentValue = fieldParent.get("V"); + + if (fieldParentValue instanceof _primitives.Name) { + this.data.fieldValue = this._decodeFormValue(fieldParentValue); + } + } + + const appearanceStates = params.dict.get("AP"); + + if (!(appearanceStates instanceof _primitives.Dict)) { + return; + } + + const normalAppearance = appearanceStates.get("N"); + + if (!(normalAppearance instanceof _primitives.Dict)) { + return; + } + + for (const key of normalAppearance.getKeys()) { + if (key !== "Off") { + this.data.buttonValue = this._decodeFormValue(key); + break; + } + } + + this.checkedAppearance = normalAppearance.get(this.data.buttonValue) || null; + this.uncheckedAppearance = normalAppearance.get("Off") || null; + + if (this.checkedAppearance) { + this._streams.push(this.checkedAppearance); + } else { + this._getDefaultCheckedAppearance(params, "disc"); + } + + if (this.uncheckedAppearance) { + this._streams.push(this.uncheckedAppearance); + } + + this._fallbackFontDict = this.fallbackFontDict; + } + + _processPushButton(params) { + if (!params.dict.has("A") && !params.dict.has("AA") && !this.data.alternativeText) { + (0, _util.warn)("Push buttons without action dictionaries are not supported"); + return; + } + + this.data.isTooltipOnly = !params.dict.has("A") && !params.dict.has("AA"); + + _catalog.Catalog.parseDestDictionary({ + destDict: params.dict, + resultObj: this.data, + docBaseUrl: params.pdfManager.docBaseUrl + }); + } + + getFieldObject() { + let type = "button"; + let exportValues; + + if (this.data.checkBox) { + type = "checkbox"; + exportValues = this.data.exportValue; + } else if (this.data.radioButton) { + type = "radiobutton"; + exportValues = this.data.buttonValue; + } + + return { + id: this.data.id, + value: this.data.fieldValue || "Off", + defaultValue: this.data.defaultFieldValue, + exportValues, + editable: !this.data.readOnly, + name: this.data.fieldName, + rect: this.data.rect, + hidden: this.data.hidden, + actions: this.data.actions, + page: this.data.pageIndex, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + rotation: this.rotation, + type + }; + } + + get fallbackFontDict() { + const dict = new _primitives.Dict(); + dict.set("BaseFont", _primitives.Name.get("ZapfDingbats")); + dict.set("Type", _primitives.Name.get("FallbackType")); + dict.set("Subtype", _primitives.Name.get("FallbackType")); + dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding")); + return (0, _util.shadow)(this, "fallbackFontDict", dict); + } + +} + +class ChoiceWidgetAnnotation extends WidgetAnnotation { + constructor(params) { + super(params); + this.data.options = []; + const options = (0, _core_utils.getInheritableProperty)({ + dict: params.dict, + key: "Opt" + }); + + if (Array.isArray(options)) { + const xref = params.xref; + + for (let i = 0, ii = options.length; i < ii; i++) { + const option = xref.fetchIfRef(options[i]); + const isOptionArray = Array.isArray(option); + this.data.options[i] = { + exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option), + displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option) + }; + } + } + + if (typeof this.data.fieldValue === "string") { + this.data.fieldValue = [this.data.fieldValue]; + } else if (!this.data.fieldValue) { + this.data.fieldValue = []; + } + + this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); + this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); + this._hasText = true; + } + + getFieldObject() { + const type = this.data.combo ? "combobox" : "listbox"; + const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; + return { + id: this.data.id, + value, + defaultValue: this.data.defaultFieldValue, + editable: !this.data.readOnly, + name: this.data.fieldName, + rect: this.data.rect, + numItems: this.data.fieldValue.length, + multipleSelection: this.data.multiSelect, + hidden: this.data.hidden, + actions: this.data.actions, + items: this.data.options, + page: this.data.pageIndex, + strokeColor: this.data.borderColor, + fillColor: this.data.backgroundColor, + rotation: this.rotation, + type + }; + } + + async _getAppearance(evaluator, task, annotationStorage) { + if (this.data.combo) { + return super._getAppearance(evaluator, task, annotationStorage); + } + + if (!annotationStorage) { + return null; + } + + const storageEntry = annotationStorage.get(this.data.id); + + if (!storageEntry) { + return null; + } + + const rotation = storageEntry.rotation; + let exportedValue = storageEntry.value; + + if (rotation === undefined && exportedValue === undefined) { + return null; + } + + if (exportedValue === undefined) { + exportedValue = this.data.fieldValue; + } else if (!Array.isArray(exportedValue)) { + exportedValue = [exportedValue]; + } + + const defaultPadding = 2; + const hPadding = defaultPadding; + let totalHeight = this.data.rect[3] - this.data.rect[1]; + let totalWidth = this.data.rect[2] - this.data.rect[0]; + + if (rotation === 90 || rotation === 270) { + [totalWidth, totalHeight] = [totalHeight, totalWidth]; + } + + const lineCount = this.data.options.length; + const valueIndices = []; + + for (let i = 0; i < lineCount; i++) { + const { + exportValue + } = this.data.options[i]; + + if (exportedValue.includes(exportValue)) { + valueIndices.push(i); + } + } + + if (!this._defaultAppearance) { + this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); + } + + const font = await WidgetAnnotation._getFontData(evaluator, task, this.data.defaultAppearanceData, this._fieldResources.mergedResources); + let defaultAppearance; + let { + fontSize + } = this.data.defaultAppearanceData; + + if (!fontSize) { + const lineHeight = (totalHeight - defaultPadding) / lineCount; + let lineWidth = -1; + let value; + + for (const { + displayValue + } of this.data.options) { + const width = this._getTextWidth(displayValue, font); + + if (width > lineWidth) { + lineWidth = width; + value = displayValue; + } + } + + [defaultAppearance, fontSize] = this._computeFontSize(lineHeight, totalWidth - 2 * hPadding, value, font, -1); + } else { + defaultAppearance = this._defaultAppearance; + } + + const lineHeight = fontSize * _util.LINE_FACTOR; + const vPadding = (lineHeight - fontSize) / 2; + const numberOfVisibleLines = Math.floor(totalHeight / lineHeight); + let firstIndex; + + if (valueIndices.length === 1) { + const valuePosition = valueIndices[0]; + const indexInPage = valuePosition % numberOfVisibleLines; + firstIndex = valuePosition - indexInPage; + } else { + firstIndex = valueIndices.length ? valueIndices[0] : 0; + } + + const end = Math.min(firstIndex + numberOfVisibleLines + 1, lineCount); + const buf = ["/Tx BMC q", `1 1 ${totalWidth} ${totalHeight} re W n`]; + + if (valueIndices.length) { + buf.push("0.600006 0.756866 0.854904 rg"); + + for (const index of valueIndices) { + if (firstIndex <= index && index < end) { + buf.push(`1 ${totalHeight - (index - firstIndex + 1) * lineHeight} ${totalWidth} ${lineHeight} re f`); + } + } + } + + buf.push("BT", defaultAppearance, `1 0 0 1 0 ${totalHeight} Tm`); + + for (let i = firstIndex; i < end; i++) { + const { + displayValue + } = this.data.options[i]; + const hpadding = i === firstIndex ? hPadding : 0; + const vpadding = i === firstIndex ? vPadding : 0; + buf.push(this._renderText(displayValue, font, fontSize, totalWidth, 0, hpadding, -lineHeight + vpadding)); + } + + buf.push("ET Q EMC"); + return buf.join("\n"); + } + +} + +class SignatureWidgetAnnotation extends WidgetAnnotation { + constructor(params) { + super(params); + this.data.fieldValue = null; + } + + getFieldObject() { + return { + id: this.data.id, + value: null, + page: this.data.pageIndex, + type: "signature" + }; + } + +} + +class TextAnnotation extends MarkupAnnotation { + constructor(parameters) { + const DEFAULT_ICON_SIZE = 22; + super(parameters); + const dict = parameters.dict; + this.data.annotationType = _util.AnnotationType.TEXT; + + if (this.data.hasAppearance) { + this.data.name = "NoIcon"; + } else { + this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; + this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; + this.data.name = dict.has("Name") ? dict.get("Name").name : "Note"; + } + + if (dict.has("State")) { + this.data.state = dict.get("State") || null; + this.data.stateModel = dict.get("StateModel") || null; + } else { + this.data.state = null; + this.data.stateModel = null; + } + } + +} + +class LinkAnnotation extends Annotation { + constructor(params) { + super(params); + this.data.annotationType = _util.AnnotationType.LINK; + const quadPoints = getQuadPoints(params.dict, this.rectangle); + + if (quadPoints) { + this.data.quadPoints = quadPoints; + } + + this.data.borderColor = this.data.borderColor || this.data.color; + + _catalog.Catalog.parseDestDictionary({ + destDict: params.dict, + resultObj: this.data, + docBaseUrl: params.pdfManager.docBaseUrl + }); + } + +} + +class PopupAnnotation extends Annotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.POPUP; + let parentItem = parameters.dict.get("Parent"); + + if (!parentItem) { + (0, _util.warn)("Popup annotation has a missing or invalid parent annotation."); + return; + } + + const parentSubtype = parentItem.get("Subtype"); + this.data.parentType = parentSubtype instanceof _primitives.Name ? parentSubtype.name : null; + const rawParent = parameters.dict.getRaw("Parent"); + this.data.parentId = rawParent instanceof _primitives.Ref ? rawParent.toString() : null; + const parentRect = parentItem.getArray("Rect"); + + if (Array.isArray(parentRect) && parentRect.length === 4) { + this.data.parentRect = _util.Util.normalizeRect(parentRect); + } else { + this.data.parentRect = [0, 0, 0, 0]; + } + + const rt = parentItem.get("RT"); + + if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) { + parentItem = parentItem.get("IRT"); + } + + if (!parentItem.has("M")) { + this.data.modificationDate = null; + } else { + this.setModificationDate(parentItem.get("M")); + this.data.modificationDate = this.modificationDate; + } + + if (!parentItem.has("C")) { + this.data.color = null; + } else { + this.setColor(parentItem.getArray("C")); + this.data.color = this.color; + } + + if (!this.viewable) { + const parentFlags = parentItem.get("F"); + + if (this._isViewable(parentFlags)) { + this.setFlags(parentFlags); + } + } + + this.setTitle(parentItem.get("T")); + this.data.titleObj = this._title; + this.setContents(parentItem.get("Contents")); + this.data.contentsObj = this._contents; + + if (parentItem.has("RC")) { + this.data.richText = _factory.XFAFactory.getRichTextAsHtml(parentItem.get("RC")); + } + } + +} + +exports.PopupAnnotation = PopupAnnotation; + +class FreeTextAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.FREETEXT; + } + + get hasTextContent() { + return !!this.appearance; + } + + static createNewDict(annotation, xref, { + apRef, + ap + }) { + const { + color, + fontSize, + rect, + rotation, + user, + value + } = annotation; + const freetext = new _primitives.Dict(xref); + freetext.set("Type", _primitives.Name.get("Annot")); + freetext.set("Subtype", _primitives.Name.get("FreeText")); + freetext.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); + freetext.set("Rect", rect); + const da = `/Helv ${fontSize} Tf ${(0, _default_appearance.getPdfColor)(color, true)}`; + freetext.set("DA", da); + freetext.set("Contents", value); + freetext.set("F", 4); + freetext.set("Border", [0, 0, 0]); + freetext.set("Rotate", rotation); + + if (user) { + freetext.set("T", (0, _util.stringToUTF8String)(user)); + } + + const n = new _primitives.Dict(xref); + freetext.set("AP", n); + + if (apRef) { + n.set("N", apRef); + } else { + n.set("N", ap); + } + + return freetext; + } + + static async createNewAppearanceStream(annotation, xref, params) { + const { + baseFontRef, + evaluator, + task + } = params; + const { + color, + fontSize, + rect, + rotation, + value + } = annotation; + const resources = new _primitives.Dict(xref); + const font = new _primitives.Dict(xref); + + if (baseFontRef) { + font.set("Helv", baseFontRef); + } else { + const baseFont = new _primitives.Dict(xref); + baseFont.set("BaseFont", _primitives.Name.get("Helvetica")); + baseFont.set("Type", _primitives.Name.get("Font")); + baseFont.set("Subtype", _primitives.Name.get("Type1")); + baseFont.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); + font.set("Helv", baseFont); + } + + resources.set("Font", font); + const helv = await WidgetAnnotation._getFontData(evaluator, task, { + fontName: "Helvetica", + fontSize + }, resources); + const [x1, y1, x2, y2] = rect; + let w = x2 - x1; + let h = y2 - y1; + + if (rotation % 180 !== 0) { + [w, h] = [h, w]; + } + + const lines = value.split("\n"); + const scale = fontSize / 1000; + let totalWidth = -Infinity; + const encodedLines = []; + + for (let line of lines) { + line = helv.encodeString(line).join(""); + encodedLines.push(line); + let lineWidth = 0; + const glyphs = helv.charsToGlyphs(line); + + for (const glyph of glyphs) { + lineWidth += glyph.width * scale; + } + + totalWidth = Math.max(totalWidth, lineWidth); + } + + let hscale = 1; + + if (totalWidth > w) { + hscale = w / totalWidth; + } + + let vscale = 1; + const lineHeight = _util.LINE_FACTOR * fontSize; + const lineDescent = _util.LINE_DESCENT_FACTOR * fontSize; + const totalHeight = lineHeight * lines.length; + + if (totalHeight > h) { + vscale = h / totalHeight; + } + + const fscale = Math.min(hscale, vscale); + const newFontSize = fontSize * fscale; + const buffer = ["q", `0 0 ${(0, _core_utils.numberToString)(w)} ${(0, _core_utils.numberToString)(h)} re W n`, `BT`, `1 0 0 1 0 ${(0, _core_utils.numberToString)(h + lineDescent)} Tm 0 Tc ${(0, _default_appearance.getPdfColor)(color, true)}`, `/Helv ${(0, _core_utils.numberToString)(newFontSize)} Tf`]; + const vShift = (0, _core_utils.numberToString)(lineHeight); + + for (const line of encodedLines) { + buffer.push(`0 -${vShift} Td (${(0, _util.escapeString)(line)}) Tj`); + } + + buffer.push("ET", "Q"); + const appearance = buffer.join("\n"); + const appearanceStreamDict = new _primitives.Dict(xref); + appearanceStreamDict.set("FormType", 1); + appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); + appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); + appearanceStreamDict.set("BBox", [0, 0, w, h]); + appearanceStreamDict.set("Length", appearance.length); + appearanceStreamDict.set("Resources", resources); + + if (rotation) { + const matrix = WidgetAnnotation._getRotationMatrix(rotation, w, h); + + appearanceStreamDict.set("Matrix", matrix); + } + + const ap = new _stream.StringStream(appearance); + ap.dict = appearanceStreamDict; + return ap; + } + +} + +class LineAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + const { + dict + } = parameters; + this.data.annotationType = _util.AnnotationType.LINE; + const lineCoordinates = dict.getArray("L"); + this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates); + this.setLineEndings(dict.getArray("LE")); + this.data.lineEndings = this.lineEndings; + + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = dict.get("CA"); + let fillColor = null, + interiorColor = dict.getArray("IC"); + + if (interiorColor) { + interiorColor = getRgbColor(interiorColor, null); + fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; + } + + const fillAlpha = fillColor ? strokeAlpha : null; + const borderWidth = this.borderStyle.width || 1, + borderAdjust = 2 * borderWidth; + const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust]; + + if (!_util.Util.intersect(this.rectangle, bbox)) { + this.rectangle = bbox; + } + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: `${borderWidth} w`, + strokeColor, + fillColor, + strokeAlpha, + fillAlpha, + pointsCallback: (buffer, points) => { + buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, "S"); + return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth]; + } + }); + } + } + +} + +class SquareAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.SQUARE; + + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = parameters.dict.get("CA"); + let fillColor = null, + interiorColor = parameters.dict.getArray("IC"); + + if (interiorColor) { + interiorColor = getRgbColor(interiorColor, null); + fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; + } + + const fillAlpha = fillColor ? strokeAlpha : null; + + if (this.borderStyle.width === 0 && !fillColor) { + return; + } + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: `${this.borderStyle.width} w`, + strokeColor, + fillColor, + strokeAlpha, + fillAlpha, + pointsCallback: (buffer, points) => { + const x = points[2].x + this.borderStyle.width / 2; + const y = points[2].y + this.borderStyle.width / 2; + const width = points[3].x - points[2].x - this.borderStyle.width; + const height = points[1].y - points[3].y - this.borderStyle.width; + buffer.push(`${x} ${y} ${width} ${height} re`); + + if (fillColor) { + buffer.push("B"); + } else { + buffer.push("S"); + } + + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } + +} + +class CircleAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.CIRCLE; + + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = parameters.dict.get("CA"); + let fillColor = null; + let interiorColor = parameters.dict.getArray("IC"); + + if (interiorColor) { + interiorColor = getRgbColor(interiorColor, null); + fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; + } + + const fillAlpha = fillColor ? strokeAlpha : null; + + if (this.borderStyle.width === 0 && !fillColor) { + return; + } + + const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4)); + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: `${this.borderStyle.width} w`, + strokeColor, + fillColor, + strokeAlpha, + fillAlpha, + pointsCallback: (buffer, points) => { + const x0 = points[0].x + this.borderStyle.width / 2; + const y0 = points[0].y - this.borderStyle.width / 2; + const x1 = points[3].x - this.borderStyle.width / 2; + const y1 = points[3].y + this.borderStyle.width / 2; + const xMid = x0 + (x1 - x0) / 2; + const yMid = y0 + (y1 - y0) / 2; + const xOffset = (x1 - x0) / 2 * controlPointsDistance; + const yOffset = (y1 - y0) / 2 * controlPointsDistance; + buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, "h"); + + if (fillColor) { + buffer.push("B"); + } else { + buffer.push("S"); + } + + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } + +} + +class PolylineAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + const { + dict + } = parameters; + this.data.annotationType = _util.AnnotationType.POLYLINE; + this.data.vertices = []; + + if (!(this instanceof PolygonAnnotation)) { + this.setLineEndings(dict.getArray("LE")); + this.data.lineEndings = this.lineEndings; + } + + const rawVertices = dict.getArray("Vertices"); + + if (!Array.isArray(rawVertices)) { + return; + } + + for (let i = 0, ii = rawVertices.length; i < ii; i += 2) { + this.data.vertices.push({ + x: rawVertices[i], + y: rawVertices[i + 1] + }); + } + + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = dict.get("CA"); + const borderWidth = this.borderStyle.width || 1, + borderAdjust = 2 * borderWidth; + const bbox = [Infinity, Infinity, -Infinity, -Infinity]; + + for (const vertex of this.data.vertices) { + bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); + bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); + bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); + bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); + } + + if (!_util.Util.intersect(this.rectangle, bbox)) { + this.rectangle = bbox; + } + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: `${borderWidth} w`, + strokeColor, + strokeAlpha, + pointsCallback: (buffer, points) => { + const vertices = this.data.vertices; + + for (let i = 0, ii = vertices.length; i < ii; i++) { + buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? "m" : "l"}`); + } + + buffer.push("S"); + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } + +} + +class PolygonAnnotation extends PolylineAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.POLYGON; + } + +} + +class CaretAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.CARET; + } + +} + +class InkAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.INK; + this.data.inkLists = []; + const rawInkLists = parameters.dict.getArray("InkList"); + + if (!Array.isArray(rawInkLists)) { + return; + } + + const xref = parameters.xref; + + for (let i = 0, ii = rawInkLists.length; i < ii; ++i) { + this.data.inkLists.push([]); + + for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) { + this.data.inkLists[i].push({ + x: xref.fetchIfRef(rawInkLists[i][j]), + y: xref.fetchIfRef(rawInkLists[i][j + 1]) + }); + } + } + + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = parameters.dict.get("CA"); + const borderWidth = this.borderStyle.width || 1, + borderAdjust = 2 * borderWidth; + const bbox = [Infinity, Infinity, -Infinity, -Infinity]; + + for (const inkLists of this.data.inkLists) { + for (const vertex of inkLists) { + bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); + bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); + bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); + bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); + } + } + + if (!_util.Util.intersect(this.rectangle, bbox)) { + this.rectangle = bbox; + } + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: `${borderWidth} w`, + strokeColor, + strokeAlpha, + pointsCallback: (buffer, points) => { + for (const inkList of this.data.inkLists) { + for (let i = 0, ii = inkList.length; i < ii; i++) { + buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`); + } + + buffer.push("S"); + } + + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } + + static createNewDict(annotation, xref, { + apRef, + ap + }) { + const { + paths, + rect, + rotation + } = annotation; + const ink = new _primitives.Dict(xref); + ink.set("Type", _primitives.Name.get("Annot")); + ink.set("Subtype", _primitives.Name.get("Ink")); + ink.set("CreationDate", `D:${(0, _util.getModificationDate)()}`); + ink.set("Rect", rect); + ink.set("InkList", paths.map(p => p.points)); + ink.set("F", 4); + ink.set("Border", [0, 0, 0]); + ink.set("Rotate", rotation); + const n = new _primitives.Dict(xref); + ink.set("AP", n); + + if (apRef) { + n.set("N", apRef); + } else { + n.set("N", ap); + } + + return ink; + } + + static async createNewAppearanceStream(annotation, xref, params) { + const { + color, + rect, + rotation, + paths, + thickness, + opacity + } = annotation; + const [x1, y1, x2, y2] = rect; + let w = x2 - x1; + let h = y2 - y1; + + if (rotation % 180 !== 0) { + [w, h] = [h, w]; + } + + const appearanceBuffer = [`${thickness} w 1 J 1 j`, `${(0, _default_appearance.getPdfColor)(color, false)}`]; + + if (opacity !== 1) { + appearanceBuffer.push("/R0 gs"); + } + + const buffer = []; + + for (const { + bezier + } of paths) { + buffer.length = 0; + buffer.push(`${(0, _core_utils.numberToString)(bezier[0])} ${(0, _core_utils.numberToString)(bezier[1])} m`); + + for (let i = 2, ii = bezier.length; i < ii; i += 6) { + const curve = bezier.slice(i, i + 6).map(_core_utils.numberToString).join(" "); + buffer.push(`${curve} c`); + } + + buffer.push("S"); + appearanceBuffer.push(buffer.join("\n")); + } + + const appearance = appearanceBuffer.join("\n"); + const appearanceStreamDict = new _primitives.Dict(xref); + appearanceStreamDict.set("FormType", 1); + appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); + appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); + appearanceStreamDict.set("BBox", [0, 0, w, h]); + appearanceStreamDict.set("Length", appearance.length); + + if (rotation) { + const matrix = WidgetAnnotation._getRotationMatrix(rotation, w, h); + + appearanceStreamDict.set("Matrix", matrix); + } + + if (opacity !== 1) { + const resources = new _primitives.Dict(xref); + const extGState = new _primitives.Dict(xref); + const r0 = new _primitives.Dict(xref); + r0.set("CA", opacity); + r0.set("Type", _primitives.Name.get("ExtGState")); + extGState.set("R0", r0); + resources.set("ExtGState", extGState); + appearanceStreamDict.set("Resources", resources); + } + + const ap = new _stream.StringStream(appearance); + ap.dict = appearanceStreamDict; + return ap; + } + +} + +class HighlightAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.HIGHLIGHT; + const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); + + if (quadPoints) { + const resources = this.appearance && this.appearance.dict.get("Resources"); + + if (!this.appearance || !(resources && resources.has("ExtGState"))) { + if (this.appearance) { + (0, _util.warn)("HighlightAnnotation - ignoring built-in appearance stream."); + } + + const fillColor = this.color ? Array.from(this.color).map(c => c / 255) : [1, 1, 0]; + const fillAlpha = parameters.dict.get("CA"); + + this._setDefaultAppearance({ + xref: parameters.xref, + fillColor, + blendMode: "Multiply", + fillAlpha, + pointsCallback: (buffer, points) => { + buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, "f"); + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } else { + this.data.hasPopup = false; + } + } + +} + +class UnderlineAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.UNDERLINE; + const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); + + if (quadPoints) { + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = parameters.dict.get("CA"); + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: "[] 0 d 1 w", + strokeColor, + strokeAlpha, + pointsCallback: (buffer, points) => { + buffer.push(`${points[2].x} ${points[2].y} m`, `${points[3].x} ${points[3].y} l`, "S"); + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } else { + this.data.hasPopup = false; + } + } + +} + +class SquigglyAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.SQUIGGLY; + const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); + + if (quadPoints) { + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = parameters.dict.get("CA"); + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: "[] 0 d 1 w", + strokeColor, + strokeAlpha, + pointsCallback: (buffer, points) => { + const dy = (points[0].y - points[2].y) / 6; + let shift = dy; + let x = points[2].x; + const y = points[2].y; + const xEnd = points[3].x; + buffer.push(`${x} ${y + shift} m`); + + do { + x += 2; + shift = shift === 0 ? dy : 0; + buffer.push(`${x} ${y + shift} l`); + } while (x < xEnd); + + buffer.push("S"); + return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy]; + } + }); + } + } else { + this.data.hasPopup = false; + } + } + +} + +class StrikeOutAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.STRIKEOUT; + const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); + + if (quadPoints) { + if (!this.appearance) { + const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; + const strokeAlpha = parameters.dict.get("CA"); + + this._setDefaultAppearance({ + xref: parameters.xref, + extra: "[] 0 d 1 w", + strokeColor, + strokeAlpha, + pointsCallback: (buffer, points) => { + buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, "S"); + return [points[0].x, points[1].x, points[3].y, points[1].y]; + } + }); + } + } else { + this.data.hasPopup = false; + } + } + +} + +class StampAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + this.data.annotationType = _util.AnnotationType.STAMP; + } + +} + +class FileAttachmentAnnotation extends MarkupAnnotation { + constructor(parameters) { + super(parameters); + const file = new _file_spec.FileSpec(parameters.dict.get("FS"), parameters.xref); + this.data.annotationType = _util.AnnotationType.FILEATTACHMENT; + this.data.file = file.serializable; + } + +} + +/***/ }), +/* 13 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.createDefaultAppearance = createDefaultAppearance; +exports.getPdfColor = getPdfColor; +exports.parseDefaultAppearance = parseDefaultAppearance; + +var _core_utils = __w_pdfjs_require__(6); + +var _util = __w_pdfjs_require__(2); + +var _colorspace = __w_pdfjs_require__(14); + +var _evaluator = __w_pdfjs_require__(15); + +var _primitives = __w_pdfjs_require__(5); + +var _stream = __w_pdfjs_require__(10); + +class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor { + constructor(str) { + super(new _stream.StringStream(str)); + } + + parse() { + const operation = { + fn: 0, + args: [] + }; + const result = { + fontSize: 0, + fontName: "", + fontColor: new Uint8ClampedArray(3) + }; + + try { + while (true) { + operation.args.length = 0; + + if (!this.read(operation)) { + break; + } + + if (this.savedStatesDepth !== 0) { + continue; + } + + const { + fn, + args + } = operation; + + switch (fn | 0) { + case _util.OPS.setFont: + const [fontName, fontSize] = args; + + if (fontName instanceof _primitives.Name) { + result.fontName = fontName.name; + } + + if (typeof fontSize === "number" && fontSize > 0) { + result.fontSize = fontSize; + } + + break; + + case _util.OPS.setFillRGBColor: + _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0); + + break; + + case _util.OPS.setFillGray: + _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0); + + break; + + case _util.OPS.setFillColorSpace: + _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); + + break; + } + } + } catch (reason) { + (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`); + } + + return result; + } + +} + +function parseDefaultAppearance(str) { + return new DefaultAppearanceEvaluator(str).parse(); +} + +function getPdfColor(color, isFill) { + if (color[0] === color[1] && color[1] === color[2]) { + const gray = color[0] / 255; + return `${(0, _core_utils.numberToString)(gray)} ${isFill ? "g" : "G"}`; + } + + return Array.from(color).map(c => (0, _core_utils.numberToString)(c / 255)).join(" ") + ` ${isFill ? "rg" : "RG"}`; +} + +function createDefaultAppearance({ + fontSize, + fontName, + fontColor +}) { + return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${getPdfColor(fontColor, true)}`; +} + +/***/ }), +/* 14 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ColorSpace = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _base_stream = __w_pdfjs_require__(7); + +var _core_utils = __w_pdfjs_require__(6); + +function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { + const COMPONENTS = 3; + alpha01 = alpha01 !== 1 ? 0 : alpha01; + const xRatio = w1 / w2; + const yRatio = h1 / h2; + let newIndex = 0, + oldIndex; + const xScaled = new Uint16Array(w2); + const w1Scanline = w1 * COMPONENTS; + + for (let i = 0; i < w2; i++) { + xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; + } + + for (let i = 0; i < h2; i++) { + const py = Math.floor(i * yRatio) * w1Scanline; + + for (let j = 0; j < w2; j++) { + oldIndex = py + xScaled[j]; + dest[newIndex++] = src[oldIndex++]; + dest[newIndex++] = src[oldIndex++]; + dest[newIndex++] = src[oldIndex++]; + newIndex += alpha01; + } + } +} + +class ColorSpace { + constructor(name, numComps) { + if (this.constructor === ColorSpace) { + (0, _util.unreachable)("Cannot initialize ColorSpace."); + } + + this.name = name; + this.numComps = numComps; + } + + getRgb(src, srcOffset) { + const rgb = new Uint8ClampedArray(3); + this.getRgbItem(src, srcOffset, rgb, 0); + return rgb; + } + + getRgbItem(src, srcOffset, dest, destOffset) { + (0, _util.unreachable)("Should not call ColorSpace.getRgbItem"); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer"); + } + + getOutputLength(inputLength, alpha01) { + (0, _util.unreachable)("Should not call ColorSpace.getOutputLength"); + } + + isPassthrough(bits) { + return false; + } + + isDefaultDecode(decodeMap, bpc) { + return ColorSpace.isDefaultDecode(decodeMap, this.numComps); + } + + fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { + const count = originalWidth * originalHeight; + let rgbBuf = null; + const numComponentColors = 1 << bpc; + const needsResizing = originalHeight !== height || originalWidth !== width; + + if (this.isPassthrough(bpc)) { + rgbBuf = comps; + } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") { + const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); + + for (let i = 0; i < numComponentColors; i++) { + allColors[i] = i; + } + + const colorMap = new Uint8ClampedArray(numComponentColors * 3); + this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); + + if (!needsResizing) { + let destPos = 0; + + for (let i = 0; i < count; ++i) { + const key = comps[i] * 3; + dest[destPos++] = colorMap[key]; + dest[destPos++] = colorMap[key + 1]; + dest[destPos++] = colorMap[key + 2]; + destPos += alpha01; + } + } else { + rgbBuf = new Uint8Array(count * 3); + let rgbPos = 0; + + for (let i = 0; i < count; ++i) { + const key = comps[i] * 3; + rgbBuf[rgbPos++] = colorMap[key]; + rgbBuf[rgbPos++] = colorMap[key + 1]; + rgbBuf[rgbPos++] = colorMap[key + 2]; + } + } + } else { + if (!needsResizing) { + this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); + } else { + rgbBuf = new Uint8ClampedArray(count * 3); + this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); + } + } + + if (rgbBuf) { + if (needsResizing) { + resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); + } else { + let destPos = 0, + rgbPos = 0; + + for (let i = 0, ii = width * actualHeight; i < ii; i++) { + dest[destPos++] = rgbBuf[rgbPos++]; + dest[destPos++] = rgbBuf[rgbPos++]; + dest[destPos++] = rgbBuf[rgbPos++]; + destPos += alpha01; + } + } + } + } + + get usesZeroToOneRange() { + return (0, _util.shadow)(this, "usesZeroToOneRange", true); + } + + static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { + if (!localColorSpaceCache) { + throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.'); + } + + if (!parsedColorSpace) { + throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.'); + } + + let csName, csRef; + + if (cacheKey instanceof _primitives.Ref) { + csRef = cacheKey; + cacheKey = xref.fetch(cacheKey); + } + + if (cacheKey instanceof _primitives.Name) { + csName = cacheKey.name; + } + + if (csName || csRef) { + localColorSpaceCache.set(csName, csRef, parsedColorSpace); + } + } + + static getCached(cacheKey, xref, localColorSpaceCache) { + if (!localColorSpaceCache) { + throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.'); + } + + if (cacheKey instanceof _primitives.Ref) { + const localColorSpace = localColorSpaceCache.getByRef(cacheKey); + + if (localColorSpace) { + return localColorSpace; + } + + try { + cacheKey = xref.fetch(cacheKey); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + } + } + + if (cacheKey instanceof _primitives.Name) { + const localColorSpace = localColorSpaceCache.getByName(cacheKey.name); + + if (localColorSpace) { + return localColorSpace; + } + } + + return null; + } + + static async parseAsync({ + cs, + xref, + resources = null, + pdfFunctionFactory, + localColorSpaceCache + }) { + const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); + + this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); + + return parsedColorSpace; + } + + static parse({ + cs, + xref, + resources = null, + pdfFunctionFactory, + localColorSpaceCache + }) { + const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache); + + if (cachedColorSpace) { + return cachedColorSpace; + } + + const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); + + this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); + + return parsedColorSpace; + } + + static _parse(cs, xref, resources = null, pdfFunctionFactory) { + cs = xref.fetchIfRef(cs); + + if (cs instanceof _primitives.Name) { + switch (cs.name) { + case "G": + case "DeviceGray": + return this.singletons.gray; + + case "RGB": + case "DeviceRGB": + return this.singletons.rgb; + + case "CMYK": + case "DeviceCMYK": + return this.singletons.cmyk; + + case "Pattern": + return new PatternCS(null); + + default: + if (resources instanceof _primitives.Dict) { + const colorSpaces = resources.get("ColorSpace"); + + if (colorSpaces instanceof _primitives.Dict) { + const resourcesCS = colorSpaces.get(cs.name); + + if (resourcesCS) { + if (resourcesCS instanceof _primitives.Name) { + return this._parse(resourcesCS, xref, resources, pdfFunctionFactory); + } + + cs = resourcesCS; + break; + } + } + } + + throw new _util.FormatError(`Unrecognized ColorSpace: ${cs.name}`); + } + } + + if (Array.isArray(cs)) { + const mode = xref.fetchIfRef(cs[0]).name; + let params, numComps, baseCS, whitePoint, blackPoint, gamma; + + switch (mode) { + case "G": + case "DeviceGray": + return this.singletons.gray; + + case "RGB": + case "DeviceRGB": + return this.singletons.rgb; + + case "CMYK": + case "DeviceCMYK": + return this.singletons.cmyk; + + case "CalGray": + params = xref.fetchIfRef(cs[1]); + whitePoint = params.getArray("WhitePoint"); + blackPoint = params.getArray("BlackPoint"); + gamma = params.get("Gamma"); + return new CalGrayCS(whitePoint, blackPoint, gamma); + + case "CalRGB": + params = xref.fetchIfRef(cs[1]); + whitePoint = params.getArray("WhitePoint"); + blackPoint = params.getArray("BlackPoint"); + gamma = params.getArray("Gamma"); + const matrix = params.getArray("Matrix"); + return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); + + case "ICCBased": + const stream = xref.fetchIfRef(cs[1]); + const dict = stream.dict; + numComps = dict.get("N"); + const alt = dict.get("Alternate"); + + if (alt) { + const altCS = this._parse(alt, xref, resources, pdfFunctionFactory); + + if (altCS.numComps === numComps) { + return altCS; + } + + (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry."); + } + + if (numComps === 1) { + return this.singletons.gray; + } else if (numComps === 3) { + return this.singletons.rgb; + } else if (numComps === 4) { + return this.singletons.cmyk; + } + + break; + + case "Pattern": + baseCS = cs[1] || null; + + if (baseCS) { + baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory); + } + + return new PatternCS(baseCS); + + case "I": + case "Indexed": + baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory); + const hiVal = xref.fetchIfRef(cs[2]) + 1; + const lookup = xref.fetchIfRef(cs[3]); + return new IndexedCS(baseCS, hiVal, lookup); + + case "Separation": + case "DeviceN": + const name = xref.fetchIfRef(cs[1]); + numComps = Array.isArray(name) ? name.length : 1; + baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory); + const tintFn = pdfFunctionFactory.create(cs[3]); + return new AlternateCS(numComps, baseCS, tintFn); + + case "Lab": + params = xref.fetchIfRef(cs[1]); + whitePoint = params.getArray("WhitePoint"); + blackPoint = params.getArray("BlackPoint"); + const range = params.getArray("Range"); + return new LabCS(whitePoint, blackPoint, range); + + default: + throw new _util.FormatError(`Unimplemented ColorSpace object: ${mode}`); + } + } + + throw new _util.FormatError(`Unrecognized ColorSpace object: ${cs}`); + } + + static isDefaultDecode(decode, numComps) { + if (!Array.isArray(decode)) { + return true; + } + + if (numComps * 2 !== decode.length) { + (0, _util.warn)("The decode map is not the correct length"); + return true; + } + + for (let i = 0, ii = decode.length; i < ii; i += 2) { + if (decode[i] !== 0 || decode[i + 1] !== 1) { + return false; + } + } + + return true; + } + + static get singletons() { + return (0, _util.shadow)(this, "singletons", { + get gray() { + return (0, _util.shadow)(this, "gray", new DeviceGrayCS()); + }, + + get rgb() { + return (0, _util.shadow)(this, "rgb", new DeviceRgbCS()); + }, + + get cmyk() { + return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS()); + } + + }); + } + +} + +exports.ColorSpace = ColorSpace; + +class AlternateCS extends ColorSpace { + constructor(numComps, base, tintFn) { + super("Alternate", numComps); + this.base = base; + this.tintFn = tintFn; + this.tmpBuf = new Float32Array(base.numComps); + } + + getRgbItem(src, srcOffset, dest, destOffset) { + const tmpBuf = this.tmpBuf; + this.tintFn(src, srcOffset, tmpBuf, 0); + this.base.getRgbItem(tmpBuf, 0, dest, destOffset); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const tintFn = this.tintFn; + const base = this.base; + const scale = 1 / ((1 << bits) - 1); + const baseNumComps = base.numComps; + const usesZeroToOneRange = base.usesZeroToOneRange; + const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; + let pos = isPassthrough ? destOffset : 0; + const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); + const numComps = this.numComps; + const scaled = new Float32Array(numComps); + const tinted = new Float32Array(baseNumComps); + let i, j; + + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + + tintFn(scaled, 0, tinted, 0); + + if (usesZeroToOneRange) { + for (j = 0; j < baseNumComps; j++) { + baseBuf[pos++] = tinted[j] * 255; + } + } else { + base.getRgbItem(tinted, 0, baseBuf, pos); + pos += baseNumComps; + } + } + + if (!isPassthrough) { + base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); + } + } + + getOutputLength(inputLength, alpha01) { + return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); + } + +} + +class PatternCS extends ColorSpace { + constructor(baseCS) { + super("Pattern", null); + this.base = baseCS; + } + + isDefaultDecode(decodeMap, bpc) { + (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode"); + } + +} + +class IndexedCS extends ColorSpace { + constructor(base, highVal, lookup) { + super("Indexed", 1); + this.base = base; + this.highVal = highVal; + const length = base.numComps * highVal; + this.lookup = new Uint8Array(length); + + if (lookup instanceof _base_stream.BaseStream) { + const bytes = lookup.getBytes(length); + this.lookup.set(bytes); + } else if (typeof lookup === "string") { + for (let i = 0; i < length; ++i) { + this.lookup[i] = lookup.charCodeAt(i) & 0xff; + } + } else { + throw new _util.FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`); + } + } + + getRgbItem(src, srcOffset, dest, destOffset) { + const numComps = this.base.numComps; + const start = src[srcOffset] * numComps; + this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const base = this.base; + const numComps = base.numComps; + const outputDelta = base.getOutputLength(numComps, alpha01); + const lookup = this.lookup; + + for (let i = 0; i < count; ++i) { + const lookupPos = src[srcOffset++] * numComps; + base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); + destOffset += outputDelta; + } + } + + getOutputLength(inputLength, alpha01) { + return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); + } + + isDefaultDecode(decodeMap, bpc) { + if (!Array.isArray(decodeMap)) { + return true; + } + + if (decodeMap.length !== 2) { + (0, _util.warn)("Decode map length is not correct"); + return true; + } + + if (!Number.isInteger(bpc) || bpc < 1) { + (0, _util.warn)("Bits per component is not correct"); + return true; + } + + return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; + } + +} + +class DeviceGrayCS extends ColorSpace { + constructor() { + super("DeviceGray", 1); + } + + getRgbItem(src, srcOffset, dest, destOffset) { + const c = src[srcOffset] * 255; + dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const scale = 255 / ((1 << bits) - 1); + let j = srcOffset, + q = destOffset; + + for (let i = 0; i < count; ++i) { + const c = scale * src[j++]; + dest[q++] = c; + dest[q++] = c; + dest[q++] = c; + q += alpha01; + } + } + + getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01); + } + +} + +class DeviceRgbCS extends ColorSpace { + constructor() { + super("DeviceRGB", 3); + } + + getRgbItem(src, srcOffset, dest, destOffset) { + dest[destOffset] = src[srcOffset] * 255; + dest[destOffset + 1] = src[srcOffset + 1] * 255; + dest[destOffset + 2] = src[srcOffset + 2] * 255; + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + if (bits === 8 && alpha01 === 0) { + dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); + return; + } + + const scale = 255 / ((1 << bits) - 1); + let j = srcOffset, + q = destOffset; + + for (let i = 0; i < count; ++i) { + dest[q++] = scale * src[j++]; + dest[q++] = scale * src[j++]; + dest[q++] = scale * src[j++]; + q += alpha01; + } + } + + getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01) / 3 | 0; + } + + isPassthrough(bits) { + return bits === 8; + } + +} + +const DeviceCmykCS = function DeviceCmykCSClosure() { + function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { + const c = src[srcOffset] * srcScale; + const m = src[srcOffset + 1] * srcScale; + const y = src[srcOffset + 2] * srcScale; + const k = src[srcOffset + 3] * srcScale; + dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); + dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); + dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); + } + + class DeviceCmykCS extends ColorSpace { + constructor() { + super("DeviceCMYK", 4); + } + + getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(src, srcOffset, 1, dest, destOffset); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const scale = 1 / ((1 << bits) - 1); + + for (let i = 0; i < count; i++) { + convertToRgb(src, srcOffset, scale, dest, destOffset); + srcOffset += 4; + destOffset += 3 + alpha01; + } + } + + getOutputLength(inputLength, alpha01) { + return inputLength / 4 * (3 + alpha01) | 0; + } + + } + + return DeviceCmykCS; +}(); + +const CalGrayCS = function CalGrayCSClosure() { + function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { + const A = src[srcOffset] * scale; + const AG = A ** cs.G; + const L = cs.YW * AG; + const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0); + dest[destOffset] = val; + dest[destOffset + 1] = val; + dest[destOffset + 2] = val; + } + + class CalGrayCS extends ColorSpace { + constructor(whitePoint, blackPoint, gamma) { + super("CalGray", 1); + + if (!whitePoint) { + throw new _util.FormatError("WhitePoint missing - required for color space CalGray"); + } + + blackPoint = blackPoint || [0, 0, 0]; + gamma = gamma || 1; + this.XW = whitePoint[0]; + this.YW = whitePoint[1]; + this.ZW = whitePoint[2]; + this.XB = blackPoint[0]; + this.YB = blackPoint[1]; + this.ZB = blackPoint[2]; + this.G = gamma; + + if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { + throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); + } + + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`); + this.XB = this.YB = this.ZB = 0; + } + + if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { + (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`); + } + + if (this.G < 1) { + (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default."); + this.G = 1; + } + } + + getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, dest, destOffset, 1); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const scale = 1 / ((1 << bits) - 1); + + for (let i = 0; i < count; ++i) { + convertToRgb(this, src, srcOffset, dest, destOffset, scale); + srcOffset += 1; + destOffset += 3 + alpha01; + } + } + + getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01); + } + + } + + return CalGrayCS; +}(); + +const CalRGBCS = function CalRGBCSClosure() { + const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); + const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); + const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); + const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); + const tempNormalizeMatrix = new Float32Array(3); + const tempConvertMatrix1 = new Float32Array(3); + const tempConvertMatrix2 = new Float32Array(3); + const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0; + + function matrixProduct(a, b, result) { + result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; + result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; + result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; + } + + function convertToFlat(sourceWhitePoint, LMS, result) { + result[0] = LMS[0] * 1 / sourceWhitePoint[0]; + result[1] = LMS[1] * 1 / sourceWhitePoint[1]; + result[2] = LMS[2] * 1 / sourceWhitePoint[2]; + } + + function convertToD65(sourceWhitePoint, LMS, result) { + const D65X = 0.95047; + const D65Y = 1; + const D65Z = 1.08883; + result[0] = LMS[0] * D65X / sourceWhitePoint[0]; + result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; + result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; + } + + function sRGBTransferFunction(color) { + if (color <= 0.0031308) { + return adjustToRange(0, 1, 12.92 * color); + } + + if (color >= 0.99554525) { + return 1; + } + + return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055); + } + + function adjustToRange(min, max, value) { + return Math.max(min, Math.min(max, value)); + } + + function decodeL(L) { + if (L < 0) { + return -decodeL(-L); + } + + if (L > 8.0) { + return ((L + 16) / 116) ** 3; + } + + return L * DECODE_L_CONSTANT; + } + + function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { + if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { + result[0] = XYZ_Flat[0]; + result[1] = XYZ_Flat[1]; + result[2] = XYZ_Flat[2]; + return; + } + + const zeroDecodeL = decodeL(0); + const X_DST = zeroDecodeL; + const X_SRC = decodeL(sourceBlackPoint[0]); + const Y_DST = zeroDecodeL; + const Y_SRC = decodeL(sourceBlackPoint[1]); + const Z_DST = zeroDecodeL; + const Z_SRC = decodeL(sourceBlackPoint[2]); + const X_Scale = (1 - X_DST) / (1 - X_SRC); + const X_Offset = 1 - X_Scale; + const Y_Scale = (1 - Y_DST) / (1 - Y_SRC); + const Y_Offset = 1 - Y_Scale; + const Z_Scale = (1 - Z_DST) / (1 - Z_SRC); + const Z_Offset = 1 - Z_Scale; + result[0] = XYZ_Flat[0] * X_Scale + X_Offset; + result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; + result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; + } + + function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { + if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { + result[0] = XYZ_In[0]; + result[1] = XYZ_In[1]; + result[2] = XYZ_In[2]; + return; + } + + const LMS = result; + matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); + const LMS_Flat = tempNormalizeMatrix; + convertToFlat(sourceWhitePoint, LMS, LMS_Flat); + matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); + } + + function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { + const LMS = result; + matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); + const LMS_D65 = tempNormalizeMatrix; + convertToD65(sourceWhitePoint, LMS, LMS_D65); + matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); + } + + function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { + const A = adjustToRange(0, 1, src[srcOffset] * scale); + const B = adjustToRange(0, 1, src[srcOffset + 1] * scale); + const C = adjustToRange(0, 1, src[srcOffset + 2] * scale); + const AGR = A === 1 ? 1 : A ** cs.GR; + const BGG = B === 1 ? 1 : B ** cs.GG; + const CGB = C === 1 ? 1 : C ** cs.GB; + const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; + const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; + const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; + const XYZ = tempConvertMatrix1; + XYZ[0] = X; + XYZ[1] = Y; + XYZ[2] = Z; + const XYZ_Flat = tempConvertMatrix2; + normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); + const XYZ_Black = tempConvertMatrix1; + compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); + const XYZ_D65 = tempConvertMatrix2; + normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); + const SRGB = tempConvertMatrix1; + matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); + dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255; + dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255; + dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255; + } + + class CalRGBCS extends ColorSpace { + constructor(whitePoint, blackPoint, gamma, matrix) { + super("CalRGB", 3); + + if (!whitePoint) { + throw new _util.FormatError("WhitePoint missing - required for color space CalRGB"); + } + + blackPoint = blackPoint || new Float32Array(3); + gamma = gamma || new Float32Array([1, 1, 1]); + matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); + const XW = whitePoint[0]; + const YW = whitePoint[1]; + const ZW = whitePoint[2]; + this.whitePoint = whitePoint; + const XB = blackPoint[0]; + const YB = blackPoint[1]; + const ZB = blackPoint[2]; + this.blackPoint = blackPoint; + this.GR = gamma[0]; + this.GG = gamma[1]; + this.GB = gamma[2]; + this.MXA = matrix[0]; + this.MYA = matrix[1]; + this.MZA = matrix[2]; + this.MXB = matrix[3]; + this.MYB = matrix[4]; + this.MZB = matrix[5]; + this.MXC = matrix[6]; + this.MYC = matrix[7]; + this.MZC = matrix[8]; + + if (XW < 0 || ZW < 0 || YW !== 1) { + throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); + } + + if (XB < 0 || YB < 0 || ZB < 0) { + (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default."); + this.blackPoint = new Float32Array(3); + } + + if (this.GR < 0 || this.GG < 0 || this.GB < 0) { + (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`); + this.GR = this.GG = this.GB = 1; + } + } + + getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, dest, destOffset, 1); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const scale = 1 / ((1 << bits) - 1); + + for (let i = 0; i < count; ++i) { + convertToRgb(this, src, srcOffset, dest, destOffset, scale); + srcOffset += 3; + destOffset += 3 + alpha01; + } + } + + getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01) / 3 | 0; + } + + } + + return CalRGBCS; +}(); + +const LabCS = function LabCSClosure() { + function fn_g(x) { + let result; + + if (x >= 6 / 29) { + result = x ** 3; + } else { + result = 108 / 841 * (x - 4 / 29); + } + + return result; + } + + function decode(value, high1, low2, high2) { + return low2 + value * (high2 - low2) / high1; + } + + function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { + let Ls = src[srcOffset]; + let as = src[srcOffset + 1]; + let bs = src[srcOffset + 2]; + + if (maxVal !== false) { + Ls = decode(Ls, maxVal, 0, 100); + as = decode(as, maxVal, cs.amin, cs.amax); + bs = decode(bs, maxVal, cs.bmin, cs.bmax); + } + + if (as > cs.amax) { + as = cs.amax; + } else if (as < cs.amin) { + as = cs.amin; + } + + if (bs > cs.bmax) { + bs = cs.bmax; + } else if (bs < cs.bmin) { + bs = cs.bmin; + } + + const M = (Ls + 16) / 116; + const L = M + as / 500; + const N = M - bs / 200; + const X = cs.XW * fn_g(L); + const Y = cs.YW * fn_g(M); + const Z = cs.ZW * fn_g(N); + let r, g, b; + + if (cs.ZW < 1) { + r = X * 3.1339 + Y * -1.617 + Z * -0.4906; + g = X * -0.9785 + Y * 1.916 + Z * 0.0333; + b = X * 0.072 + Y * -0.229 + Z * 1.4057; + } else { + r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; + g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; + b = X * 0.0557 + Y * -0.204 + Z * 1.057; + } + + dest[destOffset] = Math.sqrt(r) * 255; + dest[destOffset + 1] = Math.sqrt(g) * 255; + dest[destOffset + 2] = Math.sqrt(b) * 255; + } + + class LabCS extends ColorSpace { + constructor(whitePoint, blackPoint, range) { + super("Lab", 3); + + if (!whitePoint) { + throw new _util.FormatError("WhitePoint missing - required for color space Lab"); + } + + blackPoint = blackPoint || [0, 0, 0]; + range = range || [-100, 100, -100, 100]; + this.XW = whitePoint[0]; + this.YW = whitePoint[1]; + this.ZW = whitePoint[2]; + this.amin = range[0]; + this.amax = range[1]; + this.bmin = range[2]; + this.bmax = range[3]; + this.XB = blackPoint[0]; + this.YB = blackPoint[1]; + this.ZB = blackPoint[2]; + + if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { + throw new _util.FormatError("Invalid WhitePoint components, no fallback available"); + } + + if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { + (0, _util.info)("Invalid BlackPoint, falling back to default"); + this.XB = this.YB = this.ZB = 0; + } + + if (this.amin > this.amax || this.bmin > this.bmax) { + (0, _util.info)("Invalid Range, falling back to defaults"); + this.amin = -100; + this.amax = 100; + this.bmin = -100; + this.bmax = 100; + } + } + + getRgbItem(src, srcOffset, dest, destOffset) { + convertToRgb(this, src, srcOffset, false, dest, destOffset); + } + + getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + const maxVal = (1 << bits) - 1; + + for (let i = 0; i < count; i++) { + convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); + srcOffset += 3; + destOffset += 3 + alpha01; + } + } + + getOutputLength(inputLength, alpha01) { + return inputLength * (3 + alpha01) / 3 | 0; + } + + isDefaultDecode(decodeMap, bpc) { + return true; + } + + get usesZeroToOneRange() { + return (0, _util.shadow)(this, "usesZeroToOneRange", false); + } + + } + + return LabCS; +}(); + +/***/ }), +/* 15 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0; + +var _util = __w_pdfjs_require__(2); + +var _cmap = __w_pdfjs_require__(16); + +var _primitives = __w_pdfjs_require__(5); + +var _fonts = __w_pdfjs_require__(34); + +var _fonts_utils = __w_pdfjs_require__(38); + +var _encodings = __w_pdfjs_require__(37); + +var _standard_fonts = __w_pdfjs_require__(41); + +var _unicode = __w_pdfjs_require__(40); + +var _pattern = __w_pdfjs_require__(50); + +var _xfa_fonts = __w_pdfjs_require__(51); + +var _to_unicode_map = __w_pdfjs_require__(42); + +var _function = __w_pdfjs_require__(57); + +var _parser = __w_pdfjs_require__(17); + +var _image_utils = __w_pdfjs_require__(59); + +var _stream = __w_pdfjs_require__(10); + +var _base_stream = __w_pdfjs_require__(7); + +var _bidi = __w_pdfjs_require__(60); + +var _colorspace = __w_pdfjs_require__(14); + +var _decode_stream = __w_pdfjs_require__(19); + +var _glyphlist = __w_pdfjs_require__(39); + +var _core_utils = __w_pdfjs_require__(6); + +var _metrics = __w_pdfjs_require__(45); + +var _murmurhash = __w_pdfjs_require__(61); + +var _operator_list = __w_pdfjs_require__(62); + +var _image = __w_pdfjs_require__(63); + +const DefaultPartialEvaluatorOptions = Object.freeze({ + maxImageSize: -1, + disableFontFace: false, + ignoreErrors: false, + isEvalSupported: true, + fontExtraProperties: false, + useSystemFonts: true, + cMapUrl: null, + standardFontDataUrl: null +}); +const PatternType = { + TILING: 1, + SHADING: 2 +}; +const TEXT_CHUNK_BATCH_SIZE = 10; +const deferred = Promise.resolve(); + +function normalizeBlendMode(value, parsingArray = false) { + if (Array.isArray(value)) { + for (let i = 0, ii = value.length; i < ii; i++) { + const maybeBM = normalizeBlendMode(value[i], true); + + if (maybeBM) { + return maybeBM; + } + } + + (0, _util.warn)(`Unsupported blend mode Array: ${value}`); + return "source-over"; + } + + if (!(value instanceof _primitives.Name)) { + if (parsingArray) { + return null; + } + + return "source-over"; + } + + switch (value.name) { + case "Normal": + case "Compatible": + return "source-over"; + + case "Multiply": + return "multiply"; + + case "Screen": + return "screen"; + + case "Overlay": + return "overlay"; + + case "Darken": + return "darken"; + + case "Lighten": + return "lighten"; + + case "ColorDodge": + return "color-dodge"; + + case "ColorBurn": + return "color-burn"; + + case "HardLight": + return "hard-light"; + + case "SoftLight": + return "soft-light"; + + case "Difference": + return "difference"; + + case "Exclusion": + return "exclusion"; + + case "Hue": + return "hue"; + + case "Saturation": + return "saturation"; + + case "Color": + return "color"; + + case "Luminosity": + return "luminosity"; + } + + if (parsingArray) { + return null; + } + + (0, _util.warn)(`Unsupported blend mode: ${value.name}`); + return "source-over"; +} + +function incrementCachedImageMaskCount(data) { + if (data.fn === _util.OPS.paintImageMaskXObject && data.args[0] && data.args[0].count > 0) { + data.args[0].count++; + } +} + +class TimeSlotManager { + static get TIME_SLOT_DURATION_MS() { + return (0, _util.shadow)(this, "TIME_SLOT_DURATION_MS", 20); + } + + static get CHECK_TIME_EVERY() { + return (0, _util.shadow)(this, "CHECK_TIME_EVERY", 100); + } + + constructor() { + this.reset(); + } + + check() { + if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) { + return false; + } + + this.checked = 0; + return this.endTime <= Date.now(); + } + + reset() { + this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; + this.checked = 0; + } + +} + +class PartialEvaluator { + constructor({ + xref, + handler, + pageIndex, + idFactory, + fontCache, + builtInCMapCache, + standardFontDataCache, + globalImageCache, + options = null + }) { + this.xref = xref; + this.handler = handler; + this.pageIndex = pageIndex; + this.idFactory = idFactory; + this.fontCache = fontCache; + this.builtInCMapCache = builtInCMapCache; + this.standardFontDataCache = standardFontDataCache; + this.globalImageCache = globalImageCache; + this.options = options || DefaultPartialEvaluatorOptions; + this.parsingType3Font = false; + this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); + } + + get _pdfFunctionFactory() { + const pdfFunctionFactory = new _function.PDFFunctionFactory({ + xref: this.xref, + isEvalSupported: this.options.isEvalSupported + }); + return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); + } + + clone(newOptions = null) { + const newEvaluator = Object.create(this); + newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions); + return newEvaluator; + } + + hasBlendModes(resources, nonBlendModesSet) { + if (!(resources instanceof _primitives.Dict)) { + return false; + } + + if (resources.objId && nonBlendModesSet.has(resources.objId)) { + return false; + } + + const processed = new _primitives.RefSet(nonBlendModesSet); + + if (resources.objId) { + processed.put(resources.objId); + } + + const nodes = [resources], + xref = this.xref; + + while (nodes.length) { + const node = nodes.shift(); + const graphicStates = node.get("ExtGState"); + + if (graphicStates instanceof _primitives.Dict) { + for (let graphicState of graphicStates.getRawValues()) { + if (graphicState instanceof _primitives.Ref) { + if (processed.has(graphicState)) { + continue; + } + + try { + graphicState = xref.fetch(graphicState); + } catch (ex) { + processed.put(graphicState); + (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`); + continue; + } + } + + if (!(graphicState instanceof _primitives.Dict)) { + continue; + } + + if (graphicState.objId) { + processed.put(graphicState.objId); + } + + const bm = graphicState.get("BM"); + + if (bm instanceof _primitives.Name) { + if (bm.name !== "Normal") { + return true; + } + + continue; + } + + if (bm !== undefined && Array.isArray(bm)) { + for (const element of bm) { + if (element instanceof _primitives.Name && element.name !== "Normal") { + return true; + } + } + } + } + } + + const xObjects = node.get("XObject"); + + if (!(xObjects instanceof _primitives.Dict)) { + continue; + } + + for (let xObject of xObjects.getRawValues()) { + if (xObject instanceof _primitives.Ref) { + if (processed.has(xObject)) { + continue; + } + + try { + xObject = xref.fetch(xObject); + } catch (ex) { + processed.put(xObject); + (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`); + continue; + } + } + + if (!(xObject instanceof _base_stream.BaseStream)) { + continue; + } + + if (xObject.dict.objId) { + processed.put(xObject.dict.objId); + } + + const xResources = xObject.dict.get("Resources"); + + if (!(xResources instanceof _primitives.Dict)) { + continue; + } + + if (xResources.objId && processed.has(xResources.objId)) { + continue; + } + + nodes.push(xResources); + + if (xResources.objId) { + processed.put(xResources.objId); + } + } + } + + for (const ref of processed) { + nonBlendModesSet.put(ref); + } + + return false; + } + + async fetchBuiltInCMap(name) { + const cachedData = this.builtInCMapCache.get(name); + + if (cachedData) { + return cachedData; + } + + let data; + + if (this.options.cMapUrl !== null) { + const url = `${this.options.cMapUrl}${name}.bcmap`; + const response = await fetch(url); + + if (!response.ok) { + throw new Error(`fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`); + } + + data = { + cMapData: new Uint8Array(await response.arrayBuffer()), + compressionType: _util.CMapCompressionType.BINARY + }; + } else { + data = await this.handler.sendWithPromise("FetchBuiltInCMap", { + name + }); + } + + if (data.compressionType !== _util.CMapCompressionType.NONE) { + this.builtInCMapCache.set(name, data); + } + + return data; + } + + async fetchStandardFontData(name) { + const cachedData = this.standardFontDataCache.get(name); + + if (cachedData) { + return new _stream.Stream(cachedData); + } + + if (this.options.useSystemFonts && name !== "Symbol" && name !== "ZapfDingbats") { + return null; + } + + const standardFontNameToFileName = (0, _standard_fonts.getFontNameToFileMap)(), + filename = standardFontNameToFileName[name]; + let data; + + if (this.options.standardFontDataUrl !== null) { + const url = `${this.options.standardFontDataUrl}${filename}`; + const response = await fetch(url); + + if (!response.ok) { + (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`); + } else { + data = await response.arrayBuffer(); + } + } else { + try { + data = await this.handler.sendWithPromise("FetchStandardFontData", { + filename + }); + } catch (e) { + (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`); + } + } + + if (!data) { + return null; + } + + this.standardFontDataCache.set(name, data); + return new _stream.Stream(data); + } + + async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) { + const dict = xobj.dict; + const matrix = dict.getArray("Matrix"); + let bbox = dict.getArray("BBox"); + + if (Array.isArray(bbox) && bbox.length === 4) { + bbox = _util.Util.normalizeRect(bbox); + } else { + bbox = null; + } + + let optionalContent, groupOptions; + + if (dict.has("OC")) { + optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); + } + + if (optionalContent !== undefined) { + operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); + } + + const group = dict.get("Group"); + + if (group) { + groupOptions = { + matrix, + bbox, + smask, + isolated: false, + knockout: false + }; + const groupSubtype = group.get("S"); + let colorSpace = null; + + if ((0, _primitives.isName)(groupSubtype, "Transparency")) { + groupOptions.isolated = group.get("I") || false; + groupOptions.knockout = group.get("K") || false; + + if (group.has("CS")) { + const cs = group.getRaw("CS"); + + const cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache); + + if (cachedColorSpace) { + colorSpace = cachedColorSpace; + } else { + colorSpace = await this.parseColorSpace({ + cs, + resources, + localColorSpaceCache + }); + } + } + } + + if (smask && smask.backdrop) { + colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; + smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); + } + + operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); + } + + const args = group ? [matrix, null] : [matrix, bbox]; + operatorList.addOp(_util.OPS.paintFormXObjectBegin, args); + return this.getOperatorList({ + stream: xobj, + task, + resources: dict.get("Resources") || resources, + operatorList, + initialState + }).then(function () { + operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); + + if (group) { + operatorList.addOp(_util.OPS.endGroup, [groupOptions]); + } + + if (optionalContent !== undefined) { + operatorList.addOp(_util.OPS.endMarkedContent, []); + } + }); + } + + _sendImgData(objId, imgData, cacheGlobally = false) { + const transfers = imgData ? [imgData.bitmap || imgData.data.buffer] : null; + + if (this.parsingType3Font || cacheGlobally) { + return this.handler.send("commonobj", [objId, "Image", imgData], transfers); + } + + return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers); + } + + async buildPaintImageXObject({ + resources, + image, + isInline = false, + operatorList, + cacheKey, + localImageCache, + localColorSpaceCache + }) { + const dict = image.dict; + const imageRef = dict.objId; + const w = dict.get("W", "Width"); + const h = dict.get("H", "Height"); + + if (!(w && typeof w === "number") || !(h && typeof h === "number")) { + (0, _util.warn)("Image dimensions are missing, or not numbers."); + return; + } + + const maxImageSize = this.options.maxImageSize; + + if (maxImageSize !== -1 && w * h > maxImageSize) { + const msg = "Image exceeded maximum allowed size and was removed."; + + if (this.options.ignoreErrors) { + (0, _util.warn)(msg); + return; + } + + throw new Error(msg); + } + + let optionalContent; + + if (dict.has("OC")) { + optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); + } + + const imageMask = dict.get("IM", "ImageMask") || false; + let imgData, args; + + if (imageMask) { + const interpolate = dict.get("I", "Interpolate"); + const bitStrideLength = w + 7 >> 3; + const imgArray = image.getBytes(bitStrideLength * h); + const decode = dict.getArray("D", "Decode"); + + if (this.parsingType3Font) { + imgData = _image.PDFImage.createRawMask({ + imgArray, + width: w, + height: h, + imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream, + inverseDecode: !!decode && decode[0] > 0, + interpolate + }); + imgData.cached = !!cacheKey; + args = [imgData]; + operatorList.addImageOps(_util.OPS.paintImageMaskXObject, args, optionalContent); + + if (cacheKey) { + localImageCache.set(cacheKey, imageRef, { + fn: _util.OPS.paintImageMaskXObject, + args, + optionalContent + }); + } + + return; + } + + imgData = _image.PDFImage.createMask({ + imgArray, + width: w, + height: h, + imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream, + inverseDecode: !!decode && decode[0] > 0, + interpolate + }); + + if (imgData.isSingleOpaquePixel) { + operatorList.addImageOps(_util.OPS.paintSolidColorImageMask, [], optionalContent); + + if (cacheKey) { + localImageCache.set(cacheKey, imageRef, { + fn: _util.OPS.paintSolidColorImageMask, + args: [], + optionalContent + }); + } + + return; + } + + const objId = `mask_${this.idFactory.createObjId()}`; + operatorList.addDependency(objId); + + this._sendImgData(objId, imgData); + + args = [{ + data: objId, + width: imgData.width, + height: imgData.height, + interpolate: imgData.interpolate, + count: 1 + }]; + operatorList.addImageOps(_util.OPS.paintImageMaskXObject, args, optionalContent); + + if (cacheKey) { + localImageCache.set(cacheKey, imageRef, { + fn: _util.OPS.paintImageMaskXObject, + args, + optionalContent + }); + } + + return; + } + + const softMask = dict.get("SM", "SMask") || false; + const mask = dict.get("Mask") || false; + const SMALL_IMAGE_DIMENSIONS = 200; + + if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) { + const imageObj = new _image.PDFImage({ + xref: this.xref, + res: resources, + image, + isInline, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache + }); + imgData = imageObj.createImageData(true); + operatorList.addImageOps(_util.OPS.paintInlineImageXObject, [imgData], optionalContent); + return; + } + + let objId = `img_${this.idFactory.createObjId()}`, + cacheGlobally = false; + + if (this.parsingType3Font) { + objId = `${this.idFactory.getDocId()}_type3_${objId}`; + } else if (imageRef) { + cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex); + + if (cacheGlobally) { + objId = `${this.idFactory.getDocId()}_${objId}`; + } + } + + operatorList.addDependency(objId); + args = [objId, w, h]; + + _image.PDFImage.buildImage({ + xref: this.xref, + res: resources, + image, + isInline, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache + }).then(imageObj => { + imgData = imageObj.createImageData(false); + + if (cacheKey && imageRef && cacheGlobally) { + this.globalImageCache.addByteSize(imageRef, imgData.data.length); + } + + return this._sendImgData(objId, imgData, cacheGlobally); + }).catch(reason => { + (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`); + return this._sendImgData(objId, null, cacheGlobally); + }); + + operatorList.addImageOps(_util.OPS.paintImageXObject, args, optionalContent); + + if (cacheKey) { + localImageCache.set(cacheKey, imageRef, { + fn: _util.OPS.paintImageXObject, + args, + optionalContent + }); + + if (imageRef) { + (0, _util.assert)(!isInline, "Cannot cache an inline image globally."); + this.globalImageCache.addPageIndex(imageRef, this.pageIndex); + + if (cacheGlobally) { + this.globalImageCache.setData(imageRef, { + objId, + fn: _util.OPS.paintImageXObject, + args, + optionalContent, + byteSize: 0 + }); + } + } + } + } + + handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) { + const smaskContent = smask.get("G"); + const smaskOptions = { + subtype: smask.get("S").name, + backdrop: smask.get("BC") + }; + const transferObj = smask.get("TR"); + + if ((0, _function.isPDFFunction)(transferObj)) { + const transferFn = this._pdfFunctionFactory.create(transferObj); + + const transferMap = new Uint8Array(256); + const tmp = new Float32Array(1); + + for (let i = 0; i < 256; i++) { + tmp[0] = i / 255; + transferFn(tmp, 0, tmp, 0); + transferMap[i] = tmp[0] * 255 | 0; + } + + smaskOptions.transferMap = transferMap; + } + + return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache); + } + + handleTransferFunction(tr) { + let transferArray; + + if (Array.isArray(tr)) { + transferArray = tr; + } else if ((0, _function.isPDFFunction)(tr)) { + transferArray = [tr]; + } else { + return null; + } + + const transferMaps = []; + let numFns = 0, + numEffectfulFns = 0; + + for (const entry of transferArray) { + const transferObj = this.xref.fetchIfRef(entry); + numFns++; + + if ((0, _primitives.isName)(transferObj, "Identity")) { + transferMaps.push(null); + continue; + } else if (!(0, _function.isPDFFunction)(transferObj)) { + return null; + } + + const transferFn = this._pdfFunctionFactory.create(transferObj); + + const transferMap = new Uint8Array(256), + tmp = new Float32Array(1); + + for (let j = 0; j < 256; j++) { + tmp[0] = j / 255; + transferFn(tmp, 0, tmp, 0); + transferMap[j] = tmp[0] * 255 | 0; + } + + transferMaps.push(transferMap); + numEffectfulFns++; + } + + if (!(numFns === 1 || numFns === 4)) { + return null; + } + + if (numEffectfulFns === 0) { + return null; + } + + return transferMaps; + } + + handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, localTilingPatternCache) { + const tilingOpList = new _operator_list.OperatorList(); + + const patternResources = _primitives.Dict.merge({ + xref: this.xref, + dictArray: [patternDict.get("Resources"), resources] + }); + + return this.getOperatorList({ + stream: pattern, + task, + resources: patternResources, + operatorList: tilingOpList + }).then(function () { + const operatorListIR = tilingOpList.getIR(); + const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color); + operatorList.addDependencies(tilingOpList.dependencies); + operatorList.addOp(fn, tilingPatternIR); + + if (patternDict.objId) { + localTilingPatternCache.set(null, patternDict.objId, { + operatorListIR, + dict: patternDict + }); + } + }).catch(reason => { + if (reason instanceof _util.AbortException) { + return; + } + + if (this.options.ignoreErrors) { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern + }); + (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`); + return; + } + + throw reason; + }); + } + + handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) { + const fontName = fontArgs && fontArgs[0] instanceof _primitives.Name ? fontArgs[0].name : null; + return this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo).then(translated => { + if (!translated.font.isType3Font) { + return translated; + } + + return translated.loadType3Data(this, resources, task).then(function () { + operatorList.addDependencies(translated.type3Dependencies); + return translated; + }).catch(reason => { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3 + }); + return new TranslatedFont({ + loadedName: "g_font_error", + font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`), + dict: translated.font, + evaluatorOptions: this.options + }); + }); + }).then(translated => { + state.font = translated.font; + translated.send(this.handler); + return translated.loadedName; + }); + } + + handleText(chars, state) { + const font = state.font; + const glyphs = font.charsToGlyphs(chars); + + if (font.data) { + const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); + + if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) { + PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options); + } + } + + return glyphs; + } + + ensureStateFont(state) { + if (state.font) { + return; + } + + const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator."); + + if (this.options.ignoreErrors) { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorFontState + }); + (0, _util.warn)(`ensureStateFont: "${reason}".`); + return; + } + + throw reason; + } + + async setGState({ + resources, + gState, + operatorList, + cacheKey, + task, + stateManager, + localGStateCache, + localColorSpaceCache + }) { + const gStateRef = gState.objId; + let isSimpleGState = true; + const gStateObj = []; + const gStateKeys = gState.getKeys(); + let promise = Promise.resolve(); + + for (let i = 0, ii = gStateKeys.length; i < ii; i++) { + const key = gStateKeys[i]; + const value = gState.get(key); + + switch (key) { + case "Type": + break; + + case "LW": + case "LC": + case "LJ": + case "ML": + case "D": + case "RI": + case "FL": + case "CA": + case "ca": + gStateObj.push([key, value]); + break; + + case "Font": + isSimpleGState = false; + promise = promise.then(() => { + return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { + operatorList.addDependency(loadedName); + gStateObj.push([key, [loadedName, value[1]]]); + }); + }); + break; + + case "BM": + gStateObj.push([key, normalizeBlendMode(value)]); + break; + + case "SMask": + if ((0, _primitives.isName)(value, "None")) { + gStateObj.push([key, false]); + break; + } + + if (value instanceof _primitives.Dict) { + isSimpleGState = false; + promise = promise.then(() => { + return this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache); + }); + gStateObj.push([key, true]); + } else { + (0, _util.warn)("Unsupported SMask type"); + } + + break; + + case "TR": + const transferMaps = this.handleTransferFunction(value); + gStateObj.push([key, transferMaps]); + break; + + case "OP": + case "op": + case "OPM": + case "BG": + case "BG2": + case "UCR": + case "UCR2": + case "TR2": + case "HT": + case "SM": + case "SA": + case "AIS": + case "TK": + (0, _util.info)("graphic state operator " + key); + break; + + default: + (0, _util.info)("Unknown graphic state operator " + key); + break; + } + } + + return promise.then(function () { + if (gStateObj.length > 0) { + operatorList.addOp(_util.OPS.setGState, [gStateObj]); + } + + if (isSimpleGState) { + localGStateCache.set(cacheKey, gStateRef, gStateObj); + } + }); + } + + loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) { + const errorFont = async () => { + return new TranslatedFont({ + loadedName: "g_font_error", + font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`), + dict: font, + evaluatorOptions: this.options + }); + }; + + const xref = this.xref; + let fontRef; + + if (font) { + if (font instanceof _primitives.Ref) { + fontRef = font; + } + } else { + const fontRes = resources.get("Font"); + + if (fontRes) { + fontRef = fontRes.getRaw(fontName); + } + } + + if (!fontRef) { + const partialMsg = `Font "${fontName || font && font.toString()}" is not available`; + + if (!this.options.ignoreErrors && !this.parsingType3Font) { + (0, _util.warn)(`${partialMsg}.`); + return errorFont(); + } + + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing + }); + (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`); + + if (fallbackFontDict) { + fontRef = fallbackFontDict; + } else { + fontRef = PartialEvaluator.fallbackFontDict; + } + } + + if (this.parsingType3Font && this.type3FontRefs.has(fontRef)) { + return errorFont(); + } + + if (this.fontCache.has(fontRef)) { + return this.fontCache.get(fontRef); + } + + font = xref.fetchIfRef(fontRef); + + if (!(font instanceof _primitives.Dict)) { + return errorFont(); + } + + if (font.cacheKey && this.fontCache.has(font.cacheKey)) { + return this.fontCache.get(font.cacheKey); + } + + const fontCapability = (0, _util.createPromiseCapability)(); + let preEvaluatedFont; + + try { + preEvaluatedFont = this.preEvaluateFont(font); + preEvaluatedFont.cssFontInfo = cssFontInfo; + } catch (reason) { + (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`); + return errorFont(); + } + + const { + descriptor, + hash + } = preEvaluatedFont; + const fontRefIsRef = fontRef instanceof _primitives.Ref; + let fontID; + + if (fontRefIsRef) { + fontID = `f${fontRef.toString()}`; + } + + if (hash && descriptor instanceof _primitives.Dict) { + if (!descriptor.fontAliases) { + descriptor.fontAliases = Object.create(null); + } + + const fontAliases = descriptor.fontAliases; + + if (fontAliases[hash]) { + const aliasFontRef = fontAliases[hash].aliasRef; + + if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { + this.fontCache.putAlias(fontRef, aliasFontRef); + return this.fontCache.get(fontRef); + } + } else { + fontAliases[hash] = { + fontID: this.idFactory.createFontId() + }; + } + + if (fontRefIsRef) { + fontAliases[hash].aliasRef = fontRef; + } + + fontID = fontAliases[hash].fontID; + } + + if (fontRefIsRef) { + this.fontCache.put(fontRef, fontCapability.promise); + } else { + if (!fontID) { + fontID = this.idFactory.createFontId(); + } + + font.cacheKey = `cacheKey_${fontID}`; + this.fontCache.put(font.cacheKey, fontCapability.promise); + } + + (0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.'); + font.loadedName = `${this.idFactory.getDocId()}_${fontID}`; + this.translateFont(preEvaluatedFont).then(translatedFont => { + if (translatedFont.fontType !== undefined) { + xref.stats.addFontType(translatedFont.fontType); + } + + fontCapability.resolve(new TranslatedFont({ + loadedName: font.loadedName, + font: translatedFont, + dict: font, + evaluatorOptions: this.options + })); + }).catch(reason => { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate + }); + (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`); + + try { + const fontFile3 = descriptor && descriptor.get("FontFile3"); + const subtype = fontFile3 && fontFile3.get("Subtype"); + const fontType = (0, _fonts_utils.getFontType)(preEvaluatedFont.type, subtype && subtype.name); + + if (fontType !== undefined) { + xref.stats.addFontType(fontType); + } + } catch (ex) {} + + fontCapability.resolve(new TranslatedFont({ + loadedName: font.loadedName, + font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), + dict: font, + evaluatorOptions: this.options + })); + }); + return fontCapability.promise; + } + + buildPath(operatorList, fn, args, parsingText = false) { + const lastIndex = operatorList.length - 1; + + if (!args) { + args = []; + } + + let minMax; + + if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { + if (parsingText) { + (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`); + operatorList.addOp(_util.OPS.save, null); + } + + minMax = [Infinity, -Infinity, Infinity, -Infinity]; + operatorList.addOp(_util.OPS.constructPath, [[fn], args, minMax]); + + if (parsingText) { + operatorList.addOp(_util.OPS.restore, null); + } + } else { + const opArgs = operatorList.argsArray[lastIndex]; + opArgs[0].push(fn); + Array.prototype.push.apply(opArgs[1], args); + minMax = opArgs[2]; + } + + switch (fn) { + case _util.OPS.rectangle: + minMax[0] = Math.min(minMax[0], args[0], args[0] + args[2]); + minMax[1] = Math.max(minMax[1], args[0], args[0] + args[2]); + minMax[2] = Math.min(minMax[2], args[1], args[1] + args[3]); + minMax[3] = Math.max(minMax[3], args[1], args[1] + args[3]); + break; + + case _util.OPS.moveTo: + case _util.OPS.lineTo: + minMax[0] = Math.min(minMax[0], args[0]); + minMax[1] = Math.max(minMax[1], args[0]); + minMax[2] = Math.min(minMax[2], args[1]); + minMax[3] = Math.max(minMax[3], args[1]); + break; + } + } + + parseColorSpace({ + cs, + resources, + localColorSpaceCache + }) { + return _colorspace.ColorSpace.parseAsync({ + cs, + xref: this.xref, + resources, + pdfFunctionFactory: this._pdfFunctionFactory, + localColorSpaceCache + }).catch(reason => { + if (reason instanceof _util.AbortException) { + return null; + } + + if (this.options.ignoreErrors) { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace + }); + (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`); + return null; + } + + throw reason; + }); + } + + parseShading({ + shading, + resources, + localColorSpaceCache, + localShadingPatternCache + }) { + let id = localShadingPatternCache.get(shading); + + if (!id) { + var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache); + + const patternIR = shadingFill.getIR(); + id = `pattern_${this.idFactory.createObjId()}`; + localShadingPatternCache.set(shading, id); + this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]); + } + + return id; + } + + handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) { + const patternName = args.pop(); + + if (patternName instanceof _primitives.Name) { + const rawPattern = patterns.getRaw(patternName.name); + const localTilingPattern = rawPattern instanceof _primitives.Ref && localTilingPatternCache.getByRef(rawPattern); + + if (localTilingPattern) { + try { + const color = cs.base ? cs.base.getRgb(args, 0) : null; + const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color); + operatorList.addOp(fn, tilingPatternIR); + return undefined; + } catch (ex) {} + } + + const pattern = this.xref.fetchIfRef(rawPattern); + + if (pattern) { + const dict = pattern instanceof _base_stream.BaseStream ? pattern.dict : pattern; + const typeNum = dict.get("PatternType"); + + if (typeNum === PatternType.TILING) { + const color = cs.base ? cs.base.getRgb(args, 0) : null; + return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, localTilingPatternCache); + } else if (typeNum === PatternType.SHADING) { + const shading = dict.get("Shading"); + const matrix = dict.getArray("Matrix"); + const objId = this.parseShading({ + shading, + resources, + localColorSpaceCache, + localShadingPatternCache + }); + operatorList.addOp(fn, ["Shading", objId, matrix]); + return undefined; + } + + throw new _util.FormatError(`Unknown PatternType: ${typeNum}`); + } + } + + throw new _util.FormatError(`Unknown PatternName: ${patternName}`); + } + + _parseVisibilityExpression(array, nestingCounter, currentResult) { + const MAX_NESTING = 10; + + if (++nestingCounter > MAX_NESTING) { + (0, _util.warn)("Visibility expression is too deeply nested"); + return; + } + + const length = array.length; + const operator = this.xref.fetchIfRef(array[0]); + + if (length < 2 || !(operator instanceof _primitives.Name)) { + (0, _util.warn)("Invalid visibility expression"); + return; + } + + switch (operator.name) { + case "And": + case "Or": + case "Not": + currentResult.push(operator.name); + break; + + default: + (0, _util.warn)(`Invalid operator ${operator.name} in visibility expression`); + return; + } + + for (let i = 1; i < length; i++) { + const raw = array[i]; + const object = this.xref.fetchIfRef(raw); + + if (Array.isArray(object)) { + const nestedResult = []; + currentResult.push(nestedResult); + + this._parseVisibilityExpression(object, nestingCounter, nestedResult); + } else if (raw instanceof _primitives.Ref) { + currentResult.push(raw.toString()); + } + } + } + + async parseMarkedContentProps(contentProperties, resources) { + let optionalContent; + + if (contentProperties instanceof _primitives.Name) { + const properties = resources.get("Properties"); + optionalContent = properties.get(contentProperties.name); + } else if (contentProperties instanceof _primitives.Dict) { + optionalContent = contentProperties; + } else { + throw new _util.FormatError("Optional content properties malformed."); + } + + const optionalContentType = optionalContent.get("Type").name; + + if (optionalContentType === "OCG") { + return { + type: optionalContentType, + id: optionalContent.objId + }; + } else if (optionalContentType === "OCMD") { + const expression = optionalContent.get("VE"); + + if (Array.isArray(expression)) { + const result = []; + + this._parseVisibilityExpression(expression, 0, result); + + if (result.length > 0) { + return { + type: "OCMD", + expression: result + }; + } + } + + const optionalContentGroups = optionalContent.get("OCGs"); + + if (Array.isArray(optionalContentGroups) || optionalContentGroups instanceof _primitives.Dict) { + const groupIds = []; + + if (Array.isArray(optionalContentGroups)) { + for (const ocg of optionalContentGroups) { + groupIds.push(ocg.toString()); + } + } else { + groupIds.push(optionalContentGroups.objId); + } + + return { + type: optionalContentType, + ids: groupIds, + policy: optionalContent.get("P") instanceof _primitives.Name ? optionalContent.get("P").name : null, + expression: null + }; + } else if (optionalContentGroups instanceof _primitives.Ref) { + return { + type: optionalContentType, + id: optionalContentGroups.toString() + }; + } + } + + return null; + } + + getOperatorList({ + stream, + task, + resources, + operatorList, + initialState = null, + fallbackFontDict = null + }) { + resources = resources || _primitives.Dict.empty; + initialState = initialState || new EvalState(); + + if (!operatorList) { + throw new Error('getOperatorList: missing "operatorList" parameter'); + } + + const self = this; + const xref = this.xref; + let parsingText = false; + const localImageCache = new _image_utils.LocalImageCache(); + const localColorSpaceCache = new _image_utils.LocalColorSpaceCache(); + const localGStateCache = new _image_utils.LocalGStateCache(); + const localTilingPatternCache = new _image_utils.LocalTilingPatternCache(); + const localShadingPatternCache = new Map(); + + const xobjs = resources.get("XObject") || _primitives.Dict.empty; + + const patterns = resources.get("Pattern") || _primitives.Dict.empty; + + const stateManager = new StateManager(initialState); + const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); + const timeSlotManager = new TimeSlotManager(); + + function closePendingRestoreOPS(argument) { + for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { + operatorList.addOp(_util.OPS.restore, []); + } + } + + return new Promise(function promiseBody(resolve, reject) { + const next = function (promise) { + Promise.all([promise, operatorList.ready]).then(function () { + try { + promiseBody(resolve, reject); + } catch (ex) { + reject(ex); + } + }, reject); + }; + + task.ensureNotTerminated(); + timeSlotManager.reset(); + const operation = {}; + let stop, i, ii, cs, name, isValidName; + + while (!(stop = timeSlotManager.check())) { + operation.args = null; + + if (!preprocessor.read(operation)) { + break; + } + + let args = operation.args; + let fn = operation.fn; + + switch (fn | 0) { + case _util.OPS.paintXObject: + isValidName = args[0] instanceof _primitives.Name; + name = args[0].name; + + if (isValidName) { + const localImage = localImageCache.getByName(name); + + if (localImage) { + operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent); + incrementCachedImageMaskCount(localImage); + args = null; + continue; + } + } + + next(new Promise(function (resolveXObject, rejectXObject) { + if (!isValidName) { + throw new _util.FormatError("XObject must be referred to by name."); + } + + let xobj = xobjs.getRaw(name); + + if (xobj instanceof _primitives.Ref) { + const localImage = localImageCache.getByRef(xobj); + + if (localImage) { + operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent); + incrementCachedImageMaskCount(localImage); + resolveXObject(); + return; + } + + const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); + + if (globalImage) { + operatorList.addDependency(globalImage.objId); + operatorList.addImageOps(globalImage.fn, globalImage.args, globalImage.optionalContent); + resolveXObject(); + return; + } + + xobj = xref.fetch(xobj); + } + + if (!(xobj instanceof _base_stream.BaseStream)) { + throw new _util.FormatError("XObject should be a stream"); + } + + const type = xobj.dict.get("Subtype"); + + if (!(type instanceof _primitives.Name)) { + throw new _util.FormatError("XObject should have a Name subtype"); + } + + if (type.name === "Form") { + stateManager.save(); + self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () { + stateManager.restore(); + resolveXObject(); + }, rejectXObject); + return; + } else if (type.name === "Image") { + self.buildPaintImageXObject({ + resources, + image: xobj, + operatorList, + cacheKey: name, + localImageCache, + localColorSpaceCache + }).then(resolveXObject, rejectXObject); + return; + } else if (type.name === "PS") { + (0, _util.info)("Ignored XObject subtype PS"); + } else { + throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`); + } + + resolveXObject(); + }).catch(function (reason) { + if (reason instanceof _util.AbortException) { + return; + } + + if (self.options.ignoreErrors) { + self.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorXObject + }); + (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`); + return; + } + + throw reason; + })); + return; + + case _util.OPS.setFont: + var fontSize = args[1]; + next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) { + operatorList.addDependency(loadedName); + operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); + })); + return; + + case _util.OPS.beginText: + parsingText = true; + break; + + case _util.OPS.endText: + parsingText = false; + break; + + case _util.OPS.endInlineImage: + var cacheKey = args[0].cacheKey; + + if (cacheKey) { + const localImage = localImageCache.getByName(cacheKey); + + if (localImage) { + operatorList.addImageOps(localImage.fn, localImage.args, localImage.optionalContent); + incrementCachedImageMaskCount(localImage); + args = null; + continue; + } + } + + next(self.buildPaintImageXObject({ + resources, + image: args[0], + isInline: true, + operatorList, + cacheKey, + localImageCache, + localColorSpaceCache + })); + return; + + case _util.OPS.showText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + args[0] = self.handleText(args[0], stateManager.state); + break; + + case _util.OPS.showSpacedText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + var arr = args[0]; + var combinedGlyphs = []; + var arrLength = arr.length; + var state = stateManager.state; + + for (i = 0; i < arrLength; ++i) { + const arrItem = arr[i]; + + if (typeof arrItem === "string") { + Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); + } else if (typeof arrItem === "number") { + combinedGlyphs.push(arrItem); + } + } + + args[0] = combinedGlyphs; + fn = _util.OPS.showText; + break; + + case _util.OPS.nextLineShowText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + operatorList.addOp(_util.OPS.nextLine); + args[0] = self.handleText(args[0], stateManager.state); + fn = _util.OPS.showText; + break; + + case _util.OPS.nextLineSetSpacingShowText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + operatorList.addOp(_util.OPS.nextLine); + operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); + operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); + args[0] = self.handleText(args[0], stateManager.state); + fn = _util.OPS.showText; + break; + + case _util.OPS.setTextRenderingMode: + stateManager.state.textRenderingMode = args[0]; + break; + + case _util.OPS.setFillColorSpace: + { + const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); + + if (cachedColorSpace) { + stateManager.state.fillColorSpace = cachedColorSpace; + continue; + } + + next(self.parseColorSpace({ + cs: args[0], + resources, + localColorSpaceCache + }).then(function (colorSpace) { + if (colorSpace) { + stateManager.state.fillColorSpace = colorSpace; + } + })); + return; + } + + case _util.OPS.setStrokeColorSpace: + { + const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); + + if (cachedColorSpace) { + stateManager.state.strokeColorSpace = cachedColorSpace; + continue; + } + + next(self.parseColorSpace({ + cs: args[0], + resources, + localColorSpaceCache + }).then(function (colorSpace) { + if (colorSpace) { + stateManager.state.strokeColorSpace = colorSpace; + } + })); + return; + } + + case _util.OPS.setFillColor: + cs = stateManager.state.fillColorSpace; + args = cs.getRgb(args, 0); + fn = _util.OPS.setFillRGBColor; + break; + + case _util.OPS.setStrokeColor: + cs = stateManager.state.strokeColorSpace; + args = cs.getRgb(args, 0); + fn = _util.OPS.setStrokeRGBColor; + break; + + case _util.OPS.setFillGray: + stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; + args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); + fn = _util.OPS.setFillRGBColor; + break; + + case _util.OPS.setStrokeGray: + stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; + args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); + fn = _util.OPS.setStrokeRGBColor; + break; + + case _util.OPS.setFillCMYKColor: + stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; + args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); + fn = _util.OPS.setFillRGBColor; + break; + + case _util.OPS.setStrokeCMYKColor: + stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; + args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); + fn = _util.OPS.setStrokeRGBColor; + break; + + case _util.OPS.setFillRGBColor: + stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; + args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); + break; + + case _util.OPS.setStrokeRGBColor: + stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; + args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); + break; + + case _util.OPS.setFillColorN: + cs = stateManager.state.fillColorSpace; + + if (cs.name === "Pattern") { + next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); + return; + } + + args = cs.getRgb(args, 0); + fn = _util.OPS.setFillRGBColor; + break; + + case _util.OPS.setStrokeColorN: + cs = stateManager.state.strokeColorSpace; + + if (cs.name === "Pattern") { + next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); + return; + } + + args = cs.getRgb(args, 0); + fn = _util.OPS.setStrokeRGBColor; + break; + + case _util.OPS.shadingFill: + var shadingRes = resources.get("Shading"); + + if (!shadingRes) { + throw new _util.FormatError("No shading resource found"); + } + + var shading = shadingRes.get(args[0].name); + + if (!shading) { + throw new _util.FormatError("No shading object found"); + } + + const patternId = self.parseShading({ + shading, + resources, + localColorSpaceCache, + localShadingPatternCache + }); + args = [patternId]; + fn = _util.OPS.shadingFill; + break; + + case _util.OPS.setGState: + isValidName = args[0] instanceof _primitives.Name; + name = args[0].name; + + if (isValidName) { + const localGStateObj = localGStateCache.getByName(name); + + if (localGStateObj) { + if (localGStateObj.length > 0) { + operatorList.addOp(_util.OPS.setGState, [localGStateObj]); + } + + args = null; + continue; + } + } + + next(new Promise(function (resolveGState, rejectGState) { + if (!isValidName) { + throw new _util.FormatError("GState must be referred to by name."); + } + + const extGState = resources.get("ExtGState"); + + if (!(extGState instanceof _primitives.Dict)) { + throw new _util.FormatError("ExtGState should be a dictionary."); + } + + const gState = extGState.get(name); + + if (!(gState instanceof _primitives.Dict)) { + throw new _util.FormatError("GState should be a dictionary."); + } + + self.setGState({ + resources, + gState, + operatorList, + cacheKey: name, + task, + stateManager, + localGStateCache, + localColorSpaceCache + }).then(resolveGState, rejectGState); + }).catch(function (reason) { + if (reason instanceof _util.AbortException) { + return; + } + + if (self.options.ignoreErrors) { + self.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorExtGState + }); + (0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`); + return; + } + + throw reason; + })); + return; + + case _util.OPS.moveTo: + case _util.OPS.lineTo: + case _util.OPS.curveTo: + case _util.OPS.curveTo2: + case _util.OPS.curveTo3: + case _util.OPS.closePath: + case _util.OPS.rectangle: + self.buildPath(operatorList, fn, args, parsingText); + continue; + + case _util.OPS.markPoint: + case _util.OPS.markPointProps: + case _util.OPS.beginCompat: + case _util.OPS.endCompat: + continue; + + case _util.OPS.beginMarkedContentProps: + if (!(args[0] instanceof _primitives.Name)) { + (0, _util.warn)(`Expected name for beginMarkedContentProps arg0=${args[0]}`); + continue; + } + + if (args[0].name === "OC") { + next(self.parseMarkedContentProps(args[1], resources).then(data => { + operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]); + }).catch(reason => { + if (reason instanceof _util.AbortException) { + return; + } + + if (self.options.ignoreErrors) { + self.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent + }); + (0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`); + return; + } + + throw reason; + })); + return; + } + + args = [args[0].name, args[1] instanceof _primitives.Dict ? args[1].get("MCID") : null]; + break; + + case _util.OPS.beginMarkedContent: + case _util.OPS.endMarkedContent: + default: + if (args !== null) { + for (i = 0, ii = args.length; i < ii; i++) { + if (args[i] instanceof _primitives.Dict) { + break; + } + } + + if (i < ii) { + (0, _util.warn)("getOperatorList - ignoring operator: " + fn); + continue; + } + } + + } + + operatorList.addOp(fn, args); + } + + if (stop) { + next(deferred); + return; + } + + closePendingRestoreOPS(); + resolve(); + }).catch(reason => { + if (reason instanceof _util.AbortException) { + return; + } + + if (this.options.ignoreErrors) { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList + }); + (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`); + closePendingRestoreOPS(); + return; + } + + throw reason; + }); + } + + getTextContent({ + stream, + task, + resources, + stateManager = null, + combineTextItems = false, + includeMarkedContent = false, + sink, + seenStyles = new Set(), + viewBox + }) { + resources = resources || _primitives.Dict.empty; + stateManager = stateManager || new StateManager(new TextState()); + const NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); + const textContent = { + items: [], + styles: Object.create(null) + }; + const textContentItem = { + initialized: false, + str: [], + totalWidth: 0, + totalHeight: 0, + width: 0, + height: 0, + vertical: false, + prevTransform: null, + textAdvanceScale: 0, + spaceInFlowMin: 0, + spaceInFlowMax: 0, + trackingSpaceMin: Infinity, + negativeSpaceMax: -Infinity, + notASpace: -Infinity, + transform: null, + fontName: null, + hasEOL: false + }; + const twoLastChars = [" ", " "]; + let twoLastCharsPos = 0; + + function saveLastChar(char) { + const nextPos = (twoLastCharsPos + 1) % 2; + const ret = twoLastChars[twoLastCharsPos] !== " " && twoLastChars[nextPos] === " "; + twoLastChars[twoLastCharsPos] = char; + twoLastCharsPos = nextPos; + return ret; + } + + function resetLastChars() { + twoLastChars[0] = twoLastChars[1] = " "; + twoLastCharsPos = 0; + } + + const TRACKING_SPACE_FACTOR = 0.1; + const NOT_A_SPACE_FACTOR = 0.03; + const NEGATIVE_SPACE_FACTOR = -0.2; + const SPACE_IN_FLOW_MIN_FACTOR = 0.1; + const SPACE_IN_FLOW_MAX_FACTOR = 0.6; + const self = this; + const xref = this.xref; + const showSpacedTextBuffer = []; + let xobjs = null; + const emptyXObjectCache = new _image_utils.LocalImageCache(); + const emptyGStateCache = new _image_utils.LocalGStateCache(); + const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); + let textState; + + function getCurrentTextTransform() { + const font = textState.font; + const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; + + if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) { + const glyphHeight = font.bbox[3] - font.bbox[1]; + + if (glyphHeight > 0) { + tsm[3] *= glyphHeight * textState.fontMatrix[3]; + } + } + + return _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); + } + + function ensureTextContentItem() { + if (textContentItem.initialized) { + return textContentItem; + } + + const font = textState.font, + loadedName = font.loadedName; + + if (!seenStyles.has(loadedName)) { + seenStyles.add(loadedName); + textContent.styles[loadedName] = { + fontFamily: font.fallbackName, + ascent: font.ascent, + descent: font.descent, + vertical: font.vertical + }; + } + + textContentItem.fontName = loadedName; + const trm = textContentItem.transform = getCurrentTextTransform(); + + if (!font.vertical) { + textContentItem.width = textContentItem.totalWidth = 0; + textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]); + textContentItem.vertical = false; + } else { + textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]); + textContentItem.height = textContentItem.totalHeight = 0; + textContentItem.vertical = true; + } + + const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); + const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); + textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; + textContentItem.trackingSpaceMin = textState.fontSize * TRACKING_SPACE_FACTOR; + textContentItem.notASpace = textState.fontSize * NOT_A_SPACE_FACTOR; + textContentItem.negativeSpaceMax = textState.fontSize * NEGATIVE_SPACE_FACTOR; + textContentItem.spaceInFlowMin = textState.fontSize * SPACE_IN_FLOW_MIN_FACTOR; + textContentItem.spaceInFlowMax = textState.fontSize * SPACE_IN_FLOW_MAX_FACTOR; + textContentItem.hasEOL = false; + textContentItem.initialized = true; + return textContentItem; + } + + function updateAdvanceScale() { + if (!textContentItem.initialized) { + return; + } + + const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); + const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); + const scaleFactor = scaleCtmX * scaleLineX; + + if (scaleFactor === textContentItem.textAdvanceScale) { + return; + } + + if (!textContentItem.vertical) { + textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; + textContentItem.width = 0; + } else { + textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; + textContentItem.height = 0; + } + + textContentItem.textAdvanceScale = scaleFactor; + } + + function runBidiTransform(textChunk) { + const text = textChunk.str.join(""); + const bidiResult = (0, _bidi.bidi)(text, -1, textChunk.vertical); + return { + str: bidiResult.str, + dir: bidiResult.dir, + width: Math.abs(textChunk.totalWidth), + height: Math.abs(textChunk.totalHeight), + transform: textChunk.transform, + fontName: textChunk.fontName, + hasEOL: textChunk.hasEOL + }; + } + + function handleSetFont(fontName, fontRef) { + return self.loadFont(fontName, fontRef, resources).then(function (translated) { + if (!translated.font.isType3Font) { + return translated; + } + + return translated.loadType3Data(self, resources, task).catch(function () {}).then(function () { + return translated; + }); + }).then(function (translated) { + textState.font = translated.font; + textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; + }); + } + + function applyInverseRotation(x, y, matrix) { + const scale = Math.hypot(matrix[0], matrix[1]); + return [(matrix[0] * x + matrix[1] * y) / scale, (matrix[2] * x + matrix[3] * y) / scale]; + } + + function compareWithLastPosition() { + const currentTransform = getCurrentTextTransform(); + let posX = currentTransform[4]; + let posY = currentTransform[5]; + const shiftedX = posX - viewBox[0]; + const shiftedY = posY - viewBox[1]; + + if (shiftedX < 0 || shiftedX > viewBox[2] || shiftedY < 0 || shiftedY > viewBox[3]) { + return false; + } + + if (!combineTextItems || !textState.font || !textContentItem.prevTransform) { + return true; + } + + let lastPosX = textContentItem.prevTransform[4]; + let lastPosY = textContentItem.prevTransform[5]; + + if (lastPosX === posX && lastPosY === posY) { + return true; + } + + let rotate = -1; + + if (currentTransform[0] && currentTransform[1] === 0 && currentTransform[2] === 0) { + rotate = currentTransform[0] > 0 ? 0 : 180; + } else if (currentTransform[1] && currentTransform[0] === 0 && currentTransform[3] === 0) { + rotate = currentTransform[1] > 0 ? 90 : 270; + } + + switch (rotate) { + case 0: + break; + + case 90: + [posX, posY] = [posY, posX]; + [lastPosX, lastPosY] = [lastPosY, lastPosX]; + break; + + case 180: + [posX, posY, lastPosX, lastPosY] = [-posX, -posY, -lastPosX, -lastPosY]; + break; + + case 270: + [posX, posY] = [-posY, -posX]; + [lastPosX, lastPosY] = [-lastPosY, -lastPosX]; + break; + + default: + [posX, posY] = applyInverseRotation(posX, posY, currentTransform); + [lastPosX, lastPosY] = applyInverseRotation(lastPosX, lastPosY, textContentItem.prevTransform); + } + + if (textState.font.vertical) { + const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale; + const advanceX = posX - lastPosX; + const textOrientation = Math.sign(textContentItem.height); + + if (advanceY < textOrientation * textContentItem.negativeSpaceMax) { + if (Math.abs(advanceX) > 0.5 * textContentItem.width) { + appendEOL(); + return true; + } + + resetLastChars(); + flushTextContentItem(); + return true; + } + + if (Math.abs(advanceX) > textContentItem.width) { + appendEOL(); + return true; + } + + if (advanceY <= textOrientation * textContentItem.notASpace) { + resetLastChars(); + } + + if (advanceY <= textOrientation * textContentItem.trackingSpaceMin) { + textContentItem.height += advanceY; + } else if (!addFakeSpaces(advanceY, textContentItem.prevTransform, textOrientation)) { + if (textContentItem.str.length === 0) { + resetLastChars(); + textContent.items.push({ + str: " ", + dir: "ltr", + width: 0, + height: Math.abs(advanceY), + transform: textContentItem.prevTransform, + fontName: textContentItem.fontName, + hasEOL: false + }); + } else { + textContentItem.height += advanceY; + } + } + + return true; + } + + const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale; + const advanceY = posY - lastPosY; + const textOrientation = Math.sign(textContentItem.width); + + if (advanceX < textOrientation * textContentItem.negativeSpaceMax) { + if (Math.abs(advanceY) > 0.5 * textContentItem.height) { + appendEOL(); + return true; + } + + resetLastChars(); + flushTextContentItem(); + return true; + } + + if (Math.abs(advanceY) > textContentItem.height) { + appendEOL(); + return true; + } + + if (advanceX <= textOrientation * textContentItem.notASpace) { + resetLastChars(); + } + + if (advanceX <= textOrientation * textContentItem.trackingSpaceMin) { + textContentItem.width += advanceX; + } else if (!addFakeSpaces(advanceX, textContentItem.prevTransform, textOrientation)) { + if (textContentItem.str.length === 0) { + resetLastChars(); + textContent.items.push({ + str: " ", + dir: "ltr", + width: Math.abs(advanceX), + height: 0, + transform: textContentItem.prevTransform, + fontName: textContentItem.fontName, + hasEOL: false + }); + } else { + textContentItem.width += advanceX; + } + } + + return true; + } + + function buildTextContentItem({ + chars, + extraSpacing + }) { + const font = textState.font; + + if (!chars) { + const charSpacing = textState.charSpacing + extraSpacing; + + if (charSpacing) { + if (!font.vertical) { + textState.translateTextMatrix(charSpacing * textState.textHScale, 0); + } else { + textState.translateTextMatrix(0, -charSpacing); + } + } + + return; + } + + const glyphs = font.charsToGlyphs(chars); + const scale = textState.fontMatrix[0] * textState.fontSize; + + for (let i = 0, ii = glyphs.length; i < ii; i++) { + const glyph = glyphs[i]; + + if (glyph.isInvisibleFormatMark) { + continue; + } + + let charSpacing = textState.charSpacing + (i + 1 === ii ? extraSpacing : 0); + let glyphWidth = glyph.width; + + if (font.vertical) { + glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth; + } + + let scaledDim = glyphWidth * scale; + + if (glyph.isWhitespace) { + if (!font.vertical) { + charSpacing += scaledDim + textState.wordSpacing; + textState.translateTextMatrix(charSpacing * textState.textHScale, 0); + } else { + charSpacing += -scaledDim + textState.wordSpacing; + textState.translateTextMatrix(0, -charSpacing); + } + + saveLastChar(" "); + continue; + } + + if (!compareWithLastPosition()) { + continue; + } + + const textChunk = ensureTextContentItem(); + + if (glyph.isZeroWidthDiacritic) { + scaledDim = 0; + } + + if (!font.vertical) { + scaledDim *= textState.textHScale; + textState.translateTextMatrix(scaledDim, 0); + textChunk.width += scaledDim; + } else { + textState.translateTextMatrix(0, scaledDim); + scaledDim = Math.abs(scaledDim); + textChunk.height += scaledDim; + } + + if (scaledDim) { + textChunk.prevTransform = getCurrentTextTransform(); + } + + let glyphUnicode = glyph.unicode; + glyphUnicode = NormalizedUnicodes[glyphUnicode] || glyphUnicode; + glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); + + if (saveLastChar(glyphUnicode)) { + textChunk.str.push(" "); + } + + textChunk.str.push(glyphUnicode); + + if (charSpacing) { + if (!font.vertical) { + textState.translateTextMatrix(charSpacing * textState.textHScale, 0); + } else { + textState.translateTextMatrix(0, -charSpacing); + } + } + } + } + + function appendEOL() { + resetLastChars(); + + if (textContentItem.initialized) { + textContentItem.hasEOL = true; + flushTextContentItem(); + } else { + textContent.items.push({ + str: "", + dir: "ltr", + width: 0, + height: 0, + transform: getCurrentTextTransform(), + fontName: textState.font.loadedName, + hasEOL: true + }); + } + } + + function addFakeSpaces(width, transf, textOrientation) { + if (textOrientation * textContentItem.spaceInFlowMin <= width && width <= textOrientation * textContentItem.spaceInFlowMax) { + if (textContentItem.initialized) { + resetLastChars(); + textContentItem.str.push(" "); + } + + return false; + } + + const fontName = textContentItem.fontName; + let height = 0; + + if (textContentItem.vertical) { + height = width; + width = 0; + } + + flushTextContentItem(); + resetLastChars(); + textContent.items.push({ + str: " ", + dir: "ltr", + width: Math.abs(width), + height: Math.abs(height), + transform: transf || getCurrentTextTransform(), + fontName, + hasEOL: false + }); + return true; + } + + function flushTextContentItem() { + if (!textContentItem.initialized || !textContentItem.str) { + return; + } + + if (!textContentItem.vertical) { + textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; + } else { + textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; + } + + textContent.items.push(runBidiTransform(textContentItem)); + textContentItem.initialized = false; + textContentItem.str.length = 0; + } + + function enqueueChunk(batch = false) { + const length = textContent.items.length; + + if (length === 0) { + return; + } + + if (batch && length < TEXT_CHUNK_BATCH_SIZE) { + return; + } + + sink.enqueue(textContent, length); + textContent.items = []; + textContent.styles = Object.create(null); + } + + const timeSlotManager = new TimeSlotManager(); + return new Promise(function promiseBody(resolve, reject) { + const next = function (promise) { + enqueueChunk(true); + Promise.all([promise, sink.ready]).then(function () { + try { + promiseBody(resolve, reject); + } catch (ex) { + reject(ex); + } + }, reject); + }; + + task.ensureNotTerminated(); + timeSlotManager.reset(); + const operation = {}; + let stop, + args = []; + + while (!(stop = timeSlotManager.check())) { + args.length = 0; + operation.args = args; + + if (!preprocessor.read(operation)) { + break; + } + + textState = stateManager.state; + const fn = operation.fn; + args = operation.args; + + switch (fn | 0) { + case _util.OPS.setFont: + var fontNameArg = args[0].name, + fontSizeArg = args[1]; + + if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { + break; + } + + flushTextContentItem(); + textState.fontName = fontNameArg; + textState.fontSize = fontSizeArg; + next(handleSetFont(fontNameArg, null)); + return; + + case _util.OPS.setTextRise: + textState.textRise = args[0]; + break; + + case _util.OPS.setHScale: + textState.textHScale = args[0] / 100; + break; + + case _util.OPS.setLeading: + textState.leading = args[0]; + break; + + case _util.OPS.moveText: + textState.translateTextLineMatrix(args[0], args[1]); + textState.textMatrix = textState.textLineMatrix.slice(); + break; + + case _util.OPS.setLeadingMoveText: + textState.leading = -args[1]; + textState.translateTextLineMatrix(args[0], args[1]); + textState.textMatrix = textState.textLineMatrix.slice(); + break; + + case _util.OPS.nextLine: + textState.carriageReturn(); + break; + + case _util.OPS.setTextMatrix: + textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); + textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); + updateAdvanceScale(); + break; + + case _util.OPS.setCharSpacing: + textState.charSpacing = args[0]; + break; + + case _util.OPS.setWordSpacing: + textState.wordSpacing = args[0]; + break; + + case _util.OPS.beginText: + textState.textMatrix = _util.IDENTITY_MATRIX.slice(); + textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); + break; + + case _util.OPS.showSpacedText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000; + const elements = args[0]; + + for (let i = 0, ii = elements.length; i < ii - 1; i++) { + const item = elements[i]; + + if (typeof item === "string") { + showSpacedTextBuffer.push(item); + } else if (typeof item === "number" && item !== 0) { + const str = showSpacedTextBuffer.join(""); + showSpacedTextBuffer.length = 0; + buildTextContentItem({ + chars: str, + extraSpacing: item * spaceFactor + }); + } + } + + const item = elements.at(-1); + + if (typeof item === "string") { + showSpacedTextBuffer.push(item); + } + + if (showSpacedTextBuffer.length > 0) { + const str = showSpacedTextBuffer.join(""); + showSpacedTextBuffer.length = 0; + buildTextContentItem({ + chars: str, + extraSpacing: 0 + }); + } + + break; + + case _util.OPS.showText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + buildTextContentItem({ + chars: args[0], + extraSpacing: 0 + }); + break; + + case _util.OPS.nextLineShowText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + textState.carriageReturn(); + buildTextContentItem({ + chars: args[0], + extraSpacing: 0 + }); + break; + + case _util.OPS.nextLineSetSpacingShowText: + if (!stateManager.state.font) { + self.ensureStateFont(stateManager.state); + continue; + } + + textState.wordSpacing = args[0]; + textState.charSpacing = args[1]; + textState.carriageReturn(); + buildTextContentItem({ + chars: args[2], + extraSpacing: 0 + }); + break; + + case _util.OPS.paintXObject: + flushTextContentItem(); + + if (!xobjs) { + xobjs = resources.get("XObject") || _primitives.Dict.empty; + } + + var isValidName = args[0] instanceof _primitives.Name; + var name = args[0].name; + + if (isValidName && emptyXObjectCache.getByName(name)) { + break; + } + + next(new Promise(function (resolveXObject, rejectXObject) { + if (!isValidName) { + throw new _util.FormatError("XObject must be referred to by name."); + } + + let xobj = xobjs.getRaw(name); + + if (xobj instanceof _primitives.Ref) { + if (emptyXObjectCache.getByRef(xobj)) { + resolveXObject(); + return; + } + + const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); + + if (globalImage) { + resolveXObject(); + return; + } + + xobj = xref.fetch(xobj); + } + + if (!(xobj instanceof _base_stream.BaseStream)) { + throw new _util.FormatError("XObject should be a stream"); + } + + const type = xobj.dict.get("Subtype"); + + if (!(type instanceof _primitives.Name)) { + throw new _util.FormatError("XObject should have a Name subtype"); + } + + if (type.name !== "Form") { + emptyXObjectCache.set(name, xobj.dict.objId, true); + resolveXObject(); + return; + } + + const currentState = stateManager.state.clone(); + const xObjStateManager = new StateManager(currentState); + const matrix = xobj.dict.getArray("Matrix"); + + if (Array.isArray(matrix) && matrix.length === 6) { + xObjStateManager.transform(matrix); + } + + enqueueChunk(); + const sinkWrapper = { + enqueueInvoked: false, + + enqueue(chunk, size) { + this.enqueueInvoked = true; + sink.enqueue(chunk, size); + }, + + get desiredSize() { + return sink.desiredSize; + }, + + get ready() { + return sink.ready; + } + + }; + self.getTextContent({ + stream: xobj, + task, + resources: xobj.dict.get("Resources") || resources, + stateManager: xObjStateManager, + combineTextItems, + includeMarkedContent, + sink: sinkWrapper, + seenStyles, + viewBox + }).then(function () { + if (!sinkWrapper.enqueueInvoked) { + emptyXObjectCache.set(name, xobj.dict.objId, true); + } + + resolveXObject(); + }, rejectXObject); + }).catch(function (reason) { + if (reason instanceof _util.AbortException) { + return; + } + + if (self.options.ignoreErrors) { + (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`); + return; + } + + throw reason; + })); + return; + + case _util.OPS.setGState: + isValidName = args[0] instanceof _primitives.Name; + name = args[0].name; + + if (isValidName && emptyGStateCache.getByName(name)) { + break; + } + + next(new Promise(function (resolveGState, rejectGState) { + if (!isValidName) { + throw new _util.FormatError("GState must be referred to by name."); + } + + const extGState = resources.get("ExtGState"); + + if (!(extGState instanceof _primitives.Dict)) { + throw new _util.FormatError("ExtGState should be a dictionary."); + } + + const gState = extGState.get(name); + + if (!(gState instanceof _primitives.Dict)) { + throw new _util.FormatError("GState should be a dictionary."); + } + + const gStateFont = gState.get("Font"); + + if (!gStateFont) { + emptyGStateCache.set(name, gState.objId, true); + resolveGState(); + return; + } + + flushTextContentItem(); + textState.fontName = null; + textState.fontSize = gStateFont[1]; + handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState); + }).catch(function (reason) { + if (reason instanceof _util.AbortException) { + return; + } + + if (self.options.ignoreErrors) { + (0, _util.warn)(`getTextContent - ignoring ExtGState: "${reason}".`); + return; + } + + throw reason; + })); + return; + + case _util.OPS.beginMarkedContent: + flushTextContentItem(); + + if (includeMarkedContent) { + textContent.items.push({ + type: "beginMarkedContent", + tag: args[0] instanceof _primitives.Name ? args[0].name : null + }); + } + + break; + + case _util.OPS.beginMarkedContentProps: + flushTextContentItem(); + + if (includeMarkedContent) { + let mcid = null; + + if (args[1] instanceof _primitives.Dict) { + mcid = args[1].get("MCID"); + } + + textContent.items.push({ + type: "beginMarkedContentProps", + id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mcid${mcid}` : null, + tag: args[0] instanceof _primitives.Name ? args[0].name : null + }); + } + + break; + + case _util.OPS.endMarkedContent: + flushTextContentItem(); + + if (includeMarkedContent) { + textContent.items.push({ + type: "endMarkedContent" + }); + } + + break; + } + + if (textContent.items.length >= sink.desiredSize) { + stop = true; + break; + } + } + + if (stop) { + next(deferred); + return; + } + + flushTextContentItem(); + enqueueChunk(); + resolve(); + }).catch(reason => { + if (reason instanceof _util.AbortException) { + return; + } + + if (this.options.ignoreErrors) { + (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`); + flushTextContentItem(); + enqueueChunk(); + return; + } + + throw reason; + }); + } + + extractDataStructures(dict, baseDict, properties) { + const xref = this.xref; + let cidToGidBytes; + const toUnicodePromise = this.readToUnicode(properties.toUnicode || dict.get("ToUnicode") || baseDict.get("ToUnicode")); + + if (properties.composite) { + const cidSystemInfo = dict.get("CIDSystemInfo"); + + if (cidSystemInfo instanceof _primitives.Dict) { + properties.cidSystemInfo = { + registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")), + ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")), + supplement: cidSystemInfo.get("Supplement") + }; + } + + try { + const cidToGidMap = dict.get("CIDToGIDMap"); + + if (cidToGidMap instanceof _base_stream.BaseStream) { + cidToGidBytes = cidToGidMap.getBytes(); + } + } catch (ex) { + if (!this.options.ignoreErrors) { + throw ex; + } + + (0, _util.warn)(`extractDataStructures - ignoring CIDToGIDMap data: "${ex}".`); + } + } + + const differences = []; + let baseEncodingName = null; + let encoding; + + if (dict.has("Encoding")) { + encoding = dict.get("Encoding"); + + if (encoding instanceof _primitives.Dict) { + baseEncodingName = encoding.get("BaseEncoding"); + baseEncodingName = baseEncodingName instanceof _primitives.Name ? baseEncodingName.name : null; + + if (encoding.has("Differences")) { + const diffEncoding = encoding.get("Differences"); + let index = 0; + + for (let j = 0, jj = diffEncoding.length; j < jj; j++) { + const data = xref.fetchIfRef(diffEncoding[j]); + + if (typeof data === "number") { + index = data; + } else if (data instanceof _primitives.Name) { + differences[index++] = data.name; + } else { + throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`); + } + } + } + } else if (encoding instanceof _primitives.Name) { + baseEncodingName = encoding.name; + } else { + const msg = "Encoding is not a Name nor a Dict"; + + if (!this.options.ignoreErrors) { + throw new _util.FormatError(msg); + } + + (0, _util.warn)(msg); + } + + if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") { + baseEncodingName = null; + } + } + + if (baseEncodingName) { + properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName); + } else { + const isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); + const isNonsymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Nonsymbolic); + encoding = _encodings.StandardEncoding; + + if (properties.type === "TrueType" && !isNonsymbolicFont) { + encoding = _encodings.WinAnsiEncoding; + } + + if (isSymbolicFont) { + encoding = _encodings.MacRomanEncoding; + + if (!properties.file || properties.isInternalFont) { + if (/Symbol/i.test(properties.name)) { + encoding = _encodings.SymbolSetEncoding; + } else if (/Dingbats|Wingdings/i.test(properties.name)) { + encoding = _encodings.ZapfDingbatsEncoding; + } + } + } + + properties.defaultEncoding = encoding; + } + + properties.differences = differences; + properties.baseEncodingName = baseEncodingName; + properties.hasEncoding = !!baseEncodingName || differences.length > 0; + properties.dict = dict; + return toUnicodePromise.then(readToUnicode => { + properties.toUnicode = readToUnicode; + return this.buildToUnicode(properties); + }).then(builtToUnicode => { + properties.toUnicode = builtToUnicode; + + if (cidToGidBytes) { + properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode); + } + + return properties; + }); + } + + _simpleFontToUnicode(properties, forceGlyphs = false) { + (0, _util.assert)(!properties.composite, "Must be a simple font."); + const toUnicode = []; + const encoding = properties.defaultEncoding.slice(); + const baseEncodingName = properties.baseEncodingName; + const differences = properties.differences; + + for (const charcode in differences) { + const glyphName = differences[charcode]; + + if (glyphName === ".notdef") { + continue; + } + + encoding[charcode] = glyphName; + } + + const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); + + for (const charcode in encoding) { + let glyphName = encoding[charcode]; + + if (glyphName === "") { + continue; + } else if (glyphsUnicodeMap[glyphName] === undefined) { + let code = 0; + + switch (glyphName[0]) { + case "G": + if (glyphName.length === 3) { + code = parseInt(glyphName.substring(1), 16); + } + + break; + + case "g": + if (glyphName.length === 5) { + code = parseInt(glyphName.substring(1), 16); + } + + break; + + case "C": + case "c": + if (glyphName.length >= 3 && glyphName.length <= 4) { + const codeStr = glyphName.substring(1); + + if (forceGlyphs) { + code = parseInt(codeStr, 16); + break; + } + + code = +codeStr; + + if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) { + return this._simpleFontToUnicode(properties, true); + } + } + + break; + + default: + const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); + + if (unicode !== -1) { + code = unicode; + } + + } + + if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) { + if (baseEncodingName && code === +charcode) { + const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); + + if (baseEncoding && (glyphName = baseEncoding[charcode])) { + toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); + continue; + } + } + + toUnicode[charcode] = String.fromCodePoint(code); + } + + continue; + } + + toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); + } + + return toUnicode; + } + + async buildToUnicode(properties) { + properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; + + if (properties.hasIncludedToUnicodeMap) { + if (!properties.composite && properties.hasEncoding) { + properties.fallbackToUnicode = this._simpleFontToUnicode(properties); + } + + return properties.toUnicode; + } + + if (!properties.composite) { + return new _to_unicode_map.ToUnicodeMap(this._simpleFontToUnicode(properties)); + } + + if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) { + const { + registry, + ordering + } = properties.cidSystemInfo; + + const ucs2CMapName = _primitives.Name.get(`${registry}-${ordering}-UCS2`); + + const ucs2CMap = await _cmap.CMapFactory.create({ + encoding: ucs2CMapName, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null + }); + const toUnicode = []; + properties.cMap.forEach(function (charcode, cid) { + if (cid > 0xffff) { + throw new _util.FormatError("Max size of CID is 65,535"); + } + + const ucs2 = ucs2CMap.lookup(cid); + + if (ucs2) { + toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); + } + }); + return new _to_unicode_map.ToUnicodeMap(toUnicode); + } + + return new _to_unicode_map.IdentityToUnicodeMap(properties.firstChar, properties.lastChar); + } + + readToUnicode(cmapObj) { + if (!cmapObj) { + return Promise.resolve(null); + } + + if (cmapObj instanceof _primitives.Name) { + return _cmap.CMapFactory.create({ + encoding: cmapObj, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null + }).then(function (cmap) { + if (cmap instanceof _cmap.IdentityCMap) { + return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); + } + + return new _to_unicode_map.ToUnicodeMap(cmap.getMap()); + }); + } else if (cmapObj instanceof _base_stream.BaseStream) { + return _cmap.CMapFactory.create({ + encoding: cmapObj, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null + }).then(function (cmap) { + if (cmap instanceof _cmap.IdentityCMap) { + return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); + } + + const map = new Array(cmap.length); + cmap.forEach(function (charCode, token) { + if (typeof token === "number") { + map[charCode] = String.fromCodePoint(token); + return; + } + + const str = []; + + for (let k = 0; k < token.length; k += 2) { + const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); + + if ((w1 & 0xf800) !== 0xd800) { + str.push(w1); + continue; + } + + k += 2; + const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); + str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); + } + + map[charCode] = String.fromCodePoint(...str); + }); + return new _to_unicode_map.ToUnicodeMap(map); + }, reason => { + if (reason instanceof _util.AbortException) { + return null; + } + + if (this.options.ignoreErrors) { + this.handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode + }); + (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`); + return null; + } + + throw reason; + }); + } + + return Promise.resolve(null); + } + + readCidToGidMap(glyphsData, toUnicode) { + const result = []; + + for (let j = 0, jj = glyphsData.length; j < jj; j++) { + const glyphID = glyphsData[j++] << 8 | glyphsData[j]; + const code = j >> 1; + + if (glyphID === 0 && !toUnicode.has(code)) { + continue; + } + + result[code] = glyphID; + } + + return result; + } + + extractWidths(dict, descriptor, properties) { + const xref = this.xref; + let glyphsWidths = []; + let defaultWidth = 0; + const glyphsVMetrics = []; + let defaultVMetrics; + let i, ii, j, jj, start, code, widths; + + if (properties.composite) { + defaultWidth = dict.has("DW") ? dict.get("DW") : 1000; + widths = dict.get("W"); + + if (widths) { + for (i = 0, ii = widths.length; i < ii; i++) { + start = xref.fetchIfRef(widths[i++]); + code = xref.fetchIfRef(widths[i]); + + if (Array.isArray(code)) { + for (j = 0, jj = code.length; j < jj; j++) { + glyphsWidths[start++] = xref.fetchIfRef(code[j]); + } + } else { + const width = xref.fetchIfRef(widths[++i]); + + for (j = start; j <= code; j++) { + glyphsWidths[j] = width; + } + } + } + } + + if (properties.vertical) { + let vmetrics = dict.getArray("DW2") || [880, -1000]; + defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; + vmetrics = dict.get("W2"); + + if (vmetrics) { + for (i = 0, ii = vmetrics.length; i < ii; i++) { + start = xref.fetchIfRef(vmetrics[i++]); + code = xref.fetchIfRef(vmetrics[i]); + + if (Array.isArray(code)) { + for (j = 0, jj = code.length; j < jj; j++) { + glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; + } + } else { + const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; + + for (j = start; j <= code; j++) { + glyphsVMetrics[j] = vmetric; + } + } + } + } + } + } else { + const firstChar = properties.firstChar; + widths = dict.get("Widths"); + + if (widths) { + j = firstChar; + + for (i = 0, ii = widths.length; i < ii; i++) { + glyphsWidths[j++] = xref.fetchIfRef(widths[i]); + } + + defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0; + } else { + const baseFontName = dict.get("BaseFont"); + + if (baseFontName instanceof _primitives.Name) { + const metrics = this.getBaseFontMetrics(baseFontName.name); + glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); + defaultWidth = metrics.defaultWidth; + } + } + } + + let isMonospace = true; + let firstWidth = defaultWidth; + + for (const glyph in glyphsWidths) { + const glyphWidth = glyphsWidths[glyph]; + + if (!glyphWidth) { + continue; + } + + if (!firstWidth) { + firstWidth = glyphWidth; + continue; + } + + if (firstWidth !== glyphWidth) { + isMonospace = false; + break; + } + } + + if (isMonospace) { + properties.flags |= _fonts_utils.FontFlags.FixedPitch; + } + + properties.defaultWidth = defaultWidth; + properties.widths = glyphsWidths; + properties.defaultVMetrics = defaultVMetrics; + properties.vmetrics = glyphsVMetrics; + } + + isSerifFont(baseFontName) { + const fontNameWoStyle = baseFontName.split("-")[0]; + return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; + } + + getBaseFontMetrics(name) { + let defaultWidth = 0; + let widths = Object.create(null); + let monospace = false; + const stdFontMap = (0, _standard_fonts.getStdFontMap)(); + let lookupName = stdFontMap[name] || name; + const Metrics = (0, _metrics.getMetrics)(); + + if (!(lookupName in Metrics)) { + if (this.isSerifFont(name)) { + lookupName = "Times-Roman"; + } else { + lookupName = "Helvetica"; + } + } + + const glyphWidths = Metrics[lookupName]; + + if (typeof glyphWidths === "number") { + defaultWidth = glyphWidths; + monospace = true; + } else { + widths = glyphWidths(); + } + + return { + defaultWidth, + monospace, + widths + }; + } + + buildCharCodeToWidth(widthsByGlyphName, properties) { + const widths = Object.create(null); + const differences = properties.differences; + const encoding = properties.defaultEncoding; + + for (let charCode = 0; charCode < 256; charCode++) { + if (charCode in differences && widthsByGlyphName[differences[charCode]]) { + widths[charCode] = widthsByGlyphName[differences[charCode]]; + continue; + } + + if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { + widths[charCode] = widthsByGlyphName[encoding[charCode]]; + continue; + } + } + + return widths; + } + + preEvaluateFont(dict) { + const baseDict = dict; + let type = dict.get("Subtype"); + + if (!(type instanceof _primitives.Name)) { + throw new _util.FormatError("invalid font Subtype"); + } + + let composite = false; + let hash, toUnicode; + + if (type.name === "Type0") { + const df = dict.get("DescendantFonts"); + + if (!df) { + throw new _util.FormatError("Descendant fonts are not specified"); + } + + dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; + + if (!(dict instanceof _primitives.Dict)) { + throw new _util.FormatError("Descendant font is not a dictionary."); + } + + type = dict.get("Subtype"); + + if (!(type instanceof _primitives.Name)) { + throw new _util.FormatError("invalid font Subtype"); + } + + composite = true; + } + + const firstChar = dict.get("FirstChar") || 0, + lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff); + const descriptor = dict.get("FontDescriptor"); + + if (descriptor) { + hash = new _murmurhash.MurmurHash3_64(); + const encoding = baseDict.getRaw("Encoding"); + + if (encoding instanceof _primitives.Name) { + hash.update(encoding.name); + } else if (encoding instanceof _primitives.Ref) { + hash.update(encoding.toString()); + } else if (encoding instanceof _primitives.Dict) { + for (const entry of encoding.getRawValues()) { + if (entry instanceof _primitives.Name) { + hash.update(entry.name); + } else if (entry instanceof _primitives.Ref) { + hash.update(entry.toString()); + } else if (Array.isArray(entry)) { + const diffLength = entry.length, + diffBuf = new Array(diffLength); + + for (let j = 0; j < diffLength; j++) { + const diffEntry = entry[j]; + + if (diffEntry instanceof _primitives.Name) { + diffBuf[j] = diffEntry.name; + } else if (typeof diffEntry === "number" || diffEntry instanceof _primitives.Ref) { + diffBuf[j] = diffEntry.toString(); + } + } + + hash.update(diffBuf.join()); + } + } + } + + hash.update(`${firstChar}-${lastChar}`); + toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); + + if (toUnicode instanceof _base_stream.BaseStream) { + const stream = toUnicode.str || toUnicode; + const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); + hash.update(uint8array); + } else if (toUnicode instanceof _primitives.Name) { + hash.update(toUnicode.name); + } + + const widths = dict.get("Widths") || baseDict.get("Widths"); + + if (Array.isArray(widths)) { + const widthsBuf = []; + + for (const entry of widths) { + if (typeof entry === "number" || entry instanceof _primitives.Ref) { + widthsBuf.push(entry.toString()); + } + } + + hash.update(widthsBuf.join()); + } + + if (composite) { + hash.update("compositeFont"); + const compositeWidths = dict.get("W") || baseDict.get("W"); + + if (Array.isArray(compositeWidths)) { + const widthsBuf = []; + + for (const entry of compositeWidths) { + if (typeof entry === "number" || entry instanceof _primitives.Ref) { + widthsBuf.push(entry.toString()); + } else if (Array.isArray(entry)) { + const subWidthsBuf = []; + + for (const element of entry) { + if (typeof element === "number" || element instanceof _primitives.Ref) { + subWidthsBuf.push(element.toString()); + } + } + + widthsBuf.push(`[${subWidthsBuf.join()}]`); + } + } + + hash.update(widthsBuf.join()); + } + + const cidToGidMap = dict.getRaw("CIDToGIDMap") || baseDict.getRaw("CIDToGIDMap"); + + if (cidToGidMap instanceof _primitives.Name) { + hash.update(cidToGidMap.name); + } else if (cidToGidMap instanceof _primitives.Ref) { + hash.update(cidToGidMap.toString()); + } else if (cidToGidMap instanceof _base_stream.BaseStream) { + hash.update(cidToGidMap.peekBytes()); + } + } + } + + return { + descriptor, + dict, + baseDict, + composite, + type: type.name, + firstChar, + lastChar, + toUnicode, + hash: hash ? hash.hexdigest() : "" + }; + } + + async translateFont({ + descriptor, + dict, + baseDict, + composite, + type, + firstChar, + lastChar, + toUnicode, + cssFontInfo + }) { + const isType3Font = type === "Type3"; + let properties; + + if (!descriptor) { + if (isType3Font) { + descriptor = new _primitives.Dict(null); + descriptor.set("FontName", _primitives.Name.get(type)); + descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]); + } else { + let baseFontName = dict.get("BaseFont"); + + if (!(baseFontName instanceof _primitives.Name)) { + throw new _util.FormatError("Base font is not specified"); + } + + baseFontName = baseFontName.name.replace(/[,_]/g, "-"); + const metrics = this.getBaseFontMetrics(baseFontName); + const fontNameWoStyle = baseFontName.split("-")[0]; + const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic); + properties = { + type, + name: baseFontName, + loadedName: baseDict.loadedName, + widths: metrics.widths, + defaultWidth: metrics.defaultWidth, + isSimulatedFlags: true, + flags, + firstChar, + lastChar, + toUnicode, + xHeight: 0, + capHeight: 0, + italicAngle: 0, + isType3Font + }; + const widths = dict.get("Widths"); + const standardFontName = (0, _standard_fonts.getStandardFontName)(baseFontName); + let file = null; + + if (standardFontName) { + properties.isStandardFont = true; + file = await this.fetchStandardFontData(standardFontName); + properties.isInternalFont = !!file; + } + + return this.extractDataStructures(dict, dict, properties).then(newProperties => { + if (widths) { + const glyphWidths = []; + let j = firstChar; + + for (let i = 0, ii = widths.length; i < ii; i++) { + glyphWidths[j++] = this.xref.fetchIfRef(widths[i]); + } + + newProperties.widths = glyphWidths; + } else { + newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties); + } + + return new _fonts.Font(baseFontName, file, newProperties); + }); + } + } + + let fontName = descriptor.get("FontName"); + let baseFont = dict.get("BaseFont"); + + if (typeof fontName === "string") { + fontName = _primitives.Name.get(fontName); + } + + if (typeof baseFont === "string") { + baseFont = _primitives.Name.get(baseFont); + } + + if (!isType3Font) { + const fontNameStr = fontName && fontName.name; + const baseFontStr = baseFont && baseFont.name; + + if (fontNameStr !== baseFontStr) { + (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as the Font's BaseFont "${baseFontStr}".`); + + if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { + fontName = baseFont; + } + } + } + + fontName = fontName || baseFont; + + if (!(fontName instanceof _primitives.Name)) { + throw new _util.FormatError("invalid font name"); + } + + let fontFile, subtype, length1, length2, length3; + + try { + fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); + } catch (ex) { + if (!this.options.ignoreErrors) { + throw ex; + } + + (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`); + fontFile = new _stream.NullStream(); + } + + let isStandardFont = false; + let isInternalFont = false; + let glyphScaleFactors = null; + + if (fontFile) { + if (fontFile.dict) { + const subtypeEntry = fontFile.dict.get("Subtype"); + + if (subtypeEntry instanceof _primitives.Name) { + subtype = subtypeEntry.name; + } + + length1 = fontFile.dict.get("Length1"); + length2 = fontFile.dict.get("Length2"); + length3 = fontFile.dict.get("Length3"); + } + } else if (cssFontInfo) { + const standardFontName = (0, _xfa_fonts.getXfaFontName)(fontName.name); + + if (standardFontName) { + cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`; + cssFontInfo.metrics = standardFontName.metrics || null; + glyphScaleFactors = standardFontName.factors || null; + fontFile = await this.fetchStandardFontData(standardFontName.name); + isInternalFont = !!fontFile; + baseDict = dict = (0, _xfa_fonts.getXfaFontDict)(fontName.name); + composite = true; + } + } else if (!isType3Font) { + const standardFontName = (0, _standard_fonts.getStandardFontName)(fontName.name); + + if (standardFontName) { + isStandardFont = true; + fontFile = await this.fetchStandardFontData(standardFontName); + isInternalFont = !!fontFile; + } + } + + properties = { + type, + name: fontName.name, + subtype, + file: fontFile, + length1, + length2, + length3, + isStandardFont, + isInternalFont, + loadedName: baseDict.loadedName, + composite, + fixedPitch: false, + fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX, + firstChar, + lastChar, + toUnicode, + bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"), + ascent: descriptor.get("Ascent"), + descent: descriptor.get("Descent"), + xHeight: descriptor.get("XHeight") || 0, + capHeight: descriptor.get("CapHeight") || 0, + flags: descriptor.get("Flags"), + italicAngle: descriptor.get("ItalicAngle") || 0, + isType3Font, + cssFontInfo, + scaleFactors: glyphScaleFactors + }; + + if (composite) { + const cidEncoding = baseDict.get("Encoding"); + + if (cidEncoding instanceof _primitives.Name) { + properties.cidEncoding = cidEncoding.name; + } + + const cMap = await _cmap.CMapFactory.create({ + encoding: cidEncoding, + fetchBuiltInCMap: this._fetchBuiltInCMapBound, + useCMap: null + }); + properties.cMap = cMap; + properties.vertical = properties.cMap.vertical; + } + + return this.extractDataStructures(dict, baseDict, properties).then(newProperties => { + this.extractWidths(dict, descriptor, newProperties); + return new _fonts.Font(fontName.name, fontFile, newProperties); + }); + } + + static buildFontPaths(font, glyphs, handler, evaluatorOptions) { + function buildPath(fontChar) { + const glyphName = `${font.loadedName}_path_${fontChar}`; + + try { + if (font.renderer.hasBuiltPath(fontChar)) { + return; + } + + handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]); + } catch (reason) { + if (evaluatorOptions.ignoreErrors) { + handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.errorFontBuildPath + }); + (0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`); + return; + } + + throw reason; + } + } + + for (const glyph of glyphs) { + buildPath(glyph.fontChar); + const accent = glyph.accent; + + if (accent && accent.fontChar) { + buildPath(accent.fontChar); + } + } + } + + static get fallbackFontDict() { + const dict = new _primitives.Dict(); + dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont")); + dict.set("Type", _primitives.Name.get("FallbackType")); + dict.set("Subtype", _primitives.Name.get("FallbackType")); + dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); + return (0, _util.shadow)(this, "fallbackFontDict", dict); + } + +} + +exports.PartialEvaluator = PartialEvaluator; + +class TranslatedFont { + constructor({ + loadedName, + font, + dict, + evaluatorOptions + }) { + this.loadedName = loadedName; + this.font = font; + this.dict = dict; + this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions; + this.type3Loaded = null; + this.type3Dependencies = font.isType3Font ? new Set() : null; + this.sent = false; + } + + send(handler) { + if (this.sent) { + return; + } + + this.sent = true; + handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]); + } + + fallback(handler) { + if (!this.font.data) { + return; + } + + this.font.disableFontFace = true; + PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions); + } + + loadType3Data(evaluator, resources, task) { + if (this.type3Loaded) { + return this.type3Loaded; + } + + if (!this.font.isType3Font) { + throw new Error("Must be a Type3 font."); + } + + const type3Evaluator = evaluator.clone({ + ignoreErrors: false + }); + type3Evaluator.parsingType3Font = true; + const type3FontRefs = new _primitives.RefSet(evaluator.type3FontRefs); + + if (this.dict.objId && !type3FontRefs.has(this.dict.objId)) { + type3FontRefs.put(this.dict.objId); + } + + type3Evaluator.type3FontRefs = type3FontRefs; + const translatedFont = this.font, + type3Dependencies = this.type3Dependencies; + let loadCharProcsPromise = Promise.resolve(); + const charProcs = this.dict.get("CharProcs"); + const fontResources = this.dict.get("Resources") || resources; + const charProcOperatorList = Object.create(null); + + const fontBBox = _util.Util.normalizeRect(translatedFont.bbox || [0, 0, 0, 0]), + width = fontBBox[2] - fontBBox[0], + height = fontBBox[3] - fontBBox[1]; + + const fontBBoxSize = Math.hypot(width, height); + + for (const key of charProcs.getKeys()) { + loadCharProcsPromise = loadCharProcsPromise.then(() => { + const glyphStream = charProcs.get(key); + const operatorList = new _operator_list.OperatorList(); + return type3Evaluator.getOperatorList({ + stream: glyphStream, + task, + resources: fontResources, + operatorList + }).then(() => { + if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) { + this._removeType3ColorOperators(operatorList, fontBBoxSize); + } + + charProcOperatorList[key] = operatorList.getIR(); + + for (const dependency of operatorList.dependencies) { + type3Dependencies.add(dependency); + } + }).catch(function (reason) { + (0, _util.warn)(`Type3 font resource "${key}" is not available.`); + const dummyOperatorList = new _operator_list.OperatorList(); + charProcOperatorList[key] = dummyOperatorList.getIR(); + }); + }); + } + + this.type3Loaded = loadCharProcsPromise.then(() => { + translatedFont.charProcOperatorList = charProcOperatorList; + + if (this._bbox) { + translatedFont.isCharBBox = true; + translatedFont.bbox = this._bbox; + } + }); + return this.type3Loaded; + } + + _removeType3ColorOperators(operatorList, fontBBoxSize = NaN) { + const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)), + width = charBBox[2] - charBBox[0], + height = charBBox[3] - charBBox[1]; + + const charBBoxSize = Math.hypot(width, height); + + if (width === 0 || height === 0) { + operatorList.fnArray.splice(0, 1); + operatorList.argsArray.splice(0, 1); + } else if (fontBBoxSize === 0 || Math.round(charBBoxSize / fontBBoxSize) >= 10) { + if (!this._bbox) { + this._bbox = [Infinity, Infinity, -Infinity, -Infinity]; + } + + this._bbox[0] = Math.min(this._bbox[0], charBBox[0]); + this._bbox[1] = Math.min(this._bbox[1], charBBox[1]); + this._bbox[2] = Math.max(this._bbox[2], charBBox[2]); + this._bbox[3] = Math.max(this._bbox[3], charBBox[3]); + } + + let i = 0, + ii = operatorList.length; + + while (i < ii) { + switch (operatorList.fnArray[i]) { + case _util.OPS.setCharWidthAndBounds: + break; + + case _util.OPS.setStrokeColorSpace: + case _util.OPS.setFillColorSpace: + case _util.OPS.setStrokeColor: + case _util.OPS.setStrokeColorN: + case _util.OPS.setFillColor: + case _util.OPS.setFillColorN: + case _util.OPS.setStrokeGray: + case _util.OPS.setFillGray: + case _util.OPS.setStrokeRGBColor: + case _util.OPS.setFillRGBColor: + case _util.OPS.setStrokeCMYKColor: + case _util.OPS.setFillCMYKColor: + case _util.OPS.shadingFill: + case _util.OPS.setRenderingIntent: + operatorList.fnArray.splice(i, 1); + operatorList.argsArray.splice(i, 1); + ii--; + continue; + + case _util.OPS.setGState: + const [gStateObj] = operatorList.argsArray[i]; + let j = 0, + jj = gStateObj.length; + + while (j < jj) { + const [gStateKey] = gStateObj[j]; + + switch (gStateKey) { + case "TR": + case "TR2": + case "HT": + case "BG": + case "BG2": + case "UCR": + case "UCR2": + gStateObj.splice(j, 1); + jj--; + continue; + } + + j++; + } + + break; + } + + i++; + } + } + +} + +class StateManager { + constructor(initialState = new EvalState()) { + this.state = initialState; + this.stateStack = []; + } + + save() { + const old = this.state; + this.stateStack.push(this.state); + this.state = old.clone(); + } + + restore() { + const prev = this.stateStack.pop(); + + if (prev) { + this.state = prev; + } + } + + transform(args) { + this.state.ctm = _util.Util.transform(this.state.ctm, args); + } + +} + +class TextState { + constructor() { + this.ctm = new Float32Array(_util.IDENTITY_MATRIX); + this.fontName = null; + this.fontSize = 0; + this.font = null; + this.fontMatrix = _util.FONT_IDENTITY_MATRIX; + this.textMatrix = _util.IDENTITY_MATRIX.slice(); + this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); + this.charSpacing = 0; + this.wordSpacing = 0; + this.leading = 0; + this.textHScale = 1; + this.textRise = 0; + } + + setTextMatrix(a, b, c, d, e, f) { + const m = this.textMatrix; + m[0] = a; + m[1] = b; + m[2] = c; + m[3] = d; + m[4] = e; + m[5] = f; + } + + setTextLineMatrix(a, b, c, d, e, f) { + const m = this.textLineMatrix; + m[0] = a; + m[1] = b; + m[2] = c; + m[3] = d; + m[4] = e; + m[5] = f; + } + + translateTextMatrix(x, y) { + const m = this.textMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + } + + translateTextLineMatrix(x, y) { + const m = this.textLineMatrix; + m[4] = m[0] * x + m[2] * y + m[4]; + m[5] = m[1] * x + m[3] * y + m[5]; + } + + carriageReturn() { + this.translateTextLineMatrix(0, -this.leading); + this.textMatrix = this.textLineMatrix.slice(); + } + + clone() { + const clone = Object.create(this); + clone.textMatrix = this.textMatrix.slice(); + clone.textLineMatrix = this.textLineMatrix.slice(); + clone.fontMatrix = this.fontMatrix.slice(); + return clone; + } + +} + +class EvalState { + constructor() { + this.ctm = new Float32Array(_util.IDENTITY_MATRIX); + this.font = null; + this.textRenderingMode = _util.TextRenderingMode.FILL; + this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; + this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; + } + + clone() { + return Object.create(this); + } + +} + +class EvaluatorPreprocessor { + static get opMap() { + const getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) { + t.w = { + id: _util.OPS.setLineWidth, + numArgs: 1, + variableArgs: false + }; + t.J = { + id: _util.OPS.setLineCap, + numArgs: 1, + variableArgs: false + }; + t.j = { + id: _util.OPS.setLineJoin, + numArgs: 1, + variableArgs: false + }; + t.M = { + id: _util.OPS.setMiterLimit, + numArgs: 1, + variableArgs: false + }; + t.d = { + id: _util.OPS.setDash, + numArgs: 2, + variableArgs: false + }; + t.ri = { + id: _util.OPS.setRenderingIntent, + numArgs: 1, + variableArgs: false + }; + t.i = { + id: _util.OPS.setFlatness, + numArgs: 1, + variableArgs: false + }; + t.gs = { + id: _util.OPS.setGState, + numArgs: 1, + variableArgs: false + }; + t.q = { + id: _util.OPS.save, + numArgs: 0, + variableArgs: false + }; + t.Q = { + id: _util.OPS.restore, + numArgs: 0, + variableArgs: false + }; + t.cm = { + id: _util.OPS.transform, + numArgs: 6, + variableArgs: false + }; + t.m = { + id: _util.OPS.moveTo, + numArgs: 2, + variableArgs: false + }; + t.l = { + id: _util.OPS.lineTo, + numArgs: 2, + variableArgs: false + }; + t.c = { + id: _util.OPS.curveTo, + numArgs: 6, + variableArgs: false + }; + t.v = { + id: _util.OPS.curveTo2, + numArgs: 4, + variableArgs: false + }; + t.y = { + id: _util.OPS.curveTo3, + numArgs: 4, + variableArgs: false + }; + t.h = { + id: _util.OPS.closePath, + numArgs: 0, + variableArgs: false + }; + t.re = { + id: _util.OPS.rectangle, + numArgs: 4, + variableArgs: false + }; + t.S = { + id: _util.OPS.stroke, + numArgs: 0, + variableArgs: false + }; + t.s = { + id: _util.OPS.closeStroke, + numArgs: 0, + variableArgs: false + }; + t.f = { + id: _util.OPS.fill, + numArgs: 0, + variableArgs: false + }; + t.F = { + id: _util.OPS.fill, + numArgs: 0, + variableArgs: false + }; + t["f*"] = { + id: _util.OPS.eoFill, + numArgs: 0, + variableArgs: false + }; + t.B = { + id: _util.OPS.fillStroke, + numArgs: 0, + variableArgs: false + }; + t["B*"] = { + id: _util.OPS.eoFillStroke, + numArgs: 0, + variableArgs: false + }; + t.b = { + id: _util.OPS.closeFillStroke, + numArgs: 0, + variableArgs: false + }; + t["b*"] = { + id: _util.OPS.closeEOFillStroke, + numArgs: 0, + variableArgs: false + }; + t.n = { + id: _util.OPS.endPath, + numArgs: 0, + variableArgs: false + }; + t.W = { + id: _util.OPS.clip, + numArgs: 0, + variableArgs: false + }; + t["W*"] = { + id: _util.OPS.eoClip, + numArgs: 0, + variableArgs: false + }; + t.BT = { + id: _util.OPS.beginText, + numArgs: 0, + variableArgs: false + }; + t.ET = { + id: _util.OPS.endText, + numArgs: 0, + variableArgs: false + }; + t.Tc = { + id: _util.OPS.setCharSpacing, + numArgs: 1, + variableArgs: false + }; + t.Tw = { + id: _util.OPS.setWordSpacing, + numArgs: 1, + variableArgs: false + }; + t.Tz = { + id: _util.OPS.setHScale, + numArgs: 1, + variableArgs: false + }; + t.TL = { + id: _util.OPS.setLeading, + numArgs: 1, + variableArgs: false + }; + t.Tf = { + id: _util.OPS.setFont, + numArgs: 2, + variableArgs: false + }; + t.Tr = { + id: _util.OPS.setTextRenderingMode, + numArgs: 1, + variableArgs: false + }; + t.Ts = { + id: _util.OPS.setTextRise, + numArgs: 1, + variableArgs: false + }; + t.Td = { + id: _util.OPS.moveText, + numArgs: 2, + variableArgs: false + }; + t.TD = { + id: _util.OPS.setLeadingMoveText, + numArgs: 2, + variableArgs: false + }; + t.Tm = { + id: _util.OPS.setTextMatrix, + numArgs: 6, + variableArgs: false + }; + t["T*"] = { + id: _util.OPS.nextLine, + numArgs: 0, + variableArgs: false + }; + t.Tj = { + id: _util.OPS.showText, + numArgs: 1, + variableArgs: false + }; + t.TJ = { + id: _util.OPS.showSpacedText, + numArgs: 1, + variableArgs: false + }; + t["'"] = { + id: _util.OPS.nextLineShowText, + numArgs: 1, + variableArgs: false + }; + t['"'] = { + id: _util.OPS.nextLineSetSpacingShowText, + numArgs: 3, + variableArgs: false + }; + t.d0 = { + id: _util.OPS.setCharWidth, + numArgs: 2, + variableArgs: false + }; + t.d1 = { + id: _util.OPS.setCharWidthAndBounds, + numArgs: 6, + variableArgs: false + }; + t.CS = { + id: _util.OPS.setStrokeColorSpace, + numArgs: 1, + variableArgs: false + }; + t.cs = { + id: _util.OPS.setFillColorSpace, + numArgs: 1, + variableArgs: false + }; + t.SC = { + id: _util.OPS.setStrokeColor, + numArgs: 4, + variableArgs: true + }; + t.SCN = { + id: _util.OPS.setStrokeColorN, + numArgs: 33, + variableArgs: true + }; + t.sc = { + id: _util.OPS.setFillColor, + numArgs: 4, + variableArgs: true + }; + t.scn = { + id: _util.OPS.setFillColorN, + numArgs: 33, + variableArgs: true + }; + t.G = { + id: _util.OPS.setStrokeGray, + numArgs: 1, + variableArgs: false + }; + t.g = { + id: _util.OPS.setFillGray, + numArgs: 1, + variableArgs: false + }; + t.RG = { + id: _util.OPS.setStrokeRGBColor, + numArgs: 3, + variableArgs: false + }; + t.rg = { + id: _util.OPS.setFillRGBColor, + numArgs: 3, + variableArgs: false + }; + t.K = { + id: _util.OPS.setStrokeCMYKColor, + numArgs: 4, + variableArgs: false + }; + t.k = { + id: _util.OPS.setFillCMYKColor, + numArgs: 4, + variableArgs: false + }; + t.sh = { + id: _util.OPS.shadingFill, + numArgs: 1, + variableArgs: false + }; + t.BI = { + id: _util.OPS.beginInlineImage, + numArgs: 0, + variableArgs: false + }; + t.ID = { + id: _util.OPS.beginImageData, + numArgs: 0, + variableArgs: false + }; + t.EI = { + id: _util.OPS.endInlineImage, + numArgs: 1, + variableArgs: false + }; + t.Do = { + id: _util.OPS.paintXObject, + numArgs: 1, + variableArgs: false + }; + t.MP = { + id: _util.OPS.markPoint, + numArgs: 1, + variableArgs: false + }; + t.DP = { + id: _util.OPS.markPointProps, + numArgs: 2, + variableArgs: false + }; + t.BMC = { + id: _util.OPS.beginMarkedContent, + numArgs: 1, + variableArgs: false + }; + t.BDC = { + id: _util.OPS.beginMarkedContentProps, + numArgs: 2, + variableArgs: false + }; + t.EMC = { + id: _util.OPS.endMarkedContent, + numArgs: 0, + variableArgs: false + }; + t.BX = { + id: _util.OPS.beginCompat, + numArgs: 0, + variableArgs: false + }; + t.EX = { + id: _util.OPS.endCompat, + numArgs: 0, + variableArgs: false + }; + t.BM = null; + t.BD = null; + t.true = null; + t.fa = null; + t.fal = null; + t.fals = null; + t.false = null; + t.nu = null; + t.nul = null; + t.null = null; + }); + return (0, _util.shadow)(this, "opMap", getOPMap()); + } + + static get MAX_INVALID_PATH_OPS() { + return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 10); + } + + constructor(stream, xref, stateManager = new StateManager()) { + this.parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap), + xref + }); + this.stateManager = stateManager; + this.nonProcessedArgs = []; + this._isPathOp = false; + this._numInvalidPathOPS = 0; + } + + get savedStatesDepth() { + return this.stateManager.stateStack.length; + } + + read(operation) { + let args = operation.args; + + while (true) { + const obj = this.parser.getObj(); + + if (obj instanceof _primitives.Cmd) { + const cmd = obj.cmd; + const opSpec = EvaluatorPreprocessor.opMap[cmd]; + + if (!opSpec) { + (0, _util.warn)(`Unknown command "${cmd}".`); + continue; + } + + const fn = opSpec.id; + const numArgs = opSpec.numArgs; + let argsLength = args !== null ? args.length : 0; + + if (!this._isPathOp) { + this._numInvalidPathOPS = 0; + } + + this._isPathOp = fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath; + + if (!opSpec.variableArgs) { + if (argsLength !== numArgs) { + const nonProcessedArgs = this.nonProcessedArgs; + + while (argsLength > numArgs) { + nonProcessedArgs.push(args.shift()); + argsLength--; + } + + while (argsLength < numArgs && nonProcessedArgs.length !== 0) { + if (args === null) { + args = []; + } + + args.unshift(nonProcessedArgs.pop()); + argsLength++; + } + } + + if (argsLength < numArgs) { + const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`; + + if (this._isPathOp && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { + throw new _util.FormatError(`Invalid ${partialMsg}`); + } + + (0, _util.warn)(`Skipping ${partialMsg}`); + + if (args !== null) { + args.length = 0; + } + + continue; + } + } else if (argsLength > numArgs) { + (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`); + } + + this.preprocessCommand(fn, args); + operation.fn = fn; + operation.args = args; + return true; + } + + if (obj === _primitives.EOF) { + return false; + } + + if (obj !== null) { + if (args === null) { + args = []; + } + + args.push(obj); + + if (args.length > 33) { + throw new _util.FormatError("Too many arguments"); + } + } + } + } + + preprocessCommand(fn, args) { + switch (fn | 0) { + case _util.OPS.save: + this.stateManager.save(); + break; + + case _util.OPS.restore: + this.stateManager.restore(); + break; + + case _util.OPS.transform: + this.stateManager.transform(args); + break; + } + } + +} + +exports.EvaluatorPreprocessor = EvaluatorPreprocessor; + +/***/ }), +/* 16 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _base_stream = __w_pdfjs_require__(7); + +var _parser = __w_pdfjs_require__(17); + +var _core_utils = __w_pdfjs_require__(6); + +var _stream = __w_pdfjs_require__(10); + +const BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; +const MAX_MAP_RANGE = 2 ** 24 - 1; + +class CMap { + constructor(builtInCMap = false) { + this.codespaceRanges = [[], [], [], []]; + this.numCodespaceRanges = 0; + this._map = []; + this.name = ""; + this.vertical = false; + this.useCMap = null; + this.builtInCMap = builtInCMap; + } + + addCodespaceRange(n, low, high) { + this.codespaceRanges[n - 1].push(low, high); + this.numCodespaceRanges++; + } + + mapCidRange(low, high, dstLow) { + if (high - low > MAX_MAP_RANGE) { + throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); + } + + while (low <= high) { + this._map[low++] = dstLow++; + } + } + + mapBfRange(low, high, dstLow) { + if (high - low > MAX_MAP_RANGE) { + throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); + } + + const lastByte = dstLow.length - 1; + + while (low <= high) { + this._map[low++] = dstLow; + const nextCharCode = dstLow.charCodeAt(lastByte) + 1; + + if (nextCharCode > 0xff) { + dstLow = dstLow.substring(0, lastByte - 1) + String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) + "\x00"; + continue; + } + + dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode); + } + } + + mapBfRangeToArray(low, high, array) { + if (high - low > MAX_MAP_RANGE) { + throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); + } + + const ii = array.length; + let i = 0; + + while (low <= high && i < ii) { + this._map[low] = array[i++]; + ++low; + } + } + + mapOne(src, dst) { + this._map[src] = dst; + } + + lookup(code) { + return this._map[code]; + } + + contains(code) { + return this._map[code] !== undefined; + } + + forEach(callback) { + const map = this._map; + const length = map.length; + + if (length <= 0x10000) { + for (let i = 0; i < length; i++) { + if (map[i] !== undefined) { + callback(i, map[i]); + } + } + } else { + for (const i in map) { + callback(i, map[i]); + } + } + } + + charCodeOf(value) { + const map = this._map; + + if (map.length <= 0x10000) { + return map.indexOf(value); + } + + for (const charCode in map) { + if (map[charCode] === value) { + return charCode | 0; + } + } + + return -1; + } + + getMap() { + return this._map; + } + + readCharCode(str, offset, out) { + let c = 0; + const codespaceRanges = this.codespaceRanges; + + for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { + c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; + const codespaceRange = codespaceRanges[n]; + + for (let k = 0, kk = codespaceRange.length; k < kk;) { + const low = codespaceRange[k++]; + const high = codespaceRange[k++]; + + if (c >= low && c <= high) { + out.charcode = c; + out.length = n + 1; + return; + } + } + } + + out.charcode = 0; + out.length = 1; + } + + getCharCodeLength(charCode) { + const codespaceRanges = this.codespaceRanges; + + for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { + const codespaceRange = codespaceRanges[n]; + + for (let k = 0, kk = codespaceRange.length; k < kk;) { + const low = codespaceRange[k++]; + const high = codespaceRange[k++]; + + if (charCode >= low && charCode <= high) { + return n + 1; + } + } + } + + return 1; + } + + get length() { + return this._map.length; + } + + get isIdentityCMap() { + if (!(this.name === "Identity-H" || this.name === "Identity-V")) { + return false; + } + + if (this._map.length !== 0x10000) { + return false; + } + + for (let i = 0; i < 0x10000; i++) { + if (this._map[i] !== i) { + return false; + } + } + + return true; + } + +} + +exports.CMap = CMap; + +class IdentityCMap extends CMap { + constructor(vertical, n) { + super(); + this.vertical = vertical; + this.addCodespaceRange(n, 0, 0xffff); + } + + mapCidRange(low, high, dstLow) { + (0, _util.unreachable)("should not call mapCidRange"); + } + + mapBfRange(low, high, dstLow) { + (0, _util.unreachable)("should not call mapBfRange"); + } + + mapBfRangeToArray(low, high, array) { + (0, _util.unreachable)("should not call mapBfRangeToArray"); + } + + mapOne(src, dst) { + (0, _util.unreachable)("should not call mapCidOne"); + } + + lookup(code) { + return Number.isInteger(code) && code <= 0xffff ? code : undefined; + } + + contains(code) { + return Number.isInteger(code) && code <= 0xffff; + } + + forEach(callback) { + for (let i = 0; i <= 0xffff; i++) { + callback(i, i); + } + } + + charCodeOf(value) { + return Number.isInteger(value) && value <= 0xffff ? value : -1; + } + + getMap() { + const map = new Array(0x10000); + + for (let i = 0; i <= 0xffff; i++) { + map[i] = i; + } + + return map; + } + + get length() { + return 0x10000; + } + + get isIdentityCMap() { + (0, _util.unreachable)("should not access .isIdentityCMap"); + } + +} + +exports.IdentityCMap = IdentityCMap; + +const BinaryCMapReader = function BinaryCMapReaderClosure() { + function hexToInt(a, size) { + let n = 0; + + for (let i = 0; i <= size; i++) { + n = n << 8 | a[i]; + } + + return n >>> 0; + } + + function hexToStr(a, size) { + if (size === 1) { + return String.fromCharCode(a[0], a[1]); + } + + if (size === 3) { + return String.fromCharCode(a[0], a[1], a[2], a[3]); + } + + return String.fromCharCode.apply(null, a.subarray(0, size + 1)); + } + + function addHex(a, b, size) { + let c = 0; + + for (let i = size; i >= 0; i--) { + c += a[i] + b[i]; + a[i] = c & 255; + c >>= 8; + } + } + + function incHex(a, size) { + let c = 1; + + for (let i = size; i >= 0 && c > 0; i--) { + c += a[i]; + a[i] = c & 255; + c >>= 8; + } + } + + const MAX_NUM_SIZE = 16; + const MAX_ENCODED_NUM_SIZE = 19; + + class BinaryCMapStream { + constructor(data) { + this.buffer = data; + this.pos = 0; + this.end = data.length; + this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); + } + + readByte() { + if (this.pos >= this.end) { + return -1; + } + + return this.buffer[this.pos++]; + } + + readNumber() { + let n = 0; + let last; + + do { + const b = this.readByte(); + + if (b < 0) { + throw new _util.FormatError("unexpected EOF in bcmap"); + } + + last = !(b & 0x80); + n = n << 7 | b & 0x7f; + } while (!last); + + return n; + } + + readSigned() { + const n = this.readNumber(); + return n & 1 ? ~(n >>> 1) : n >>> 1; + } + + readHex(num, size) { + num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); + this.pos += size + 1; + } + + readHexNumber(num, size) { + let last; + const stack = this.tmpBuf; + let sp = 0; + + do { + const b = this.readByte(); + + if (b < 0) { + throw new _util.FormatError("unexpected EOF in bcmap"); + } + + last = !(b & 0x80); + stack[sp++] = b & 0x7f; + } while (!last); + + let i = size, + buffer = 0, + bufferSize = 0; + + while (i >= 0) { + while (bufferSize < 8 && stack.length > 0) { + buffer |= stack[--sp] << bufferSize; + bufferSize += 7; + } + + num[i] = buffer & 255; + i--; + buffer >>= 8; + bufferSize -= 8; + } + } + + readHexSigned(num, size) { + this.readHexNumber(num, size); + const sign = num[size] & 1 ? 255 : 0; + let c = 0; + + for (let i = 0; i <= size; i++) { + c = (c & 1) << 8 | num[i]; + num[i] = c >> 1 ^ sign; + } + } + + readString() { + const len = this.readNumber(); + let s = ""; + + for (let i = 0; i < len; i++) { + s += String.fromCharCode(this.readNumber()); + } + + return s; + } + + } + + class BinaryCMapReader { + async process(data, cMap, extend) { + const stream = new BinaryCMapStream(data); + const header = stream.readByte(); + cMap.vertical = !!(header & 1); + let useCMap = null; + const start = new Uint8Array(MAX_NUM_SIZE); + const end = new Uint8Array(MAX_NUM_SIZE); + const char = new Uint8Array(MAX_NUM_SIZE); + const charCode = new Uint8Array(MAX_NUM_SIZE); + const tmp = new Uint8Array(MAX_NUM_SIZE); + let code; + let b; + + while ((b = stream.readByte()) >= 0) { + const type = b >> 5; + + if (type === 7) { + switch (b & 0x1f) { + case 0: + stream.readString(); + break; + + case 1: + useCMap = stream.readString(); + break; + } + + continue; + } + + const sequence = !!(b & 0x10); + const dataSize = b & 15; + + if (dataSize + 1 > MAX_NUM_SIZE) { + throw new Error("BinaryCMapReader.process: Invalid dataSize."); + } + + const ucs2DataSize = 1; + const subitemsCount = stream.readNumber(); + + switch (type) { + case 0: + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); + + for (let i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); + } + + break; + + case 1: + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + stream.readNumber(); + + for (let i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + stream.readNumber(); + } + + break; + + case 2: + stream.readHex(char, dataSize); + code = stream.readNumber(); + cMap.mapOne(hexToInt(char, dataSize), code); + + for (let i = 1; i < subitemsCount; i++) { + incHex(char, dataSize); + + if (!sequence) { + stream.readHexNumber(tmp, dataSize); + addHex(char, tmp, dataSize); + } + + code = stream.readSigned() + (code + 1); + cMap.mapOne(hexToInt(char, dataSize), code); + } + + break; + + case 3: + stream.readHex(start, dataSize); + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); + + for (let i = 1; i < subitemsCount; i++) { + incHex(end, dataSize); + + if (!sequence) { + stream.readHexNumber(start, dataSize); + addHex(start, end, dataSize); + } else { + start.set(end); + } + + stream.readHexNumber(end, dataSize); + addHex(end, start, dataSize); + code = stream.readNumber(); + cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); + } + + break; + + case 4: + stream.readHex(char, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); + + for (let i = 1; i < subitemsCount; i++) { + incHex(char, ucs2DataSize); + + if (!sequence) { + stream.readHexNumber(tmp, ucs2DataSize); + addHex(char, tmp, ucs2DataSize); + } + + incHex(charCode, dataSize); + stream.readHexSigned(tmp, dataSize); + addHex(charCode, tmp, dataSize); + cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); + } + + break; + + case 5: + stream.readHex(start, ucs2DataSize); + stream.readHexNumber(end, ucs2DataSize); + addHex(end, start, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); + + for (let i = 1; i < subitemsCount; i++) { + incHex(end, ucs2DataSize); + + if (!sequence) { + stream.readHexNumber(start, ucs2DataSize); + addHex(start, end, ucs2DataSize); + } else { + start.set(end); + } + + stream.readHexNumber(end, ucs2DataSize); + addHex(end, start, ucs2DataSize); + stream.readHex(charCode, dataSize); + cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); + } + + break; + + default: + throw new Error(`BinaryCMapReader.process - unknown type: ${type}`); + } + } + + if (useCMap) { + return extend(useCMap); + } + + return cMap; + } + + } + + return BinaryCMapReader; +}(); + +const CMapFactory = function CMapFactoryClosure() { + function strToInt(str) { + let a = 0; + + for (let i = 0; i < str.length; i++) { + a = a << 8 | str.charCodeAt(i); + } + + return a >>> 0; + } + + function expectString(obj) { + if (typeof obj !== "string") { + throw new _util.FormatError("Malformed CMap: expected string."); + } + } + + function expectInt(obj) { + if (!Number.isInteger(obj)) { + throw new _util.FormatError("Malformed CMap: expected int."); + } + } + + function parseBfChar(cMap, lexer) { + while (true) { + let obj = lexer.getObj(); + + if (obj === _primitives.EOF) { + break; + } + + if ((0, _primitives.isCmd)(obj, "endbfchar")) { + return; + } + + expectString(obj); + const src = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + const dst = obj; + cMap.mapOne(src, dst); + } + } + + function parseBfRange(cMap, lexer) { + while (true) { + let obj = lexer.getObj(); + + if (obj === _primitives.EOF) { + break; + } + + if ((0, _primitives.isCmd)(obj, "endbfrange")) { + return; + } + + expectString(obj); + const low = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + const high = strToInt(obj); + obj = lexer.getObj(); + + if (Number.isInteger(obj) || typeof obj === "string") { + const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; + cMap.mapBfRange(low, high, dstLow); + } else if ((0, _primitives.isCmd)(obj, "[")) { + obj = lexer.getObj(); + const array = []; + + while (!(0, _primitives.isCmd)(obj, "]") && obj !== _primitives.EOF) { + array.push(obj); + obj = lexer.getObj(); + } + + cMap.mapBfRangeToArray(low, high, array); + } else { + break; + } + } + + throw new _util.FormatError("Invalid bf range."); + } + + function parseCidChar(cMap, lexer) { + while (true) { + let obj = lexer.getObj(); + + if (obj === _primitives.EOF) { + break; + } + + if ((0, _primitives.isCmd)(obj, "endcidchar")) { + return; + } + + expectString(obj); + const src = strToInt(obj); + obj = lexer.getObj(); + expectInt(obj); + const dst = obj; + cMap.mapOne(src, dst); + } + } + + function parseCidRange(cMap, lexer) { + while (true) { + let obj = lexer.getObj(); + + if (obj === _primitives.EOF) { + break; + } + + if ((0, _primitives.isCmd)(obj, "endcidrange")) { + return; + } + + expectString(obj); + const low = strToInt(obj); + obj = lexer.getObj(); + expectString(obj); + const high = strToInt(obj); + obj = lexer.getObj(); + expectInt(obj); + const dstLow = obj; + cMap.mapCidRange(low, high, dstLow); + } + } + + function parseCodespaceRange(cMap, lexer) { + while (true) { + let obj = lexer.getObj(); + + if (obj === _primitives.EOF) { + break; + } + + if ((0, _primitives.isCmd)(obj, "endcodespacerange")) { + return; + } + + if (typeof obj !== "string") { + break; + } + + const low = strToInt(obj); + obj = lexer.getObj(); + + if (typeof obj !== "string") { + break; + } + + const high = strToInt(obj); + cMap.addCodespaceRange(obj.length, low, high); + } + + throw new _util.FormatError("Invalid codespace range."); + } + + function parseWMode(cMap, lexer) { + const obj = lexer.getObj(); + + if (Number.isInteger(obj)) { + cMap.vertical = !!obj; + } + } + + function parseCMapName(cMap, lexer) { + const obj = lexer.getObj(); + + if (obj instanceof _primitives.Name) { + cMap.name = obj.name; + } + } + + async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { + let previous, embeddedUseCMap; + + objLoop: while (true) { + try { + const obj = lexer.getObj(); + + if (obj === _primitives.EOF) { + break; + } else if (obj instanceof _primitives.Name) { + if (obj.name === "WMode") { + parseWMode(cMap, lexer); + } else if (obj.name === "CMapName") { + parseCMapName(cMap, lexer); + } + + previous = obj; + } else if (obj instanceof _primitives.Cmd) { + switch (obj.cmd) { + case "endcmap": + break objLoop; + + case "usecmap": + if (previous instanceof _primitives.Name) { + embeddedUseCMap = previous.name; + } + + break; + + case "begincodespacerange": + parseCodespaceRange(cMap, lexer); + break; + + case "beginbfchar": + parseBfChar(cMap, lexer); + break; + + case "begincidchar": + parseCidChar(cMap, lexer); + break; + + case "beginbfrange": + parseBfRange(cMap, lexer); + break; + + case "begincidrange": + parseCidRange(cMap, lexer); + break; + } + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)("Invalid cMap data: " + ex); + continue; + } + } + + if (!useCMap && embeddedUseCMap) { + useCMap = embeddedUseCMap; + } + + if (useCMap) { + return extendCMap(cMap, fetchBuiltInCMap, useCMap); + } + + return cMap; + } + + async function extendCMap(cMap, fetchBuiltInCMap, useCMap) { + cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap); + + if (cMap.numCodespaceRanges === 0) { + const useCodespaceRanges = cMap.useCMap.codespaceRanges; + + for (let i = 0; i < useCodespaceRanges.length; i++) { + cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); + } + + cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; + } + + cMap.useCMap.forEach(function (key, value) { + if (!cMap.contains(key)) { + cMap.mapOne(key, cMap.useCMap.lookup(key)); + } + }); + return cMap; + } + + async function createBuiltInCMap(name, fetchBuiltInCMap) { + if (name === "Identity-H") { + return new IdentityCMap(false, 2); + } else if (name === "Identity-V") { + return new IdentityCMap(true, 2); + } + + if (!BUILT_IN_CMAPS.includes(name)) { + throw new Error("Unknown CMap name: " + name); + } + + if (!fetchBuiltInCMap) { + throw new Error("Built-in CMap parameters are not provided."); + } + + const { + cMapData, + compressionType + } = await fetchBuiltInCMap(name); + const cMap = new CMap(true); + + if (compressionType === _util.CMapCompressionType.BINARY) { + return new BinaryCMapReader().process(cMapData, cMap, useCMap => { + return extendCMap(cMap, fetchBuiltInCMap, useCMap); + }); + } + + if (compressionType === _util.CMapCompressionType.NONE) { + const lexer = new _parser.Lexer(new _stream.Stream(cMapData)); + return parseCMap(cMap, lexer, fetchBuiltInCMap, null); + } + + throw new Error("TODO: Only BINARY/NONE CMap compression is currently supported."); + } + + return { + async create(params) { + const encoding = params.encoding; + const fetchBuiltInCMap = params.fetchBuiltInCMap; + const useCMap = params.useCMap; + + if (encoding instanceof _primitives.Name) { + return createBuiltInCMap(encoding.name, fetchBuiltInCMap); + } else if (encoding instanceof _base_stream.BaseStream) { + const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, useCMap); + + if (parsedCMap.isIdentityCMap) { + return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); + } + + return parsedCMap; + } + + throw new Error("Encoding required."); + } + + }; +}(); + +exports.CMapFactory = CMapFactory; + +/***/ }), +/* 17 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Parser = exports.Linearization = exports.Lexer = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _core_utils = __w_pdfjs_require__(6); + +var _ascii_85_stream = __w_pdfjs_require__(18); + +var _ascii_hex_stream = __w_pdfjs_require__(20); + +var _ccitt_stream = __w_pdfjs_require__(21); + +var _flate_stream = __w_pdfjs_require__(23); + +var _jbig2_stream = __w_pdfjs_require__(24); + +var _jpeg_stream = __w_pdfjs_require__(27); + +var _jpx_stream = __w_pdfjs_require__(29); + +var _lzw_stream = __w_pdfjs_require__(31); + +var _stream = __w_pdfjs_require__(10); + +var _predictor_stream = __w_pdfjs_require__(32); + +var _run_length_stream = __w_pdfjs_require__(33); + +const MAX_LENGTH_TO_CACHE = 1000; +const MAX_ADLER32_LENGTH = 5552; + +function computeAdler32(bytes) { + const bytesLength = bytes.length; + let a = 1, + b = 0; + + for (let i = 0; i < bytesLength; ++i) { + a += bytes[i] & 0xff; + b += a; + } + + return b % 65521 << 16 | a % 65521; +} + +class Parser { + constructor({ + lexer, + xref, + allowStreams = false, + recoveryMode = false + }) { + this.lexer = lexer; + this.xref = xref; + this.allowStreams = allowStreams; + this.recoveryMode = recoveryMode; + this.imageCache = Object.create(null); + this.refill(); + } + + refill() { + this.buf1 = this.lexer.getObj(); + this.buf2 = this.lexer.getObj(); + } + + shift() { + if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") { + this.buf1 = this.buf2; + this.buf2 = null; + } else { + this.buf1 = this.buf2; + this.buf2 = this.lexer.getObj(); + } + } + + tryShift() { + try { + this.shift(); + return true; + } catch (e) { + if (e instanceof _core_utils.MissingDataException) { + throw e; + } + + return false; + } + } + + getObj(cipherTransform = null) { + const buf1 = this.buf1; + this.shift(); + + if (buf1 instanceof _primitives.Cmd) { + switch (buf1.cmd) { + case "BI": + return this.makeInlineImage(cipherTransform); + + case "[": + const array = []; + + while (!(0, _primitives.isCmd)(this.buf1, "]") && this.buf1 !== _primitives.EOF) { + array.push(this.getObj(cipherTransform)); + } + + if (this.buf1 === _primitives.EOF) { + if (this.recoveryMode) { + return array; + } + + throw new _core_utils.ParserEOFException("End of file inside array."); + } + + this.shift(); + return array; + + case "<<": + const dict = new _primitives.Dict(this.xref); + + while (!(0, _primitives.isCmd)(this.buf1, ">>") && this.buf1 !== _primitives.EOF) { + if (!(this.buf1 instanceof _primitives.Name)) { + (0, _util.info)("Malformed dictionary: key must be a name object"); + this.shift(); + continue; + } + + const key = this.buf1.name; + this.shift(); + + if (this.buf1 === _primitives.EOF) { + break; + } + + dict.set(key, this.getObj(cipherTransform)); + } + + if (this.buf1 === _primitives.EOF) { + if (this.recoveryMode) { + return dict; + } + + throw new _core_utils.ParserEOFException("End of file inside dictionary."); + } + + if ((0, _primitives.isCmd)(this.buf2, "stream")) { + return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; + } + + this.shift(); + return dict; + + default: + return buf1; + } + } + + if (Number.isInteger(buf1)) { + if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) { + const ref = _primitives.Ref.get(buf1, this.buf1); + + this.shift(); + this.shift(); + return ref; + } + + return buf1; + } + + if (typeof buf1 === "string") { + if (cipherTransform) { + return cipherTransform.decryptString(buf1); + } + + return buf1; + } + + return buf1; + } + + findDefaultInlineStreamEnd(stream) { + const E = 0x45, + I = 0x49, + SPACE = 0x20, + LF = 0xa, + CR = 0xd, + NUL = 0x0; + const lexer = this.lexer, + startPos = stream.pos, + n = 10; + let state = 0, + ch, + maybeEIPos; + + while ((ch = stream.getByte()) !== -1) { + if (state === 0) { + state = ch === E ? 1 : 0; + } else if (state === 1) { + state = ch === I ? 2 : 0; + } else { + (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state."); + + if (ch === SPACE || ch === LF || ch === CR) { + maybeEIPos = stream.pos; + const followingBytes = stream.peekBytes(n); + + for (let i = 0, ii = followingBytes.length; i < ii; i++) { + ch = followingBytes[i]; + + if (ch === NUL && followingBytes[i + 1] !== NUL) { + continue; + } + + if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) { + state = 0; + break; + } + } + + if (state !== 2) { + continue; + } + + if (lexer.knownCommands) { + const nextObj = lexer.peekObj(); + + if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) { + state = 0; + } + } else { + (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined."); + } + + if (state === 2) { + break; + } + } else { + state = 0; + } + } + } + + if (ch === -1) { + (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker"); + + if (maybeEIPos) { + (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); + stream.skip(-(stream.pos - maybeEIPos)); + } + } + + let endOffset = 4; + stream.skip(-endOffset); + ch = stream.peekByte(); + stream.skip(endOffset); + + if (!(0, _core_utils.isWhiteSpace)(ch)) { + endOffset--; + } + + return stream.pos - endOffset - startPos; + } + + findDCTDecodeInlineStreamEnd(stream) { + const startPos = stream.pos; + let foundEOI = false, + b, + markerLength; + + while ((b = stream.getByte()) !== -1) { + if (b !== 0xff) { + continue; + } + + switch (stream.getByte()) { + case 0x00: + break; + + case 0xff: + stream.skip(-1); + break; + + case 0xd9: + foundEOI = true; + break; + + case 0xc0: + case 0xc1: + case 0xc2: + case 0xc3: + case 0xc5: + case 0xc6: + case 0xc7: + case 0xc9: + case 0xca: + case 0xcb: + case 0xcd: + case 0xce: + case 0xcf: + case 0xc4: + case 0xcc: + case 0xda: + case 0xdb: + case 0xdc: + case 0xdd: + case 0xde: + case 0xdf: + case 0xe0: + case 0xe1: + case 0xe2: + case 0xe3: + case 0xe4: + case 0xe5: + case 0xe6: + case 0xe7: + case 0xe8: + case 0xe9: + case 0xea: + case 0xeb: + case 0xec: + case 0xed: + case 0xee: + case 0xef: + case 0xfe: + markerLength = stream.getUint16(); + + if (markerLength > 2) { + stream.skip(markerLength - 2); + } else { + stream.skip(-2); + } + + break; + } + + if (foundEOI) { + break; + } + } + + const length = stream.pos - startPos; + + if (b === -1) { + (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead."); + stream.skip(-length); + return this.findDefaultInlineStreamEnd(stream); + } + + this.inlineStreamSkipEI(stream); + return length; + } + + findASCII85DecodeInlineStreamEnd(stream) { + const TILDE = 0x7e, + GT = 0x3e; + const startPos = stream.pos; + let ch; + + while ((ch = stream.getByte()) !== -1) { + if (ch === TILDE) { + const tildePos = stream.pos; + ch = stream.peekByte(); + + while ((0, _core_utils.isWhiteSpace)(ch)) { + stream.skip(); + ch = stream.peekByte(); + } + + if (ch === GT) { + stream.skip(); + break; + } + + if (stream.pos > tildePos) { + const maybeEI = stream.peekBytes(2); + + if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) { + break; + } + } + } + } + + const length = stream.pos - startPos; + + if (ch === -1) { + (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead."); + stream.skip(-length); + return this.findDefaultInlineStreamEnd(stream); + } + + this.inlineStreamSkipEI(stream); + return length; + } + + findASCIIHexDecodeInlineStreamEnd(stream) { + const GT = 0x3e; + const startPos = stream.pos; + let ch; + + while ((ch = stream.getByte()) !== -1) { + if (ch === GT) { + break; + } + } + + const length = stream.pos - startPos; + + if (ch === -1) { + (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead."); + stream.skip(-length); + return this.findDefaultInlineStreamEnd(stream); + } + + this.inlineStreamSkipEI(stream); + return length; + } + + inlineStreamSkipEI(stream) { + const E = 0x45, + I = 0x49; + let state = 0, + ch; + + while ((ch = stream.getByte()) !== -1) { + if (state === 0) { + state = ch === E ? 1 : 0; + } else if (state === 1) { + state = ch === I ? 2 : 0; + } else if (state === 2) { + break; + } + } + } + + makeInlineImage(cipherTransform) { + const lexer = this.lexer; + const stream = lexer.stream; + const dict = new _primitives.Dict(this.xref); + let dictLength; + + while (!(0, _primitives.isCmd)(this.buf1, "ID") && this.buf1 !== _primitives.EOF) { + if (!(this.buf1 instanceof _primitives.Name)) { + throw new _util.FormatError("Dictionary key must be a name object"); + } + + const key = this.buf1.name; + this.shift(); + + if (this.buf1 === _primitives.EOF) { + break; + } + + dict.set(key, this.getObj(cipherTransform)); + } + + if (lexer.beginInlineImagePos !== -1) { + dictLength = stream.pos - lexer.beginInlineImagePos; + } + + const filter = dict.get("F", "Filter"); + let filterName; + + if (filter instanceof _primitives.Name) { + filterName = filter.name; + } else if (Array.isArray(filter)) { + const filterZero = this.xref.fetchIfRef(filter[0]); + + if (filterZero instanceof _primitives.Name) { + filterName = filterZero.name; + } + } + + const startPos = stream.pos; + let length; + + switch (filterName) { + case "DCT": + case "DCTDecode": + length = this.findDCTDecodeInlineStreamEnd(stream); + break; + + case "A85": + case "ASCII85Decode": + length = this.findASCII85DecodeInlineStreamEnd(stream); + break; + + case "AHx": + case "ASCIIHexDecode": + length = this.findASCIIHexDecodeInlineStreamEnd(stream); + break; + + default: + length = this.findDefaultInlineStreamEnd(stream); + } + + let imageStream = stream.makeSubStream(startPos, length, dict); + let cacheKey; + + if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { + const imageBytes = imageStream.getBytes(); + imageStream.reset(); + const initialStreamPos = stream.pos; + stream.pos = lexer.beginInlineImagePos; + const dictBytes = stream.getBytes(dictLength); + stream.pos = initialStreamPos; + cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes); + const cacheEntry = this.imageCache[cacheKey]; + + if (cacheEntry !== undefined) { + this.buf2 = _primitives.Cmd.get("EI"); + this.shift(); + cacheEntry.reset(); + return cacheEntry; + } + } + + if (cipherTransform) { + imageStream = cipherTransform.createStream(imageStream, length); + } + + imageStream = this.filter(imageStream, dict, length); + imageStream.dict = dict; + + if (cacheKey !== undefined) { + imageStream.cacheKey = `inline_${length}_${cacheKey}`; + this.imageCache[cacheKey] = imageStream; + } + + this.buf2 = _primitives.Cmd.get("EI"); + this.shift(); + return imageStream; + } + + _findStreamLength(startPos, signature) { + const { + stream + } = this.lexer; + stream.pos = startPos; + const SCAN_BLOCK_LENGTH = 2048; + const signatureLength = signature.length; + + while (stream.pos < stream.end) { + const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); + const scanLength = scanBytes.length - signatureLength; + + if (scanLength <= 0) { + break; + } + + let pos = 0; + + while (pos < scanLength) { + let j = 0; + + while (j < signatureLength && scanBytes[pos + j] === signature[j]) { + j++; + } + + if (j >= signatureLength) { + stream.pos += pos; + return stream.pos - startPos; + } + + pos++; + } + + stream.pos += scanLength; + } + + return -1; + } + + makeStream(dict, cipherTransform) { + const lexer = this.lexer; + let stream = lexer.stream; + lexer.skipToNextLine(); + const startPos = stream.pos - 1; + let length = dict.get("Length"); + + if (!Number.isInteger(length)) { + (0, _util.info)(`Bad length "${length && length.toString()}" in stream.`); + length = 0; + } + + stream.pos = startPos + length; + lexer.nextChar(); + + if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) { + this.shift(); + } else { + const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]); + + let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); + + if (actualLength < 0) { + const MAX_TRUNCATION = 1; + + for (let i = 1; i <= MAX_TRUNCATION; i++) { + const end = ENDSTREAM_SIGNATURE.length - i; + const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); + + const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); + + if (maybeLength >= 0) { + const lastByte = stream.peekBytes(end + 1)[end]; + + if (!(0, _core_utils.isWhiteSpace)(lastByte)) { + break; + } + + (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command."); + actualLength = maybeLength; + break; + } + } + + if (actualLength < 0) { + throw new _util.FormatError("Missing endstream command."); + } + } + + length = actualLength; + lexer.nextChar(); + this.shift(); + this.shift(); + } + + this.shift(); + stream = stream.makeSubStream(startPos, length, dict); + + if (cipherTransform) { + stream = cipherTransform.createStream(stream, length); + } + + stream = this.filter(stream, dict, length); + stream.dict = dict; + return stream; + } + + filter(stream, dict, length) { + let filter = dict.get("F", "Filter"); + let params = dict.get("DP", "DecodeParms"); + + if (filter instanceof _primitives.Name) { + if (Array.isArray(params)) { + (0, _util.warn)("/DecodeParms should not be an Array, when /Filter is a Name."); + } + + return this.makeFilter(stream, filter.name, length, params); + } + + let maybeLength = length; + + if (Array.isArray(filter)) { + const filterArray = filter; + const paramsArray = params; + + for (let i = 0, ii = filterArray.length; i < ii; ++i) { + filter = this.xref.fetchIfRef(filterArray[i]); + + if (!(filter instanceof _primitives.Name)) { + throw new _util.FormatError(`Bad filter name "${filter}"`); + } + + params = null; + + if (Array.isArray(paramsArray) && i in paramsArray) { + params = this.xref.fetchIfRef(paramsArray[i]); + } + + stream = this.makeFilter(stream, filter.name, maybeLength, params); + maybeLength = null; + } + } + + return stream; + } + + makeFilter(stream, name, maybeLength, params) { + if (maybeLength === 0) { + (0, _util.warn)(`Empty "${name}" stream.`); + return new _stream.NullStream(); + } + + const xrefStats = this.xref.stats; + + try { + switch (name) { + case "Fl": + case "FlateDecode": + xrefStats.addStreamType(_util.StreamType.FLATE); + + if (params) { + return new _predictor_stream.PredictorStream(new _flate_stream.FlateStream(stream, maybeLength), maybeLength, params); + } + + return new _flate_stream.FlateStream(stream, maybeLength); + + case "LZW": + case "LZWDecode": + xrefStats.addStreamType(_util.StreamType.LZW); + let earlyChange = 1; + + if (params) { + if (params.has("EarlyChange")) { + earlyChange = params.get("EarlyChange"); + } + + return new _predictor_stream.PredictorStream(new _lzw_stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); + } + + return new _lzw_stream.LZWStream(stream, maybeLength, earlyChange); + + case "DCT": + case "DCTDecode": + xrefStats.addStreamType(_util.StreamType.DCT); + return new _jpeg_stream.JpegStream(stream, maybeLength, params); + + case "JPX": + case "JPXDecode": + xrefStats.addStreamType(_util.StreamType.JPX); + return new _jpx_stream.JpxStream(stream, maybeLength, params); + + case "A85": + case "ASCII85Decode": + xrefStats.addStreamType(_util.StreamType.A85); + return new _ascii_85_stream.Ascii85Stream(stream, maybeLength); + + case "AHx": + case "ASCIIHexDecode": + xrefStats.addStreamType(_util.StreamType.AHX); + return new _ascii_hex_stream.AsciiHexStream(stream, maybeLength); + + case "CCF": + case "CCITTFaxDecode": + xrefStats.addStreamType(_util.StreamType.CCF); + return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); + + case "RL": + case "RunLengthDecode": + xrefStats.addStreamType(_util.StreamType.RLX); + return new _run_length_stream.RunLengthStream(stream, maybeLength); + + case "JBIG2Decode": + xrefStats.addStreamType(_util.StreamType.JBIG); + return new _jbig2_stream.Jbig2Stream(stream, maybeLength, params); + } + + (0, _util.warn)(`Filter "${name}" is not supported.`); + return stream; + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`Invalid stream: "${ex}"`); + return new _stream.NullStream(); + } + } + +} + +exports.Parser = Parser; +const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + +function toHexDigit(ch) { + if (ch >= 0x30 && ch <= 0x39) { + return ch & 0x0f; + } + + if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { + return (ch & 0x0f) + 9; + } + + return -1; +} + +class Lexer { + constructor(stream, knownCommands = null) { + this.stream = stream; + this.nextChar(); + this.strBuf = []; + this.knownCommands = knownCommands; + this._hexStringNumWarn = 0; + this.beginInlineImagePos = -1; + } + + nextChar() { + return this.currentChar = this.stream.getByte(); + } + + peekChar() { + return this.stream.peekByte(); + } + + getNumber() { + let ch = this.currentChar; + let eNotation = false; + let divideBy = 0; + let sign = 0; + + if (ch === 0x2d) { + sign = -1; + ch = this.nextChar(); + + if (ch === 0x2d) { + ch = this.nextChar(); + } + } else if (ch === 0x2b) { + sign = 1; + ch = this.nextChar(); + } + + if (ch === 0x0a || ch === 0x0d) { + do { + ch = this.nextChar(); + } while (ch === 0x0a || ch === 0x0d); + } + + if (ch === 0x2e) { + divideBy = 10; + ch = this.nextChar(); + } + + if (ch < 0x30 || ch > 0x39) { + if ((0, _core_utils.isWhiteSpace)(ch) || ch === -1) { + if (divideBy === 10 && sign === 0) { + (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero."); + return 0; + } + + if (divideBy === 0 && sign === -1) { + (0, _util.warn)("Lexer.getNumber - treating a single minus sign as zero."); + return 0; + } + } + + throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`); + } + + sign = sign || 1; + let baseValue = ch - 0x30; + let powerValue = 0; + let powerValueSign = 1; + + while ((ch = this.nextChar()) >= 0) { + if (ch >= 0x30 && ch <= 0x39) { + const currentDigit = ch - 0x30; + + if (eNotation) { + powerValue = powerValue * 10 + currentDigit; + } else { + if (divideBy !== 0) { + divideBy *= 10; + } + + baseValue = baseValue * 10 + currentDigit; + } + } else if (ch === 0x2e) { + if (divideBy === 0) { + divideBy = 1; + } else { + break; + } + } else if (ch === 0x2d) { + (0, _util.warn)("Badly formatted number: minus sign in the middle"); + } else if (ch === 0x45 || ch === 0x65) { + ch = this.peekChar(); + + if (ch === 0x2b || ch === 0x2d) { + powerValueSign = ch === 0x2d ? -1 : 1; + this.nextChar(); + } else if (ch < 0x30 || ch > 0x39) { + break; + } + + eNotation = true; + } else { + break; + } + } + + if (divideBy !== 0) { + baseValue /= divideBy; + } + + if (eNotation) { + baseValue *= 10 ** (powerValueSign * powerValue); + } + + return sign * baseValue; + } + + getString() { + let numParen = 1; + let done = false; + const strBuf = this.strBuf; + strBuf.length = 0; + let ch = this.nextChar(); + + while (true) { + let charBuffered = false; + + switch (ch | 0) { + case -1: + (0, _util.warn)("Unterminated string"); + done = true; + break; + + case 0x28: + ++numParen; + strBuf.push("("); + break; + + case 0x29: + if (--numParen === 0) { + this.nextChar(); + done = true; + } else { + strBuf.push(")"); + } + + break; + + case 0x5c: + ch = this.nextChar(); + + switch (ch) { + case -1: + (0, _util.warn)("Unterminated string"); + done = true; + break; + + case 0x6e: + strBuf.push("\n"); + break; + + case 0x72: + strBuf.push("\r"); + break; + + case 0x74: + strBuf.push("\t"); + break; + + case 0x62: + strBuf.push("\b"); + break; + + case 0x66: + strBuf.push("\f"); + break; + + case 0x5c: + case 0x28: + case 0x29: + strBuf.push(String.fromCharCode(ch)); + break; + + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + let x = ch & 0x0f; + ch = this.nextChar(); + charBuffered = true; + + if (ch >= 0x30 && ch <= 0x37) { + x = (x << 3) + (ch & 0x0f); + ch = this.nextChar(); + + if (ch >= 0x30 && ch <= 0x37) { + charBuffered = false; + x = (x << 3) + (ch & 0x0f); + } + } + + strBuf.push(String.fromCharCode(x)); + break; + + case 0x0d: + if (this.peekChar() === 0x0a) { + this.nextChar(); + } + + break; + + case 0x0a: + break; + + default: + strBuf.push(String.fromCharCode(ch)); + break; + } + + break; + + default: + strBuf.push(String.fromCharCode(ch)); + break; + } + + if (done) { + break; + } + + if (!charBuffered) { + ch = this.nextChar(); + } + } + + return strBuf.join(""); + } + + getName() { + let ch, previousCh; + const strBuf = this.strBuf; + strBuf.length = 0; + + while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { + if (ch === 0x23) { + ch = this.nextChar(); + + if (specialChars[ch]) { + (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number."); + strBuf.push("#"); + break; + } + + const x = toHexDigit(ch); + + if (x !== -1) { + previousCh = ch; + ch = this.nextChar(); + const x2 = toHexDigit(ch); + + if (x2 === -1) { + (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number."); + strBuf.push("#", String.fromCharCode(previousCh)); + + if (specialChars[ch]) { + break; + } + + strBuf.push(String.fromCharCode(ch)); + continue; + } + + strBuf.push(String.fromCharCode(x << 4 | x2)); + } else { + strBuf.push("#", String.fromCharCode(ch)); + } + } else { + strBuf.push(String.fromCharCode(ch)); + } + } + + if (strBuf.length > 127) { + (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`); + } + + return _primitives.Name.get(strBuf.join("")); + } + + _hexStringWarn(ch) { + const MAX_HEX_STRING_NUM_WARN = 5; + + if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) { + (0, _util.warn)("getHexString - ignoring additional invalid characters."); + return; + } + + if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) { + return; + } + + (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`); + } + + getHexString() { + const strBuf = this.strBuf; + strBuf.length = 0; + let ch = this.currentChar; + let isFirstHex = true; + let firstDigit, secondDigit; + this._hexStringNumWarn = 0; + + while (true) { + if (ch < 0) { + (0, _util.warn)("Unterminated hex string"); + break; + } else if (ch === 0x3e) { + this.nextChar(); + break; + } else if (specialChars[ch] === 1) { + ch = this.nextChar(); + continue; + } else { + if (isFirstHex) { + firstDigit = toHexDigit(ch); + + if (firstDigit === -1) { + this._hexStringWarn(ch); + + ch = this.nextChar(); + continue; + } + } else { + secondDigit = toHexDigit(ch); + + if (secondDigit === -1) { + this._hexStringWarn(ch); + + ch = this.nextChar(); + continue; + } + + strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); + } + + isFirstHex = !isFirstHex; + ch = this.nextChar(); + } + } + + return strBuf.join(""); + } + + getObj() { + let comment = false; + let ch = this.currentChar; + + while (true) { + if (ch < 0) { + return _primitives.EOF; + } + + if (comment) { + if (ch === 0x0a || ch === 0x0d) { + comment = false; + } + } else if (ch === 0x25) { + comment = true; + } else if (specialChars[ch] !== 1) { + break; + } + + ch = this.nextChar(); + } + + switch (ch | 0) { + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x2b: + case 0x2d: + case 0x2e: + return this.getNumber(); + + case 0x28: + return this.getString(); + + case 0x2f: + return this.getName(); + + case 0x5b: + this.nextChar(); + return _primitives.Cmd.get("["); + + case 0x5d: + this.nextChar(); + return _primitives.Cmd.get("]"); + + case 0x3c: + ch = this.nextChar(); + + if (ch === 0x3c) { + this.nextChar(); + return _primitives.Cmd.get("<<"); + } + + return this.getHexString(); + + case 0x3e: + ch = this.nextChar(); + + if (ch === 0x3e) { + this.nextChar(); + return _primitives.Cmd.get(">>"); + } + + return _primitives.Cmd.get(">"); + + case 0x7b: + this.nextChar(); + return _primitives.Cmd.get("{"); + + case 0x7d: + this.nextChar(); + return _primitives.Cmd.get("}"); + + case 0x29: + this.nextChar(); + throw new _util.FormatError(`Illegal character: ${ch}`); + } + + let str = String.fromCharCode(ch); + + if (ch < 0x20 || ch > 0x7f) { + const nextCh = this.peekChar(); + + if (nextCh >= 0x20 && nextCh <= 0x7f) { + this.nextChar(); + return _primitives.Cmd.get(str); + } + } + + const knownCommands = this.knownCommands; + let knownCommandFound = knownCommands && knownCommands[str] !== undefined; + + while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { + const possibleCommand = str + String.fromCharCode(ch); + + if (knownCommandFound && knownCommands[possibleCommand] === undefined) { + break; + } + + if (str.length === 128) { + throw new _util.FormatError(`Command token too long: ${str.length}`); + } + + str = possibleCommand; + knownCommandFound = knownCommands && knownCommands[str] !== undefined; + } + + if (str === "true") { + return true; + } + + if (str === "false") { + return false; + } + + if (str === "null") { + return null; + } + + if (str === "BI") { + this.beginInlineImagePos = this.stream.pos; + } + + return _primitives.Cmd.get(str); + } + + peekObj() { + const streamPos = this.stream.pos, + currentChar = this.currentChar, + beginInlineImagePos = this.beginInlineImagePos; + let nextObj; + + try { + nextObj = this.getObj(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`peekObj: ${ex}`); + } + + this.stream.pos = streamPos; + this.currentChar = currentChar; + this.beginInlineImagePos = beginInlineImagePos; + return nextObj; + } + + skipToNextLine() { + let ch = this.currentChar; + + while (ch >= 0) { + if (ch === 0x0d) { + ch = this.nextChar(); + + if (ch === 0x0a) { + this.nextChar(); + } + + break; + } else if (ch === 0x0a) { + this.nextChar(); + break; + } + + ch = this.nextChar(); + } + } + +} + +exports.Lexer = Lexer; + +class Linearization { + static create(stream) { + function getInt(linDict, name, allowZeroValue = false) { + const obj = linDict.get(name); + + if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { + return obj; + } + + throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid."); + } + + function getHints(linDict) { + const hints = linDict.get("H"); + let hintsLength; + + if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { + for (let index = 0; index < hintsLength; index++) { + const hint = hints[index]; + + if (!(Number.isInteger(hint) && hint > 0)) { + throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`); + } + } + + return hints; + } + + throw new Error("Hint array in the linearization dictionary is invalid."); + } + + const parser = new Parser({ + lexer: new Lexer(stream), + xref: null + }); + const obj1 = parser.getObj(); + const obj2 = parser.getObj(); + const obj3 = parser.getObj(); + const linDict = parser.getObj(); + let obj, length; + + if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && linDict instanceof _primitives.Dict && typeof (obj = linDict.get("Linearized")) === "number" && obj > 0)) { + return null; + } else if ((length = getInt(linDict, "L")) !== stream.length) { + throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length."); + } + + return { + length, + hints: getHints(linDict), + objectNumberFirst: getInt(linDict, "O"), + endFirst: getInt(linDict, "E"), + numPages: getInt(linDict, "N"), + mainXRefEntriesOffset: getInt(linDict, "T"), + pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0 + }; + } + +} + +exports.Linearization = Linearization; + +/***/ }), +/* 18 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Ascii85Stream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +var _core_utils = __w_pdfjs_require__(6); + +class Ascii85Stream extends _decode_stream.DecodeStream { + constructor(str, maybeLength) { + if (maybeLength) { + maybeLength *= 0.8; + } + + super(maybeLength); + this.str = str; + this.dict = str.dict; + this.input = new Uint8Array(5); + } + + readBlock() { + const TILDA_CHAR = 0x7e; + const Z_LOWER_CHAR = 0x7a; + const EOF = -1; + const str = this.str; + let c = str.getByte(); + + while ((0, _core_utils.isWhiteSpace)(c)) { + c = str.getByte(); + } + + if (c === EOF || c === TILDA_CHAR) { + this.eof = true; + return; + } + + const bufferLength = this.bufferLength; + let buffer, i; + + if (c === Z_LOWER_CHAR) { + buffer = this.ensureBuffer(bufferLength + 4); + + for (i = 0; i < 4; ++i) { + buffer[bufferLength + i] = 0; + } + + this.bufferLength += 4; + } else { + const input = this.input; + input[0] = c; + + for (i = 1; i < 5; ++i) { + c = str.getByte(); + + while ((0, _core_utils.isWhiteSpace)(c)) { + c = str.getByte(); + } + + input[i] = c; + + if (c === EOF || c === TILDA_CHAR) { + break; + } + } + + buffer = this.ensureBuffer(bufferLength + i - 1); + this.bufferLength += i - 1; + + if (i < 5) { + for (; i < 5; ++i) { + input[i] = 0x21 + 84; + } + + this.eof = true; + } + + let t = 0; + + for (i = 0; i < 5; ++i) { + t = t * 85 + (input[i] - 0x21); + } + + for (i = 3; i >= 0; --i) { + buffer[bufferLength + i] = t & 0xff; + t >>= 8; + } + } + } + +} + +exports.Ascii85Stream = Ascii85Stream; + +/***/ }), +/* 19 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StreamsSequenceStream = exports.DecodeStream = void 0; + +var _base_stream = __w_pdfjs_require__(7); + +var _stream = __w_pdfjs_require__(10); + +const emptyBuffer = new Uint8Array(0); + +class DecodeStream extends _base_stream.BaseStream { + constructor(maybeMinBufferLength) { + super(); + this._rawMinBufferLength = maybeMinBufferLength || 0; + this.pos = 0; + this.bufferLength = 0; + this.eof = false; + this.buffer = emptyBuffer; + this.minBufferLength = 512; + + if (maybeMinBufferLength) { + while (this.minBufferLength < maybeMinBufferLength) { + this.minBufferLength *= 2; + } + } + } + + get isEmpty() { + while (!this.eof && this.bufferLength === 0) { + this.readBlock(); + } + + return this.bufferLength === 0; + } + + ensureBuffer(requested) { + const buffer = this.buffer; + + if (requested <= buffer.byteLength) { + return buffer; + } + + let size = this.minBufferLength; + + while (size < requested) { + size *= 2; + } + + const buffer2 = new Uint8Array(size); + buffer2.set(buffer); + return this.buffer = buffer2; + } + + getByte() { + const pos = this.pos; + + while (this.bufferLength <= pos) { + if (this.eof) { + return -1; + } + + this.readBlock(); + } + + return this.buffer[this.pos++]; + } + + getBytes(length) { + const pos = this.pos; + let end; + + if (length) { + this.ensureBuffer(pos + length); + end = pos + length; + + while (!this.eof && this.bufferLength < end) { + this.readBlock(); + } + + const bufEnd = this.bufferLength; + + if (end > bufEnd) { + end = bufEnd; + } + } else { + while (!this.eof) { + this.readBlock(); + } + + end = this.bufferLength; + } + + this.pos = end; + return this.buffer.subarray(pos, end); + } + + reset() { + this.pos = 0; + } + + makeSubStream(start, length, dict = null) { + if (length === undefined) { + while (!this.eof) { + this.readBlock(); + } + } else { + const end = start + length; + + while (this.bufferLength <= end && !this.eof) { + this.readBlock(); + } + } + + return new _stream.Stream(this.buffer, start, length, dict); + } + + getBaseStreams() { + return this.str ? this.str.getBaseStreams() : null; + } + +} + +exports.DecodeStream = DecodeStream; + +class StreamsSequenceStream extends DecodeStream { + constructor(streams, onError = null) { + let maybeLength = 0; + + for (const stream of streams) { + maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length; + } + + super(maybeLength); + this.streams = streams; + this._onError = onError; + } + + readBlock() { + const streams = this.streams; + + if (streams.length === 0) { + this.eof = true; + return; + } + + const stream = streams.shift(); + let chunk; + + try { + chunk = stream.getBytes(); + } catch (reason) { + if (this._onError) { + this._onError(reason, stream.dict && stream.dict.objId); + + return; + } + + throw reason; + } + + const bufferLength = this.bufferLength; + const newLength = bufferLength + chunk.length; + const buffer = this.ensureBuffer(newLength); + buffer.set(chunk, bufferLength); + this.bufferLength = newLength; + } + + getBaseStreams() { + const baseStreamsBuf = []; + + for (const stream of this.streams) { + const baseStreams = stream.getBaseStreams(); + + if (baseStreams) { + baseStreamsBuf.push(...baseStreams); + } + } + + return baseStreamsBuf.length > 0 ? baseStreamsBuf : null; + } + +} + +exports.StreamsSequenceStream = StreamsSequenceStream; + +/***/ }), +/* 20 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.AsciiHexStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +class AsciiHexStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength) { + if (maybeLength) { + maybeLength *= 0.5; + } + + super(maybeLength); + this.str = str; + this.dict = str.dict; + this.firstDigit = -1; + } + + readBlock() { + const UPSTREAM_BLOCK_SIZE = 8000; + const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); + + if (!bytes.length) { + this.eof = true; + return; + } + + const maxDecodeLength = bytes.length + 1 >> 1; + const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); + let bufferLength = this.bufferLength; + let firstDigit = this.firstDigit; + + for (const ch of bytes) { + let digit; + + if (ch >= 0x30 && ch <= 0x39) { + digit = ch & 0x0f; + } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { + digit = (ch & 0x0f) + 9; + } else if (ch === 0x3e) { + this.eof = true; + break; + } else { + continue; + } + + if (firstDigit < 0) { + firstDigit = digit; + } else { + buffer[bufferLength++] = firstDigit << 4 | digit; + firstDigit = -1; + } + } + + if (firstDigit >= 0 && this.eof) { + buffer[bufferLength++] = firstDigit << 4; + firstDigit = -1; + } + + this.firstDigit = firstDigit; + this.bufferLength = bufferLength; + } + +} + +exports.AsciiHexStream = AsciiHexStream; + +/***/ }), +/* 21 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CCITTFaxStream = void 0; + +var _ccitt = __w_pdfjs_require__(22); + +var _decode_stream = __w_pdfjs_require__(19); + +var _primitives = __w_pdfjs_require__(5); + +class CCITTFaxStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength, params) { + super(maybeLength); + this.str = str; + this.dict = str.dict; + + if (!(params instanceof _primitives.Dict)) { + params = _primitives.Dict.empty; + } + + const source = { + next() { + return str.getByte(); + } + + }; + this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { + K: params.get("K"), + EndOfLine: params.get("EndOfLine"), + EncodedByteAlign: params.get("EncodedByteAlign"), + Columns: params.get("Columns"), + Rows: params.get("Rows"), + EndOfBlock: params.get("EndOfBlock"), + BlackIs1: params.get("BlackIs1") + }); + } + + readBlock() { + while (!this.eof) { + const c = this.ccittFaxDecoder.readNextChar(); + + if (c === -1) { + this.eof = true; + return; + } + + this.ensureBuffer(this.bufferLength + 1); + this.buffer[this.bufferLength++] = c; + } + } + +} + +exports.CCITTFaxStream = CCITTFaxStream; + +/***/ }), +/* 22 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CCITTFaxDecoder = void 0; + +var _util = __w_pdfjs_require__(2); + +const ccittEOL = -2; +const ccittEOF = -1; +const twoDimPass = 0; +const twoDimHoriz = 1; +const twoDimVert0 = 2; +const twoDimVertR1 = 3; +const twoDimVertL1 = 4; +const twoDimVertR2 = 5; +const twoDimVertL2 = 6; +const twoDimVertR3 = 7; +const twoDimVertL3 = 8; +const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; +const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; +const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; +const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; +const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; +const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; + +class CCITTFaxDecoder { + constructor(source, options = {}) { + if (!source || typeof source.next !== "function") { + throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); + } + + this.source = source; + this.eof = false; + this.encoding = options.K || 0; + this.eoline = options.EndOfLine || false; + this.byteAlign = options.EncodedByteAlign || false; + this.columns = options.Columns || 1728; + this.rows = options.Rows || 0; + let eoblock = options.EndOfBlock; + + if (eoblock === null || eoblock === undefined) { + eoblock = true; + } + + this.eoblock = eoblock; + this.black = options.BlackIs1 || false; + this.codingLine = new Uint32Array(this.columns + 1); + this.refLine = new Uint32Array(this.columns + 2); + this.codingLine[0] = this.columns; + this.codingPos = 0; + this.row = 0; + this.nextLine2D = this.encoding < 0; + this.inputBits = 0; + this.inputBuf = 0; + this.outputBits = 0; + this.rowsDone = false; + let code1; + + while ((code1 = this._lookBits(12)) === 0) { + this._eatBits(1); + } + + if (code1 === 1) { + this._eatBits(12); + } + + if (this.encoding > 0) { + this.nextLine2D = !this._lookBits(1); + + this._eatBits(1); + } + } + + readNextChar() { + if (this.eof) { + return -1; + } + + const refLine = this.refLine; + const codingLine = this.codingLine; + const columns = this.columns; + let refPos, blackPixels, bits, i; + + if (this.outputBits === 0) { + if (this.rowsDone) { + this.eof = true; + } + + if (this.eof) { + return -1; + } + + this.err = false; + let code1, code2, code3; + + if (this.nextLine2D) { + for (i = 0; codingLine[i] < columns; ++i) { + refLine[i] = codingLine[i]; + } + + refLine[i++] = columns; + refLine[i] = columns; + codingLine[0] = 0; + this.codingPos = 0; + refPos = 0; + blackPixels = 0; + + while (codingLine[this.codingPos] < columns) { + code1 = this._getTwoDimCode(); + + switch (code1) { + case twoDimPass: + this._addPixels(refLine[refPos + 1], blackPixels); + + if (refLine[refPos + 1] < columns) { + refPos += 2; + } + + break; + + case twoDimHoriz: + code1 = code2 = 0; + + if (blackPixels) { + do { + code1 += code3 = this._getBlackCode(); + } while (code3 >= 64); + + do { + code2 += code3 = this._getWhiteCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = this._getWhiteCode(); + } while (code3 >= 64); + + do { + code2 += code3 = this._getBlackCode(); + } while (code3 >= 64); + } + + this._addPixels(codingLine[this.codingPos] + code1, blackPixels); + + if (codingLine[this.codingPos] < columns) { + this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); + } + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + + break; + + case twoDimVertR3: + this._addPixels(refLine[refPos] + 3, blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + ++refPos; + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case twoDimVertR2: + this._addPixels(refLine[refPos] + 2, blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + ++refPos; + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case twoDimVertR1: + this._addPixels(refLine[refPos] + 1, blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + ++refPos; + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case twoDimVert0: + this._addPixels(refLine[refPos], blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + ++refPos; + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case twoDimVertL3: + this._addPixelsNeg(refLine[refPos] - 3, blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case twoDimVertL2: + this._addPixelsNeg(refLine[refPos] - 2, blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case twoDimVertL1: + this._addPixelsNeg(refLine[refPos] - 1, blackPixels); + + blackPixels ^= 1; + + if (codingLine[this.codingPos] < columns) { + if (refPos > 0) { + --refPos; + } else { + ++refPos; + } + + while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { + refPos += 2; + } + } + + break; + + case ccittEOF: + this._addPixels(columns, 0); + + this.eof = true; + break; + + default: + (0, _util.info)("bad 2d code"); + + this._addPixels(columns, 0); + + this.err = true; + } + } + } else { + codingLine[0] = 0; + this.codingPos = 0; + blackPixels = 0; + + while (codingLine[this.codingPos] < columns) { + code1 = 0; + + if (blackPixels) { + do { + code1 += code3 = this._getBlackCode(); + } while (code3 >= 64); + } else { + do { + code1 += code3 = this._getWhiteCode(); + } while (code3 >= 64); + } + + this._addPixels(codingLine[this.codingPos] + code1, blackPixels); + + blackPixels ^= 1; + } + } + + let gotEOL = false; + + if (this.byteAlign) { + this.inputBits &= ~7; + } + + if (!this.eoblock && this.row === this.rows - 1) { + this.rowsDone = true; + } else { + code1 = this._lookBits(12); + + if (this.eoline) { + while (code1 !== ccittEOF && code1 !== 1) { + this._eatBits(1); + + code1 = this._lookBits(12); + } + } else { + while (code1 === 0) { + this._eatBits(1); + + code1 = this._lookBits(12); + } + } + + if (code1 === 1) { + this._eatBits(12); + + gotEOL = true; + } else if (code1 === ccittEOF) { + this.eof = true; + } + } + + if (!this.eof && this.encoding > 0 && !this.rowsDone) { + this.nextLine2D = !this._lookBits(1); + + this._eatBits(1); + } + + if (this.eoblock && gotEOL && this.byteAlign) { + code1 = this._lookBits(12); + + if (code1 === 1) { + this._eatBits(12); + + if (this.encoding > 0) { + this._lookBits(1); + + this._eatBits(1); + } + + if (this.encoding >= 0) { + for (i = 0; i < 4; ++i) { + code1 = this._lookBits(12); + + if (code1 !== 1) { + (0, _util.info)("bad rtc code: " + code1); + } + + this._eatBits(12); + + if (this.encoding > 0) { + this._lookBits(1); + + this._eatBits(1); + } + } + } + + this.eof = true; + } + } else if (this.err && this.eoline) { + while (true) { + code1 = this._lookBits(13); + + if (code1 === ccittEOF) { + this.eof = true; + return -1; + } + + if (code1 >> 1 === 1) { + break; + } + + this._eatBits(1); + } + + this._eatBits(12); + + if (this.encoding > 0) { + this._eatBits(1); + + this.nextLine2D = !(code1 & 1); + } + } + + if (codingLine[0] > 0) { + this.outputBits = codingLine[this.codingPos = 0]; + } else { + this.outputBits = codingLine[this.codingPos = 1]; + } + + this.row++; + } + + let c; + + if (this.outputBits >= 8) { + c = this.codingPos & 1 ? 0 : 0xff; + this.outputBits -= 8; + + if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { + this.codingPos++; + this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; + } + } else { + bits = 8; + c = 0; + + do { + if (typeof this.outputBits !== "number") { + throw new _util.FormatError('Invalid /CCITTFaxDecode data, "outputBits" must be a number.'); + } + + if (this.outputBits > bits) { + c <<= bits; + + if (!(this.codingPos & 1)) { + c |= 0xff >> 8 - bits; + } + + this.outputBits -= bits; + bits = 0; + } else { + c <<= this.outputBits; + + if (!(this.codingPos & 1)) { + c |= 0xff >> 8 - this.outputBits; + } + + bits -= this.outputBits; + this.outputBits = 0; + + if (codingLine[this.codingPos] < columns) { + this.codingPos++; + this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; + } else if (bits > 0) { + c <<= bits; + bits = 0; + } + } + } while (bits); + } + + if (this.black) { + c ^= 0xff; + } + + return c; + } + + _addPixels(a1, blackPixels) { + const codingLine = this.codingLine; + let codingPos = this.codingPos; + + if (a1 > codingLine[codingPos]) { + if (a1 > this.columns) { + (0, _util.info)("row is wrong length"); + this.err = true; + a1 = this.columns; + } + + if (codingPos & 1 ^ blackPixels) { + ++codingPos; + } + + codingLine[codingPos] = a1; + } + + this.codingPos = codingPos; + } + + _addPixelsNeg(a1, blackPixels) { + const codingLine = this.codingLine; + let codingPos = this.codingPos; + + if (a1 > codingLine[codingPos]) { + if (a1 > this.columns) { + (0, _util.info)("row is wrong length"); + this.err = true; + a1 = this.columns; + } + + if (codingPos & 1 ^ blackPixels) { + ++codingPos; + } + + codingLine[codingPos] = a1; + } else if (a1 < codingLine[codingPos]) { + if (a1 < 0) { + (0, _util.info)("invalid code"); + this.err = true; + a1 = 0; + } + + while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { + --codingPos; + } + + codingLine[codingPos] = a1; + } + + this.codingPos = codingPos; + } + + _findTableCode(start, end, table, limit) { + const limitValue = limit || 0; + + for (let i = start; i <= end; ++i) { + let code = this._lookBits(i); + + if (code === ccittEOF) { + return [true, 1, false]; + } + + if (i < end) { + code <<= end - i; + } + + if (!limitValue || code >= limitValue) { + const p = table[code - limitValue]; + + if (p[0] === i) { + this._eatBits(i); + + return [true, p[1], true]; + } + } + } + + return [false, 0, false]; + } + + _getTwoDimCode() { + let code = 0; + let p; + + if (this.eoblock) { + code = this._lookBits(7); + p = twoDimTable[code]; + + if (p && p[0] > 0) { + this._eatBits(p[0]); + + return p[1]; + } + } else { + const result = this._findTableCode(1, 7, twoDimTable); + + if (result[0] && result[2]) { + return result[1]; + } + } + + (0, _util.info)("Bad two dim code"); + return ccittEOF; + } + + _getWhiteCode() { + let code = 0; + let p; + + if (this.eoblock) { + code = this._lookBits(12); + + if (code === ccittEOF) { + return 1; + } + + if (code >> 5 === 0) { + p = whiteTable1[code]; + } else { + p = whiteTable2[code >> 3]; + } + + if (p[0] > 0) { + this._eatBits(p[0]); + + return p[1]; + } + } else { + let result = this._findTableCode(1, 9, whiteTable2); + + if (result[0]) { + return result[1]; + } + + result = this._findTableCode(11, 12, whiteTable1); + + if (result[0]) { + return result[1]; + } + } + + (0, _util.info)("bad white code"); + + this._eatBits(1); + + return 1; + } + + _getBlackCode() { + let code, p; + + if (this.eoblock) { + code = this._lookBits(13); + + if (code === ccittEOF) { + return 1; + } + + if (code >> 7 === 0) { + p = blackTable1[code]; + } else if (code >> 9 === 0 && code >> 7 !== 0) { + p = blackTable2[(code >> 1) - 64]; + } else { + p = blackTable3[code >> 7]; + } + + if (p[0] > 0) { + this._eatBits(p[0]); + + return p[1]; + } + } else { + let result = this._findTableCode(2, 6, blackTable3); + + if (result[0]) { + return result[1]; + } + + result = this._findTableCode(7, 12, blackTable2, 64); + + if (result[0]) { + return result[1]; + } + + result = this._findTableCode(10, 13, blackTable1); + + if (result[0]) { + return result[1]; + } + } + + (0, _util.info)("bad black code"); + + this._eatBits(1); + + return 1; + } + + _lookBits(n) { + let c; + + while (this.inputBits < n) { + if ((c = this.source.next()) === -1) { + if (this.inputBits === 0) { + return ccittEOF; + } + + return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n; + } + + this.inputBuf = this.inputBuf << 8 | c; + this.inputBits += 8; + } + + return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n; + } + + _eatBits(n) { + if ((this.inputBits -= n) < 0) { + this.inputBits = 0; + } + } + +} + +exports.CCITTFaxDecoder = CCITTFaxDecoder; + +/***/ }), +/* 23 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FlateStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +var _util = __w_pdfjs_require__(2); + +const codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); +const lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); +const distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); +const fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; +const fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; + +class FlateStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength) { + super(maybeLength); + this.str = str; + this.dict = str.dict; + const cmf = str.getByte(); + const flg = str.getByte(); + + if (cmf === -1 || flg === -1) { + throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`); + } + + if ((cmf & 0x0f) !== 0x08) { + throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`); + } + + if (((cmf << 8) + flg) % 31 !== 0) { + throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`); + } + + if (flg & 0x20) { + throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`); + } + + this.codeSize = 0; + this.codeBuf = 0; + } + + getBits(bits) { + const str = this.str; + let codeSize = this.codeSize; + let codeBuf = this.codeBuf; + let b; + + while (codeSize < bits) { + if ((b = str.getByte()) === -1) { + throw new _util.FormatError("Bad encoding in flate stream"); + } + + codeBuf |= b << codeSize; + codeSize += 8; + } + + b = codeBuf & (1 << bits) - 1; + this.codeBuf = codeBuf >> bits; + this.codeSize = codeSize -= bits; + return b; + } + + getCode(table) { + const str = this.str; + const codes = table[0]; + const maxLen = table[1]; + let codeSize = this.codeSize; + let codeBuf = this.codeBuf; + let b; + + while (codeSize < maxLen) { + if ((b = str.getByte()) === -1) { + break; + } + + codeBuf |= b << codeSize; + codeSize += 8; + } + + const code = codes[codeBuf & (1 << maxLen) - 1]; + const codeLen = code >> 16; + const codeVal = code & 0xffff; + + if (codeLen < 1 || codeSize < codeLen) { + throw new _util.FormatError("Bad encoding in flate stream"); + } + + this.codeBuf = codeBuf >> codeLen; + this.codeSize = codeSize - codeLen; + return codeVal; + } + + generateHuffmanTable(lengths) { + const n = lengths.length; + let maxLen = 0; + let i; + + for (i = 0; i < n; ++i) { + if (lengths[i] > maxLen) { + maxLen = lengths[i]; + } + } + + const size = 1 << maxLen; + const codes = new Int32Array(size); + + for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { + for (let val = 0; val < n; ++val) { + if (lengths[val] === len) { + let code2 = 0; + let t = code; + + for (i = 0; i < len; ++i) { + code2 = code2 << 1 | t & 1; + t >>= 1; + } + + for (i = code2; i < size; i += skip) { + codes[i] = len << 16 | val; + } + + ++code; + } + } + } + + return [codes, maxLen]; + } + + readBlock() { + let buffer, len; + const str = this.str; + let hdr = this.getBits(3); + + if (hdr & 1) { + this.eof = true; + } + + hdr >>= 1; + + if (hdr === 0) { + let b; + + if ((b = str.getByte()) === -1) { + throw new _util.FormatError("Bad block header in flate stream"); + } + + let blockLen = b; + + if ((b = str.getByte()) === -1) { + throw new _util.FormatError("Bad block header in flate stream"); + } + + blockLen |= b << 8; + + if ((b = str.getByte()) === -1) { + throw new _util.FormatError("Bad block header in flate stream"); + } + + let check = b; + + if ((b = str.getByte()) === -1) { + throw new _util.FormatError("Bad block header in flate stream"); + } + + check |= b << 8; + + if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { + throw new _util.FormatError("Bad uncompressed block length in flate stream"); + } + + this.codeBuf = 0; + this.codeSize = 0; + const bufferLength = this.bufferLength, + end = bufferLength + blockLen; + buffer = this.ensureBuffer(end); + this.bufferLength = end; + + if (blockLen === 0) { + if (str.peekByte() === -1) { + this.eof = true; + } + } else { + const block = str.getBytes(blockLen); + buffer.set(block, bufferLength); + + if (block.length < blockLen) { + this.eof = true; + } + } + + return; + } + + let litCodeTable; + let distCodeTable; + + if (hdr === 1) { + litCodeTable = fixedLitCodeTab; + distCodeTable = fixedDistCodeTab; + } else if (hdr === 2) { + const numLitCodes = this.getBits(5) + 257; + const numDistCodes = this.getBits(5) + 1; + const numCodeLenCodes = this.getBits(4) + 4; + const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); + let i; + + for (i = 0; i < numCodeLenCodes; ++i) { + codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); + } + + const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); + len = 0; + i = 0; + const codes = numLitCodes + numDistCodes; + const codeLengths = new Uint8Array(codes); + let bitsLength, bitsOffset, what; + + while (i < codes) { + const code = this.getCode(codeLenCodeTab); + + if (code === 16) { + bitsLength = 2; + bitsOffset = 3; + what = len; + } else if (code === 17) { + bitsLength = 3; + bitsOffset = 3; + what = len = 0; + } else if (code === 18) { + bitsLength = 7; + bitsOffset = 11; + what = len = 0; + } else { + codeLengths[i++] = len = code; + continue; + } + + let repeatLength = this.getBits(bitsLength) + bitsOffset; + + while (repeatLength-- > 0) { + codeLengths[i++] = what; + } + } + + litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); + distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); + } else { + throw new _util.FormatError("Unknown block type in flate stream"); + } + + buffer = this.buffer; + let limit = buffer ? buffer.length : 0; + let pos = this.bufferLength; + + while (true) { + let code1 = this.getCode(litCodeTable); + + if (code1 < 256) { + if (pos + 1 >= limit) { + buffer = this.ensureBuffer(pos + 1); + limit = buffer.length; + } + + buffer[pos++] = code1; + continue; + } + + if (code1 === 256) { + this.bufferLength = pos; + return; + } + + code1 -= 257; + code1 = lengthDecode[code1]; + let code2 = code1 >> 16; + + if (code2 > 0) { + code2 = this.getBits(code2); + } + + len = (code1 & 0xffff) + code2; + code1 = this.getCode(distCodeTable); + code1 = distDecode[code1]; + code2 = code1 >> 16; + + if (code2 > 0) { + code2 = this.getBits(code2); + } + + const dist = (code1 & 0xffff) + code2; + + if (pos + len >= limit) { + buffer = this.ensureBuffer(pos + len); + limit = buffer.length; + } + + for (let k = 0; k < len; ++k, ++pos) { + buffer[pos] = buffer[pos - dist]; + } + } + } + +} + +exports.FlateStream = FlateStream; + +/***/ }), +/* 24 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Jbig2Stream = void 0; + +var _base_stream = __w_pdfjs_require__(7); + +var _decode_stream = __w_pdfjs_require__(19); + +var _primitives = __w_pdfjs_require__(5); + +var _jbig = __w_pdfjs_require__(25); + +var _util = __w_pdfjs_require__(2); + +class Jbig2Stream extends _decode_stream.DecodeStream { + constructor(stream, maybeLength, params) { + super(maybeLength); + this.stream = stream; + this.dict = stream.dict; + this.maybeLength = maybeLength; + this.params = params; + } + + get bytes() { + return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); + } + + ensureBuffer(requested) {} + + readBlock() { + if (this.eof) { + return; + } + + const jbig2Image = new _jbig.Jbig2Image(); + const chunks = []; + + if (this.params instanceof _primitives.Dict) { + const globalsStream = this.params.get("JBIG2Globals"); + + if (globalsStream instanceof _base_stream.BaseStream) { + const globals = globalsStream.getBytes(); + chunks.push({ + data: globals, + start: 0, + end: globals.length + }); + } + } + + chunks.push({ + data: this.bytes, + start: 0, + end: this.bytes.length + }); + const data = jbig2Image.parseChunks(chunks); + const dataLength = data.length; + + for (let i = 0; i < dataLength; i++) { + data[i] ^= 0xff; + } + + this.buffer = data; + this.bufferLength = dataLength; + this.eof = true; + } + +} + +exports.Jbig2Stream = Jbig2Stream; + +/***/ }), +/* 25 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Jbig2Image = void 0; + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _arithmetic_decoder = __w_pdfjs_require__(26); + +var _ccitt = __w_pdfjs_require__(22); + +class Jbig2Error extends _util.BaseException { + constructor(msg) { + super(`JBIG2 error: ${msg}`, "Jbig2Error"); + } + +} + +class ContextCache { + getContexts(id) { + if (id in this) { + return this[id]; + } + + return this[id] = new Int8Array(1 << 16); + } + +} + +class DecodingContext { + constructor(data, start, end) { + this.data = data; + this.start = start; + this.end = end; + } + + get decoder() { + const decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); + return (0, _util.shadow)(this, "decoder", decoder); + } + + get contextCache() { + const cache = new ContextCache(); + return (0, _util.shadow)(this, "contextCache", cache); + } + +} + +function decodeInteger(contextCache, procedure, decoder) { + const contexts = contextCache.getContexts(procedure); + let prev = 1; + + function readBits(length) { + let v = 0; + + for (let i = 0; i < length; i++) { + const bit = decoder.readBit(contexts, prev); + prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; + v = v << 1 | bit; + } + + return v >>> 0; + } + + const sign = readBits(1); + const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); + + if (sign === 0) { + return value; + } else if (value > 0) { + return -value; + } + + return null; +} + +function decodeIAID(contextCache, decoder, codeLength) { + const contexts = contextCache.getContexts("IAID"); + let prev = 1; + + for (let i = 0; i < codeLength; i++) { + const bit = decoder.readBit(contexts, prev); + prev = prev << 1 | bit; + } + + if (codeLength < 31) { + return prev & (1 << codeLength) - 1; + } + + return prev & 0x7fffffff; +} + +const SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"]; +const CodingTemplates = [[{ + x: -1, + y: -2 +}, { + x: 0, + y: -2 +}, { + x: 1, + y: -2 +}, { + x: -2, + y: -1 +}, { + x: -1, + y: -1 +}, { + x: 0, + y: -1 +}, { + x: 1, + y: -1 +}, { + x: 2, + y: -1 +}, { + x: -4, + y: 0 +}, { + x: -3, + y: 0 +}, { + x: -2, + y: 0 +}, { + x: -1, + y: 0 +}], [{ + x: -1, + y: -2 +}, { + x: 0, + y: -2 +}, { + x: 1, + y: -2 +}, { + x: 2, + y: -2 +}, { + x: -2, + y: -1 +}, { + x: -1, + y: -1 +}, { + x: 0, + y: -1 +}, { + x: 1, + y: -1 +}, { + x: 2, + y: -1 +}, { + x: -3, + y: 0 +}, { + x: -2, + y: 0 +}, { + x: -1, + y: 0 +}], [{ + x: -1, + y: -2 +}, { + x: 0, + y: -2 +}, { + x: 1, + y: -2 +}, { + x: -2, + y: -1 +}, { + x: -1, + y: -1 +}, { + x: 0, + y: -1 +}, { + x: 1, + y: -1 +}, { + x: -2, + y: 0 +}, { + x: -1, + y: 0 +}], [{ + x: -3, + y: -1 +}, { + x: -2, + y: -1 +}, { + x: -1, + y: -1 +}, { + x: 0, + y: -1 +}, { + x: 1, + y: -1 +}, { + x: -4, + y: 0 +}, { + x: -3, + y: 0 +}, { + x: -2, + y: 0 +}, { + x: -1, + y: 0 +}]]; +const RefinementTemplates = [{ + coding: [{ + x: 0, + y: -1 + }, { + x: 1, + y: -1 + }, { + x: -1, + y: 0 + }], + reference: [{ + x: 0, + y: -1 + }, { + x: 1, + y: -1 + }, { + x: -1, + y: 0 + }, { + x: 0, + y: 0 + }, { + x: 1, + y: 0 + }, { + x: -1, + y: 1 + }, { + x: 0, + y: 1 + }, { + x: 1, + y: 1 + }] +}, { + coding: [{ + x: -1, + y: -1 + }, { + x: 0, + y: -1 + }, { + x: 1, + y: -1 + }, { + x: -1, + y: 0 + }], + reference: [{ + x: 0, + y: -1 + }, { + x: -1, + y: 0 + }, { + x: 0, + y: 0 + }, { + x: 1, + y: 0 + }, { + x: 0, + y: 1 + }, { + x: 1, + y: 1 + }] +}]; +const ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195]; +const RefinementReusedContexts = [0x0020, 0x0008]; + +function decodeBitmapTemplate0(width, height, decodingContext) { + const decoder = decodingContext.decoder; + const contexts = decodingContext.contextCache.getContexts("GB"); + const bitmap = []; + let contextLabel, i, j, pixel, row, row1, row2; + const OLD_PIXEL_MASK = 0x7bf7; + + for (i = 0; i < height; i++) { + row = bitmap[i] = new Uint8Array(width); + row1 = i < 1 ? row : bitmap[i - 1]; + row2 = i < 2 ? row : bitmap[i - 2]; + contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; + + for (j = 0; j < width; j++) { + row[j] = pixel = decoder.readBit(contexts, contextLabel); + contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; + } + } + + return bitmap; +} + +function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { + if (mmr) { + const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); + return decodeMMRBitmap(input, width, height, false); + } + + if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { + return decodeBitmapTemplate0(width, height, decodingContext); + } + + const useskip = !!skip; + const template = CodingTemplates[templateIndex].concat(at); + template.sort(function (a, b) { + return a.y - b.y || a.x - b.x; + }); + const templateLength = template.length; + const templateX = new Int8Array(templateLength); + const templateY = new Int8Array(templateLength); + const changingTemplateEntries = []; + let reuseMask = 0, + minX = 0, + maxX = 0, + minY = 0; + let c, k; + + for (k = 0; k < templateLength; k++) { + templateX[k] = template[k].x; + templateY[k] = template[k].y; + minX = Math.min(minX, template[k].x); + maxX = Math.max(maxX, template[k].x); + minY = Math.min(minY, template[k].y); + + if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { + reuseMask |= 1 << templateLength - 1 - k; + } else { + changingTemplateEntries.push(k); + } + } + + const changingEntriesLength = changingTemplateEntries.length; + const changingTemplateX = new Int8Array(changingEntriesLength); + const changingTemplateY = new Int8Array(changingEntriesLength); + const changingTemplateBit = new Uint16Array(changingEntriesLength); + + for (c = 0; c < changingEntriesLength; c++) { + k = changingTemplateEntries[c]; + changingTemplateX[c] = template[k].x; + changingTemplateY[c] = template[k].y; + changingTemplateBit[c] = 1 << templateLength - 1 - k; + } + + const sbb_left = -minX; + const sbb_top = -minY; + const sbb_right = width - maxX; + const pseudoPixelContext = ReusedContexts[templateIndex]; + let row = new Uint8Array(width); + const bitmap = []; + const decoder = decodingContext.decoder; + const contexts = decodingContext.contextCache.getContexts("GB"); + let ltp = 0, + j, + i0, + j0, + contextLabel = 0, + bit, + shift; + + for (let i = 0; i < height; i++) { + if (prediction) { + const sltp = decoder.readBit(contexts, pseudoPixelContext); + ltp ^= sltp; + + if (ltp) { + bitmap.push(row); + continue; + } + } + + row = new Uint8Array(row); + bitmap.push(row); + + for (j = 0; j < width; j++) { + if (useskip && skip[i][j]) { + row[j] = 0; + continue; + } + + if (j >= sbb_left && j < sbb_right && i >= sbb_top) { + contextLabel = contextLabel << 1 & reuseMask; + + for (k = 0; k < changingEntriesLength; k++) { + i0 = i + changingTemplateY[k]; + j0 = j + changingTemplateX[k]; + bit = bitmap[i0][j0]; + + if (bit) { + bit = changingTemplateBit[k]; + contextLabel |= bit; + } + } + } else { + contextLabel = 0; + shift = templateLength - 1; + + for (k = 0; k < templateLength; k++, shift--) { + j0 = j + templateX[k]; + + if (j0 >= 0 && j0 < width) { + i0 = i + templateY[k]; + + if (i0 >= 0) { + bit = bitmap[i0][j0]; + + if (bit) { + contextLabel |= bit << shift; + } + } + } + } + } + + const pixel = decoder.readBit(contexts, contextLabel); + row[j] = pixel; + } + } + + return bitmap; +} + +function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { + let codingTemplate = RefinementTemplates[templateIndex].coding; + + if (templateIndex === 0) { + codingTemplate = codingTemplate.concat([at[0]]); + } + + const codingTemplateLength = codingTemplate.length; + const codingTemplateX = new Int32Array(codingTemplateLength); + const codingTemplateY = new Int32Array(codingTemplateLength); + let k; + + for (k = 0; k < codingTemplateLength; k++) { + codingTemplateX[k] = codingTemplate[k].x; + codingTemplateY[k] = codingTemplate[k].y; + } + + let referenceTemplate = RefinementTemplates[templateIndex].reference; + + if (templateIndex === 0) { + referenceTemplate = referenceTemplate.concat([at[1]]); + } + + const referenceTemplateLength = referenceTemplate.length; + const referenceTemplateX = new Int32Array(referenceTemplateLength); + const referenceTemplateY = new Int32Array(referenceTemplateLength); + + for (k = 0; k < referenceTemplateLength; k++) { + referenceTemplateX[k] = referenceTemplate[k].x; + referenceTemplateY[k] = referenceTemplate[k].y; + } + + const referenceWidth = referenceBitmap[0].length; + const referenceHeight = referenceBitmap.length; + const pseudoPixelContext = RefinementReusedContexts[templateIndex]; + const bitmap = []; + const decoder = decodingContext.decoder; + const contexts = decodingContext.contextCache.getContexts("GR"); + let ltp = 0; + + for (let i = 0; i < height; i++) { + if (prediction) { + const sltp = decoder.readBit(contexts, pseudoPixelContext); + ltp ^= sltp; + + if (ltp) { + throw new Jbig2Error("prediction is not supported"); + } + } + + const row = new Uint8Array(width); + bitmap.push(row); + + for (let j = 0; j < width; j++) { + let i0, j0; + let contextLabel = 0; + + for (k = 0; k < codingTemplateLength; k++) { + i0 = i + codingTemplateY[k]; + j0 = j + codingTemplateX[k]; + + if (i0 < 0 || j0 < 0 || j0 >= width) { + contextLabel <<= 1; + } else { + contextLabel = contextLabel << 1 | bitmap[i0][j0]; + } + } + + for (k = 0; k < referenceTemplateLength; k++) { + i0 = i + referenceTemplateY[k] - offsetY; + j0 = j + referenceTemplateX[k] - offsetX; + + if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { + contextLabel <<= 1; + } else { + contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; + } + } + + const pixel = decoder.readBit(contexts, contextLabel); + row[j] = pixel; + } + } + + return bitmap; +} + +function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { + if (huffman && refinement) { + throw new Jbig2Error("symbol refinement with Huffman is not supported"); + } + + const newSymbols = []; + let currentHeight = 0; + let symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols); + const decoder = decodingContext.decoder; + const contextCache = decodingContext.contextCache; + let tableB1, symbolWidths; + + if (huffman) { + tableB1 = getStandardTable(1); + symbolWidths = []; + symbolCodeLength = Math.max(symbolCodeLength, 1); + } + + while (newSymbols.length < numberOfNewSymbols) { + const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder); + currentHeight += deltaHeight; + let currentWidth = 0, + totalWidth = 0; + const firstSymbol = huffman ? symbolWidths.length : 0; + + while (true) { + const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder); + + if (deltaWidth === null) { + break; + } + + currentWidth += deltaWidth; + totalWidth += currentWidth; + let bitmap; + + if (refinement) { + const numberOfInstances = decodeInteger(contextCache, "IAAI", decoder); + + if (numberOfInstances > 1) { + bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); + } else { + const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); + const rdx = decodeInteger(contextCache, "IARDX", decoder); + const rdy = decodeInteger(contextCache, "IARDY", decoder); + const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; + bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); + } + + newSymbols.push(bitmap); + } else if (huffman) { + symbolWidths.push(currentWidth); + } else { + bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); + newSymbols.push(bitmap); + } + } + + if (huffman && !refinement) { + const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); + huffmanInput.byteAlign(); + let collectiveBitmap; + + if (bitmapSize === 0) { + collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); + } else { + const originalEnd = huffmanInput.end; + const bitmapEnd = huffmanInput.position + bitmapSize; + huffmanInput.end = bitmapEnd; + collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); + huffmanInput.end = originalEnd; + huffmanInput.position = bitmapEnd; + } + + const numberOfSymbolsDecoded = symbolWidths.length; + + if (firstSymbol === numberOfSymbolsDecoded - 1) { + newSymbols.push(collectiveBitmap); + } else { + let i, + y, + xMin = 0, + xMax, + bitmapWidth, + symbolBitmap; + + for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) { + bitmapWidth = symbolWidths[i]; + xMax = xMin + bitmapWidth; + symbolBitmap = []; + + for (y = 0; y < currentHeight; y++) { + symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); + } + + newSymbols.push(symbolBitmap); + xMin = xMax; + } + } + } + } + + const exportedSymbols = [], + flags = []; + let currentFlag = false, + i, + ii; + const totalSymbolsLength = symbols.length + numberOfNewSymbols; + + while (flags.length < totalSymbolsLength) { + let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder); + + while (runLength--) { + flags.push(currentFlag); + } + + currentFlag = !currentFlag; + } + + for (i = 0, ii = symbols.length; i < ii; i++) { + if (flags[i]) { + exportedSymbols.push(symbols[i]); + } + } + + for (let j = 0; j < numberOfNewSymbols; i++, j++) { + if (flags[i]) { + exportedSymbols.push(newSymbols[j]); + } + } + + return exportedSymbols; +} + +function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { + if (huffman && refinement) { + throw new Jbig2Error("refinement with Huffman is not supported"); + } + + const bitmap = []; + let i, row; + + for (i = 0; i < height; i++) { + row = new Uint8Array(width); + + if (defaultPixelValue) { + for (let j = 0; j < width; j++) { + row[j] = defaultPixelValue; + } + } + + bitmap.push(row); + } + + const decoder = decodingContext.decoder; + const contextCache = decodingContext.contextCache; + let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder); + let firstS = 0; + i = 0; + + while (i < numberOfSymbolInstances) { + const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder); + stripT += deltaT; + const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder); + firstS += deltaFirstS; + let currentS = firstS; + + do { + let currentT = 0; + + if (stripSize > 1) { + currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder); + } + + const t = stripSize * stripT + currentT; + const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); + const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder)); + let symbolBitmap = inputSymbols[symbolId]; + let symbolWidth = symbolBitmap[0].length; + let symbolHeight = symbolBitmap.length; + + if (applyRefinement) { + const rdw = decodeInteger(contextCache, "IARDW", decoder); + const rdh = decodeInteger(contextCache, "IARDH", decoder); + const rdx = decodeInteger(contextCache, "IARDX", decoder); + const rdy = decodeInteger(contextCache, "IARDY", decoder); + symbolWidth += rdw; + symbolHeight += rdh; + symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); + } + + const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); + const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); + let s2, t2, symbolRow; + + if (transposed) { + for (s2 = 0; s2 < symbolHeight; s2++) { + row = bitmap[offsetS + s2]; + + if (!row) { + continue; + } + + symbolRow = symbolBitmap[s2]; + const maxWidth = Math.min(width - offsetT, symbolWidth); + + switch (combinationOperator) { + case 0: + for (t2 = 0; t2 < maxWidth; t2++) { + row[offsetT + t2] |= symbolRow[t2]; + } + + break; + + case 2: + for (t2 = 0; t2 < maxWidth; t2++) { + row[offsetT + t2] ^= symbolRow[t2]; + } + + break; + + default: + throw new Jbig2Error(`operator ${combinationOperator} is not supported`); + } + } + + currentS += symbolHeight - 1; + } else { + for (t2 = 0; t2 < symbolHeight; t2++) { + row = bitmap[offsetT + t2]; + + if (!row) { + continue; + } + + symbolRow = symbolBitmap[t2]; + + switch (combinationOperator) { + case 0: + for (s2 = 0; s2 < symbolWidth; s2++) { + row[offsetS + s2] |= symbolRow[s2]; + } + + break; + + case 2: + for (s2 = 0; s2 < symbolWidth; s2++) { + row[offsetS + s2] ^= symbolRow[s2]; + } + + break; + + default: + throw new Jbig2Error(`operator ${combinationOperator} is not supported`); + } + } + + currentS += symbolWidth - 1; + } + + i++; + const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder); + + if (deltaS === null) { + break; + } + + currentS += deltaS + dsOffset; + } while (true); + } + + return bitmap; +} + +function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { + const at = []; + + if (!mmr) { + at.push({ + x: -patternWidth, + y: 0 + }); + + if (template === 0) { + at.push({ + x: -3, + y: -1 + }, { + x: 2, + y: -2 + }, { + x: -2, + y: -2 + }); + } + } + + const collectiveWidth = (maxPatternIndex + 1) * patternWidth; + const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); + const patterns = []; + + for (let i = 0; i <= maxPatternIndex; i++) { + const patternBitmap = []; + const xMin = patternWidth * i; + const xMax = xMin + patternWidth; + + for (let y = 0; y < patternHeight; y++) { + patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); + } + + patterns.push(patternBitmap); + } + + return patterns; +} + +function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { + const skip = null; + + if (enableSkip) { + throw new Jbig2Error("skip is not supported"); + } + + if (combinationOperator !== 0) { + throw new Jbig2Error(`operator "${combinationOperator}" is not supported in halftone region`); + } + + const regionBitmap = []; + let i, j, row; + + for (i = 0; i < regionHeight; i++) { + row = new Uint8Array(regionWidth); + + if (defaultPixelValue) { + for (j = 0; j < regionWidth; j++) { + row[j] = defaultPixelValue; + } + } + + regionBitmap.push(row); + } + + const numberOfPatterns = patterns.length; + const pattern0 = patterns[0]; + const patternWidth = pattern0[0].length, + patternHeight = pattern0.length; + const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns); + const at = []; + + if (!mmr) { + at.push({ + x: template <= 1 ? 3 : 2, + y: -1 + }); + + if (template === 0) { + at.push({ + x: -3, + y: -1 + }, { + x: 2, + y: -2 + }, { + x: -2, + y: -2 + }); + } + } + + const grayScaleBitPlanes = []; + let mmrInput, bitmap; + + if (mmr) { + mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); + } + + for (i = bitsPerValue - 1; i >= 0; i--) { + if (mmr) { + bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); + } else { + bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); + } + + grayScaleBitPlanes[i] = bitmap; + } + + let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; + + for (mg = 0; mg < gridHeight; mg++) { + for (ng = 0; ng < gridWidth; ng++) { + bit = 0; + patternIndex = 0; + + for (j = bitsPerValue - 1; j >= 0; j--) { + bit ^= grayScaleBitPlanes[j][mg][ng]; + patternIndex |= bit << j; + } + + patternBitmap = patterns[patternIndex]; + x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; + y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; + + if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { + for (i = 0; i < patternHeight; i++) { + regionRow = regionBitmap[y + i]; + patternRow = patternBitmap[i]; + + for (j = 0; j < patternWidth; j++) { + regionRow[x + j] |= patternRow[j]; + } + } + } else { + let regionX, regionY; + + for (i = 0; i < patternHeight; i++) { + regionY = y + i; + + if (regionY < 0 || regionY >= regionHeight) { + continue; + } + + regionRow = regionBitmap[regionY]; + patternRow = patternBitmap[i]; + + for (j = 0; j < patternWidth; j++) { + regionX = x + j; + + if (regionX >= 0 && regionX < regionWidth) { + regionRow[regionX] |= patternRow[j]; + } + } + } + } + } + } + + return regionBitmap; +} + +function readSegmentHeader(data, start) { + const segmentHeader = {}; + segmentHeader.number = (0, _core_utils.readUint32)(data, start); + const flags = data[start + 4]; + const segmentType = flags & 0x3f; + + if (!SegmentTypes[segmentType]) { + throw new Jbig2Error("invalid segment type: " + segmentType); + } + + segmentHeader.type = segmentType; + segmentHeader.typeName = SegmentTypes[segmentType]; + segmentHeader.deferredNonRetain = !!(flags & 0x80); + const pageAssociationFieldSize = !!(flags & 0x40); + const referredFlags = data[start + 5]; + let referredToCount = referredFlags >> 5 & 7; + const retainBits = [referredFlags & 31]; + let position = start + 6; + + if (referredFlags === 7) { + referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff; + position += 3; + let bytes = referredToCount + 7 >> 3; + retainBits[0] = data[position++]; + + while (--bytes > 0) { + retainBits.push(data[position++]); + } + } else if (referredFlags === 5 || referredFlags === 6) { + throw new Jbig2Error("invalid referred-to flags"); + } + + segmentHeader.retainBits = retainBits; + let referredToSegmentNumberSize = 4; + + if (segmentHeader.number <= 256) { + referredToSegmentNumberSize = 1; + } else if (segmentHeader.number <= 65536) { + referredToSegmentNumberSize = 2; + } + + const referredTo = []; + let i, ii; + + for (i = 0; i < referredToCount; i++) { + let number; + + if (referredToSegmentNumberSize === 1) { + number = data[position]; + } else if (referredToSegmentNumberSize === 2) { + number = (0, _core_utils.readUint16)(data, position); + } else { + number = (0, _core_utils.readUint32)(data, position); + } + + referredTo.push(number); + position += referredToSegmentNumberSize; + } + + segmentHeader.referredTo = referredTo; + + if (!pageAssociationFieldSize) { + segmentHeader.pageAssociation = data[position++]; + } else { + segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position); + position += 4; + } + + segmentHeader.length = (0, _core_utils.readUint32)(data, position); + position += 4; + + if (segmentHeader.length === 0xffffffff) { + if (segmentType === 38) { + const genericRegionInfo = readRegionSegmentInformation(data, position); + const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; + const genericRegionMmr = !!(genericRegionSegmentFlags & 1); + const searchPatternLength = 6; + const searchPattern = new Uint8Array(searchPatternLength); + + if (!genericRegionMmr) { + searchPattern[0] = 0xff; + searchPattern[1] = 0xac; + } + + searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff; + searchPattern[3] = genericRegionInfo.height >> 16 & 0xff; + searchPattern[4] = genericRegionInfo.height >> 8 & 0xff; + searchPattern[5] = genericRegionInfo.height & 0xff; + + for (i = position, ii = data.length; i < ii; i++) { + let j = 0; + + while (j < searchPatternLength && searchPattern[j] === data[i + j]) { + j++; + } + + if (j === searchPatternLength) { + segmentHeader.length = i + searchPatternLength; + break; + } + } + + if (segmentHeader.length === 0xffffffff) { + throw new Jbig2Error("segment end was not found"); + } + } else { + throw new Jbig2Error("invalid unknown segment length"); + } + } + + segmentHeader.headerEnd = position; + return segmentHeader; +} + +function readSegments(header, data, start, end) { + const segments = []; + let position = start; + + while (position < end) { + const segmentHeader = readSegmentHeader(data, position); + position = segmentHeader.headerEnd; + const segment = { + header: segmentHeader, + data + }; + + if (!header.randomAccess) { + segment.start = position; + position += segmentHeader.length; + segment.end = position; + } + + segments.push(segment); + + if (segmentHeader.type === 51) { + break; + } + } + + if (header.randomAccess) { + for (let i = 0, ii = segments.length; i < ii; i++) { + segments[i].start = position; + position += segments[i].header.length; + segments[i].end = position; + } + } + + return segments; +} + +function readRegionSegmentInformation(data, start) { + return { + width: (0, _core_utils.readUint32)(data, start), + height: (0, _core_utils.readUint32)(data, start + 4), + x: (0, _core_utils.readUint32)(data, start + 8), + y: (0, _core_utils.readUint32)(data, start + 12), + combinationOperator: data[start + 16] & 7 + }; +} + +const RegionSegmentInformationFieldLength = 17; + +function processSegment(segment, visitor) { + const header = segment.header; + const data = segment.data, + end = segment.end; + let position = segment.start; + let args, at, i, atLength; + + switch (header.type) { + case 0: + const dictionary = {}; + const dictionaryFlags = (0, _core_utils.readUint16)(data, position); + dictionary.huffman = !!(dictionaryFlags & 1); + dictionary.refinement = !!(dictionaryFlags & 2); + dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; + dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; + dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; + dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; + dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); + dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); + dictionary.template = dictionaryFlags >> 10 & 3; + dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; + position += 2; + + if (!dictionary.huffman) { + atLength = dictionary.template === 0 ? 4 : 1; + at = []; + + for (i = 0; i < atLength; i++) { + at.push({ + x: (0, _core_utils.readInt8)(data, position), + y: (0, _core_utils.readInt8)(data, position + 1) + }); + position += 2; + } + + dictionary.at = at; + } + + if (dictionary.refinement && !dictionary.refinementTemplate) { + at = []; + + for (i = 0; i < 2; i++) { + at.push({ + x: (0, _core_utils.readInt8)(data, position), + y: (0, _core_utils.readInt8)(data, position + 1) + }); + position += 2; + } + + dictionary.refinementAt = at; + } + + dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position); + position += 4; + dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position); + position += 4; + args = [dictionary, header.number, header.referredTo, data, position, end]; + break; + + case 6: + case 7: + const textRegion = {}; + textRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + const textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position); + position += 2; + textRegion.huffman = !!(textRegionSegmentFlags & 1); + textRegion.refinement = !!(textRegionSegmentFlags & 2); + textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; + textRegion.stripSize = 1 << textRegion.logStripSize; + textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; + textRegion.transposed = !!(textRegionSegmentFlags & 64); + textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; + textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; + textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; + textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; + + if (textRegion.huffman) { + const textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position); + position += 2; + textRegion.huffmanFS = textRegionHuffmanFlags & 3; + textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; + textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; + textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; + textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; + textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; + textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; + textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); + } + + if (textRegion.refinement && !textRegion.refinementTemplate) { + at = []; + + for (i = 0; i < 2; i++) { + at.push({ + x: (0, _core_utils.readInt8)(data, position), + y: (0, _core_utils.readInt8)(data, position + 1) + }); + position += 2; + } + + textRegion.refinementAt = at; + } + + textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position); + position += 4; + args = [textRegion, header.referredTo, data, position, end]; + break; + + case 16: + const patternDictionary = {}; + const patternDictionaryFlags = data[position++]; + patternDictionary.mmr = !!(patternDictionaryFlags & 1); + patternDictionary.template = patternDictionaryFlags >> 1 & 3; + patternDictionary.patternWidth = data[position++]; + patternDictionary.patternHeight = data[position++]; + patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position); + position += 4; + args = [patternDictionary, header.number, data, position, end]; + break; + + case 22: + case 23: + const halftoneRegion = {}; + halftoneRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + const halftoneRegionFlags = data[position++]; + halftoneRegion.mmr = !!(halftoneRegionFlags & 1); + halftoneRegion.template = halftoneRegionFlags >> 1 & 3; + halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); + halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; + halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; + halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position); + position += 4; + halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position); + position += 4; + halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff; + position += 4; + halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff; + position += 4; + halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position); + position += 2; + halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position); + position += 2; + args = [halftoneRegion, header.referredTo, data, position, end]; + break; + + case 38: + case 39: + const genericRegion = {}; + genericRegion.info = readRegionSegmentInformation(data, position); + position += RegionSegmentInformationFieldLength; + const genericRegionSegmentFlags = data[position++]; + genericRegion.mmr = !!(genericRegionSegmentFlags & 1); + genericRegion.template = genericRegionSegmentFlags >> 1 & 3; + genericRegion.prediction = !!(genericRegionSegmentFlags & 8); + + if (!genericRegion.mmr) { + atLength = genericRegion.template === 0 ? 4 : 1; + at = []; + + for (i = 0; i < atLength; i++) { + at.push({ + x: (0, _core_utils.readInt8)(data, position), + y: (0, _core_utils.readInt8)(data, position + 1) + }); + position += 2; + } + + genericRegion.at = at; + } + + args = [genericRegion, data, position, end]; + break; + + case 48: + const pageInfo = { + width: (0, _core_utils.readUint32)(data, position), + height: (0, _core_utils.readUint32)(data, position + 4), + resolutionX: (0, _core_utils.readUint32)(data, position + 8), + resolutionY: (0, _core_utils.readUint32)(data, position + 12) + }; + + if (pageInfo.height === 0xffffffff) { + delete pageInfo.height; + } + + const pageSegmentFlags = data[position + 16]; + (0, _core_utils.readUint16)(data, position + 17); + pageInfo.lossless = !!(pageSegmentFlags & 1); + pageInfo.refinement = !!(pageSegmentFlags & 2); + pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; + pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; + pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); + pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); + args = [pageInfo]; + break; + + case 49: + break; + + case 50: + break; + + case 51: + break; + + case 53: + args = [header.number, data, position, end]; + break; + + case 62: + break; + + default: + throw new Jbig2Error(`segment type ${header.typeName}(${header.type}) is not implemented`); + } + + const callbackName = "on" + header.typeName; + + if (callbackName in visitor) { + visitor[callbackName].apply(visitor, args); + } +} + +function processSegments(segments, visitor) { + for (let i = 0, ii = segments.length; i < ii; i++) { + processSegment(segments[i], visitor); + } +} + +function parseJbig2Chunks(chunks) { + const visitor = new SimpleSegmentVisitor(); + + for (let i = 0, ii = chunks.length; i < ii; i++) { + const chunk = chunks[i]; + const segments = readSegments({}, chunk.data, chunk.start, chunk.end); + processSegments(segments, visitor); + } + + return visitor.buffer; +} + +function parseJbig2(data) { + throw new Error("Not implemented: parseJbig2"); +} + +class SimpleSegmentVisitor { + onPageInformation(info) { + this.currentPageInfo = info; + const rowSize = info.width + 7 >> 3; + const buffer = new Uint8ClampedArray(rowSize * info.height); + + if (info.defaultPixelValue) { + buffer.fill(0xff); + } + + this.buffer = buffer; + } + + drawBitmap(regionInfo, bitmap) { + const pageInfo = this.currentPageInfo; + const width = regionInfo.width, + height = regionInfo.height; + const rowSize = pageInfo.width + 7 >> 3; + const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; + const buffer = this.buffer; + const mask0 = 128 >> (regionInfo.x & 7); + let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); + let i, j, mask, offset; + + switch (combinationOperator) { + case 0: + for (i = 0; i < height; i++) { + mask = mask0; + offset = offset0; + + for (j = 0; j < width; j++) { + if (bitmap[i][j]) { + buffer[offset] |= mask; + } + + mask >>= 1; + + if (!mask) { + mask = 128; + offset++; + } + } + + offset0 += rowSize; + } + + break; + + case 2: + for (i = 0; i < height; i++) { + mask = mask0; + offset = offset0; + + for (j = 0; j < width; j++) { + if (bitmap[i][j]) { + buffer[offset] ^= mask; + } + + mask >>= 1; + + if (!mask) { + mask = 128; + offset++; + } + } + + offset0 += rowSize; + } + + break; + + default: + throw new Jbig2Error(`operator ${combinationOperator} is not supported`); + } + } + + onImmediateGenericRegion(region, data, start, end) { + const regionInfo = region.info; + const decodingContext = new DecodingContext(data, start, end); + const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); + this.drawBitmap(regionInfo, bitmap); + } + + onImmediateLosslessGenericRegion() { + this.onImmediateGenericRegion(...arguments); + } + + onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { + let huffmanTables, huffmanInput; + + if (dictionary.huffman) { + huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); + huffmanInput = new Reader(data, start, end); + } + + let symbols = this.symbols; + + if (!symbols) { + this.symbols = symbols = {}; + } + + const inputSymbols = []; + + for (const referredSegment of referredSegments) { + const referredSymbols = symbols[referredSegment]; + + if (referredSymbols) { + inputSymbols.push(...referredSymbols); + } + } + + const decodingContext = new DecodingContext(data, start, end); + symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); + } + + onImmediateTextRegion(region, referredSegments, data, start, end) { + const regionInfo = region.info; + let huffmanTables, huffmanInput; + const symbols = this.symbols; + const inputSymbols = []; + + for (const referredSegment of referredSegments) { + const referredSymbols = symbols[referredSegment]; + + if (referredSymbols) { + inputSymbols.push(...referredSymbols); + } + } + + const symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length); + + if (region.huffman) { + huffmanInput = new Reader(data, start, end); + huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); + } + + const decodingContext = new DecodingContext(data, start, end); + const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); + this.drawBitmap(regionInfo, bitmap); + } + + onImmediateLosslessTextRegion() { + this.onImmediateTextRegion(...arguments); + } + + onPatternDictionary(dictionary, currentSegment, data, start, end) { + let patterns = this.patterns; + + if (!patterns) { + this.patterns = patterns = {}; + } + + const decodingContext = new DecodingContext(data, start, end); + patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); + } + + onImmediateHalftoneRegion(region, referredSegments, data, start, end) { + const patterns = this.patterns[referredSegments[0]]; + const regionInfo = region.info; + const decodingContext = new DecodingContext(data, start, end); + const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); + this.drawBitmap(regionInfo, bitmap); + } + + onImmediateLosslessHalftoneRegion() { + this.onImmediateHalftoneRegion(...arguments); + } + + onTables(currentSegment, data, start, end) { + let customTables = this.customTables; + + if (!customTables) { + this.customTables = customTables = {}; + } + + customTables[currentSegment] = decodeTablesSegment(data, start, end); + } + +} + +class HuffmanLine { + constructor(lineData) { + if (lineData.length === 2) { + this.isOOB = true; + this.rangeLow = 0; + this.prefixLength = lineData[0]; + this.rangeLength = 0; + this.prefixCode = lineData[1]; + this.isLowerRange = false; + } else { + this.isOOB = false; + this.rangeLow = lineData[0]; + this.prefixLength = lineData[1]; + this.rangeLength = lineData[2]; + this.prefixCode = lineData[3]; + this.isLowerRange = lineData[4] === "lower"; + } + } + +} + +class HuffmanTreeNode { + constructor(line) { + this.children = []; + + if (line) { + this.isLeaf = true; + this.rangeLength = line.rangeLength; + this.rangeLow = line.rangeLow; + this.isLowerRange = line.isLowerRange; + this.isOOB = line.isOOB; + } else { + this.isLeaf = false; + } + } + + buildTree(line, shift) { + const bit = line.prefixCode >> shift & 1; + + if (shift <= 0) { + this.children[bit] = new HuffmanTreeNode(line); + } else { + let node = this.children[bit]; + + if (!node) { + this.children[bit] = node = new HuffmanTreeNode(null); + } + + node.buildTree(line, shift - 1); + } + } + + decodeNode(reader) { + if (this.isLeaf) { + if (this.isOOB) { + return null; + } + + const htOffset = reader.readBits(this.rangeLength); + return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); + } + + const node = this.children[reader.readBit()]; + + if (!node) { + throw new Jbig2Error("invalid Huffman data"); + } + + return node.decodeNode(reader); + } + +} + +class HuffmanTable { + constructor(lines, prefixCodesDone) { + if (!prefixCodesDone) { + this.assignPrefixCodes(lines); + } + + this.rootNode = new HuffmanTreeNode(null); + + for (let i = 0, ii = lines.length; i < ii; i++) { + const line = lines[i]; + + if (line.prefixLength > 0) { + this.rootNode.buildTree(line, line.prefixLength - 1); + } + } + } + + decode(reader) { + return this.rootNode.decodeNode(reader); + } + + assignPrefixCodes(lines) { + const linesLength = lines.length; + let prefixLengthMax = 0; + + for (let i = 0; i < linesLength; i++) { + prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); + } + + const histogram = new Uint32Array(prefixLengthMax + 1); + + for (let i = 0; i < linesLength; i++) { + histogram[lines[i].prefixLength]++; + } + + let currentLength = 1, + firstCode = 0, + currentCode, + currentTemp, + line; + histogram[0] = 0; + + while (currentLength <= prefixLengthMax) { + firstCode = firstCode + histogram[currentLength - 1] << 1; + currentCode = firstCode; + currentTemp = 0; + + while (currentTemp < linesLength) { + line = lines[currentTemp]; + + if (line.prefixLength === currentLength) { + line.prefixCode = currentCode; + currentCode++; + } + + currentTemp++; + } + + currentLength++; + } + } + +} + +function decodeTablesSegment(data, start, end) { + const flags = data[start]; + const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff; + const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff; + const reader = new Reader(data, start + 9, end); + const prefixSizeBits = (flags >> 1 & 7) + 1; + const rangeSizeBits = (flags >> 4 & 7) + 1; + const lines = []; + let prefixLength, + rangeLength, + currentRangeLow = lowestValue; + + do { + prefixLength = reader.readBits(prefixSizeBits); + rangeLength = reader.readBits(rangeSizeBits); + lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); + currentRangeLow += 1 << rangeLength; + } while (currentRangeLow < highestValue); + + prefixLength = reader.readBits(prefixSizeBits); + lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"])); + prefixLength = reader.readBits(prefixSizeBits); + lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); + + if (flags & 1) { + prefixLength = reader.readBits(prefixSizeBits); + lines.push(new HuffmanLine([prefixLength, 0])); + } + + return new HuffmanTable(lines, false); +} + +const standardTablesCache = {}; + +function getStandardTable(number) { + let table = standardTablesCache[number]; + + if (table) { + return table; + } + + let lines; + + switch (number) { + case 1: + lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; + break; + + case 2: + lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]]; + break; + + case 3: + lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]]; + break; + + case 4: + lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]]; + break; + + case 5: + lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]]; + break; + + case 6: + lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]]; + break; + + case 7: + lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]]; + break; + + case 8: + lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]]; + break; + + case 9: + lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]]; + break; + + case 10: + lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]]; + break; + + case 11: + lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; + break; + + case 12: + lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]]; + break; + + case 13: + lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; + break; + + case 14: + lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; + break; + + case 15: + lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]]; + break; + + default: + throw new Jbig2Error(`standard table B.${number} does not exist`); + } + + for (let i = 0, ii = lines.length; i < ii; i++) { + lines[i] = new HuffmanLine(lines[i]); + } + + table = new HuffmanTable(lines, true); + standardTablesCache[number] = table; + return table; +} + +class Reader { + constructor(data, start, end) { + this.data = data; + this.start = start; + this.end = end; + this.position = start; + this.shift = -1; + this.currentByte = 0; + } + + readBit() { + if (this.shift < 0) { + if (this.position >= this.end) { + throw new Jbig2Error("end of data while reading bit"); + } + + this.currentByte = this.data[this.position++]; + this.shift = 7; + } + + const bit = this.currentByte >> this.shift & 1; + this.shift--; + return bit; + } + + readBits(numBits) { + let result = 0, + i; + + for (i = numBits - 1; i >= 0; i--) { + result |= this.readBit() << i; + } + + return result; + } + + byteAlign() { + this.shift = -1; + } + + next() { + if (this.position >= this.end) { + return -1; + } + + return this.data[this.position++]; + } + +} + +function getCustomHuffmanTable(index, referredTo, customTables) { + let currentIndex = 0; + + for (let i = 0, ii = referredTo.length; i < ii; i++) { + const table = customTables[referredTo[i]]; + + if (table) { + if (index === currentIndex) { + return table; + } + + currentIndex++; + } + } + + throw new Jbig2Error("can't find custom Huffman table"); +} + +function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { + const codes = []; + + for (let i = 0; i <= 34; i++) { + const codeLength = reader.readBits(4); + codes.push(new HuffmanLine([i, codeLength, 0, 0])); + } + + const runCodesTable = new HuffmanTable(codes, false); + codes.length = 0; + + for (let i = 0; i < numberOfSymbols;) { + const codeLength = runCodesTable.decode(reader); + + if (codeLength >= 32) { + let repeatedLength, numberOfRepeats, j; + + switch (codeLength) { + case 32: + if (i === 0) { + throw new Jbig2Error("no previous value in symbol ID table"); + } + + numberOfRepeats = reader.readBits(2) + 3; + repeatedLength = codes[i - 1].prefixLength; + break; + + case 33: + numberOfRepeats = reader.readBits(3) + 3; + repeatedLength = 0; + break; + + case 34: + numberOfRepeats = reader.readBits(7) + 11; + repeatedLength = 0; + break; + + default: + throw new Jbig2Error("invalid code length in symbol ID table"); + } + + for (j = 0; j < numberOfRepeats; j++) { + codes.push(new HuffmanLine([i, repeatedLength, 0, 0])); + i++; + } + } else { + codes.push(new HuffmanLine([i, codeLength, 0, 0])); + i++; + } + } + + reader.byteAlign(); + const symbolIDTable = new HuffmanTable(codes, false); + let customIndex = 0, + tableFirstS, + tableDeltaS, + tableDeltaT; + + switch (textRegion.huffmanFS) { + case 0: + case 1: + tableFirstS = getStandardTable(textRegion.huffmanFS + 6); + break; + + case 3: + tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); + customIndex++; + break; + + default: + throw new Jbig2Error("invalid Huffman FS selector"); + } + + switch (textRegion.huffmanDS) { + case 0: + case 1: + case 2: + tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); + break; + + case 3: + tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); + customIndex++; + break; + + default: + throw new Jbig2Error("invalid Huffman DS selector"); + } + + switch (textRegion.huffmanDT) { + case 0: + case 1: + case 2: + tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); + break; + + case 3: + tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); + customIndex++; + break; + + default: + throw new Jbig2Error("invalid Huffman DT selector"); + } + + if (textRegion.refinement) { + throw new Jbig2Error("refinement with Huffman is not supported"); + } + + return { + symbolIDTable, + tableFirstS, + tableDeltaS, + tableDeltaT + }; +} + +function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { + let customIndex = 0, + tableDeltaHeight, + tableDeltaWidth; + + switch (dictionary.huffmanDHSelector) { + case 0: + case 1: + tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); + break; + + case 3: + tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); + customIndex++; + break; + + default: + throw new Jbig2Error("invalid Huffman DH selector"); + } + + switch (dictionary.huffmanDWSelector) { + case 0: + case 1: + tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); + break; + + case 3: + tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); + customIndex++; + break; + + default: + throw new Jbig2Error("invalid Huffman DW selector"); + } + + let tableBitmapSize, tableAggregateInstances; + + if (dictionary.bitmapSizeSelector) { + tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); + customIndex++; + } else { + tableBitmapSize = getStandardTable(1); + } + + if (dictionary.aggregationInstancesSelector) { + tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); + } else { + tableAggregateInstances = getStandardTable(1); + } + + return { + tableDeltaHeight, + tableDeltaWidth, + tableBitmapSize, + tableAggregateInstances + }; +} + +function readUncompressedBitmap(reader, width, height) { + const bitmap = []; + + for (let y = 0; y < height; y++) { + const row = new Uint8Array(width); + bitmap.push(row); + + for (let x = 0; x < width; x++) { + row[x] = reader.readBit(); + } + + reader.byteAlign(); + } + + return bitmap; +} + +function decodeMMRBitmap(input, width, height, endOfBlock) { + const params = { + K: -1, + Columns: width, + Rows: height, + BlackIs1: true, + EndOfBlock: endOfBlock + }; + const decoder = new _ccitt.CCITTFaxDecoder(input, params); + const bitmap = []; + let currentByte, + eof = false; + + for (let y = 0; y < height; y++) { + const row = new Uint8Array(width); + bitmap.push(row); + let shift = -1; + + for (let x = 0; x < width; x++) { + if (shift < 0) { + currentByte = decoder.readNextChar(); + + if (currentByte === -1) { + currentByte = 0; + eof = true; + } + + shift = 7; + } + + row[x] = currentByte >> shift & 1; + shift--; + } + } + + if (endOfBlock && !eof) { + const lookForEOFLimit = 5; + + for (let i = 0; i < lookForEOFLimit; i++) { + if (decoder.readNextChar() === -1) { + break; + } + } + } + + return bitmap; +} + +class Jbig2Image { + parseChunks(chunks) { + return parseJbig2Chunks(chunks); + } + + parse(data) { + throw new Error("Not implemented: Jbig2Image.parse"); + } + +} + +exports.Jbig2Image = Jbig2Image; + +/***/ }), +/* 26 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ArithmeticDecoder = void 0; +const QeTable = [{ + qe: 0x5601, + nmps: 1, + nlps: 1, + switchFlag: 1 +}, { + qe: 0x3401, + nmps: 2, + nlps: 6, + switchFlag: 0 +}, { + qe: 0x1801, + nmps: 3, + nlps: 9, + switchFlag: 0 +}, { + qe: 0x0ac1, + nmps: 4, + nlps: 12, + switchFlag: 0 +}, { + qe: 0x0521, + nmps: 5, + nlps: 29, + switchFlag: 0 +}, { + qe: 0x0221, + nmps: 38, + nlps: 33, + switchFlag: 0 +}, { + qe: 0x5601, + nmps: 7, + nlps: 6, + switchFlag: 1 +}, { + qe: 0x5401, + nmps: 8, + nlps: 14, + switchFlag: 0 +}, { + qe: 0x4801, + nmps: 9, + nlps: 14, + switchFlag: 0 +}, { + qe: 0x3801, + nmps: 10, + nlps: 14, + switchFlag: 0 +}, { + qe: 0x3001, + nmps: 11, + nlps: 17, + switchFlag: 0 +}, { + qe: 0x2401, + nmps: 12, + nlps: 18, + switchFlag: 0 +}, { + qe: 0x1c01, + nmps: 13, + nlps: 20, + switchFlag: 0 +}, { + qe: 0x1601, + nmps: 29, + nlps: 21, + switchFlag: 0 +}, { + qe: 0x5601, + nmps: 15, + nlps: 14, + switchFlag: 1 +}, { + qe: 0x5401, + nmps: 16, + nlps: 14, + switchFlag: 0 +}, { + qe: 0x5101, + nmps: 17, + nlps: 15, + switchFlag: 0 +}, { + qe: 0x4801, + nmps: 18, + nlps: 16, + switchFlag: 0 +}, { + qe: 0x3801, + nmps: 19, + nlps: 17, + switchFlag: 0 +}, { + qe: 0x3401, + nmps: 20, + nlps: 18, + switchFlag: 0 +}, { + qe: 0x3001, + nmps: 21, + nlps: 19, + switchFlag: 0 +}, { + qe: 0x2801, + nmps: 22, + nlps: 19, + switchFlag: 0 +}, { + qe: 0x2401, + nmps: 23, + nlps: 20, + switchFlag: 0 +}, { + qe: 0x2201, + nmps: 24, + nlps: 21, + switchFlag: 0 +}, { + qe: 0x1c01, + nmps: 25, + nlps: 22, + switchFlag: 0 +}, { + qe: 0x1801, + nmps: 26, + nlps: 23, + switchFlag: 0 +}, { + qe: 0x1601, + nmps: 27, + nlps: 24, + switchFlag: 0 +}, { + qe: 0x1401, + nmps: 28, + nlps: 25, + switchFlag: 0 +}, { + qe: 0x1201, + nmps: 29, + nlps: 26, + switchFlag: 0 +}, { + qe: 0x1101, + nmps: 30, + nlps: 27, + switchFlag: 0 +}, { + qe: 0x0ac1, + nmps: 31, + nlps: 28, + switchFlag: 0 +}, { + qe: 0x09c1, + nmps: 32, + nlps: 29, + switchFlag: 0 +}, { + qe: 0x08a1, + nmps: 33, + nlps: 30, + switchFlag: 0 +}, { + qe: 0x0521, + nmps: 34, + nlps: 31, + switchFlag: 0 +}, { + qe: 0x0441, + nmps: 35, + nlps: 32, + switchFlag: 0 +}, { + qe: 0x02a1, + nmps: 36, + nlps: 33, + switchFlag: 0 +}, { + qe: 0x0221, + nmps: 37, + nlps: 34, + switchFlag: 0 +}, { + qe: 0x0141, + nmps: 38, + nlps: 35, + switchFlag: 0 +}, { + qe: 0x0111, + nmps: 39, + nlps: 36, + switchFlag: 0 +}, { + qe: 0x0085, + nmps: 40, + nlps: 37, + switchFlag: 0 +}, { + qe: 0x0049, + nmps: 41, + nlps: 38, + switchFlag: 0 +}, { + qe: 0x0025, + nmps: 42, + nlps: 39, + switchFlag: 0 +}, { + qe: 0x0015, + nmps: 43, + nlps: 40, + switchFlag: 0 +}, { + qe: 0x0009, + nmps: 44, + nlps: 41, + switchFlag: 0 +}, { + qe: 0x0005, + nmps: 45, + nlps: 42, + switchFlag: 0 +}, { + qe: 0x0001, + nmps: 45, + nlps: 43, + switchFlag: 0 +}, { + qe: 0x5601, + nmps: 46, + nlps: 46, + switchFlag: 0 +}]; + +class ArithmeticDecoder { + constructor(data, start, end) { + this.data = data; + this.bp = start; + this.dataEnd = end; + this.chigh = data[start]; + this.clow = 0; + this.byteIn(); + this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f; + this.clow = this.clow << 7 & 0xffff; + this.ct -= 7; + this.a = 0x8000; + } + + byteIn() { + const data = this.data; + let bp = this.bp; + + if (data[bp] === 0xff) { + if (data[bp + 1] > 0x8f) { + this.clow += 0xff00; + this.ct = 8; + } else { + bp++; + this.clow += data[bp] << 9; + this.ct = 7; + this.bp = bp; + } + } else { + bp++; + this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00; + this.ct = 8; + this.bp = bp; + } + + if (this.clow > 0xffff) { + this.chigh += this.clow >> 16; + this.clow &= 0xffff; + } + } + + readBit(contexts, pos) { + let cx_index = contexts[pos] >> 1, + cx_mps = contexts[pos] & 1; + const qeTableIcx = QeTable[cx_index]; + const qeIcx = qeTableIcx.qe; + let d; + let a = this.a - qeIcx; + + if (this.chigh < qeIcx) { + if (a < qeIcx) { + a = qeIcx; + d = cx_mps; + cx_index = qeTableIcx.nmps; + } else { + a = qeIcx; + d = 1 ^ cx_mps; + + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + + cx_index = qeTableIcx.nlps; + } + } else { + this.chigh -= qeIcx; + + if ((a & 0x8000) !== 0) { + this.a = a; + return cx_mps; + } + + if (a < qeIcx) { + d = 1 ^ cx_mps; + + if (qeTableIcx.switchFlag === 1) { + cx_mps = d; + } + + cx_index = qeTableIcx.nlps; + } else { + d = cx_mps; + cx_index = qeTableIcx.nmps; + } + } + + do { + if (this.ct === 0) { + this.byteIn(); + } + + a <<= 1; + this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1; + this.clow = this.clow << 1 & 0xffff; + this.ct--; + } while ((a & 0x8000) === 0); + + this.a = a; + contexts[pos] = cx_index << 1 | cx_mps; + return d; + } + +} + +exports.ArithmeticDecoder = ArithmeticDecoder; + +/***/ }), +/* 27 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.JpegStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +var _primitives = __w_pdfjs_require__(5); + +var _jpg = __w_pdfjs_require__(28); + +var _util = __w_pdfjs_require__(2); + +class JpegStream extends _decode_stream.DecodeStream { + constructor(stream, maybeLength, params) { + let ch; + + while ((ch = stream.getByte()) !== -1) { + if (ch === 0xff) { + stream.skip(-1); + break; + } + } + + super(maybeLength); + this.stream = stream; + this.dict = stream.dict; + this.maybeLength = maybeLength; + this.params = params; + } + + get bytes() { + return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); + } + + ensureBuffer(requested) {} + + readBlock() { + if (this.eof) { + return; + } + + const jpegOptions = { + decodeTransform: undefined, + colorTransform: undefined + }; + const decodeArr = this.dict.getArray("D", "Decode"); + + if (this.forceRGB && Array.isArray(decodeArr)) { + const bitsPerComponent = this.dict.get("BPC", "BitsPerComponent") || 8; + const decodeArrLength = decodeArr.length; + const transform = new Int32Array(decodeArrLength); + let transformNeeded = false; + const maxValue = (1 << bitsPerComponent) - 1; + + for (let i = 0; i < decodeArrLength; i += 2) { + transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; + transform[i + 1] = decodeArr[i] * maxValue | 0; + + if (transform[i] !== 256 || transform[i + 1] !== 0) { + transformNeeded = true; + } + } + + if (transformNeeded) { + jpegOptions.decodeTransform = transform; + } + } + + if (this.params instanceof _primitives.Dict) { + const colorTransform = this.params.get("ColorTransform"); + + if (Number.isInteger(colorTransform)) { + jpegOptions.colorTransform = colorTransform; + } + } + + const jpegImage = new _jpg.JpegImage(jpegOptions); + jpegImage.parse(this.bytes); + const data = jpegImage.getData({ + width: this.drawWidth, + height: this.drawHeight, + forceRGB: this.forceRGB, + isSourcePDF: true + }); + this.buffer = data; + this.bufferLength = data.length; + this.eof = true; + } + +} + +exports.JpegStream = JpegStream; + +/***/ }), +/* 28 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.JpegImage = void 0; + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +class JpegError extends _util.BaseException { + constructor(msg) { + super(`JPEG error: ${msg}`, "JpegError"); + } + +} + +class DNLMarkerError extends _util.BaseException { + constructor(message, scanLines) { + super(message, "DNLMarkerError"); + this.scanLines = scanLines; + } + +} + +class EOIMarkerError extends _util.BaseException { + constructor(msg) { + super(msg, "EOIMarkerError"); + } + +} + +const dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); +const dctCos1 = 4017; +const dctSin1 = 799; +const dctCos3 = 3406; +const dctSin3 = 2276; +const dctCos6 = 1567; +const dctSin6 = 3784; +const dctSqrt2 = 5793; +const dctSqrt1d2 = 2896; + +function buildHuffmanTable(codeLengths, values) { + let k = 0, + i, + j, + length = 16; + + while (length > 0 && !codeLengths[length - 1]) { + length--; + } + + const code = [{ + children: [], + index: 0 + }]; + let p = code[0], + q; + + for (i = 0; i < length; i++) { + for (j = 0; j < codeLengths[i]; j++) { + p = code.pop(); + p.children[p.index] = values[k]; + + while (p.index > 0) { + p = code.pop(); + } + + p.index++; + code.push(p); + + while (code.length <= i) { + code.push(q = { + children: [], + index: 0 + }); + p.children[p.index] = q.children; + p = q; + } + + k++; + } + + if (i + 1 < length) { + code.push(q = { + children: [], + index: 0 + }); + p.children[p.index] = q.children; + p = q; + } + } + + return code[0].children; +} + +function getBlockBufferOffset(component, row, col) { + return 64 * ((component.blocksPerLine + 1) * row + col); +} + +function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) { + const mcusPerLine = frame.mcusPerLine; + const progressive = frame.progressive; + const startOffset = offset; + let bitsData = 0, + bitsCount = 0; + + function readBit() { + if (bitsCount > 0) { + bitsCount--; + return bitsData >> bitsCount & 1; + } + + bitsData = data[offset++]; + + if (bitsData === 0xff) { + const nextByte = data[offset++]; + + if (nextByte) { + if (nextByte === 0xdc && parseDNLMarker) { + offset += 2; + const scanLines = (0, _core_utils.readUint16)(data, offset); + offset += 2; + + if (scanLines > 0 && scanLines !== frame.scanLines) { + throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines); + } + } else if (nextByte === 0xd9) { + if (parseDNLMarker) { + const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0); + + if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) { + throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines); + } + } + + throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); + } + + throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`); + } + } + + bitsCount = 7; + return bitsData >>> 7; + } + + function decodeHuffman(tree) { + let node = tree; + + while (true) { + node = node[readBit()]; + + switch (typeof node) { + case "number": + return node; + + case "object": + continue; + } + + throw new JpegError("invalid huffman sequence"); + } + } + + function receive(length) { + let n = 0; + + while (length > 0) { + n = n << 1 | readBit(); + length--; + } + + return n; + } + + function receiveAndExtend(length) { + if (length === 1) { + return readBit() === 1 ? 1 : -1; + } + + const n = receive(length); + + if (n >= 1 << length - 1) { + return n; + } + + return n + (-1 << length) + 1; + } + + function decodeBaseline(component, blockOffset) { + const t = decodeHuffman(component.huffmanTableDC); + const diff = t === 0 ? 0 : receiveAndExtend(t); + component.blockData[blockOffset] = component.pred += diff; + let k = 1; + + while (k < 64) { + const rs = decodeHuffman(component.huffmanTableAC); + const s = rs & 15, + r = rs >> 4; + + if (s === 0) { + if (r < 15) { + break; + } + + k += 16; + continue; + } + + k += r; + const z = dctZigZag[k]; + component.blockData[blockOffset + z] = receiveAndExtend(s); + k++; + } + } + + function decodeDCFirst(component, blockOffset) { + const t = decodeHuffman(component.huffmanTableDC); + const diff = t === 0 ? 0 : receiveAndExtend(t) << successive; + component.blockData[blockOffset] = component.pred += diff; + } + + function decodeDCSuccessive(component, blockOffset) { + component.blockData[blockOffset] |= readBit() << successive; + } + + let eobrun = 0; + + function decodeACFirst(component, blockOffset) { + if (eobrun > 0) { + eobrun--; + return; + } + + let k = spectralStart; + const e = spectralEnd; + + while (k <= e) { + const rs = decodeHuffman(component.huffmanTableAC); + const s = rs & 15, + r = rs >> 4; + + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r) - 1; + break; + } + + k += 16; + continue; + } + + k += r; + const z = dctZigZag[k]; + component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive); + k++; + } + } + + let successiveACState = 0, + successiveACNextValue; + + function decodeACSuccessive(component, blockOffset) { + let k = spectralStart; + const e = spectralEnd; + let r = 0; + let s; + let rs; + + while (k <= e) { + const offsetZ = blockOffset + dctZigZag[k]; + const sign = component.blockData[offsetZ] < 0 ? -1 : 1; + + switch (successiveACState) { + case 0: + rs = decodeHuffman(component.huffmanTableAC); + s = rs & 15; + r = rs >> 4; + + if (s === 0) { + if (r < 15) { + eobrun = receive(r) + (1 << r); + successiveACState = 4; + } else { + r = 16; + successiveACState = 1; + } + } else { + if (s !== 1) { + throw new JpegError("invalid ACn encoding"); + } + + successiveACNextValue = receiveAndExtend(s); + successiveACState = r ? 2 : 3; + } + + continue; + + case 1: + case 2: + if (component.blockData[offsetZ]) { + component.blockData[offsetZ] += sign * (readBit() << successive); + } else { + r--; + + if (r === 0) { + successiveACState = successiveACState === 2 ? 3 : 0; + } + } + + break; + + case 3: + if (component.blockData[offsetZ]) { + component.blockData[offsetZ] += sign * (readBit() << successive); + } else { + component.blockData[offsetZ] = successiveACNextValue << successive; + successiveACState = 0; + } + + break; + + case 4: + if (component.blockData[offsetZ]) { + component.blockData[offsetZ] += sign * (readBit() << successive); + } + + break; + } + + k++; + } + + if (successiveACState === 4) { + eobrun--; + + if (eobrun === 0) { + successiveACState = 0; + } + } + } + + let blockRow = 0; + + function decodeMcu(component, decode, mcu, row, col) { + const mcuRow = mcu / mcusPerLine | 0; + const mcuCol = mcu % mcusPerLine; + blockRow = mcuRow * component.v + row; + const blockCol = mcuCol * component.h + col; + const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, blockOffset); + } + + function decodeBlock(component, decode, mcu) { + blockRow = mcu / component.blocksPerLine | 0; + const blockCol = mcu % component.blocksPerLine; + const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); + decode(component, blockOffset); + } + + const componentsLength = components.length; + let component, i, j, k, n; + let decodeFn; + + if (progressive) { + if (spectralStart === 0) { + decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; + } else { + decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; + } + } else { + decodeFn = decodeBaseline; + } + + let mcu = 0, + fileMarker; + let mcuExpected; + + if (componentsLength === 1) { + mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; + } else { + mcuExpected = mcusPerLine * frame.mcusPerColumn; + } + + let h, v; + + while (mcu <= mcuExpected) { + const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; + + if (mcuToRead > 0) { + for (i = 0; i < componentsLength; i++) { + components[i].pred = 0; + } + + eobrun = 0; + + if (componentsLength === 1) { + component = components[0]; + + for (n = 0; n < mcuToRead; n++) { + decodeBlock(component, decodeFn, mcu); + mcu++; + } + } else { + for (n = 0; n < mcuToRead; n++) { + for (i = 0; i < componentsLength; i++) { + component = components[i]; + h = component.h; + v = component.v; + + for (j = 0; j < v; j++) { + for (k = 0; k < h; k++) { + decodeMcu(component, decodeFn, mcu, j, k); + } + } + } + + mcu++; + } + } + } + + bitsCount = 0; + fileMarker = findNextFileMarker(data, offset); + + if (!fileMarker) { + break; + } + + if (fileMarker.invalid) { + const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; + (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`); + offset = fileMarker.offset; + } + + if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) { + offset += 2; + } else { + break; + } + } + + return offset - startOffset; +} + +function quantizeAndInverse(component, blockBufferOffset, p) { + const qt = component.quantizationTable, + blockData = component.blockData; + let v0, v1, v2, v3, v4, v5, v6, v7; + let p0, p1, p2, p3, p4, p5, p6, p7; + let t; + + if (!qt) { + throw new JpegError("missing required Quantization Table."); + } + + for (let row = 0; row < 64; row += 8) { + p0 = blockData[blockBufferOffset + row]; + p1 = blockData[blockBufferOffset + row + 1]; + p2 = blockData[blockBufferOffset + row + 2]; + p3 = blockData[blockBufferOffset + row + 3]; + p4 = blockData[blockBufferOffset + row + 4]; + p5 = blockData[blockBufferOffset + row + 5]; + p6 = blockData[blockBufferOffset + row + 6]; + p7 = blockData[blockBufferOffset + row + 7]; + p0 *= qt[row]; + + if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { + t = dctSqrt2 * p0 + 512 >> 10; + p[row] = t; + p[row + 1] = t; + p[row + 2] = t; + p[row + 3] = t; + p[row + 4] = t; + p[row + 5] = t; + p[row + 6] = t; + p[row + 7] = t; + continue; + } + + p1 *= qt[row + 1]; + p2 *= qt[row + 2]; + p3 *= qt[row + 3]; + p4 *= qt[row + 4]; + p5 *= qt[row + 5]; + p6 *= qt[row + 6]; + p7 *= qt[row + 7]; + v0 = dctSqrt2 * p0 + 128 >> 8; + v1 = dctSqrt2 * p4 + 128 >> 8; + v2 = p2; + v3 = p6; + v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; + v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; + v5 = p3 << 4; + v6 = p5 << 4; + v0 = v0 + v1 + 1 >> 1; + v1 = v0 - v1; + t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; + v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; + v3 = t; + v4 = v4 + v6 + 1 >> 1; + v6 = v4 - v6; + v7 = v7 + v5 + 1 >> 1; + v5 = v7 - v5; + v0 = v0 + v3 + 1 >> 1; + v3 = v0 - v3; + v1 = v1 + v2 + 1 >> 1; + v2 = v1 - v2; + t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; + v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; + v7 = t; + t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; + v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; + v6 = t; + p[row] = v0 + v7; + p[row + 7] = v0 - v7; + p[row + 1] = v1 + v6; + p[row + 6] = v1 - v6; + p[row + 2] = v2 + v5; + p[row + 5] = v2 - v5; + p[row + 3] = v3 + v4; + p[row + 4] = v3 - v4; + } + + for (let col = 0; col < 8; ++col) { + p0 = p[col]; + p1 = p[col + 8]; + p2 = p[col + 16]; + p3 = p[col + 24]; + p4 = p[col + 32]; + p5 = p[col + 40]; + p6 = p[col + 48]; + p7 = p[col + 56]; + + if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { + t = dctSqrt2 * p0 + 8192 >> 14; + + if (t < -2040) { + t = 0; + } else if (t >= 2024) { + t = 255; + } else { + t = t + 2056 >> 4; + } + + blockData[blockBufferOffset + col] = t; + blockData[blockBufferOffset + col + 8] = t; + blockData[blockBufferOffset + col + 16] = t; + blockData[blockBufferOffset + col + 24] = t; + blockData[blockBufferOffset + col + 32] = t; + blockData[blockBufferOffset + col + 40] = t; + blockData[blockBufferOffset + col + 48] = t; + blockData[blockBufferOffset + col + 56] = t; + continue; + } + + v0 = dctSqrt2 * p0 + 2048 >> 12; + v1 = dctSqrt2 * p4 + 2048 >> 12; + v2 = p2; + v3 = p6; + v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; + v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; + v5 = p3; + v6 = p5; + v0 = (v0 + v1 + 1 >> 1) + 4112; + v1 = v0 - v1; + t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; + v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; + v3 = t; + v4 = v4 + v6 + 1 >> 1; + v6 = v4 - v6; + v7 = v7 + v5 + 1 >> 1; + v5 = v7 - v5; + v0 = v0 + v3 + 1 >> 1; + v3 = v0 - v3; + v1 = v1 + v2 + 1 >> 1; + v2 = v1 - v2; + t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; + v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; + v7 = t; + t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; + v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; + v6 = t; + p0 = v0 + v7; + p7 = v0 - v7; + p1 = v1 + v6; + p6 = v1 - v6; + p2 = v2 + v5; + p5 = v2 - v5; + p3 = v3 + v4; + p4 = v3 - v4; + + if (p0 < 16) { + p0 = 0; + } else if (p0 >= 4080) { + p0 = 255; + } else { + p0 >>= 4; + } + + if (p1 < 16) { + p1 = 0; + } else if (p1 >= 4080) { + p1 = 255; + } else { + p1 >>= 4; + } + + if (p2 < 16) { + p2 = 0; + } else if (p2 >= 4080) { + p2 = 255; + } else { + p2 >>= 4; + } + + if (p3 < 16) { + p3 = 0; + } else if (p3 >= 4080) { + p3 = 255; + } else { + p3 >>= 4; + } + + if (p4 < 16) { + p4 = 0; + } else if (p4 >= 4080) { + p4 = 255; + } else { + p4 >>= 4; + } + + if (p5 < 16) { + p5 = 0; + } else if (p5 >= 4080) { + p5 = 255; + } else { + p5 >>= 4; + } + + if (p6 < 16) { + p6 = 0; + } else if (p6 >= 4080) { + p6 = 255; + } else { + p6 >>= 4; + } + + if (p7 < 16) { + p7 = 0; + } else if (p7 >= 4080) { + p7 = 255; + } else { + p7 >>= 4; + } + + blockData[blockBufferOffset + col] = p0; + blockData[blockBufferOffset + col + 8] = p1; + blockData[blockBufferOffset + col + 16] = p2; + blockData[blockBufferOffset + col + 24] = p3; + blockData[blockBufferOffset + col + 32] = p4; + blockData[blockBufferOffset + col + 40] = p5; + blockData[blockBufferOffset + col + 48] = p6; + blockData[blockBufferOffset + col + 56] = p7; + } +} + +function buildComponentData(frame, component) { + const blocksPerLine = component.blocksPerLine; + const blocksPerColumn = component.blocksPerColumn; + const computationBuffer = new Int16Array(64); + + for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) { + for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) { + const offset = getBlockBufferOffset(component, blockRow, blockCol); + quantizeAndInverse(component, offset, computationBuffer); + } + } + + return component.blockData; +} + +function findNextFileMarker(data, currentPos, startPos = currentPos) { + const maxPos = data.length - 1; + let newPos = startPos < currentPos ? startPos : currentPos; + + if (currentPos >= maxPos) { + return null; + } + + const currentMarker = (0, _core_utils.readUint16)(data, currentPos); + + if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) { + return { + invalid: null, + marker: currentMarker, + offset: currentPos + }; + } + + let newMarker = (0, _core_utils.readUint16)(data, newPos); + + while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) { + if (++newPos >= maxPos) { + return null; + } + + newMarker = (0, _core_utils.readUint16)(data, newPos); + } + + return { + invalid: currentMarker.toString(16), + marker: newMarker, + offset: newPos + }; +} + +class JpegImage { + constructor({ + decodeTransform = null, + colorTransform = -1 + } = {}) { + this._decodeTransform = decodeTransform; + this._colorTransform = colorTransform; + } + + parse(data, { + dnlScanLines = null + } = {}) { + function readDataBlock() { + const length = (0, _core_utils.readUint16)(data, offset); + offset += 2; + let endOffset = offset + length - 2; + const fileMarker = findNextFileMarker(data, endOffset, offset); + + if (fileMarker && fileMarker.invalid) { + (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid); + endOffset = fileMarker.offset; + } + + const array = data.subarray(offset, endOffset); + offset += array.length; + return array; + } + + function prepareComponents(frame) { + const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); + const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); + + for (let i = 0, ii = frame.components.length; i < ii; i++) { + const component = frame.components[i]; + const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); + const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); + const blocksPerLineForMcu = mcusPerLine * component.h; + const blocksPerColumnForMcu = mcusPerColumn * component.v; + const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); + component.blockData = new Int16Array(blocksBufferSize); + component.blocksPerLine = blocksPerLine; + component.blocksPerColumn = blocksPerColumn; + } + + frame.mcusPerLine = mcusPerLine; + frame.mcusPerColumn = mcusPerColumn; + } + + let offset = 0; + let jfif = null; + let adobe = null; + let frame, resetInterval; + let numSOSMarkers = 0; + const quantizationTables = []; + const huffmanTablesAC = [], + huffmanTablesDC = []; + let fileMarker = (0, _core_utils.readUint16)(data, offset); + offset += 2; + + if (fileMarker !== 0xffd8) { + throw new JpegError("SOI not found"); + } + + fileMarker = (0, _core_utils.readUint16)(data, offset); + offset += 2; + + markerLoop: while (fileMarker !== 0xffd9) { + let i, j, l; + + switch (fileMarker) { + case 0xffe0: + case 0xffe1: + case 0xffe2: + case 0xffe3: + case 0xffe4: + case 0xffe5: + case 0xffe6: + case 0xffe7: + case 0xffe8: + case 0xffe9: + case 0xffea: + case 0xffeb: + case 0xffec: + case 0xffed: + case 0xffee: + case 0xffef: + case 0xfffe: + const appData = readDataBlock(); + + if (fileMarker === 0xffe0) { + if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { + jfif = { + version: { + major: appData[5], + minor: appData[6] + }, + densityUnits: appData[7], + xDensity: appData[8] << 8 | appData[9], + yDensity: appData[10] << 8 | appData[11], + thumbWidth: appData[12], + thumbHeight: appData[13], + thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) + }; + } + } + + if (fileMarker === 0xffee) { + if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) { + adobe = { + version: appData[5] << 8 | appData[6], + flags0: appData[7] << 8 | appData[8], + flags1: appData[9] << 8 | appData[10], + transformCode: appData[11] + }; + } + } + + break; + + case 0xffdb: + const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset); + offset += 2; + const quantizationTablesEnd = quantizationTablesLength + offset - 2; + let z; + + while (offset < quantizationTablesEnd) { + const quantizationTableSpec = data[offset++]; + const tableData = new Uint16Array(64); + + if (quantizationTableSpec >> 4 === 0) { + for (j = 0; j < 64; j++) { + z = dctZigZag[j]; + tableData[z] = data[offset++]; + } + } else if (quantizationTableSpec >> 4 === 1) { + for (j = 0; j < 64; j++) { + z = dctZigZag[j]; + tableData[z] = (0, _core_utils.readUint16)(data, offset); + offset += 2; + } + } else { + throw new JpegError("DQT - invalid table spec"); + } + + quantizationTables[quantizationTableSpec & 15] = tableData; + } + + break; + + case 0xffc0: + case 0xffc1: + case 0xffc2: + if (frame) { + throw new JpegError("Only single frame JPEGs supported"); + } + + offset += 2; + frame = {}; + frame.extended = fileMarker === 0xffc1; + frame.progressive = fileMarker === 0xffc2; + frame.precision = data[offset++]; + const sofScanLines = (0, _core_utils.readUint16)(data, offset); + offset += 2; + frame.scanLines = dnlScanLines || sofScanLines; + frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset); + offset += 2; + frame.components = []; + frame.componentIds = {}; + const componentsCount = data[offset++]; + let maxH = 0, + maxV = 0; + + for (i = 0; i < componentsCount; i++) { + const componentId = data[offset]; + const h = data[offset + 1] >> 4; + const v = data[offset + 1] & 15; + + if (maxH < h) { + maxH = h; + } + + if (maxV < v) { + maxV = v; + } + + const qId = data[offset + 2]; + l = frame.components.push({ + h, + v, + quantizationId: qId, + quantizationTable: null + }); + frame.componentIds[componentId] = l - 1; + offset += 3; + } + + frame.maxH = maxH; + frame.maxV = maxV; + prepareComponents(frame); + break; + + case 0xffc4: + const huffmanLength = (0, _core_utils.readUint16)(data, offset); + offset += 2; + + for (i = 2; i < huffmanLength;) { + const huffmanTableSpec = data[offset++]; + const codeLengths = new Uint8Array(16); + let codeLengthSum = 0; + + for (j = 0; j < 16; j++, offset++) { + codeLengthSum += codeLengths[j] = data[offset]; + } + + const huffmanValues = new Uint8Array(codeLengthSum); + + for (j = 0; j < codeLengthSum; j++, offset++) { + huffmanValues[j] = data[offset]; + } + + i += 17 + codeLengthSum; + (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); + } + + break; + + case 0xffdd: + offset += 2; + resetInterval = (0, _core_utils.readUint16)(data, offset); + offset += 2; + break; + + case 0xffda: + const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; + offset += 2; + const selectorsCount = data[offset++], + components = []; + + for (i = 0; i < selectorsCount; i++) { + const index = data[offset++]; + const componentIndex = frame.componentIds[index]; + const component = frame.components[componentIndex]; + component.index = index; + const tableSpec = data[offset++]; + component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; + component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; + components.push(component); + } + + const spectralStart = data[offset++], + spectralEnd = data[offset++], + successiveApproximation = data[offset++]; + + try { + const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); + offset += processed; + } catch (ex) { + if (ex instanceof DNLMarkerError) { + (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`); + return this.parse(data, { + dnlScanLines: ex.scanLines + }); + } else if (ex instanceof EOIMarkerError) { + (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`); + break markerLoop; + } + + throw ex; + } + + break; + + case 0xffdc: + offset += 4; + break; + + case 0xffff: + if (data[offset] !== 0xff) { + offset--; + } + + break; + + default: + const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3); + + if (nextFileMarker && nextFileMarker.invalid) { + (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid); + offset = nextFileMarker.offset; + break; + } + + if (!nextFileMarker || offset >= data.length - 1) { + (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9)."); + break markerLoop; + } + + throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16)); + } + + fileMarker = (0, _core_utils.readUint16)(data, offset); + offset += 2; + } + + this.width = frame.samplesPerLine; + this.height = frame.scanLines; + this.jfif = jfif; + this.adobe = adobe; + this.components = []; + + for (let i = 0, ii = frame.components.length; i < ii; i++) { + const component = frame.components[i]; + const quantizationTable = quantizationTables[component.quantizationId]; + + if (quantizationTable) { + component.quantizationTable = quantizationTable; + } + + this.components.push({ + index: component.index, + output: buildComponentData(frame, component), + scaleX: component.h / frame.maxH, + scaleY: component.v / frame.maxV, + blocksPerLine: component.blocksPerLine, + blocksPerColumn: component.blocksPerColumn + }); + } + + this.numComponents = this.components.length; + return undefined; + } + + _getLinearizedBlockData(width, height, isSourcePDF = false) { + const scaleX = this.width / width, + scaleY = this.height / height; + let component, componentScaleX, componentScaleY, blocksPerScanline; + let x, y, i, j, k; + let index; + let offset = 0; + let output; + const numComponents = this.components.length; + const dataLength = width * height * numComponents; + const data = new Uint8ClampedArray(dataLength); + const xScaleBlockOffset = new Uint32Array(width); + const mask3LSB = 0xfffffff8; + let lastComponentScaleX; + + for (i = 0; i < numComponents; i++) { + component = this.components[i]; + componentScaleX = component.scaleX * scaleX; + componentScaleY = component.scaleY * scaleY; + offset = i; + output = component.output; + blocksPerScanline = component.blocksPerLine + 1 << 3; + + if (componentScaleX !== lastComponentScaleX) { + for (x = 0; x < width; x++) { + j = 0 | x * componentScaleX; + xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; + } + + lastComponentScaleX = componentScaleX; + } + + for (y = 0; y < height; y++) { + j = 0 | y * componentScaleY; + index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; + + for (x = 0; x < width; x++) { + data[offset] = output[index + xScaleBlockOffset[x]]; + offset += numComponents; + } + } + } + + let transform = this._decodeTransform; + + if (!isSourcePDF && numComponents === 4 && !transform) { + transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); + } + + if (transform) { + for (i = 0; i < dataLength;) { + for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { + data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; + } + } + } + + return data; + } + + get _isColorConversionNeeded() { + if (this.adobe) { + return !!this.adobe.transformCode; + } + + if (this.numComponents === 3) { + if (this._colorTransform === 0) { + return false; + } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) { + return false; + } + + return true; + } + + if (this._colorTransform === 1) { + return true; + } + + return false; + } + + _convertYccToRgb(data) { + let Y, Cb, Cr; + + for (let i = 0, length = data.length; i < length; i += 3) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + data[i] = Y - 179.456 + 1.402 * Cr; + data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; + data[i + 2] = Y - 226.816 + 1.772 * Cb; + } + + return data; + } + + _convertYcckToRgb(data) { + let Y, Cb, Cr, k; + let offset = 0; + + for (let i = 0, length = data.length; i < length; i += 4) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + k = data[i + 3]; + data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); + data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); + data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); + } + + return data.subarray(0, offset); + } + + _convertYcckToCmyk(data) { + let Y, Cb, Cr; + + for (let i = 0, length = data.length; i < length; i += 4) { + Y = data[i]; + Cb = data[i + 1]; + Cr = data[i + 2]; + data[i] = 434.456 - Y - 1.402 * Cr; + data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; + data[i + 2] = 481.816 - Y - 1.772 * Cb; + } + + return data; + } + + _convertCmykToRgb(data) { + let c, m, y, k; + let offset = 0; + + for (let i = 0, length = data.length; i < length; i += 4) { + c = data[i]; + m = data[i + 1]; + y = data[i + 2]; + k = data[i + 3]; + data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); + data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168); + data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); + } + + return data.subarray(0, offset); + } + + getData({ + width, + height, + forceRGB = false, + isSourcePDF = false + }) { + if (this.numComponents > 4) { + throw new JpegError("Unsupported color mode"); + } + + const data = this._getLinearizedBlockData(width, height, isSourcePDF); + + if (this.numComponents === 1 && forceRGB) { + const dataLength = data.length; + const rgbData = new Uint8ClampedArray(dataLength * 3); + let offset = 0; + + for (let i = 0; i < dataLength; i++) { + const grayColor = data[i]; + rgbData[offset++] = grayColor; + rgbData[offset++] = grayColor; + rgbData[offset++] = grayColor; + } + + return rgbData; + } else if (this.numComponents === 3 && this._isColorConversionNeeded) { + return this._convertYccToRgb(data); + } else if (this.numComponents === 4) { + if (this._isColorConversionNeeded) { + if (forceRGB) { + return this._convertYcckToRgb(data); + } + + return this._convertYcckToCmyk(data); + } else if (forceRGB) { + return this._convertCmykToRgb(data); + } + } + + return data; + } + +} + +exports.JpegImage = JpegImage; + +/***/ }), +/* 29 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.JpxStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +var _jpx = __w_pdfjs_require__(30); + +var _util = __w_pdfjs_require__(2); + +class JpxStream extends _decode_stream.DecodeStream { + constructor(stream, maybeLength, params) { + super(maybeLength); + this.stream = stream; + this.dict = stream.dict; + this.maybeLength = maybeLength; + this.params = params; + } + + get bytes() { + return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); + } + + ensureBuffer(requested) {} + + readBlock() { + if (this.eof) { + return; + } + + const jpxImage = new _jpx.JpxImage(); + jpxImage.parse(this.bytes); + const width = jpxImage.width; + const height = jpxImage.height; + const componentsCount = jpxImage.componentsCount; + const tileCount = jpxImage.tiles.length; + + if (tileCount === 1) { + this.buffer = jpxImage.tiles[0].items; + } else { + const data = new Uint8ClampedArray(width * height * componentsCount); + + for (let k = 0; k < tileCount; k++) { + const tileComponents = jpxImage.tiles[k]; + const tileWidth = tileComponents.width; + const tileHeight = tileComponents.height; + const tileLeft = tileComponents.left; + const tileTop = tileComponents.top; + const src = tileComponents.items; + let srcPosition = 0; + let dataPosition = (width * tileTop + tileLeft) * componentsCount; + const imgRowSize = width * componentsCount; + const tileRowSize = tileWidth * componentsCount; + + for (let j = 0; j < tileHeight; j++) { + const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); + data.set(rowBytes, dataPosition); + srcPosition += tileRowSize; + dataPosition += imgRowSize; + } + } + + this.buffer = data; + } + + this.bufferLength = this.buffer.length; + this.eof = true; + } + +} + +exports.JpxStream = JpxStream; + +/***/ }), +/* 30 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.JpxImage = void 0; + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _arithmetic_decoder = __w_pdfjs_require__(26); + +class JpxError extends _util.BaseException { + constructor(msg) { + super(`JPX error: ${msg}`, "JpxError"); + } + +} + +const SubbandsGainLog2 = { + LL: 0, + LH: 1, + HL: 1, + HH: 2 +}; + +class JpxImage { + constructor() { + this.failOnCorruptedImage = false; + } + + parse(data) { + const head = (0, _core_utils.readUint16)(data, 0); + + if (head === 0xff4f) { + this.parseCodestream(data, 0, data.length); + return; + } + + const length = data.length; + let position = 0; + + while (position < length) { + let headerSize = 8; + let lbox = (0, _core_utils.readUint32)(data, position); + const tbox = (0, _core_utils.readUint32)(data, position + 4); + position += headerSize; + + if (lbox === 1) { + lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4); + position += 8; + headerSize += 8; + } + + if (lbox === 0) { + lbox = length - position + headerSize; + } + + if (lbox < headerSize) { + throw new JpxError("Invalid box field size"); + } + + const dataLength = lbox - headerSize; + let jumpDataLength = true; + + switch (tbox) { + case 0x6a703268: + jumpDataLength = false; + break; + + case 0x636f6c72: + const method = data[position]; + + if (method === 1) { + const colorspace = (0, _core_utils.readUint32)(data, position + 3); + + switch (colorspace) { + case 16: + case 17: + case 18: + break; + + default: + (0, _util.warn)("Unknown colorspace " + colorspace); + break; + } + } else if (method === 2) { + (0, _util.info)("ICC profile not supported"); + } + + break; + + case 0x6a703263: + this.parseCodestream(data, position, position + dataLength); + break; + + case 0x6a502020: + if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) { + (0, _util.warn)("Invalid JP2 signature"); + } + + break; + + case 0x6a501a1a: + case 0x66747970: + case 0x72726571: + case 0x72657320: + case 0x69686472: + break; + + default: + const headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff); + (0, _util.warn)(`Unsupported header type ${tbox} (${headerType}).`); + break; + } + + if (jumpDataLength) { + position += dataLength; + } + } + } + + parseImageProperties(stream) { + let newByte = stream.getByte(); + + while (newByte >= 0) { + const oldByte = newByte; + newByte = stream.getByte(); + const code = oldByte << 8 | newByte; + + if (code === 0xff51) { + stream.skip(4); + const Xsiz = stream.getInt32() >>> 0; + const Ysiz = stream.getInt32() >>> 0; + const XOsiz = stream.getInt32() >>> 0; + const YOsiz = stream.getInt32() >>> 0; + stream.skip(16); + const Csiz = stream.getUint16(); + this.width = Xsiz - XOsiz; + this.height = Ysiz - YOsiz; + this.componentsCount = Csiz; + this.bitsPerComponent = 8; + return; + } + } + + throw new JpxError("No size marker found in JPX stream"); + } + + parseCodestream(data, start, end) { + const context = {}; + let doNotRecover = false; + + try { + let position = start; + + while (position + 1 < end) { + const code = (0, _core_utils.readUint16)(data, position); + position += 2; + let length = 0, + j, + sqcd, + spqcds, + spqcdSize, + scalarExpounded, + tile; + + switch (code) { + case 0xff4f: + context.mainHeader = true; + break; + + case 0xffd9: + break; + + case 0xff51: + length = (0, _core_utils.readUint16)(data, position); + const siz = {}; + siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4); + siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8); + siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12); + siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16); + siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20); + siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24); + siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28); + siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32); + const componentsCount = (0, _core_utils.readUint16)(data, position + 36); + siz.Csiz = componentsCount; + const components = []; + j = position + 38; + + for (let i = 0; i < componentsCount; i++) { + const component = { + precision: (data[j] & 0x7f) + 1, + isSigned: !!(data[j] & 0x80), + XRsiz: data[j + 1], + YRsiz: data[j + 2] + }; + j += 3; + calculateComponentDimensions(component, siz); + components.push(component); + } + + context.SIZ = siz; + context.components = components; + calculateTileGrids(context, components); + context.QCC = []; + context.COC = []; + break; + + case 0xff5c: + length = (0, _core_utils.readUint16)(data, position); + const qcd = {}; + j = position + 2; + sqcd = data[j++]; + + switch (sqcd & 0x1f) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + + default: + throw new Error("Invalid SQcd value " + sqcd); + } + + qcd.noQuantization = spqcdSize === 8; + qcd.scalarExpounded = scalarExpounded; + qcd.guardBits = sqcd >> 5; + spqcds = []; + + while (j < length + position) { + const spqcd = {}; + + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; + j += 2; + } + + spqcds.push(spqcd); + } + + qcd.SPqcds = spqcds; + + if (context.mainHeader) { + context.QCD = qcd; + } else { + context.currentTile.QCD = qcd; + context.currentTile.QCC = []; + } + + break; + + case 0xff5d: + length = (0, _core_utils.readUint16)(data, position); + const qcc = {}; + j = position + 2; + let cqcc; + + if (context.SIZ.Csiz < 257) { + cqcc = data[j++]; + } else { + cqcc = (0, _core_utils.readUint16)(data, j); + j += 2; + } + + sqcd = data[j++]; + + switch (sqcd & 0x1f) { + case 0: + spqcdSize = 8; + scalarExpounded = true; + break; + + case 1: + spqcdSize = 16; + scalarExpounded = false; + break; + + case 2: + spqcdSize = 16; + scalarExpounded = true; + break; + + default: + throw new Error("Invalid SQcd value " + sqcd); + } + + qcc.noQuantization = spqcdSize === 8; + qcc.scalarExpounded = scalarExpounded; + qcc.guardBits = sqcd >> 5; + spqcds = []; + + while (j < length + position) { + const spqcd = {}; + + if (spqcdSize === 8) { + spqcd.epsilon = data[j++] >> 3; + spqcd.mu = 0; + } else { + spqcd.epsilon = data[j] >> 3; + spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; + j += 2; + } + + spqcds.push(spqcd); + } + + qcc.SPqcds = spqcds; + + if (context.mainHeader) { + context.QCC[cqcc] = qcc; + } else { + context.currentTile.QCC[cqcc] = qcc; + } + + break; + + case 0xff52: + length = (0, _core_utils.readUint16)(data, position); + const cod = {}; + j = position + 2; + const scod = data[j++]; + cod.entropyCoderWithCustomPrecincts = !!(scod & 1); + cod.sopMarkerUsed = !!(scod & 2); + cod.ephMarkerUsed = !!(scod & 4); + cod.progressionOrder = data[j++]; + cod.layersCount = (0, _core_utils.readUint16)(data, j); + j += 2; + cod.multipleComponentTransform = data[j++]; + cod.decompositionLevelsCount = data[j++]; + cod.xcb = (data[j++] & 0xf) + 2; + cod.ycb = (data[j++] & 0xf) + 2; + const blockStyle = data[j++]; + cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); + cod.resetContextProbabilities = !!(blockStyle & 2); + cod.terminationOnEachCodingPass = !!(blockStyle & 4); + cod.verticallyStripe = !!(blockStyle & 8); + cod.predictableTermination = !!(blockStyle & 16); + cod.segmentationSymbolUsed = !!(blockStyle & 32); + cod.reversibleTransformation = data[j++]; + + if (cod.entropyCoderWithCustomPrecincts) { + const precinctsSizes = []; + + while (j < length + position) { + const precinctsSize = data[j++]; + precinctsSizes.push({ + PPx: precinctsSize & 0xf, + PPy: precinctsSize >> 4 + }); + } + + cod.precinctsSizes = precinctsSizes; + } + + const unsupported = []; + + if (cod.selectiveArithmeticCodingBypass) { + unsupported.push("selectiveArithmeticCodingBypass"); + } + + if (cod.terminationOnEachCodingPass) { + unsupported.push("terminationOnEachCodingPass"); + } + + if (cod.verticallyStripe) { + unsupported.push("verticallyStripe"); + } + + if (cod.predictableTermination) { + unsupported.push("predictableTermination"); + } + + if (unsupported.length > 0) { + doNotRecover = true; + (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`); + } + + if (context.mainHeader) { + context.COD = cod; + } else { + context.currentTile.COD = cod; + context.currentTile.COC = []; + } + + break; + + case 0xff90: + length = (0, _core_utils.readUint16)(data, position); + tile = {}; + tile.index = (0, _core_utils.readUint16)(data, position + 2); + tile.length = (0, _core_utils.readUint32)(data, position + 4); + tile.dataEnd = tile.length + position - 2; + tile.partIndex = data[position + 8]; + tile.partsCount = data[position + 9]; + context.mainHeader = false; + + if (tile.partIndex === 0) { + tile.COD = context.COD; + tile.COC = context.COC.slice(0); + tile.QCD = context.QCD; + tile.QCC = context.QCC.slice(0); + } + + context.currentTile = tile; + break; + + case 0xff93: + tile = context.currentTile; + + if (tile.partIndex === 0) { + initializeTile(context, tile.index); + buildPackets(context); + } + + length = tile.dataEnd - position; + parseTilePackets(context, data, position, length); + break; + + case 0xff53: + (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented."); + + case 0xff55: + case 0xff57: + case 0xff58: + case 0xff64: + length = (0, _core_utils.readUint16)(data, position); + break; + + default: + throw new Error("Unknown codestream code: " + code.toString(16)); + } + + position += length; + } + } catch (e) { + if (doNotRecover || this.failOnCorruptedImage) { + throw new JpxError(e.message); + } else { + (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`); + } + } + + this.tiles = transformComponents(context); + this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; + this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; + this.componentsCount = context.SIZ.Csiz; + } + +} + +exports.JpxImage = JpxImage; + +function calculateComponentDimensions(component, siz) { + component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); + component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); + component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); + component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); + component.width = component.x1 - component.x0; + component.height = component.y1 - component.y0; +} + +function calculateTileGrids(context, components) { + const siz = context.SIZ; + const tiles = []; + let tile; + const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); + const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); + + for (let q = 0; q < numYtiles; q++) { + for (let p = 0; p < numXtiles; p++) { + tile = {}; + tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); + tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); + tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); + tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); + tile.width = tile.tx1 - tile.tx0; + tile.height = tile.ty1 - tile.ty0; + tile.components = []; + tiles.push(tile); + } + } + + context.tiles = tiles; + const componentsCount = siz.Csiz; + + for (let i = 0, ii = componentsCount; i < ii; i++) { + const component = components[i]; + + for (let j = 0, jj = tiles.length; j < jj; j++) { + const tileComponent = {}; + tile = tiles[j]; + tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); + tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); + tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); + tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); + tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; + tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; + tile.components[i] = tileComponent; + } + } +} + +function getBlocksDimensions(context, component, r) { + const codOrCoc = component.codingStyleParameters; + const result = {}; + + if (!codOrCoc.entropyCoderWithCustomPrecincts) { + result.PPx = 15; + result.PPy = 15; + } else { + result.PPx = codOrCoc.precinctsSizes[r].PPx; + result.PPy = codOrCoc.precinctsSizes[r].PPy; + } + + result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); + result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); + return result; +} + +function buildPrecincts(context, resolution, dimensions) { + const precinctWidth = 1 << dimensions.PPx; + const precinctHeight = 1 << dimensions.PPy; + const isZeroRes = resolution.resLevel === 0; + const precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); + const precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); + const numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; + const numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; + const numprecincts = numprecinctswide * numprecinctshigh; + resolution.precinctParameters = { + precinctWidth, + precinctHeight, + numprecinctswide, + numprecinctshigh, + numprecincts, + precinctWidthInSubband, + precinctHeightInSubband + }; +} + +function buildCodeblocks(context, subband, dimensions) { + const xcb_ = dimensions.xcb_; + const ycb_ = dimensions.ycb_; + const codeblockWidth = 1 << xcb_; + const codeblockHeight = 1 << ycb_; + const cbx0 = subband.tbx0 >> xcb_; + const cby0 = subband.tby0 >> ycb_; + const cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; + const cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; + const precinctParameters = subband.resolution.precinctParameters; + const codeblocks = []; + const precincts = []; + let i, j, codeblock, precinctNumber; + + for (j = cby0; j < cby1; j++) { + for (i = cbx0; i < cbx1; i++) { + codeblock = { + cbx: i, + cby: j, + tbx0: codeblockWidth * i, + tby0: codeblockHeight * j, + tbx1: codeblockWidth * (i + 1), + tby1: codeblockHeight * (j + 1) + }; + codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); + codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); + codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); + codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); + const pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); + const pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); + precinctNumber = pi + pj * precinctParameters.numprecinctswide; + codeblock.precinctNumber = precinctNumber; + codeblock.subbandType = subband.type; + codeblock.Lblock = 3; + + if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { + continue; + } + + codeblocks.push(codeblock); + let precinct = precincts[precinctNumber]; + + if (precinct !== undefined) { + if (i < precinct.cbxMin) { + precinct.cbxMin = i; + } else if (i > precinct.cbxMax) { + precinct.cbxMax = i; + } + + if (j < precinct.cbyMin) { + precinct.cbxMin = j; + } else if (j > precinct.cbyMax) { + precinct.cbyMax = j; + } + } else { + precincts[precinctNumber] = precinct = { + cbxMin: i, + cbyMin: j, + cbxMax: i, + cbyMax: j + }; + } + + codeblock.precinct = precinct; + } + } + + subband.codeblockParameters = { + codeblockWidth: xcb_, + codeblockHeight: ycb_, + numcodeblockwide: cbx1 - cbx0 + 1, + numcodeblockhigh: cby1 - cby0 + 1 + }; + subband.codeblocks = codeblocks; + subband.precincts = precincts; +} + +function createPacket(resolution, precinctNumber, layerNumber) { + const precinctCodeblocks = []; + const subbands = resolution.subbands; + + for (let i = 0, ii = subbands.length; i < ii; i++) { + const subband = subbands[i]; + const codeblocks = subband.codeblocks; + + for (let j = 0, jj = codeblocks.length; j < jj; j++) { + const codeblock = codeblocks[j]; + + if (codeblock.precinctNumber !== precinctNumber) { + continue; + } + + precinctCodeblocks.push(codeblock); + } + } + + return { + layerNumber, + codeblocks: precinctCodeblocks + }; +} + +function LayerResolutionComponentPositionIterator(context) { + const siz = context.SIZ; + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const layersCount = tile.codingStyleDefaultParameters.layersCount; + const componentsCount = siz.Csiz; + let maxDecompositionLevelsCount = 0; + + for (let q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + + let l = 0, + r = 0, + i = 0, + k = 0; + + this.nextPacket = function JpxImage_nextPacket() { + for (; l < layersCount; l++) { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; i < componentsCount; i++) { + const component = tile.components[i]; + + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + const resolution = component.resolutions[r]; + const numprecincts = resolution.precinctParameters.numprecincts; + + for (; k < numprecincts;) { + const packet = createPacket(resolution, k, l); + k++; + return packet; + } + + k = 0; + } + + i = 0; + } + + r = 0; + } + + throw new JpxError("Out of packets"); + }; +} + +function ResolutionLayerComponentPositionIterator(context) { + const siz = context.SIZ; + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const layersCount = tile.codingStyleDefaultParameters.layersCount; + const componentsCount = siz.Csiz; + let maxDecompositionLevelsCount = 0; + + for (let q = 0; q < componentsCount; q++) { + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); + } + + let r = 0, + l = 0, + i = 0, + k = 0; + + this.nextPacket = function JpxImage_nextPacket() { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; l < layersCount; l++) { + for (; i < componentsCount; i++) { + const component = tile.components[i]; + + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + const resolution = component.resolutions[r]; + const numprecincts = resolution.precinctParameters.numprecincts; + + for (; k < numprecincts;) { + const packet = createPacket(resolution, k, l); + k++; + return packet; + } + + k = 0; + } + + i = 0; + } + + l = 0; + } + + throw new JpxError("Out of packets"); + }; +} + +function ResolutionPositionComponentLayerIterator(context) { + const siz = context.SIZ; + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const layersCount = tile.codingStyleDefaultParameters.layersCount; + const componentsCount = siz.Csiz; + let l, r, c, p; + let maxDecompositionLevelsCount = 0; + + for (c = 0; c < componentsCount; c++) { + const component = tile.components[c]; + maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); + } + + const maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); + + for (r = 0; r <= maxDecompositionLevelsCount; ++r) { + let maxNumPrecincts = 0; + + for (c = 0; c < componentsCount; ++c) { + const resolutions = tile.components[c].resolutions; + + if (r < resolutions.length) { + maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); + } + } + + maxNumPrecinctsInLevel[r] = maxNumPrecincts; + } + + l = 0; + r = 0; + c = 0; + p = 0; + + this.nextPacket = function JpxImage_nextPacket() { + for (; r <= maxDecompositionLevelsCount; r++) { + for (; p < maxNumPrecinctsInLevel[r]; p++) { + for (; c < componentsCount; c++) { + const component = tile.components[c]; + + if (r > component.codingStyleParameters.decompositionLevelsCount) { + continue; + } + + const resolution = component.resolutions[r]; + const numprecincts = resolution.precinctParameters.numprecincts; + + if (p >= numprecincts) { + continue; + } + + for (; l < layersCount;) { + const packet = createPacket(resolution, p, l); + l++; + return packet; + } + + l = 0; + } + + c = 0; + } + + p = 0; + } + + throw new JpxError("Out of packets"); + }; +} + +function PositionComponentResolutionLayerIterator(context) { + const siz = context.SIZ; + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const layersCount = tile.codingStyleDefaultParameters.layersCount; + const componentsCount = siz.Csiz; + const precinctsSizes = getPrecinctSizesInImageScale(tile); + const precinctsIterationSizes = precinctsSizes; + let l = 0, + r = 0, + c = 0, + px = 0, + py = 0; + + this.nextPacket = function JpxImage_nextPacket() { + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; c < componentsCount; c++) { + const component = tile.components[c]; + const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + + for (; r <= decompositionLevelsCount; r++) { + const resolution = component.resolutions[r]; + const sizeInImageScale = precinctsSizes.components[c].resolutions[r]; + const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); + + if (k === null) { + continue; + } + + for (; l < layersCount;) { + const packet = createPacket(resolution, k, l); + l++; + return packet; + } + + l = 0; + } + + r = 0; + } + + c = 0; + } + + px = 0; + } + + throw new JpxError("Out of packets"); + }; +} + +function ComponentPositionResolutionLayerIterator(context) { + const siz = context.SIZ; + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const layersCount = tile.codingStyleDefaultParameters.layersCount; + const componentsCount = siz.Csiz; + const precinctsSizes = getPrecinctSizesInImageScale(tile); + let l = 0, + r = 0, + c = 0, + px = 0, + py = 0; + + this.nextPacket = function JpxImage_nextPacket() { + for (; c < componentsCount; ++c) { + const component = tile.components[c]; + const precinctsIterationSizes = precinctsSizes.components[c]; + const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + + for (; py < precinctsIterationSizes.maxNumHigh; py++) { + for (; px < precinctsIterationSizes.maxNumWide; px++) { + for (; r <= decompositionLevelsCount; r++) { + const resolution = component.resolutions[r]; + const sizeInImageScale = precinctsIterationSizes.resolutions[r]; + const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); + + if (k === null) { + continue; + } + + for (; l < layersCount;) { + const packet = createPacket(resolution, k, l); + l++; + return packet; + } + + l = 0; + } + + r = 0; + } + + px = 0; + } + + py = 0; + } + + throw new JpxError("Out of packets"); + }; +} + +function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { + const posX = pxIndex * precinctIterationSizes.minWidth; + const posY = pyIndex * precinctIterationSizes.minHeight; + + if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { + return null; + } + + const startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; + return posX / sizeInImageScale.height + startPrecinctRowIndex; +} + +function getPrecinctSizesInImageScale(tile) { + const componentsCount = tile.components.length; + let minWidth = Number.MAX_VALUE; + let minHeight = Number.MAX_VALUE; + let maxNumWide = 0; + let maxNumHigh = 0; + const sizePerComponent = new Array(componentsCount); + + for (let c = 0; c < componentsCount; c++) { + const component = tile.components[c]; + const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + const sizePerResolution = new Array(decompositionLevelsCount + 1); + let minWidthCurrentComponent = Number.MAX_VALUE; + let minHeightCurrentComponent = Number.MAX_VALUE; + let maxNumWideCurrentComponent = 0; + let maxNumHighCurrentComponent = 0; + let scale = 1; + + for (let r = decompositionLevelsCount; r >= 0; --r) { + const resolution = component.resolutions[r]; + const widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; + const heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; + minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); + minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); + maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); + maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); + sizePerResolution[r] = { + width: widthCurrentResolution, + height: heightCurrentResolution + }; + scale <<= 1; + } + + minWidth = Math.min(minWidth, minWidthCurrentComponent); + minHeight = Math.min(minHeight, minHeightCurrentComponent); + maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); + maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); + sizePerComponent[c] = { + resolutions: sizePerResolution, + minWidth: minWidthCurrentComponent, + minHeight: minHeightCurrentComponent, + maxNumWide: maxNumWideCurrentComponent, + maxNumHigh: maxNumHighCurrentComponent + }; + } + + return { + components: sizePerComponent, + minWidth, + minHeight, + maxNumWide, + maxNumHigh + }; +} + +function buildPackets(context) { + const siz = context.SIZ; + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const componentsCount = siz.Csiz; + + for (let c = 0; c < componentsCount; c++) { + const component = tile.components[c]; + const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; + const resolutions = []; + const subbands = []; + + for (let r = 0; r <= decompositionLevelsCount; r++) { + const blocksDimensions = getBlocksDimensions(context, component, r); + const resolution = {}; + const scale = 1 << decompositionLevelsCount - r; + resolution.trx0 = Math.ceil(component.tcx0 / scale); + resolution.try0 = Math.ceil(component.tcy0 / scale); + resolution.trx1 = Math.ceil(component.tcx1 / scale); + resolution.try1 = Math.ceil(component.tcy1 / scale); + resolution.resLevel = r; + buildPrecincts(context, resolution, blocksDimensions); + resolutions.push(resolution); + let subband; + + if (r === 0) { + subband = {}; + subband.type = "LL"; + subband.tbx0 = Math.ceil(component.tcx0 / scale); + subband.tby0 = Math.ceil(component.tcy0 / scale); + subband.tbx1 = Math.ceil(component.tcx1 / scale); + subband.tby1 = Math.ceil(component.tcy1 / scale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolution.subbands = [subband]; + } else { + const bscale = 1 << decompositionLevelsCount - r + 1; + const resolutionSubbands = []; + subband = {}; + subband.type = "HL"; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + subband = {}; + subband.type = "LH"; + subband.tbx0 = Math.ceil(component.tcx0 / bscale); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + subband = {}; + subband.type = "HH"; + subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); + subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); + subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); + subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); + subband.resolution = resolution; + buildCodeblocks(context, subband, blocksDimensions); + subbands.push(subband); + resolutionSubbands.push(subband); + resolution.subbands = resolutionSubbands; + } + } + + component.resolutions = resolutions; + component.subbands = subbands; + } + + const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; + + switch (progressionOrder) { + case 0: + tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); + break; + + case 1: + tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); + break; + + case 2: + tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); + break; + + case 3: + tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); + break; + + case 4: + tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); + break; + + default: + throw new JpxError(`Unsupported progression order ${progressionOrder}`); + } +} + +function parseTilePackets(context, data, offset, dataLength) { + let position = 0; + let buffer, + bufferSize = 0, + skipNextBit = false; + + function readBits(count) { + while (bufferSize < count) { + const b = data[offset + position]; + position++; + + if (skipNextBit) { + buffer = buffer << 7 | b; + bufferSize += 7; + skipNextBit = false; + } else { + buffer = buffer << 8 | b; + bufferSize += 8; + } + + if (b === 0xff) { + skipNextBit = true; + } + } + + bufferSize -= count; + return buffer >>> bufferSize & (1 << count) - 1; + } + + function skipMarkerIfEqual(value) { + if (data[offset + position - 1] === 0xff && data[offset + position] === value) { + skipBytes(1); + return true; + } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) { + skipBytes(2); + return true; + } + + return false; + } + + function skipBytes(count) { + position += count; + } + + function alignToByte() { + bufferSize = 0; + + if (skipNextBit) { + position++; + skipNextBit = false; + } + } + + function readCodingpasses() { + if (readBits(1) === 0) { + return 1; + } + + if (readBits(1) === 0) { + return 2; + } + + let value = readBits(2); + + if (value < 3) { + return value + 3; + } + + value = readBits(5); + + if (value < 31) { + return value + 6; + } + + value = readBits(7); + return value + 37; + } + + const tileIndex = context.currentTile.index; + const tile = context.tiles[tileIndex]; + const sopMarkerUsed = context.COD.sopMarkerUsed; + const ephMarkerUsed = context.COD.ephMarkerUsed; + const packetsIterator = tile.packetsIterator; + + while (position < dataLength) { + alignToByte(); + + if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { + skipBytes(4); + } + + const packet = packetsIterator.nextPacket(); + + if (!readBits(1)) { + continue; + } + + const layerNumber = packet.layerNumber, + queue = []; + let codeblock; + + for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) { + codeblock = packet.codeblocks[i]; + let precinct = codeblock.precinct; + const codeblockColumn = codeblock.cbx - precinct.cbxMin; + const codeblockRow = codeblock.cby - precinct.cbyMin; + let codeblockIncluded = false; + let firstTimeInclusion = false; + let valueReady, zeroBitPlanesTree; + + if (codeblock.included !== undefined) { + codeblockIncluded = !!readBits(1); + } else { + precinct = codeblock.precinct; + let inclusionTree; + + if (precinct.inclusionTree !== undefined) { + inclusionTree = precinct.inclusionTree; + } else { + const width = precinct.cbxMax - precinct.cbxMin + 1; + const height = precinct.cbyMax - precinct.cbyMin + 1; + inclusionTree = new InclusionTree(width, height, layerNumber); + zeroBitPlanesTree = new TagTree(width, height); + precinct.inclusionTree = inclusionTree; + precinct.zeroBitPlanesTree = zeroBitPlanesTree; + + for (let l = 0; l < layerNumber; l++) { + if (readBits(1) !== 0) { + throw new JpxError("Invalid tag tree"); + } + } + } + + if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { + while (true) { + if (readBits(1)) { + valueReady = !inclusionTree.nextLevel(); + + if (valueReady) { + codeblock.included = true; + codeblockIncluded = firstTimeInclusion = true; + break; + } + } else { + inclusionTree.incrementValue(layerNumber); + break; + } + } + } + } + + if (!codeblockIncluded) { + continue; + } + + if (firstTimeInclusion) { + zeroBitPlanesTree = precinct.zeroBitPlanesTree; + zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); + + while (true) { + if (readBits(1)) { + valueReady = !zeroBitPlanesTree.nextLevel(); + + if (valueReady) { + break; + } + } else { + zeroBitPlanesTree.incrementValue(); + } + } + + codeblock.zeroBitPlanes = zeroBitPlanesTree.value; + } + + const codingpasses = readCodingpasses(); + + while (readBits(1)) { + codeblock.Lblock++; + } + + const codingpassesLog2 = (0, _core_utils.log2)(codingpasses); + const bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; + const codedDataLength = readBits(bits); + queue.push({ + codeblock, + codingpasses, + dataLength: codedDataLength + }); + } + + alignToByte(); + + if (ephMarkerUsed) { + skipMarkerIfEqual(0x92); + } + + while (queue.length > 0) { + const packetItem = queue.shift(); + codeblock = packetItem.codeblock; + + if (codeblock.data === undefined) { + codeblock.data = []; + } + + codeblock.data.push({ + data, + start: offset + position, + end: offset + position + packetItem.dataLength, + codingpasses: packetItem.codingpasses + }); + position += packetItem.dataLength; + } + } + + return position; +} + +function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed, resetContextProbabilities) { + const x0 = subband.tbx0; + const y0 = subband.tby0; + const width = subband.tbx1 - subband.tbx0; + const codeblocks = subband.codeblocks; + const right = subband.type.charAt(0) === "H" ? 1 : 0; + const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0; + + for (let i = 0, ii = codeblocks.length; i < ii; ++i) { + const codeblock = codeblocks[i]; + const blockWidth = codeblock.tbx1_ - codeblock.tbx0_; + const blockHeight = codeblock.tby1_ - codeblock.tby0_; + + if (blockWidth === 0 || blockHeight === 0) { + continue; + } + + if (codeblock.data === undefined) { + continue; + } + + const bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); + let currentCodingpassType = 2; + const data = codeblock.data; + let totalLength = 0, + codingpasses = 0; + let j, jj, dataItem; + + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + totalLength += dataItem.end - dataItem.start; + codingpasses += dataItem.codingpasses; + } + + const encodedData = new Uint8Array(totalLength); + let position = 0; + + for (j = 0, jj = data.length; j < jj; j++) { + dataItem = data[j]; + const chunk = dataItem.data.subarray(dataItem.start, dataItem.end); + encodedData.set(chunk, position); + position += chunk.length; + } + + const decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); + bitModel.setDecoder(decoder); + + for (j = 0; j < codingpasses; j++) { + switch (currentCodingpassType) { + case 0: + bitModel.runSignificancePropagationPass(); + break; + + case 1: + bitModel.runMagnitudeRefinementPass(); + break; + + case 2: + bitModel.runCleanupPass(); + + if (segmentationSymbolUsed) { + bitModel.checkSegmentationSymbol(); + } + + break; + } + + if (resetContextProbabilities) { + bitModel.reset(); + } + + currentCodingpassType = (currentCodingpassType + 1) % 3; + } + + let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; + const sign = bitModel.coefficentsSign; + const magnitude = bitModel.coefficentsMagnitude; + const bitsDecoded = bitModel.bitsDecoded; + const magnitudeCorrection = reversible ? 0 : 0.5; + let k, n, nb; + position = 0; + const interleave = subband.type !== "LL"; + + for (j = 0; j < blockHeight; j++) { + const row = offset / width | 0; + const levelOffset = 2 * row * (levelWidth - width) + right + bottom; + + for (k = 0; k < blockWidth; k++) { + n = magnitude[position]; + + if (n !== 0) { + n = (n + magnitudeCorrection) * delta; + + if (sign[position] !== 0) { + n = -n; + } + + nb = bitsDecoded[position]; + const pos = interleave ? levelOffset + (offset << 1) : offset; + + if (reversible && nb >= mb) { + coefficients[pos] = n; + } else { + coefficients[pos] = n * (1 << mb - nb); + } + } + + offset++; + position++; + } + + offset += width - blockWidth; + } + } +} + +function transformTile(context, tile, c) { + const component = tile.components[c]; + const codingStyleParameters = component.codingStyleParameters; + const quantizationParameters = component.quantizationParameters; + const decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; + const spqcds = quantizationParameters.SPqcds; + const scalarExpounded = quantizationParameters.scalarExpounded; + const guardBits = quantizationParameters.guardBits; + const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; + const resetContextProbabilities = codingStyleParameters.resetContextProbabilities; + const precision = context.components[c].precision; + const reversible = codingStyleParameters.reversibleTransformation; + const transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); + const subbandCoefficients = []; + let b = 0; + + for (let i = 0; i <= decompositionLevelsCount; i++) { + const resolution = component.resolutions[i]; + const width = resolution.trx1 - resolution.trx0; + const height = resolution.try1 - resolution.try0; + const coefficients = new Float32Array(width * height); + + for (let j = 0, jj = resolution.subbands.length; j < jj; j++) { + let mu, epsilon; + + if (!scalarExpounded) { + mu = spqcds[0].mu; + epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); + } else { + mu = spqcds[b].mu; + epsilon = spqcds[b].epsilon; + b++; + } + + const subband = resolution.subbands[j]; + const gainLog2 = SubbandsGainLog2[subband.type]; + const delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048); + const mb = guardBits + epsilon - 1; + copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed, resetContextProbabilities); + } + + subbandCoefficients.push({ + width, + height, + items: coefficients + }); + } + + const result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); + return { + left: component.tcx0, + top: component.tcy0, + width: result.width, + height: result.height, + items: result.items + }; +} + +function transformComponents(context) { + const siz = context.SIZ; + const components = context.components; + const componentsCount = siz.Csiz; + const resultImages = []; + + for (let i = 0, ii = context.tiles.length; i < ii; i++) { + const tile = context.tiles[i]; + const transformedTiles = []; + + for (let c = 0; c < componentsCount; c++) { + transformedTiles[c] = transformTile(context, tile, c); + } + + const tile0 = transformedTiles[0]; + const out = new Uint8ClampedArray(tile0.items.length * componentsCount); + const result = { + left: tile0.left, + top: tile0.top, + width: tile0.width, + height: tile0.height, + items: out + }; + let shift, offset; + let pos = 0, + j, + jj, + y0, + y1, + y2; + + if (tile.codingStyleDefaultParameters.multipleComponentTransform) { + const fourComponents = componentsCount === 4; + const y0items = transformedTiles[0].items; + const y1items = transformedTiles[1].items; + const y2items = transformedTiles[2].items; + const y3items = fourComponents ? transformedTiles[3].items : null; + shift = components[0].precision - 8; + offset = (128 << shift) + 0.5; + const component0 = tile.components[0]; + const alpha01 = componentsCount - 3; + jj = y0items.length; + + if (!component0.codingStyleParameters.reversibleTransformation) { + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + out[pos++] = y0 + 1.402 * y2 >> shift; + out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; + out[pos++] = y0 + 1.772 * y1 >> shift; + } + } else { + for (j = 0; j < jj; j++, pos += alpha01) { + y0 = y0items[j] + offset; + y1 = y1items[j]; + y2 = y2items[j]; + const g = y0 - (y2 + y1 >> 2); + out[pos++] = g + y2 >> shift; + out[pos++] = g >> shift; + out[pos++] = g + y1 >> shift; + } + } + + if (fourComponents) { + for (j = 0, pos = 3; j < jj; j++, pos += 4) { + out[pos] = y3items[j] + offset >> shift; + } + } + } else { + for (let c = 0; c < componentsCount; c++) { + const items = transformedTiles[c].items; + shift = components[c].precision - 8; + offset = (128 << shift) + 0.5; + + for (pos = c, j = 0, jj = items.length; j < jj; j++) { + out[pos] = items[j] + offset >> shift; + pos += componentsCount; + } + } + } + + resultImages.push(result); + } + + return resultImages; +} + +function initializeTile(context, tileIndex) { + const siz = context.SIZ; + const componentsCount = siz.Csiz; + const tile = context.tiles[tileIndex]; + + for (let c = 0; c < componentsCount; c++) { + const component = tile.components[c]; + const qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; + component.quantizationParameters = qcdOrQcc; + const codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; + component.codingStyleParameters = codOrCoc; + } + + tile.codingStyleDefaultParameters = context.currentTile.COD; +} + +class TagTree { + constructor(width, height) { + const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; + this.levels = []; + + for (let i = 0; i < levelsLength; i++) { + const level = { + width, + height, + items: [] + }; + this.levels.push(level); + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + + reset(i, j) { + let currentLevel = 0, + value = 0, + level; + + while (currentLevel < this.levels.length) { + level = this.levels[currentLevel]; + const index = i + j * level.width; + + if (level.items[index] !== undefined) { + value = level.items[index]; + break; + } + + level.index = index; + i >>= 1; + j >>= 1; + currentLevel++; + } + + currentLevel--; + level = this.levels[currentLevel]; + level.items[level.index] = value; + this.currentLevel = currentLevel; + delete this.value; + } + + incrementValue() { + const level = this.levels[this.currentLevel]; + level.items[level.index]++; + } + + nextLevel() { + let currentLevel = this.currentLevel; + let level = this.levels[currentLevel]; + const value = level.items[level.index]; + currentLevel--; + + if (currentLevel < 0) { + this.value = value; + return false; + } + + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + +} + +class InclusionTree { + constructor(width, height, defaultValue) { + const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; + this.levels = []; + + for (let i = 0; i < levelsLength; i++) { + const items = new Uint8Array(width * height); + + for (let j = 0, jj = items.length; j < jj; j++) { + items[j] = defaultValue; + } + + const level = { + width, + height, + items + }; + this.levels.push(level); + width = Math.ceil(width / 2); + height = Math.ceil(height / 2); + } + } + + reset(i, j, stopValue) { + let currentLevel = 0; + + while (currentLevel < this.levels.length) { + const level = this.levels[currentLevel]; + const index = i + j * level.width; + level.index = index; + const value = level.items[index]; + + if (value === 0xff) { + break; + } + + if (value > stopValue) { + this.currentLevel = currentLevel; + this.propagateValues(); + return false; + } + + i >>= 1; + j >>= 1; + currentLevel++; + } + + this.currentLevel = currentLevel - 1; + return true; + } + + incrementValue(stopValue) { + const level = this.levels[this.currentLevel]; + level.items[level.index] = stopValue + 1; + this.propagateValues(); + } + + propagateValues() { + let levelIndex = this.currentLevel; + let level = this.levels[levelIndex]; + const currentValue = level.items[level.index]; + + while (--levelIndex >= 0) { + level = this.levels[levelIndex]; + level.items[level.index] = currentValue; + } + } + + nextLevel() { + let currentLevel = this.currentLevel; + let level = this.levels[currentLevel]; + const value = level.items[level.index]; + level.items[level.index] = 0xff; + currentLevel--; + + if (currentLevel < 0) { + return false; + } + + this.currentLevel = currentLevel; + level = this.levels[currentLevel]; + level.items[level.index] = value; + return true; + } + +} + +const BitModel = function BitModelClosure() { + const UNIFORM_CONTEXT = 17; + const RUNLENGTH_CONTEXT = 18; + const LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); + const HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); + const HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); + + class BitModel { + constructor(width, height, subband, zeroBitPlanes, mb) { + this.width = width; + this.height = height; + let contextLabelTable; + + if (subband === "HH") { + contextLabelTable = HHContextLabel; + } else if (subband === "HL") { + contextLabelTable = HLContextLabel; + } else { + contextLabelTable = LLAndLHContextsLabel; + } + + this.contextLabelTable = contextLabelTable; + const coefficientCount = width * height; + this.neighborsSignificance = new Uint8Array(coefficientCount); + this.coefficentsSign = new Uint8Array(coefficientCount); + let coefficentsMagnitude; + + if (mb > 14) { + coefficentsMagnitude = new Uint32Array(coefficientCount); + } else if (mb > 6) { + coefficentsMagnitude = new Uint16Array(coefficientCount); + } else { + coefficentsMagnitude = new Uint8Array(coefficientCount); + } + + this.coefficentsMagnitude = coefficentsMagnitude; + this.processingFlags = new Uint8Array(coefficientCount); + const bitsDecoded = new Uint8Array(coefficientCount); + + if (zeroBitPlanes !== 0) { + for (let i = 0; i < coefficientCount; i++) { + bitsDecoded[i] = zeroBitPlanes; + } + } + + this.bitsDecoded = bitsDecoded; + this.reset(); + } + + setDecoder(decoder) { + this.decoder = decoder; + } + + reset() { + this.contexts = new Int8Array(19); + this.contexts[0] = 4 << 1 | 0; + this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; + this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; + } + + setNeighborsSignificance(row, column, index) { + const neighborsSignificance = this.neighborsSignificance; + const width = this.width, + height = this.height; + const left = column > 0; + const right = column + 1 < width; + let i; + + if (row > 0) { + i = index - width; + + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + + neighborsSignificance[i] += 0x04; + } + + if (row + 1 < height) { + i = index + width; + + if (left) { + neighborsSignificance[i - 1] += 0x10; + } + + if (right) { + neighborsSignificance[i + 1] += 0x10; + } + + neighborsSignificance[i] += 0x04; + } + + if (left) { + neighborsSignificance[index - 1] += 0x01; + } + + if (right) { + neighborsSignificance[index + 1] += 0x01; + } + + neighborsSignificance[index] |= 0x80; + } + + runSignificancePropagationPass() { + const decoder = this.decoder; + const width = this.width, + height = this.height; + const coefficentsMagnitude = this.coefficentsMagnitude; + const coefficentsSign = this.coefficentsSign; + const neighborsSignificance = this.neighborsSignificance; + const processingFlags = this.processingFlags; + const contexts = this.contexts; + const labels = this.contextLabelTable; + const bitsDecoded = this.bitsDecoded; + const processedInverseMask = ~1; + const processedMask = 1; + const firstMagnitudeBitMask = 2; + + for (let i0 = 0; i0 < height; i0 += 4) { + for (let j = 0; j < width; j++) { + let index = i0 * width + j; + + for (let i1 = 0; i1 < 4; i1++, index += width) { + const i = i0 + i1; + + if (i >= height) { + break; + } + + processingFlags[index] &= processedInverseMask; + + if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { + continue; + } + + const contextLabel = labels[neighborsSignificance[index]]; + const decision = decoder.readBit(contexts, contextLabel); + + if (decision) { + const sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + } + + decodeSignBit(row, column, index) { + const width = this.width, + height = this.height; + const coefficentsMagnitude = this.coefficentsMagnitude; + const coefficentsSign = this.coefficentsSign; + let contribution, sign0, sign1, significance1; + let contextLabel, decoded; + significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; + + if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { + sign1 = coefficentsSign[index + 1]; + + if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign1 - sign0; + } else { + contribution = 1 - sign1 - sign1; + } + } else if (significance1) { + sign0 = coefficentsSign[index - 1]; + contribution = 1 - sign0 - sign0; + } else { + contribution = 0; + } + + const horizontalContribution = 3 * contribution; + significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; + + if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { + sign1 = coefficentsSign[index + width]; + + if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign1 - sign0 + horizontalContribution; + } else { + contribution = 1 - sign1 - sign1 + horizontalContribution; + } + } else if (significance1) { + sign0 = coefficentsSign[index - width]; + contribution = 1 - sign0 - sign0 + horizontalContribution; + } else { + contribution = horizontalContribution; + } + + if (contribution >= 0) { + contextLabel = 9 + contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel); + } else { + contextLabel = 9 - contribution; + decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; + } + + return decoded; + } + + runMagnitudeRefinementPass() { + const decoder = this.decoder; + const width = this.width, + height = this.height; + const coefficentsMagnitude = this.coefficentsMagnitude; + const neighborsSignificance = this.neighborsSignificance; + const contexts = this.contexts; + const bitsDecoded = this.bitsDecoded; + const processingFlags = this.processingFlags; + const processedMask = 1; + const firstMagnitudeBitMask = 2; + const length = width * height; + const width4 = width * 4; + + for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) { + indexNext = Math.min(length, index0 + width4); + + for (let j = 0; j < width; j++) { + for (let index = index0 + j; index < indexNext; index += width) { + if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { + continue; + } + + let contextLabel = 16; + + if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { + processingFlags[index] ^= firstMagnitudeBitMask; + const significance = neighborsSignificance[index] & 127; + contextLabel = significance === 0 ? 15 : 14; + } + + const bit = decoder.readBit(contexts, contextLabel); + coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; + bitsDecoded[index]++; + processingFlags[index] |= processedMask; + } + } + } + } + + runCleanupPass() { + const decoder = this.decoder; + const width = this.width, + height = this.height; + const neighborsSignificance = this.neighborsSignificance; + const coefficentsMagnitude = this.coefficentsMagnitude; + const coefficentsSign = this.coefficentsSign; + const contexts = this.contexts; + const labels = this.contextLabelTable; + const bitsDecoded = this.bitsDecoded; + const processingFlags = this.processingFlags; + const processedMask = 1; + const firstMagnitudeBitMask = 2; + const oneRowDown = width; + const twoRowsDown = width * 2; + const threeRowsDown = width * 3; + let iNext; + + for (let i0 = 0; i0 < height; i0 = iNext) { + iNext = Math.min(i0 + 4, height); + const indexBase = i0 * width; + const checkAllEmpty = i0 + 3 < height; + + for (let j = 0; j < width; j++) { + const index0 = indexBase + j; + const allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; + let i1 = 0, + index = index0; + let i = i0, + sign; + + if (allEmpty) { + const hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); + + if (!hasSignificantCoefficent) { + bitsDecoded[index0]++; + bitsDecoded[index0 + oneRowDown]++; + bitsDecoded[index0 + twoRowsDown]++; + bitsDecoded[index0 + threeRowsDown]++; + continue; + } + + i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); + + if (i1 !== 0) { + i = i0 + i1; + index += i1 * width; + } + + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + index = index0; + + for (let i2 = i0; i2 <= i; i2++, index += width) { + bitsDecoded[index]++; + } + + i1++; + } + + for (i = i0 + i1; i < iNext; i++, index += width) { + if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { + continue; + } + + const contextLabel = labels[neighborsSignificance[index]]; + const decision = decoder.readBit(contexts, contextLabel); + + if (decision === 1) { + sign = this.decodeSignBit(i, j, index); + coefficentsSign[index] = sign; + coefficentsMagnitude[index] = 1; + this.setNeighborsSignificance(i, j, index); + processingFlags[index] |= firstMagnitudeBitMask; + } + + bitsDecoded[index]++; + } + } + } + } + + checkSegmentationSymbol() { + const decoder = this.decoder; + const contexts = this.contexts; + const symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); + + if (symbol !== 0xa) { + throw new JpxError("Invalid segmentation symbol"); + } + } + + } + + return BitModel; +}(); + +class Transform { + constructor() { + if (this.constructor === Transform) { + (0, _util.unreachable)("Cannot initialize Transform."); + } + } + + calculate(subbands, u0, v0) { + let ll = subbands[0]; + + for (let i = 1, ii = subbands.length; i < ii; i++) { + ll = this.iterate(ll, subbands[i], u0, v0); + } + + return ll; + } + + extend(buffer, offset, size) { + let i1 = offset - 1, + j1 = offset + 1; + let i2 = offset + size - 2, + j2 = offset + size; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1--] = buffer[j1++]; + buffer[j2++] = buffer[i2--]; + buffer[i1] = buffer[j1]; + buffer[j2] = buffer[i2]; + } + + filter(x, offset, length) { + (0, _util.unreachable)("Abstract method `filter` called"); + } + + iterate(ll, hl_lh_hh, u0, v0) { + const llWidth = ll.width, + llHeight = ll.height; + let llItems = ll.items; + const width = hl_lh_hh.width; + const height = hl_lh_hh.height; + const items = hl_lh_hh.items; + let i, j, k, l, u, v; + + for (k = 0, i = 0; i < llHeight; i++) { + l = i * 2 * width; + + for (j = 0; j < llWidth; j++, k++, l += 2) { + items[l] = llItems[k]; + } + } + + llItems = ll.items = null; + const bufferPadding = 4; + const rowBuffer = new Float32Array(width + 2 * bufferPadding); + + if (width === 1) { + if ((u0 & 1) !== 0) { + for (v = 0, k = 0; v < height; v++, k += width) { + items[k] *= 0.5; + } + } + } else { + for (v = 0, k = 0; v < height; v++, k += width) { + rowBuffer.set(items.subarray(k, k + width), bufferPadding); + this.extend(rowBuffer, bufferPadding, width); + this.filter(rowBuffer, bufferPadding, width); + items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); + } + } + + let numBuffers = 16; + const colBuffers = []; + + for (i = 0; i < numBuffers; i++) { + colBuffers.push(new Float32Array(height + 2 * bufferPadding)); + } + + let b, + currentBuffer = 0; + ll = bufferPadding + height; + + if (height === 1) { + if ((v0 & 1) !== 0) { + for (u = 0; u < width; u++) { + items[u] *= 0.5; + } + } + } else { + for (u = 0; u < width; u++) { + if (currentBuffer === 0) { + numBuffers = Math.min(width - u, numBuffers); + + for (k = u, l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + colBuffers[b][l] = items[k + b]; + } + } + + currentBuffer = numBuffers; + } + + currentBuffer--; + const buffer = colBuffers[currentBuffer]; + this.extend(buffer, bufferPadding, height); + this.filter(buffer, bufferPadding, height); + + if (currentBuffer === 0) { + k = u - numBuffers + 1; + + for (l = bufferPadding; l < ll; k += width, l++) { + for (b = 0; b < numBuffers; b++) { + items[k + b] = colBuffers[b][l]; + } + } + } + } + } + + return { + width, + height, + items + }; + } + +} + +class IrreversibleTransform extends Transform { + filter(x, offset, length) { + const len = length >> 1; + offset |= 0; + let j, n, current, next; + const alpha = -1.586134342059924; + const beta = -0.052980118572961; + const gamma = 0.882911075530934; + const delta = 0.443506852043971; + const K = 1.230174104914001; + const K_ = 1 / K; + j = offset - 3; + + for (n = len + 4; n--; j += 2) { + x[j] *= K_; + } + + j = offset - 2; + current = delta * x[j - 1]; + + for (n = len + 3; n--; j += 2) { + next = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + + if (n--) { + j += 2; + current = delta * x[j + 1]; + x[j] = K * x[j] - current - next; + } else { + break; + } + } + + j = offset - 1; + current = gamma * x[j - 1]; + + for (n = len + 2; n--; j += 2) { + next = gamma * x[j + 1]; + x[j] -= current + next; + + if (n--) { + j += 2; + current = gamma * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + + j = offset; + current = beta * x[j - 1]; + + for (n = len + 1; n--; j += 2) { + next = beta * x[j + 1]; + x[j] -= current + next; + + if (n--) { + j += 2; + current = beta * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + + if (len !== 0) { + j = offset + 1; + current = alpha * x[j - 1]; + + for (n = len; n--; j += 2) { + next = alpha * x[j + 1]; + x[j] -= current + next; + + if (n--) { + j += 2; + current = alpha * x[j + 1]; + x[j] -= current + next; + } else { + break; + } + } + } + } + +} + +class ReversibleTransform extends Transform { + filter(x, offset, length) { + const len = length >> 1; + offset |= 0; + let j, n; + + for (j = offset, n = len + 1; n--; j += 2) { + x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; + } + + for (j = offset + 1, n = len; n--; j += 2) { + x[j] += x[j - 1] + x[j + 1] >> 1; + } + } + +} + +/***/ }), +/* 31 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.LZWStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +class LZWStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength, earlyChange) { + super(maybeLength); + this.str = str; + this.dict = str.dict; + this.cachedData = 0; + this.bitsCached = 0; + const maxLzwDictionarySize = 4096; + const lzwState = { + earlyChange, + codeLength: 9, + nextCode: 258, + dictionaryValues: new Uint8Array(maxLzwDictionarySize), + dictionaryLengths: new Uint16Array(maxLzwDictionarySize), + dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), + currentSequence: new Uint8Array(maxLzwDictionarySize), + currentSequenceLength: 0 + }; + + for (let i = 0; i < 256; ++i) { + lzwState.dictionaryValues[i] = i; + lzwState.dictionaryLengths[i] = 1; + } + + this.lzwState = lzwState; + } + + readBits(n) { + let bitsCached = this.bitsCached; + let cachedData = this.cachedData; + + while (bitsCached < n) { + const c = this.str.getByte(); + + if (c === -1) { + this.eof = true; + return null; + } + + cachedData = cachedData << 8 | c; + bitsCached += 8; + } + + this.bitsCached = bitsCached -= n; + this.cachedData = cachedData; + this.lastCode = null; + return cachedData >>> bitsCached & (1 << n) - 1; + } + + readBlock() { + const blockSize = 512, + decodedSizeDelta = blockSize; + let estimatedDecodedSize = blockSize * 2; + let i, j, q; + const lzwState = this.lzwState; + + if (!lzwState) { + return; + } + + const earlyChange = lzwState.earlyChange; + let nextCode = lzwState.nextCode; + const dictionaryValues = lzwState.dictionaryValues; + const dictionaryLengths = lzwState.dictionaryLengths; + const dictionaryPrevCodes = lzwState.dictionaryPrevCodes; + let codeLength = lzwState.codeLength; + let prevCode = lzwState.prevCode; + const currentSequence = lzwState.currentSequence; + let currentSequenceLength = lzwState.currentSequenceLength; + let decodedLength = 0; + let currentBufferLength = this.bufferLength; + let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + + for (i = 0; i < blockSize; i++) { + const code = this.readBits(codeLength); + const hasPrev = currentSequenceLength > 0; + + if (code < 256) { + currentSequence[0] = code; + currentSequenceLength = 1; + } else if (code >= 258) { + if (code < nextCode) { + currentSequenceLength = dictionaryLengths[code]; + + for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { + currentSequence[j] = dictionaryValues[q]; + q = dictionaryPrevCodes[q]; + } + } else { + currentSequence[currentSequenceLength++] = currentSequence[0]; + } + } else if (code === 256) { + codeLength = 9; + nextCode = 258; + currentSequenceLength = 0; + continue; + } else { + this.eof = true; + delete this.lzwState; + break; + } + + if (hasPrev) { + dictionaryPrevCodes[nextCode] = prevCode; + dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; + dictionaryValues[nextCode] = currentSequence[0]; + nextCode++; + codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; + } + + prevCode = code; + decodedLength += currentSequenceLength; + + if (estimatedDecodedSize < decodedLength) { + do { + estimatedDecodedSize += decodedSizeDelta; + } while (estimatedDecodedSize < decodedLength); + + buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); + } + + for (j = 0; j < currentSequenceLength; j++) { + buffer[currentBufferLength++] = currentSequence[j]; + } + } + + lzwState.nextCode = nextCode; + lzwState.codeLength = codeLength; + lzwState.prevCode = prevCode; + lzwState.currentSequenceLength = currentSequenceLength; + this.bufferLength = currentBufferLength; + } + +} + +exports.LZWStream = LZWStream; + +/***/ }), +/* 32 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PredictorStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +var _primitives = __w_pdfjs_require__(5); + +var _util = __w_pdfjs_require__(2); + +class PredictorStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength, params) { + super(maybeLength); + + if (!(params instanceof _primitives.Dict)) { + return str; + } + + const predictor = this.predictor = params.get("Predictor") || 1; + + if (predictor <= 1) { + return str; + } + + if (predictor !== 2 && (predictor < 10 || predictor > 15)) { + throw new _util.FormatError(`Unsupported predictor: ${predictor}`); + } + + if (predictor === 2) { + this.readBlock = this.readBlockTiff; + } else { + this.readBlock = this.readBlockPng; + } + + this.str = str; + this.dict = str.dict; + const colors = this.colors = params.get("Colors") || 1; + const bits = this.bits = params.get("BPC", "BitsPerComponent") || 8; + const columns = this.columns = params.get("Columns") || 1; + this.pixBytes = colors * bits + 7 >> 3; + this.rowBytes = columns * colors * bits + 7 >> 3; + return this; + } + + readBlockTiff() { + const rowBytes = this.rowBytes; + const bufferLength = this.bufferLength; + const buffer = this.ensureBuffer(bufferLength + rowBytes); + const bits = this.bits; + const colors = this.colors; + const rawBytes = this.str.getBytes(rowBytes); + this.eof = !rawBytes.length; + + if (this.eof) { + return; + } + + let inbuf = 0, + outbuf = 0; + let inbits = 0, + outbits = 0; + let pos = bufferLength; + let i; + + if (bits === 1 && colors === 1) { + for (i = 0; i < rowBytes; ++i) { + let c = rawBytes[i] ^ inbuf; + c ^= c >> 1; + c ^= c >> 2; + c ^= c >> 4; + inbuf = (c & 1) << 7; + buffer[pos++] = c; + } + } else if (bits === 8) { + for (i = 0; i < colors; ++i) { + buffer[pos++] = rawBytes[i]; + } + + for (; i < rowBytes; ++i) { + buffer[pos] = buffer[pos - colors] + rawBytes[i]; + pos++; + } + } else if (bits === 16) { + const bytesPerPixel = colors * 2; + + for (i = 0; i < bytesPerPixel; ++i) { + buffer[pos++] = rawBytes[i]; + } + + for (; i < rowBytes; i += 2) { + const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff); + buffer[pos++] = sum >> 8 & 0xff; + buffer[pos++] = sum & 0xff; + } + } else { + const compArray = new Uint8Array(colors + 1); + const bitMask = (1 << bits) - 1; + let j = 0, + k = bufferLength; + const columns = this.columns; + + for (i = 0; i < columns; ++i) { + for (let kk = 0; kk < colors; ++kk) { + if (inbits < bits) { + inbuf = inbuf << 8 | rawBytes[j++] & 0xff; + inbits += 8; + } + + compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; + inbits -= bits; + outbuf = outbuf << bits | compArray[kk]; + outbits += bits; + + if (outbits >= 8) { + buffer[k++] = outbuf >> outbits - 8 & 0xff; + outbits -= 8; + } + } + } + + if (outbits > 0) { + buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); + } + } + + this.bufferLength += rowBytes; + } + + readBlockPng() { + const rowBytes = this.rowBytes; + const pixBytes = this.pixBytes; + const predictor = this.str.getByte(); + const rawBytes = this.str.getBytes(rowBytes); + this.eof = !rawBytes.length; + + if (this.eof) { + return; + } + + const bufferLength = this.bufferLength; + const buffer = this.ensureBuffer(bufferLength + rowBytes); + let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); + + if (prevRow.length === 0) { + prevRow = new Uint8Array(rowBytes); + } + + let i, + j = bufferLength, + up, + c; + + switch (predictor) { + case 0: + for (i = 0; i < rowBytes; ++i) { + buffer[j++] = rawBytes[i]; + } + + break; + + case 1: + for (i = 0; i < pixBytes; ++i) { + buffer[j++] = rawBytes[i]; + } + + for (; i < rowBytes; ++i) { + buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff; + j++; + } + + break; + + case 2: + for (i = 0; i < rowBytes; ++i) { + buffer[j++] = prevRow[i] + rawBytes[i] & 0xff; + } + + break; + + case 3: + for (i = 0; i < pixBytes; ++i) { + buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; + } + + for (; i < rowBytes; ++i) { + buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff; + j++; + } + + break; + + case 4: + for (i = 0; i < pixBytes; ++i) { + up = prevRow[i]; + c = rawBytes[i]; + buffer[j++] = up + c; + } + + for (; i < rowBytes; ++i) { + up = prevRow[i]; + const upLeft = prevRow[i - pixBytes]; + const left = buffer[j - pixBytes]; + const p = left + up - upLeft; + let pa = p - left; + + if (pa < 0) { + pa = -pa; + } + + let pb = p - up; + + if (pb < 0) { + pb = -pb; + } + + let pc = p - upLeft; + + if (pc < 0) { + pc = -pc; + } + + c = rawBytes[i]; + + if (pa <= pb && pa <= pc) { + buffer[j++] = left + c; + } else if (pb <= pc) { + buffer[j++] = up + c; + } else { + buffer[j++] = upLeft + c; + } + } + + break; + + default: + throw new _util.FormatError(`Unsupported predictor: ${predictor}`); + } + + this.bufferLength += rowBytes; + } + +} + +exports.PredictorStream = PredictorStream; + +/***/ }), +/* 33 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.RunLengthStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +class RunLengthStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength) { + super(maybeLength); + this.str = str; + this.dict = str.dict; + } + + readBlock() { + const repeatHeader = this.str.getBytes(2); + + if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { + this.eof = true; + return; + } + + let buffer; + let bufferLength = this.bufferLength; + let n = repeatHeader[0]; + + if (n < 128) { + buffer = this.ensureBuffer(bufferLength + n + 1); + buffer[bufferLength++] = repeatHeader[1]; + + if (n > 0) { + const source = this.str.getBytes(n); + buffer.set(source, bufferLength); + bufferLength += n; + } + } else { + n = 257 - n; + const b = repeatHeader[1]; + buffer = this.ensureBuffer(bufferLength + n + 1); + + for (let i = 0; i < n; i++) { + buffer[bufferLength++] = b; + } + } + + this.bufferLength = bufferLength; + } + +} + +exports.RunLengthStream = RunLengthStream; + +/***/ }), +/* 34 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Font = exports.ErrorFont = void 0; + +var _util = __w_pdfjs_require__(2); + +var _cff_parser = __w_pdfjs_require__(35); + +var _fonts_utils = __w_pdfjs_require__(38); + +var _unicode = __w_pdfjs_require__(40); + +var _glyphlist = __w_pdfjs_require__(39); + +var _encodings = __w_pdfjs_require__(37); + +var _standard_fonts = __w_pdfjs_require__(41); + +var _to_unicode_map = __w_pdfjs_require__(42); + +var _cff_font = __w_pdfjs_require__(43); + +var _font_renderer = __w_pdfjs_require__(44); + +var _metrics = __w_pdfjs_require__(45); + +var _glyf = __w_pdfjs_require__(46); + +var _cmap = __w_pdfjs_require__(16); + +var _opentype_file_builder = __w_pdfjs_require__(47); + +var _core_utils = __w_pdfjs_require__(6); + +var _stream = __w_pdfjs_require__(10); + +var _type1_font = __w_pdfjs_require__(48); + +const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]]; +const PDF_GLYPH_SPACE_UNITS = 1000; +const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"]; +const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isMonospace", "isSerifFont", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"]; + +function adjustWidths(properties) { + if (!properties.fontMatrix) { + return; + } + + if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { + return; + } + + const scale = 0.001 / properties.fontMatrix[0]; + const glyphsWidths = properties.widths; + + for (const glyph in glyphsWidths) { + glyphsWidths[glyph] *= scale; + } + + properties.defaultWidth *= scale; +} + +function adjustToUnicode(properties, builtInEncoding) { + if (properties.isInternalFont) { + return; + } + + if (builtInEncoding === properties.defaultEncoding) { + return; + } + + if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { + return; + } + + const toUnicode = [], + glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); + + for (const charCode in builtInEncoding) { + if (properties.hasIncludedToUnicodeMap) { + if (properties.toUnicode.has(charCode)) { + continue; + } + } else if (properties.hasEncoding) { + if (properties.differences.length === 0 || properties.differences[charCode] !== undefined) { + continue; + } + } + + const glyphName = builtInEncoding[charCode]; + const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); + + if (unicode !== -1) { + toUnicode[charCode] = String.fromCharCode(unicode); + } + } + + if (toUnicode.length > 0) { + properties.toUnicode.amend(toUnicode); + } +} + +function amendFallbackToUnicode(properties) { + if (!properties.fallbackToUnicode) { + return; + } + + if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { + return; + } + + const toUnicode = []; + + for (const charCode in properties.fallbackToUnicode) { + if (properties.toUnicode.has(charCode)) { + continue; + } + + toUnicode[charCode] = properties.fallbackToUnicode[charCode]; + } + + if (toUnicode.length > 0) { + properties.toUnicode.amend(toUnicode); + } +} + +class Glyph { + constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { + this.originalCharCode = originalCharCode; + this.fontChar = fontChar; + this.unicode = unicode; + this.accent = accent; + this.width = width; + this.vmetric = vmetric; + this.operatorListId = operatorListId; + this.isSpace = isSpace; + this.isInFont = isInFont; + const category = (0, _unicode.getCharUnicodeCategory)(unicode); + this.isWhitespace = category.isWhitespace; + this.isZeroWidthDiacritic = category.isZeroWidthDiacritic; + this.isInvisibleFormatMark = category.isInvisibleFormatMark; + } + + matchesForCache(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { + return this.originalCharCode === originalCharCode && this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; + } + +} + +function int16(b0, b1) { + return (b0 << 8) + b1; +} + +function writeSignedInt16(bytes, index, value) { + bytes[index + 1] = value; + bytes[index] = value >>> 8; +} + +function signedInt16(b0, b1) { + const value = (b0 << 8) + b1; + return value & 1 << 15 ? value - 0x10000 : value; +} + +function int32(b0, b1, b2, b3) { + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; +} + +function string16(value) { + return String.fromCharCode(value >> 8 & 0xff, value & 0xff); +} + +function safeString16(value) { + if (value > 0x7fff) { + value = 0x7fff; + } else if (value < -0x8000) { + value = -0x8000; + } + + return String.fromCharCode(value >> 8 & 0xff, value & 0xff); +} + +function isTrueTypeFile(file) { + const header = file.peekBytes(4); + return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true"; +} + +function isTrueTypeCollectionFile(file) { + const header = file.peekBytes(4); + return (0, _util.bytesToString)(header) === "ttcf"; +} + +function isOpenTypeFile(file) { + const header = file.peekBytes(4); + return (0, _util.bytesToString)(header) === "OTTO"; +} + +function isType1File(file) { + const header = file.peekBytes(2); + + if (header[0] === 0x25 && header[1] === 0x21) { + return true; + } + + if (header[0] === 0x80 && header[1] === 0x01) { + return true; + } + + return false; +} + +function isCFFFile(file) { + const header = file.peekBytes(4); + + if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { + return true; + } + + return false; +} + +function getFontFileType(file, { + type, + subtype, + composite +}) { + let fileType, fileSubtype; + + if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { + if (composite) { + fileType = "CIDFontType2"; + } else { + fileType = "TrueType"; + } + } else if (isOpenTypeFile(file)) { + if (composite) { + fileType = "CIDFontType2"; + } else { + fileType = "OpenType"; + } + } else if (isType1File(file)) { + if (composite) { + fileType = "CIDFontType0"; + } else { + fileType = type === "MMType1" ? "MMType1" : "Type1"; + } + } else if (isCFFFile(file)) { + if (composite) { + fileType = "CIDFontType0"; + fileSubtype = "CIDFontType0C"; + } else { + fileType = type === "MMType1" ? "MMType1" : "Type1"; + fileSubtype = "Type1C"; + } + } else { + (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); + fileType = type; + fileSubtype = subtype; + } + + return [fileType, fileSubtype]; +} + +function applyStandardFontGlyphMap(map, glyphMap) { + for (const charCode in glyphMap) { + map[+charCode] = glyphMap[charCode]; + } +} + +function buildToFontChar(encoding, glyphsUnicodeMap, differences) { + const toFontChar = []; + let unicode; + + for (let i = 0, ii = encoding.length; i < ii; i++) { + unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); + + if (unicode !== -1) { + toFontChar[i] = unicode; + } + } + + for (const charCode in differences) { + unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); + + if (unicode !== -1) { + toFontChar[+charCode] = unicode; + } + } + + return toFontChar; +} + +function convertCidString(charCode, cid, shouldThrow = false) { + switch (cid.length) { + case 1: + return cid.charCodeAt(0); + + case 2: + return cid.charCodeAt(0) << 8 | cid.charCodeAt(1); + } + + const msg = `Unsupported CID string (charCode ${charCode}): "${cid}".`; + + if (shouldThrow) { + throw new _util.FormatError(msg); + } + + (0, _util.warn)(msg); + return cid; +} + +function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId, toUnicode) { + const newMap = Object.create(null); + const toUnicodeExtraMap = new Map(); + const toFontChar = []; + const usedGlyphIds = new Set(); + let privateUseAreaIndex = 0; + const privateUseOffetStart = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; + let nextAvailableFontCharCode = privateUseOffetStart; + let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; + + for (let originalCharCode in charCodeToGlyphId) { + originalCharCode |= 0; + let glyphId = charCodeToGlyphId[originalCharCode]; + + if (!hasGlyph(glyphId)) { + continue; + } + + if (nextAvailableFontCharCode > privateUseOffetEnd) { + privateUseAreaIndex++; + + if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { + (0, _util.warn)("Ran out of space in font private use area."); + break; + } + + nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; + privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; + } + + const fontCharCode = nextAvailableFontCharCode++; + + if (glyphId === 0) { + glyphId = newGlyphZeroId; + } + + let unicode = toUnicode.get(originalCharCode); + + if (typeof unicode === "string") { + unicode = unicode.codePointAt(0); + } + + if (unicode && unicode < privateUseOffetStart && !usedGlyphIds.has(glyphId)) { + toUnicodeExtraMap.set(unicode, glyphId); + usedGlyphIds.add(glyphId); + } + + newMap[fontCharCode] = glyphId; + toFontChar[originalCharCode] = fontCharCode; + } + + return { + toFontChar, + charCodeToGlyphId: newMap, + toUnicodeExtraMap, + nextAvailableFontCharCode + }; +} + +function getRanges(glyphs, toUnicodeExtraMap, numGlyphs) { + const codes = []; + + for (const charCode in glyphs) { + if (glyphs[charCode] >= numGlyphs) { + continue; + } + + codes.push({ + fontCharCode: charCode | 0, + glyphId: glyphs[charCode] + }); + } + + if (toUnicodeExtraMap) { + for (const [unicode, glyphId] of toUnicodeExtraMap) { + if (glyphId >= numGlyphs) { + continue; + } + + codes.push({ + fontCharCode: unicode, + glyphId + }); + } + } + + if (codes.length === 0) { + codes.push({ + fontCharCode: 0, + glyphId: 0 + }); + } + + codes.sort(function fontGetRangesSort(a, b) { + return a.fontCharCode - b.fontCharCode; + }); + const ranges = []; + const length = codes.length; + + for (let n = 0; n < length;) { + const start = codes[n].fontCharCode; + const codeIndices = [codes[n].glyphId]; + ++n; + let end = start; + + while (n < length && end + 1 === codes[n].fontCharCode) { + codeIndices.push(codes[n].glyphId); + ++end; + ++n; + + if (end === 0xffff) { + break; + } + } + + ranges.push([start, end, codeIndices]); + } + + return ranges; +} + +function createCmapTable(glyphs, toUnicodeExtraMap, numGlyphs) { + const ranges = getRanges(glyphs, toUnicodeExtraMap, numGlyphs); + const numTables = ranges.at(-1)[1] > 0xffff ? 2 : 1; + let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); + let i, ii, j, jj; + + for (i = ranges.length - 1; i >= 0; --i) { + if (ranges[i][0] <= 0xffff) { + break; + } + } + + const bmpLength = i + 1; + + if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) { + ranges[i][1] = 0xfffe; + } + + const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0; + const segCount = bmpLength + trailingRangesCount; + + const searchParams = _opentype_file_builder.OpenTypeFileBuilder.getSearchParams(segCount, 2); + + let startCount = ""; + let endCount = ""; + let idDeltas = ""; + let idRangeOffsets = ""; + let glyphsIds = ""; + let bias = 0; + let range, start, end, codes; + + for (i = 0, ii = bmpLength; i < ii; i++) { + range = ranges[i]; + start = range[0]; + end = range[1]; + startCount += string16(start); + endCount += string16(end); + codes = range[2]; + let contiguous = true; + + for (j = 1, jj = codes.length; j < jj; ++j) { + if (codes[j] !== codes[j - 1] + 1) { + contiguous = false; + break; + } + } + + if (!contiguous) { + const offset = (segCount - i) * 2 + bias * 2; + bias += end - start + 1; + idDeltas += string16(0); + idRangeOffsets += string16(offset); + + for (j = 0, jj = codes.length; j < jj; ++j) { + glyphsIds += string16(codes[j]); + } + } else { + const startCode = codes[0]; + idDeltas += string16(startCode - start & 0xffff); + idRangeOffsets += string16(0); + } + } + + if (trailingRangesCount > 0) { + endCount += "\xFF\xFF"; + startCount += "\xFF\xFF"; + idDeltas += "\x00\x01"; + idRangeOffsets += "\x00\x00"; + } + + const format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds; + let format31012 = ""; + let header31012 = ""; + + if (numTables > 1) { + cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); + format31012 = ""; + + for (i = 0, ii = ranges.length; i < ii; i++) { + range = ranges[i]; + start = range[0]; + codes = range[2]; + let code = codes[0]; + + for (j = 1, jj = codes.length; j < jj; ++j) { + if (codes[j] !== codes[j - 1] + 1) { + end = range[0] + j - 1; + format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); + start = end + 1; + code = codes[j]; + } + } + + format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); + } + + header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12); + } + + return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012; +} + +function validateOS2Table(os2, file) { + file.pos = (file.start || 0) + os2.offset; + const version = file.getUint16(); + file.skip(60); + const selection = file.getUint16(); + + if (version < 4 && selection & 0x0300) { + return false; + } + + const firstChar = file.getUint16(); + const lastChar = file.getUint16(); + + if (firstChar > lastChar) { + return false; + } + + file.skip(6); + const usWinAscent = file.getUint16(); + + if (usWinAscent === 0) { + return false; + } + + os2.data[8] = os2.data[9] = 0; + return true; +} + +function createOS2Table(properties, charstrings, override) { + override = override || { + unitsPerEm: 0, + yMax: 0, + yMin: 0, + ascent: 0, + descent: 0 + }; + let ulUnicodeRange1 = 0; + let ulUnicodeRange2 = 0; + let ulUnicodeRange3 = 0; + let ulUnicodeRange4 = 0; + let firstCharIndex = null; + let lastCharIndex = 0; + + if (charstrings) { + for (let code in charstrings) { + code |= 0; + + if (firstCharIndex > code || !firstCharIndex) { + firstCharIndex = code; + } + + if (lastCharIndex < code) { + lastCharIndex = code; + } + + const position = (0, _unicode.getUnicodeRangeFor)(code); + + if (position < 32) { + ulUnicodeRange1 |= 1 << position; + } else if (position < 64) { + ulUnicodeRange2 |= 1 << position - 32; + } else if (position < 96) { + ulUnicodeRange3 |= 1 << position - 64; + } else if (position < 123) { + ulUnicodeRange4 |= 1 << position - 96; + } else { + throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); + } + } + + if (lastCharIndex > 0xffff) { + lastCharIndex = 0xffff; + } + } else { + firstCharIndex = 0; + lastCharIndex = 255; + } + + const bbox = properties.bbox || [0, 0, 0, 0]; + const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; + const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; + const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); + let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); + + if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { + typoDescent = -typoDescent; + } + + const winAscent = override.yMax || typoAscent; + const winDescent = -override.yMin || -typoDescent; + return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03"; +} + +function createPostTable(properties) { + const angle = Math.floor(properties.italicAngle * 2 ** 16); + return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00"; +} + +function createPostscriptName(name) { + return name.replace(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63); +} + +function createNameTable(name, proto) { + if (!proto) { + proto = [[], []]; + } + + const strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || createPostscriptName(name), proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"]; + const stringsUnicode = []; + let i, ii, j, jj, str; + + for (i = 0, ii = strings.length; i < ii; i++) { + str = proto[1][i] || strings[i]; + const strBufUnicode = []; + + for (j = 0, jj = str.length; j < jj; j++) { + strBufUnicode.push(string16(str.charCodeAt(j))); + } + + stringsUnicode.push(strBufUnicode.join("")); + } + + const names = [strings, stringsUnicode]; + const platforms = ["\x00\x01", "\x00\x03"]; + const encodings = ["\x00\x00", "\x00\x01"]; + const languages = ["\x00\x00", "\x04\x09"]; + const namesRecordCount = strings.length * platforms.length; + let nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); + let strOffset = 0; + + for (i = 0, ii = platforms.length; i < ii; i++) { + const strs = names[i]; + + for (j = 0, jj = strs.length; j < jj; j++) { + str = strs[j]; + const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); + nameTable += nameRecord; + strOffset += str.length; + } + } + + nameTable += strings.join("") + stringsUnicode.join(""); + return nameTable; +} + +class Font { + constructor(name, file, properties) { + this.name = name; + this.psName = null; + this.mimetype = null; + this.disableFontFace = false; + this.loadedName = properties.loadedName; + this.isType3Font = properties.isType3Font; + this.missingFile = false; + this.cssFontInfo = properties.cssFontInfo; + this._charsCache = Object.create(null); + this._glyphCache = Object.create(null); + let isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif); + + if (!isSerifFont && !properties.isSimulatedFlags) { + const baseName = name.replace(/[,_]/g, "-").split("-")[0], + serifFonts = (0, _standard_fonts.getSerifFonts)(); + + for (const namePart of baseName.split("+")) { + if (serifFonts[namePart]) { + isSerifFont = true; + break; + } + } + } + + this.isSerifFont = isSerifFont; + this.isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); + this.isMonospace = !!(properties.flags & _fonts_utils.FontFlags.FixedPitch); + let type = properties.type; + let subtype = properties.subtype; + this.type = type; + this.subtype = subtype; + let fallbackName = "sans-serif"; + + if (this.isMonospace) { + fallbackName = "monospace"; + } else if (this.isSerifFont) { + fallbackName = "serif"; + } + + this.fallbackName = fallbackName; + this.differences = properties.differences; + this.widths = properties.widths; + this.defaultWidth = properties.defaultWidth; + this.composite = properties.composite; + this.cMap = properties.cMap; + this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS; + this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; + this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; + this.lineHeight = this.ascent - this.descent; + this.fontMatrix = properties.fontMatrix; + this.bbox = properties.bbox; + this.defaultEncoding = properties.defaultEncoding; + this.toUnicode = properties.toUnicode; + this.toFontChar = []; + + if (properties.type === "Type3") { + for (let charCode = 0; charCode < 256; charCode++) { + this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; + } + + this.fontType = _util.FontType.TYPE3; + return; + } + + this.cidEncoding = properties.cidEncoding || ""; + this.vertical = !!properties.vertical; + + if (this.vertical) { + this.vmetrics = properties.vmetrics; + this.defaultVMetrics = properties.defaultVMetrics; + } + + if (!file || file.isEmpty) { + if (file) { + (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")"); + } + + this.fallbackToSystemFont(properties); + return; + } + + [type, subtype] = getFontFileType(file, properties); + + if (type !== this.type || subtype !== this.subtype) { + (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`); + } + + let data; + + try { + switch (type) { + case "MMType1": + (0, _util.info)("MMType1 font (" + name + "), falling back to Type1."); + + case "Type1": + case "CIDFontType0": + this.mimetype = "font/opentype"; + const cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new _cff_font.CFFFont(file, properties) : new _type1_font.Type1Font(name, file, properties); + adjustWidths(properties); + data = this.convert(name, cff, properties); + break; + + case "OpenType": + case "TrueType": + case "CIDFontType2": + this.mimetype = "font/opentype"; + data = this.checkAndRepair(name, file, properties); + + if (this.isOpenType) { + adjustWidths(properties); + type = "OpenType"; + } + + break; + + default: + throw new _util.FormatError(`Font ${type} is not supported`); + } + } catch (e) { + (0, _util.warn)(e); + this.fallbackToSystemFont(properties); + return; + } + + amendFallbackToUnicode(properties); + this.data = data; + this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont); + this.fontMatrix = properties.fontMatrix; + this.widths = properties.widths; + this.defaultWidth = properties.defaultWidth; + this.toUnicode = properties.toUnicode; + this.seacMap = properties.seacMap; + } + + get renderer() { + const renderer = _font_renderer.FontRendererFactory.create(this, _fonts_utils.SEAC_ANALYSIS_ENABLED); + + return (0, _util.shadow)(this, "renderer", renderer); + } + + exportData(extraProperties = false) { + const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES; + const data = Object.create(null); + let property, value; + + for (property of exportDataProperties) { + value = this[property]; + + if (value !== undefined) { + data[property] = value; + } + } + + return data; + } + + fallbackToSystemFont(properties) { + this.missingFile = true; + const name = this.name; + const type = this.type; + const subtype = this.subtype; + let fontName = (0, _fonts_utils.normalizeFontName)(name); + const stdFontMap = (0, _standard_fonts.getStdFontMap)(), + nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); + const isStandardFont = !!stdFontMap[fontName]; + const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); + fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; + const fontBasicMetricsMap = (0, _metrics.getFontBasicMetrics)(); + const metrics = fontBasicMetricsMap[fontName]; + + if (metrics) { + if (isNaN(this.ascent)) { + this.ascent = metrics.ascent / PDF_GLYPH_SPACE_UNITS; + } + + if (isNaN(this.descent)) { + this.descent = metrics.descent / PDF_GLYPH_SPACE_UNITS; + } + + if (isNaN(this.capHeight)) { + this.capHeight = metrics.capHeight / PDF_GLYPH_SPACE_UNITS; + } + } + + this.bold = fontName.search(/bold/gi) !== -1; + this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; + this.black = name.search(/Black/g) !== -1; + const isNarrow = name.search(/Narrow/g) !== -1; + this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0; + + if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) { + const cidToGidMap = properties.cidToGidMap; + const map = []; + applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); + + if (/Arial-?Black/i.test(name)) { + applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)()); + } else if (/Calibri/i.test(name)) { + applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForCalibri)()); + } + + if (cidToGidMap) { + for (const charCode in map) { + const cid = map[charCode]; + + if (cidToGidMap[cid] !== undefined) { + map[+charCode] = cidToGidMap[cid]; + } + } + + if (cidToGidMap.length !== this.toUnicode.length && properties.hasIncludedToUnicodeMap && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { + this.toUnicode.forEach(function (charCode, unicodeCharCode) { + const cid = map[charCode]; + + if (cidToGidMap[cid] === undefined) { + map[+charCode] = unicodeCharCode; + } + }); + } + } + + if (!(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { + this.toUnicode.forEach(function (charCode, unicodeCharCode) { + map[+charCode] = unicodeCharCode; + }); + } + + this.toFontChar = map; + this.toUnicode = new _to_unicode_map.ToUnicodeMap(map); + } else if (/Symbol/i.test(fontName)) { + this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); + } else if (/Dingbats/i.test(fontName)) { + if (/Wingdings/i.test(name)) { + (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."); + } + + this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); + } else if (isStandardFont) { + const map = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); + + if (type === "CIDFontType2" && !this.cidEncoding.startsWith("Identity-") && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { + this.toUnicode.forEach(function (charCode, unicodeCharCode) { + map[+charCode] = unicodeCharCode; + }); + } + + this.toFontChar = map; + } else { + const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); + const map = []; + this.toUnicode.forEach((charCode, unicodeCharCode) => { + if (!this.composite) { + const glyphName = this.differences[charCode] || this.defaultEncoding[charCode]; + const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); + + if (unicode !== -1) { + unicodeCharCode = unicode; + } + } + + map[+charCode] = unicodeCharCode; + }); + + if (this.composite && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { + if (/Verdana/i.test(name)) { + applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); + } + } + + this.toFontChar = map; + } + + amendFallbackToUnicode(properties); + this.loadedName = fontName.split("-")[0]; + this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont); + } + + checkAndRepair(name, font, properties) { + const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; + + function readTables(file, numTables) { + const tables = Object.create(null); + tables["OS/2"] = null; + tables.cmap = null; + tables.head = null; + tables.hhea = null; + tables.hmtx = null; + tables.maxp = null; + tables.name = null; + tables.post = null; + + for (let i = 0; i < numTables; i++) { + const table = readTableEntry(file); + + if (!VALID_TABLES.includes(table.tag)) { + continue; + } + + if (table.length === 0) { + continue; + } + + tables[table.tag] = table; + } + + return tables; + } + + function readTableEntry(file) { + const tag = file.getString(4); + const checksum = file.getInt32() >>> 0; + const offset = file.getInt32() >>> 0; + const length = file.getInt32() >>> 0; + const previousPosition = file.pos; + file.pos = file.start || 0; + file.skip(offset); + const data = file.getBytes(length); + file.pos = previousPosition; + + if (tag === "head") { + data[8] = data[9] = data[10] = data[11] = 0; + data[17] |= 0x20; + } + + return { + tag, + checksum, + length, + offset, + data + }; + } + + function readOpenTypeHeader(ttf) { + return { + version: ttf.getString(4), + numTables: ttf.getUint16(), + searchRange: ttf.getUint16(), + entrySelector: ttf.getUint16(), + rangeShift: ttf.getUint16() + }; + } + + function readTrueTypeCollectionHeader(ttc) { + const ttcTag = ttc.getString(4); + (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font."); + const majorVersion = ttc.getUint16(); + const minorVersion = ttc.getUint16(); + const numFonts = ttc.getInt32() >>> 0; + const offsetTable = []; + + for (let i = 0; i < numFonts; i++) { + offsetTable.push(ttc.getInt32() >>> 0); + } + + const header = { + ttcTag, + majorVersion, + minorVersion, + numFonts, + offsetTable + }; + + switch (majorVersion) { + case 1: + return header; + + case 2: + header.dsigTag = ttc.getInt32() >>> 0; + header.dsigLength = ttc.getInt32() >>> 0; + header.dsigOffset = ttc.getInt32() >>> 0; + return header; + } + + throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`); + } + + function readTrueTypeCollectionData(ttc, fontName) { + const { + numFonts, + offsetTable + } = readTrueTypeCollectionHeader(ttc); + const fontNameParts = fontName.split("+"); + let fallbackData; + + for (let i = 0; i < numFonts; i++) { + ttc.pos = (ttc.start || 0) + offsetTable[i]; + const potentialHeader = readOpenTypeHeader(ttc); + const potentialTables = readTables(ttc, potentialHeader.numTables); + + if (!potentialTables.name) { + throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); + } + + const nameTable = readNameTable(potentialTables.name); + + for (let j = 0, jj = nameTable.length; j < jj; j++) { + for (let k = 0, kk = nameTable[j].length; k < kk; k++) { + const nameEntry = nameTable[j][k] && nameTable[j][k].replace(/\s/g, ""); + + if (!nameEntry) { + continue; + } + + if (nameEntry === fontName) { + return { + header: potentialHeader, + tables: potentialTables + }; + } + + if (fontNameParts.length < 2) { + continue; + } + + for (const part of fontNameParts) { + if (nameEntry === part) { + fallbackData = { + name: part, + header: potentialHeader, + tables: potentialTables + }; + } + } + } + } + } + + if (fallbackData) { + (0, _util.warn)(`TrueType Collection does not contain "${fontName}" font, ` + `falling back to "${fallbackData.name}" font instead.`); + return { + header: fallbackData.header, + tables: fallbackData.tables + }; + } + + throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`); + } + + function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { + if (!cmap) { + (0, _util.warn)("No cmap table available."); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + + let segment; + let start = (file.start || 0) + cmap.offset; + file.pos = start; + file.skip(2); + const numTables = file.getUint16(); + let potentialTable; + let canBreak = false; + + for (let i = 0; i < numTables; i++) { + const platformId = file.getUint16(); + const encodingId = file.getUint16(); + const offset = file.getInt32() >>> 0; + let useTable = false; + + if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { + continue; + } + + if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) { + useTable = true; + } else if (platformId === 1 && encodingId === 0) { + useTable = true; + } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { + useTable = true; + + if (!isSymbolicFont) { + canBreak = true; + } + } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { + useTable = true; + let correctlySorted = true; + + if (i < numTables - 1) { + const nextBytes = file.peekBytes(2), + nextPlatformId = int16(nextBytes[0], nextBytes[1]); + + if (nextPlatformId < platformId) { + correctlySorted = false; + } + } + + if (correctlySorted) { + canBreak = true; + } + } + + if (useTable) { + potentialTable = { + platformId, + encodingId, + offset + }; + } + + if (canBreak) { + break; + } + } + + if (potentialTable) { + file.pos = start + potentialTable.offset; + } + + if (!potentialTable || file.peekByte() === -1) { + (0, _util.warn)("Could not find a preferred cmap table."); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + + const format = file.getUint16(); + let hasShortCmap = false; + const mappings = []; + let j, glyphId; + + if (format === 0) { + file.skip(2 + 2); + + for (j = 0; j < 256; j++) { + const index = file.getByte(); + + if (!index) { + continue; + } + + mappings.push({ + charCode: j, + glyphId: index + }); + } + + hasShortCmap = true; + } else if (format === 2) { + file.skip(2 + 2); + const subHeaderKeys = []; + let maxSubHeaderKey = 0; + + for (let i = 0; i < 256; i++) { + const subHeaderKey = file.getUint16() >> 3; + subHeaderKeys.push(subHeaderKey); + maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey); + } + + const subHeaders = []; + + for (let i = 0; i <= maxSubHeaderKey; i++) { + subHeaders.push({ + firstCode: file.getUint16(), + entryCount: file.getUint16(), + idDelta: signedInt16(file.getByte(), file.getByte()), + idRangePos: file.pos + file.getUint16() + }); + } + + for (let i = 0; i < 256; i++) { + if (subHeaderKeys[i] === 0) { + file.pos = subHeaders[0].idRangePos + 2 * i; + glyphId = file.getUint16(); + mappings.push({ + charCode: i, + glyphId + }); + } else { + const s = subHeaders[subHeaderKeys[i]]; + + for (j = 0; j < s.entryCount; j++) { + const charCode = (i << 8) + j + s.firstCode; + file.pos = s.idRangePos + 2 * j; + glyphId = file.getUint16(); + + if (glyphId !== 0) { + glyphId = (glyphId + s.idDelta) % 65536; + } + + mappings.push({ + charCode, + glyphId + }); + } + } + } + } else if (format === 4) { + file.skip(2 + 2); + const segCount = file.getUint16() >> 1; + file.skip(6); + const segments = []; + let segIndex; + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments.push({ + end: file.getUint16() + }); + } + + file.skip(2); + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments[segIndex].start = file.getUint16(); + } + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segments[segIndex].delta = file.getUint16(); + } + + let offsetsCount = 0, + offsetIndex; + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segment = segments[segIndex]; + const rangeOffset = file.getUint16(); + + if (!rangeOffset) { + segment.offsetIndex = -1; + continue; + } + + offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); + segment.offsetIndex = offsetIndex; + offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); + } + + const offsets = []; + + for (j = 0; j < offsetsCount; j++) { + offsets.push(file.getUint16()); + } + + for (segIndex = 0; segIndex < segCount; segIndex++) { + segment = segments[segIndex]; + start = segment.start; + const end = segment.end; + const delta = segment.delta; + offsetIndex = segment.offsetIndex; + + for (j = start; j <= end; j++) { + if (j === 0xffff) { + continue; + } + + glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; + glyphId = glyphId + delta & 0xffff; + mappings.push({ + charCode: j, + glyphId + }); + } + } + } else if (format === 6) { + file.skip(2 + 2); + const firstCode = file.getUint16(); + const entryCount = file.getUint16(); + + for (j = 0; j < entryCount; j++) { + glyphId = file.getUint16(); + const charCode = firstCode + j; + mappings.push({ + charCode, + glyphId + }); + } + } else if (format === 12) { + file.skip(2 + 4 + 4); + const nGroups = file.getInt32() >>> 0; + + for (j = 0; j < nGroups; j++) { + const startCharCode = file.getInt32() >>> 0; + const endCharCode = file.getInt32() >>> 0; + let glyphCode = file.getInt32() >>> 0; + + for (let charCode = startCharCode; charCode <= endCharCode; charCode++) { + mappings.push({ + charCode, + glyphId: glyphCode++ + }); + } + } + } else { + (0, _util.warn)("cmap table has unsupported format: " + format); + return { + platformId: -1, + encodingId: -1, + mappings: [], + hasShortCmap: false + }; + } + + mappings.sort(function (a, b) { + return a.charCode - b.charCode; + }); + + for (let i = 1; i < mappings.length; i++) { + if (mappings[i - 1].charCode === mappings[i].charCode) { + mappings.splice(i, 1); + i--; + } + } + + return { + platformId: potentialTable.platformId, + encodingId: potentialTable.encodingId, + mappings, + hasShortCmap + }; + } + + function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) { + if (!header) { + if (metrics) { + metrics.data = null; + } + + return; + } + + file.pos = (file.start || 0) + header.offset; + file.pos += 4; + file.pos += 2; + file.pos += 2; + file.pos += 2; + file.pos += 2; + file.pos += 2; + file.pos += 2; + file.pos += 2; + file.pos += 2; + file.pos += 2; + const caretOffset = file.getUint16(); + file.pos += 8; + file.pos += 2; + let numOfMetrics = file.getUint16(); + + if (caretOffset !== 0) { + const macStyle = int16(headTable.data[44], headTable.data[45]); + + if (!(macStyle & 2)) { + header.data[22] = 0; + header.data[23] = 0; + } + } + + if (numOfMetrics > numGlyphs) { + (0, _util.info)(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`); + numOfMetrics = numGlyphs; + header.data[34] = (numOfMetrics & 0xff00) >> 8; + header.data[35] = numOfMetrics & 0x00ff; + } + + const numOfSidebearings = numGlyphs - numOfMetrics; + const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); + + if (numMissing > 0) { + const entries = new Uint8Array(metrics.length + numMissing * 2); + entries.set(metrics.data); + + if (dupFirstEntry) { + entries[metrics.length] = metrics.data[2]; + entries[metrics.length + 1] = metrics.data[3]; + } + + metrics.data = entries; + } + } + + function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { + const glyphProfile = { + length: 0, + sizeOfInstructions: 0 + }; + + if (sourceEnd - sourceStart <= 12) { + return glyphProfile; + } + + const glyf = source.subarray(sourceStart, sourceEnd); + let contoursCount = signedInt16(glyf[0], glyf[1]); + + if (contoursCount < 0) { + contoursCount = -1; + writeSignedInt16(glyf, 0, contoursCount); + dest.set(glyf, destStart); + glyphProfile.length = glyf.length; + return glyphProfile; + } + + let i, + j = 10, + flagsCount = 0; + + for (i = 0; i < contoursCount; i++) { + const endPoint = glyf[j] << 8 | glyf[j + 1]; + flagsCount = endPoint + 1; + j += 2; + } + + const instructionsStart = j; + const instructionsLength = glyf[j] << 8 | glyf[j + 1]; + glyphProfile.sizeOfInstructions = instructionsLength; + j += 2 + instructionsLength; + const instructionsEnd = j; + let coordinatesLength = 0; + + for (i = 0; i < flagsCount; i++) { + const flag = glyf[j++]; + + if (flag & 0xc0) { + glyf[j - 1] = flag & 0x3f; + } + + let xLength = 2; + + if (flag & 2) { + xLength = 1; + } else if (flag & 16) { + xLength = 0; + } + + let yLength = 2; + + if (flag & 4) { + yLength = 1; + } else if (flag & 32) { + yLength = 0; + } + + const xyLength = xLength + yLength; + coordinatesLength += xyLength; + + if (flag & 8) { + const repeat = glyf[j++]; + i += repeat; + coordinatesLength += repeat * xyLength; + } + } + + if (coordinatesLength === 0) { + return glyphProfile; + } + + let glyphDataLength = j + coordinatesLength; + + if (glyphDataLength > glyf.length) { + return glyphProfile; + } + + if (!hintsValid && instructionsLength > 0) { + dest.set(glyf.subarray(0, instructionsStart), destStart); + dest.set([0, 0], destStart + instructionsStart); + dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); + glyphDataLength -= instructionsLength; + + if (glyf.length - glyphDataLength > 3) { + glyphDataLength = glyphDataLength + 3 & ~3; + } + + glyphProfile.length = glyphDataLength; + return glyphProfile; + } + + if (glyf.length - glyphDataLength > 3) { + glyphDataLength = glyphDataLength + 3 & ~3; + dest.set(glyf.subarray(0, glyphDataLength), destStart); + glyphProfile.length = glyphDataLength; + return glyphProfile; + } + + dest.set(glyf, destStart); + glyphProfile.length = glyf.length; + return glyphProfile; + } + + function sanitizeHead(head, numGlyphs, locaLength) { + const data = head.data; + const version = int32(data[0], data[1], data[2], data[3]); + + if (version >> 16 !== 1) { + (0, _util.info)("Attempting to fix invalid version in head table: " + version); + data[0] = 0; + data[1] = 1; + data[2] = 0; + data[3] = 0; + } + + const indexToLocFormat = int16(data[50], data[51]); + + if (indexToLocFormat < 0 || indexToLocFormat > 1) { + (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat); + const numGlyphsPlusOne = numGlyphs + 1; + + if (locaLength === numGlyphsPlusOne << 1) { + data[50] = 0; + data[51] = 0; + } else if (locaLength === numGlyphsPlusOne << 2) { + data[50] = 0; + data[51] = 1; + } else { + throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat); + } + } + } + + function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { + let itemSize, itemDecode, itemEncode; + + if (isGlyphLocationsLong) { + itemSize = 4; + + itemDecode = function fontItemDecodeLong(data, offset) { + return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; + }; + + itemEncode = function fontItemEncodeLong(data, offset, value) { + data[offset] = value >>> 24 & 0xff; + data[offset + 1] = value >> 16 & 0xff; + data[offset + 2] = value >> 8 & 0xff; + data[offset + 3] = value & 0xff; + }; + } else { + itemSize = 2; + + itemDecode = function fontItemDecode(data, offset) { + return data[offset] << 9 | data[offset + 1] << 1; + }; + + itemEncode = function fontItemEncode(data, offset, value) { + data[offset] = value >> 9 & 0xff; + data[offset + 1] = value >> 1 & 0xff; + }; + } + + const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; + const locaDataSize = itemSize * (1 + numGlyphsOut); + const locaData = new Uint8Array(locaDataSize); + locaData.set(loca.data.subarray(0, locaDataSize)); + loca.data = locaData; + const oldGlyfData = glyf.data; + const oldGlyfDataLength = oldGlyfData.length; + const newGlyfData = new Uint8Array(oldGlyfDataLength); + let i, j; + const locaEntries = []; + + for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) { + let offset = itemDecode(locaData, j); + + if (offset > oldGlyfDataLength) { + offset = oldGlyfDataLength; + } + + locaEntries.push({ + index: i, + offset, + endOffset: 0 + }); + } + + locaEntries.sort((a, b) => { + return a.offset - b.offset; + }); + + for (i = 0; i < numGlyphs; i++) { + locaEntries[i].endOffset = locaEntries[i + 1].offset; + } + + locaEntries.sort((a, b) => { + return a.index - b.index; + }); + + for (i = 0; i < numGlyphs; i++) { + const { + offset, + endOffset + } = locaEntries[i]; + + if (offset !== 0 || endOffset !== 0) { + break; + } + + const nextOffset = locaEntries[i + 1].offset; + + if (nextOffset === 0) { + continue; + } + + locaEntries[i].endOffset = nextOffset; + break; + } + + const missingGlyphs = Object.create(null); + let writeOffset = 0; + itemEncode(locaData, 0, writeOffset); + + for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { + const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid); + const newLength = glyphProfile.length; + + if (newLength === 0) { + missingGlyphs[i] = true; + } + + if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { + maxSizeOfInstructions = glyphProfile.sizeOfInstructions; + } + + writeOffset += newLength; + itemEncode(locaData, j, writeOffset); + } + + if (writeOffset === 0) { + const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); + + for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { + itemEncode(locaData, j, simpleGlyph.length); + } + + glyf.data = simpleGlyph; + } else if (dupFirstEntry) { + const firstEntryLength = itemDecode(locaData, itemSize); + + if (newGlyfData.length > firstEntryLength + writeOffset) { + glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); + } else { + glyf.data = new Uint8Array(firstEntryLength + writeOffset); + glyf.data.set(newGlyfData.subarray(0, writeOffset)); + } + + glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); + itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); + } else { + glyf.data = newGlyfData.subarray(0, writeOffset); + } + + return { + missingGlyphs, + maxSizeOfInstructions + }; + } + + function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { + const start = (font.start || 0) + post.offset; + font.pos = start; + const length = post.length, + end = start + length; + const version = font.getInt32(); + font.skip(28); + let glyphNames; + let valid = true; + let i; + + switch (version) { + case 0x00010000: + glyphNames = _fonts_utils.MacStandardGlyphOrdering; + break; + + case 0x00020000: + const numGlyphs = font.getUint16(); + + if (numGlyphs !== maxpNumGlyphs) { + valid = false; + break; + } + + const glyphNameIndexes = []; + + for (i = 0; i < numGlyphs; ++i) { + const index = font.getUint16(); + + if (index >= 32768) { + valid = false; + break; + } + + glyphNameIndexes.push(index); + } + + if (!valid) { + break; + } + + const customNames = [], + strBuf = []; + + while (font.pos < end) { + const stringLength = font.getByte(); + strBuf.length = stringLength; + + for (i = 0; i < stringLength; ++i) { + strBuf[i] = String.fromCharCode(font.getByte()); + } + + customNames.push(strBuf.join("")); + } + + glyphNames = []; + + for (i = 0; i < numGlyphs; ++i) { + const j = glyphNameIndexes[i]; + + if (j < 258) { + glyphNames.push(_fonts_utils.MacStandardGlyphOrdering[j]); + continue; + } + + glyphNames.push(customNames[j - 258]); + } + + break; + + case 0x00030000: + break; + + default: + (0, _util.warn)("Unknown/unsupported post table version " + version); + valid = false; + + if (propertiesObj.defaultEncoding) { + glyphNames = propertiesObj.defaultEncoding; + } + + break; + } + + propertiesObj.glyphNames = glyphNames; + return valid; + } + + function readNameTable(nameTable) { + const start = (font.start || 0) + nameTable.offset; + font.pos = start; + const names = [[], []]; + const length = nameTable.length, + end = start + length; + const format = font.getUint16(); + const FORMAT_0_HEADER_LENGTH = 6; + + if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { + return names; + } + + const numRecords = font.getUint16(); + const stringsStart = font.getUint16(); + const records = []; + const NAME_RECORD_LENGTH = 12; + let i, ii; + + for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { + const r = { + platform: font.getUint16(), + encoding: font.getUint16(), + language: font.getUint16(), + name: font.getUint16(), + length: font.getUint16(), + offset: font.getUint16() + }; + + if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { + records.push(r); + } + } + + for (i = 0, ii = records.length; i < ii; i++) { + const record = records[i]; + + if (record.length <= 0) { + continue; + } + + const pos = start + stringsStart + record.offset; + + if (pos + record.length > end) { + continue; + } + + font.pos = pos; + const nameIndex = record.name; + + if (record.encoding) { + let str = ""; + + for (let j = 0, jj = record.length; j < jj; j += 2) { + str += String.fromCharCode(font.getUint16()); + } + + names[1][nameIndex] = str; + } else { + names[0][nameIndex] = font.getString(record.length); + } + } + + return names; + } + + const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; + + function sanitizeTTProgram(table, ttContext) { + let data = table.data; + let i = 0, + j, + n, + b, + funcId, + pc, + lastEndf = 0, + lastDeff = 0; + const stack = []; + const callstack = []; + const functionsCalled = []; + let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; + let inFDEF = false, + ifLevel = 0, + inELSE = 0; + + for (let ii = data.length; i < ii;) { + const op = data[i++]; + + if (op === 0x40) { + n = data[i++]; + + if (inFDEF || inELSE) { + i += n; + } else { + for (j = 0; j < n; j++) { + stack.push(data[i++]); + } + } + } else if (op === 0x41) { + n = data[i++]; + + if (inFDEF || inELSE) { + i += n * 2; + } else { + for (j = 0; j < n; j++) { + b = data[i++]; + stack.push(b << 8 | data[i++]); + } + } + } else if ((op & 0xf8) === 0xb0) { + n = op - 0xb0 + 1; + + if (inFDEF || inELSE) { + i += n; + } else { + for (j = 0; j < n; j++) { + stack.push(data[i++]); + } + } + } else if ((op & 0xf8) === 0xb8) { + n = op - 0xb8 + 1; + + if (inFDEF || inELSE) { + i += n * 2; + } else { + for (j = 0; j < n; j++) { + b = data[i++]; + stack.push(b << 8 | data[i++]); + } + } + } else if (op === 0x2b && !tooComplexToFollowFunctions) { + if (!inFDEF && !inELSE) { + funcId = stack.at(-1); + + if (isNaN(funcId)) { + (0, _util.info)("TT: CALL empty stack (or invalid entry)."); + } else { + ttContext.functionsUsed[funcId] = true; + + if (funcId in ttContext.functionsStackDeltas) { + const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; + + if (newStackLength < 0) { + (0, _util.warn)("TT: CALL invalid functions stack delta."); + ttContext.hintsValid = false; + return; + } + + stack.length = newStackLength; + } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { + callstack.push({ + data, + i, + stackTop: stack.length - 1 + }); + functionsCalled.push(funcId); + pc = ttContext.functionsDefined[funcId]; + + if (!pc) { + (0, _util.warn)("TT: CALL non-existent function"); + ttContext.hintsValid = false; + return; + } + + data = pc.data; + i = pc.i; + } + } + } + } else if (op === 0x2c && !tooComplexToFollowFunctions) { + if (inFDEF || inELSE) { + (0, _util.warn)("TT: nested FDEFs not allowed"); + tooComplexToFollowFunctions = true; + } + + inFDEF = true; + lastDeff = i; + funcId = stack.pop(); + ttContext.functionsDefined[funcId] = { + data, + i + }; + } else if (op === 0x2d) { + if (inFDEF) { + inFDEF = false; + lastEndf = i; + } else { + pc = callstack.pop(); + + if (!pc) { + (0, _util.warn)("TT: ENDF bad stack"); + ttContext.hintsValid = false; + return; + } + + funcId = functionsCalled.pop(); + data = pc.data; + i = pc.i; + ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; + } + } else if (op === 0x89) { + if (inFDEF || inELSE) { + (0, _util.warn)("TT: nested IDEFs not allowed"); + tooComplexToFollowFunctions = true; + } + + inFDEF = true; + lastDeff = i; + } else if (op === 0x58) { + ++ifLevel; + } else if (op === 0x1b) { + inELSE = ifLevel; + } else if (op === 0x59) { + if (inELSE === ifLevel) { + inELSE = 0; + } + + --ifLevel; + } else if (op === 0x1c) { + if (!inFDEF && !inELSE) { + const offset = stack.at(-1); + + if (offset > 0) { + i += offset - 1; + } + } + } + + if (!inFDEF && !inELSE) { + let stackDelta = 0; + + if (op <= 0x8e) { + stackDelta = TTOpsStackDeltas[op]; + } else if (op >= 0xc0 && op <= 0xdf) { + stackDelta = -1; + } else if (op >= 0xe0) { + stackDelta = -2; + } + + if (op >= 0x71 && op <= 0x75) { + n = stack.pop(); + + if (!isNaN(n)) { + stackDelta = -n * 2; + } + } + + while (stackDelta < 0 && stack.length > 0) { + stack.pop(); + stackDelta++; + } + + while (stackDelta > 0) { + stack.push(NaN); + stackDelta--; + } + } + } + + ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; + const content = [data]; + + if (i > data.length) { + content.push(new Uint8Array(i - data.length)); + } + + if (lastDeff > lastEndf) { + (0, _util.warn)("TT: complementing a missing function tail"); + content.push(new Uint8Array([0x22, 0x2d])); + } + + foldTTTable(table, content); + } + + function checkInvalidFunctions(ttContext, maxFunctionDefs) { + if (ttContext.tooComplexToFollowFunctions) { + return; + } + + if (ttContext.functionsDefined.length > maxFunctionDefs) { + (0, _util.warn)("TT: more functions defined than expected"); + ttContext.hintsValid = false; + return; + } + + for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { + if (j > maxFunctionDefs) { + (0, _util.warn)("TT: invalid function id: " + j); + ttContext.hintsValid = false; + return; + } + + if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { + (0, _util.warn)("TT: undefined function: " + j); + ttContext.hintsValid = false; + return; + } + } + } + + function foldTTTable(table, content) { + if (content.length > 1) { + let newLength = 0; + let j, jj; + + for (j = 0, jj = content.length; j < jj; j++) { + newLength += content[j].length; + } + + newLength = newLength + 3 & ~3; + const result = new Uint8Array(newLength); + let pos = 0; + + for (j = 0, jj = content.length; j < jj; j++) { + result.set(content[j], pos); + pos += content[j].length; + } + + table.data = result; + table.length = newLength; + } + } + + function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { + const ttContext = { + functionsDefined: [], + functionsUsed: [], + functionsStackDeltas: [], + tooComplexToFollowFunctions: false, + hintsValid: true + }; + + if (fpgm) { + sanitizeTTProgram(fpgm, ttContext); + } + + if (prep) { + sanitizeTTProgram(prep, ttContext); + } + + if (fpgm) { + checkInvalidFunctions(ttContext, maxFunctionDefs); + } + + if (cvt && cvt.length & 1) { + const cvtData = new Uint8Array(cvt.length + 1); + cvtData.set(cvt.data); + cvt.data = cvtData; + } + + return ttContext.hintsValid; + } + + font = new _stream.Stream(new Uint8Array(font.getBytes())); + let header, tables; + + if (isTrueTypeCollectionFile(font)) { + const ttcData = readTrueTypeCollectionData(font, this.name); + header = ttcData.header; + tables = ttcData.tables; + } else { + header = readOpenTypeHeader(font); + tables = readTables(font, header.numTables); + } + + let cff, cffFile; + const isTrueType = !tables["CFF "]; + + if (!isTrueType) { + const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); + + if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) { + cffFile = new _stream.Stream(tables["CFF "].data); + cff = new _cff_font.CFFFont(cffFile, properties); + adjustWidths(properties); + return this.convert(name, cff, properties); + } + + delete tables.glyf; + delete tables.loca; + delete tables.fpgm; + delete tables.prep; + delete tables["cvt "]; + this.isOpenType = true; + } else { + if (!tables.loca) { + throw new _util.FormatError('Required "loca" table is not found'); + } + + if (!tables.glyf) { + (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); + tables.glyf = { + tag: "glyf", + data: new Uint8Array(0) + }; + } + + this.isOpenType = false; + } + + if (!tables.maxp) { + throw new _util.FormatError('Required "maxp" table is not found'); + } + + font.pos = (font.start || 0) + tables.maxp.offset; + const version = font.getInt32(); + const numGlyphs = font.getUint16(); + + if (properties.scaleFactors && properties.scaleFactors.length === numGlyphs && isTrueType) { + const { + scaleFactors + } = properties; + const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); + const glyphs = new _glyf.GlyfTable({ + glyfTable: tables.glyf.data, + isGlyphLocationsLong, + locaTable: tables.loca.data, + numGlyphs + }); + glyphs.scale(scaleFactors); + const { + glyf, + loca, + isLocationLong + } = glyphs.write(); + tables.glyf.data = glyf; + tables.loca.data = loca; + + if (isLocationLong !== !!isGlyphLocationsLong) { + tables.head.data[50] = 0; + tables.head.data[51] = isLocationLong ? 1 : 0; + } + + const metrics = tables.hmtx.data; + + for (let i = 0; i < numGlyphs; i++) { + const j = 4 * i; + const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1])); + metrics[j] = advanceWidth >> 8 & 0xff; + metrics[j + 1] = advanceWidth & 0xff; + const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3])); + writeSignedInt16(metrics, j + 2, lsb); + } + } + + let numGlyphsOut = numGlyphs + 1; + let dupFirstEntry = true; + + if (numGlyphsOut > 0xffff) { + dupFirstEntry = false; + numGlyphsOut = numGlyphs; + (0, _util.warn)("Not enough space in glyfs to duplicate first glyph."); + } + + let maxFunctionDefs = 0; + let maxSizeOfInstructions = 0; + + if (version >= 0x00010000 && tables.maxp.length >= 22) { + font.pos += 8; + const maxZones = font.getUint16(); + + if (maxZones > 2) { + tables.maxp.data[14] = 0; + tables.maxp.data[15] = 2; + } + + font.pos += 4; + maxFunctionDefs = font.getUint16(); + font.pos += 4; + maxSizeOfInstructions = font.getUint16(); + } + + tables.maxp.data[4] = numGlyphsOut >> 8; + tables.maxp.data[5] = numGlyphsOut & 255; + const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs); + + if (!hintsValid) { + delete tables.fpgm; + delete tables.prep; + delete tables["cvt "]; + } + + sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry); + + if (!tables.head) { + throw new _util.FormatError('Required "head" table is not found'); + } + + sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); + let missingGlyphs = Object.create(null); + + if (isTrueType) { + const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); + const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); + missingGlyphs = glyphsInfo.missingGlyphs; + + if (version >= 0x00010000 && tables.maxp.length >= 22) { + tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8; + tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255; + } + } + + if (!tables.hhea) { + throw new _util.FormatError('Required "hhea" table is not found'); + } + + if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { + tables.hhea.data[10] = 0xff; + tables.hhea.data[11] = 0xff; + } + + const metricsOverride = { + unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), + yMax: int16(tables.head.data[42], tables.head.data[43]), + yMin: signedInt16(tables.head.data[38], tables.head.data[39]), + ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]), + descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]), + lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9]) + }; + this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; + this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; + this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm; + + if (this.cssFontInfo && this.cssFontInfo.lineHeight) { + this.lineHeight = this.cssFontInfo.metrics.lineHeight; + this.lineGap = this.cssFontInfo.metrics.lineGap; + } else { + this.lineHeight = this.ascent - this.descent + this.lineGap; + } + + if (tables.post) { + readPostScriptTable(tables.post, properties, numGlyphs); + } + + tables.post = { + tag: "post", + data: createPostTable(properties) + }; + const charCodeToGlyphId = []; + + function hasGlyph(glyphId) { + return !missingGlyphs[glyphId]; + } + + if (properties.composite) { + const cidToGidMap = properties.cidToGidMap || []; + const isCidToGidMapEmpty = cidToGidMap.length === 0; + properties.cMap.forEach(function (charCode, cid) { + if (typeof cid === "string") { + cid = convertCidString(charCode, cid, true); + } + + if (cid > 0xffff) { + throw new _util.FormatError("Max size of CID is 65,535"); + } + + let glyphId = -1; + + if (isCidToGidMapEmpty) { + glyphId = cid; + } else if (cidToGidMap[cid] !== undefined) { + glyphId = cidToGidMap[cid]; + } + + if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { + charCodeToGlyphId[charCode] = glyphId; + } + }); + } else { + const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding); + const cmapPlatformId = cmapTable.platformId; + const cmapEncodingId = cmapTable.encodingId; + const cmapMappings = cmapTable.mappings; + const cmapMappingsLength = cmapMappings.length; + let baseEncoding = [], + forcePostTable = false; + + if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) { + baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); + } + + if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) { + const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); + + for (let charCode = 0; charCode < 256; charCode++) { + let glyphName; + + if (this.differences[charCode] !== undefined) { + glyphName = this.differences[charCode]; + } else if (baseEncoding.length && baseEncoding[charCode] !== "") { + glyphName = baseEncoding[charCode]; + } else { + glyphName = _encodings.StandardEncoding[charCode]; + } + + if (!glyphName) { + continue; + } + + const standardGlyphName = (0, _fonts_utils.recoverGlyphName)(glyphName, glyphsUnicodeMap); + let unicodeOrCharCode; + + if (cmapPlatformId === 3 && cmapEncodingId === 1) { + unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; + } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { + unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); + } + + if (unicodeOrCharCode === undefined) { + if (!properties.glyphNames && properties.hasIncludedToUnicodeMap && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { + const unicode = this.toUnicode.get(charCode); + + if (unicode) { + unicodeOrCharCode = unicode.codePointAt(0); + } + } + + if (unicodeOrCharCode === undefined) { + continue; + } + } + + for (let i = 0; i < cmapMappingsLength; ++i) { + if (cmapMappings[i].charCode !== unicodeOrCharCode) { + continue; + } + + charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; + break; + } + } + } else if (cmapPlatformId === 0) { + for (let i = 0; i < cmapMappingsLength; ++i) { + charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId; + } + + forcePostTable = true; + } else { + for (let i = 0; i < cmapMappingsLength; ++i) { + let charCode = cmapMappings[i].charCode; + + if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) { + charCode &= 0xff; + } + + charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; + } + } + + if (properties.glyphNames && (baseEncoding.length || this.differences.length)) { + for (let i = 0; i < 256; ++i) { + if (!forcePostTable && charCodeToGlyphId[i] !== undefined) { + continue; + } + + const glyphName = this.differences[i] || baseEncoding[i]; + + if (!glyphName) { + continue; + } + + const glyphId = properties.glyphNames.indexOf(glyphName); + + if (glyphId > 0 && hasGlyph(glyphId)) { + charCodeToGlyphId[i] = glyphId; + } + } + } + } + + if (charCodeToGlyphId.length === 0) { + charCodeToGlyphId[0] = 0; + } + + let glyphZeroId = numGlyphsOut - 1; + + if (!dupFirstEntry) { + glyphZeroId = 0; + } + + if (!properties.cssFontInfo) { + const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId, this.toUnicode); + this.toFontChar = newMapping.toFontChar; + tables.cmap = { + tag: "cmap", + data: createCmapTable(newMapping.charCodeToGlyphId, newMapping.toUnicodeExtraMap, numGlyphsOut) + }; + + if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { + tables["OS/2"] = { + tag: "OS/2", + data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) + }; + } + } + + if (!isTrueType) { + try { + cffFile = new _stream.Stream(tables["CFF "].data); + const parser = new _cff_parser.CFFParser(cffFile, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); + cff = parser.parse(); + cff.duplicateFirstGlyph(); + const compiler = new _cff_parser.CFFCompiler(cff); + tables["CFF "].data = compiler.compile(); + } catch (e) { + (0, _util.warn)("Failed to compile font " + properties.loadedName); + } + } + + if (!tables.name) { + tables.name = { + tag: "name", + data: createNameTable(this.name) + }; + } else { + const namePrototype = readNameTable(tables.name); + tables.name.data = createNameTable(name, namePrototype); + this.psName = namePrototype[0][6] || null; + } + + const builder = new _opentype_file_builder.OpenTypeFileBuilder(header.version); + + for (const tableTag in tables) { + builder.addTable(tableTag, tables[tableTag].data); + } + + return builder.toArray(); + } + + convert(fontName, font, properties) { + properties.fixedPitch = false; + + if (properties.builtInEncoding) { + adjustToUnicode(properties, properties.builtInEncoding); + } + + let glyphZeroId = 1; + + if (font instanceof _cff_font.CFFFont) { + glyphZeroId = font.numGlyphs - 1; + } + + const mapping = font.getGlyphMapping(properties); + let newMapping = null; + let newCharCodeToGlyphId = mapping; + let toUnicodeExtraMap = null; + + if (!properties.cssFontInfo) { + newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId, this.toUnicode); + this.toFontChar = newMapping.toFontChar; + newCharCodeToGlyphId = newMapping.charCodeToGlyphId; + toUnicodeExtraMap = newMapping.toUnicodeExtraMap; + } + + const numGlyphs = font.numGlyphs; + + function getCharCodes(charCodeToGlyphId, glyphId) { + let charCodes = null; + + for (const charCode in charCodeToGlyphId) { + if (glyphId === charCodeToGlyphId[charCode]) { + if (!charCodes) { + charCodes = []; + } + + charCodes.push(charCode | 0); + } + } + + return charCodes; + } + + function createCharCode(charCodeToGlyphId, glyphId) { + for (const charCode in charCodeToGlyphId) { + if (glyphId === charCodeToGlyphId[charCode]) { + return charCode | 0; + } + } + + newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; + return newMapping.nextAvailableFontCharCode++; + } + + const seacs = font.seacs; + + if (newMapping && _fonts_utils.SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { + const matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; + const charset = font.getCharset(); + const seacMap = Object.create(null); + + for (let glyphId in seacs) { + glyphId |= 0; + const seac = seacs[glyphId]; + const baseGlyphName = _encodings.StandardEncoding[seac[2]]; + const accentGlyphName = _encodings.StandardEncoding[seac[3]]; + const baseGlyphId = charset.indexOf(baseGlyphName); + const accentGlyphId = charset.indexOf(accentGlyphName); + + if (baseGlyphId < 0 || accentGlyphId < 0) { + continue; + } + + const accentOffset = { + x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], + y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] + }; + const charCodes = getCharCodes(mapping, glyphId); + + if (!charCodes) { + continue; + } + + for (let i = 0, ii = charCodes.length; i < ii; i++) { + const charCode = charCodes[i]; + const charCodeToGlyphId = newMapping.charCodeToGlyphId; + const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); + const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); + seacMap[charCode] = { + baseFontCharCode, + accentFontCharCode, + accentOffset + }; + } + } + + properties.seacMap = seacMap; + } + + const unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; + const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F"); + builder.addTable("CFF ", font.data); + builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); + builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, toUnicodeExtraMap, numGlyphs)); + builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); + builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); + builder.addTable("hmtx", function fontFieldsHmtx() { + const charstrings = font.charstrings; + const cffWidths = font.cff ? font.cff.widths : null; + let hmtx = "\x00\x00\x00\x00"; + + for (let i = 1, ii = numGlyphs; i < ii; i++) { + let width = 0; + + if (charstrings) { + const charstring = charstrings[i - 1]; + width = "width" in charstring ? charstring.width : 0; + } else if (cffWidths) { + width = Math.ceil(cffWidths[i] || 0); + } + + hmtx += string16(width) + string16(0); + } + + return hmtx; + }()); + builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); + builder.addTable("name", createNameTable(fontName)); + builder.addTable("post", createPostTable(properties)); + return builder.toArray(); + } + + get spaceWidth() { + const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"]; + let width; + + for (let i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { + const glyphName = possibleSpaceReplacements[i]; + + if (glyphName in this.widths) { + width = this.widths[glyphName]; + break; + } + + const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); + const glyphUnicode = glyphsUnicodeMap[glyphName]; + let charcode = 0; + + if (this.composite && this.cMap.contains(glyphUnicode)) { + charcode = this.cMap.lookup(glyphUnicode); + + if (typeof charcode === "string") { + charcode = convertCidString(glyphUnicode, charcode); + } + } + + if (!charcode && this.toUnicode) { + charcode = this.toUnicode.charCodeOf(glyphUnicode); + } + + if (charcode <= 0) { + charcode = glyphUnicode; + } + + width = this.widths[charcode]; + + if (width) { + break; + } + } + + width = width || this.defaultWidth; + return (0, _util.shadow)(this, "spaceWidth", width); + } + + _charToGlyph(charcode, isSpace = false) { + let fontCharCode, width, operatorListId; + let widthCode = charcode; + + if (this.cMap && this.cMap.contains(charcode)) { + widthCode = this.cMap.lookup(charcode); + + if (typeof widthCode === "string") { + widthCode = convertCidString(charcode, widthCode); + } + } + + width = this.widths[widthCode]; + + if (typeof width !== "number") { + width = this.defaultWidth; + } + + const vmetric = this.vmetrics && this.vmetrics[widthCode]; + let unicode = this.toUnicode.get(charcode) || charcode; + + if (typeof unicode === "number") { + unicode = String.fromCharCode(unicode); + } + + let isInFont = this.toFontChar[charcode] !== undefined; + fontCharCode = this.toFontChar[charcode] || charcode; + + if (this.missingFile) { + const glyphName = this.differences[charcode] || this.defaultEncoding[charcode]; + + if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") { + fontCharCode = 0x20; + } + + fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); + } + + if (this.isType3Font) { + operatorListId = fontCharCode; + } + + let accent = null; + + if (this.seacMap && this.seacMap[charcode]) { + isInFont = true; + const seac = this.seacMap[charcode]; + fontCharCode = seac.baseFontCharCode; + accent = { + fontChar: String.fromCodePoint(seac.accentFontCharCode), + offset: seac.accentOffset + }; + } + + let fontChar = ""; + + if (typeof fontCharCode === "number") { + if (fontCharCode <= 0x10ffff) { + fontChar = String.fromCodePoint(fontCharCode); + } else { + (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`); + } + } + + let glyph = this._glyphCache[charcode]; + + if (!glyph || !glyph.matchesForCache(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { + glyph = new Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); + this._glyphCache[charcode] = glyph; + } + + return glyph; + } + + charsToGlyphs(chars) { + let glyphs = this._charsCache[chars]; + + if (glyphs) { + return glyphs; + } + + glyphs = []; + + if (this.cMap) { + const c = Object.create(null), + ii = chars.length; + let i = 0; + + while (i < ii) { + this.cMap.readCharCode(chars, i, c); + const { + charcode, + length + } = c; + i += length; + + const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20); + + glyphs.push(glyph); + } + } else { + for (let i = 0, ii = chars.length; i < ii; ++i) { + const charcode = chars.charCodeAt(i); + + const glyph = this._charToGlyph(charcode, charcode === 0x20); + + glyphs.push(glyph); + } + } + + return this._charsCache[chars] = glyphs; + } + + getCharPositions(chars) { + const positions = []; + + if (this.cMap) { + const c = Object.create(null); + let i = 0; + + while (i < chars.length) { + this.cMap.readCharCode(chars, i, c); + const length = c.length; + positions.push([i, i + length]); + i += length; + } + } else { + for (let i = 0, ii = chars.length; i < ii; ++i) { + positions.push([i, i + 1]); + } + } + + return positions; + } + + get glyphCacheValues() { + return Object.values(this._glyphCache); + } + + encodeString(str) { + const buffers = []; + const currentBuf = []; + + const hasCurrentBufErrors = () => buffers.length % 2 === 1; + + const getCharCode = this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap ? unicode => this.toUnicode.charCodeOf(unicode) : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode)); + + for (let i = 0, ii = str.length; i < ii; i++) { + const unicode = str.codePointAt(i); + + if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) { + i++; + } + + if (this.toUnicode) { + const charCode = getCharCode(unicode); + + if (charCode !== -1) { + if (hasCurrentBufErrors()) { + buffers.push(currentBuf.join("")); + currentBuf.length = 0; + } + + const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1; + + for (let j = charCodeLength - 1; j >= 0; j--) { + currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff)); + } + + continue; + } + } + + if (!hasCurrentBufErrors()) { + buffers.push(currentBuf.join("")); + currentBuf.length = 0; + } + + currentBuf.push(String.fromCodePoint(unicode)); + } + + buffers.push(currentBuf.join("")); + return buffers; + } + +} + +exports.Font = Font; + +class ErrorFont { + constructor(error) { + this.error = error; + this.loadedName = "g_font_error"; + this.missingFile = true; + } + + charsToGlyphs() { + return []; + } + + encodeString(chars) { + return [chars]; + } + + exportData(extraProperties = false) { + return { + error: this.error + }; + } + +} + +exports.ErrorFont = ErrorFont; + +/***/ }), +/* 35 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0; + +var _util = __w_pdfjs_require__(2); + +var _charsets = __w_pdfjs_require__(36); + +var _encodings = __w_pdfjs_require__(37); + +const MAX_SUBR_NESTING = 10; +const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; +exports.CFFStandardStrings = CFFStandardStrings; +const NUM_STANDARD_CFF_STRINGS = 391; +const CharstringValidationData = [null, { + id: "hstem", + min: 2, + stackClearing: true, + stem: true +}, null, { + id: "vstem", + min: 2, + stackClearing: true, + stem: true +}, { + id: "vmoveto", + min: 1, + stackClearing: true +}, { + id: "rlineto", + min: 2, + resetStack: true +}, { + id: "hlineto", + min: 1, + resetStack: true +}, { + id: "vlineto", + min: 1, + resetStack: true +}, { + id: "rrcurveto", + min: 6, + resetStack: true +}, null, { + id: "callsubr", + min: 1, + undefStack: true +}, { + id: "return", + min: 0, + undefStack: true +}, null, null, { + id: "endchar", + min: 0, + stackClearing: true +}, null, null, null, { + id: "hstemhm", + min: 2, + stackClearing: true, + stem: true +}, { + id: "hintmask", + min: 0, + stackClearing: true +}, { + id: "cntrmask", + min: 0, + stackClearing: true +}, { + id: "rmoveto", + min: 2, + stackClearing: true +}, { + id: "hmoveto", + min: 1, + stackClearing: true +}, { + id: "vstemhm", + min: 2, + stackClearing: true, + stem: true +}, { + id: "rcurveline", + min: 8, + resetStack: true +}, { + id: "rlinecurve", + min: 8, + resetStack: true +}, { + id: "vvcurveto", + min: 4, + resetStack: true +}, { + id: "hhcurveto", + min: 4, + resetStack: true +}, null, { + id: "callgsubr", + min: 1, + undefStack: true +}, { + id: "vhcurveto", + min: 4, + resetStack: true +}, { + id: "hvcurveto", + min: 4, + resetStack: true +}]; +const CharstringValidationData12 = [null, null, null, { + id: "and", + min: 2, + stackDelta: -1 +}, { + id: "or", + min: 2, + stackDelta: -1 +}, { + id: "not", + min: 1, + stackDelta: 0 +}, null, null, null, { + id: "abs", + min: 1, + stackDelta: 0 +}, { + id: "add", + min: 2, + stackDelta: -1, + + stackFn(stack, index) { + stack[index - 2] = stack[index - 2] + stack[index - 1]; + } + +}, { + id: "sub", + min: 2, + stackDelta: -1, + + stackFn(stack, index) { + stack[index - 2] = stack[index - 2] - stack[index - 1]; + } + +}, { + id: "div", + min: 2, + stackDelta: -1, + + stackFn(stack, index) { + stack[index - 2] = stack[index - 2] / stack[index - 1]; + } + +}, null, { + id: "neg", + min: 1, + stackDelta: 0, + + stackFn(stack, index) { + stack[index - 1] = -stack[index - 1]; + } + +}, { + id: "eq", + min: 2, + stackDelta: -1 +}, null, null, { + id: "drop", + min: 1, + stackDelta: -1 +}, null, { + id: "put", + min: 2, + stackDelta: -2 +}, { + id: "get", + min: 1, + stackDelta: 0 +}, { + id: "ifelse", + min: 4, + stackDelta: -3 +}, { + id: "random", + min: 0, + stackDelta: 1 +}, { + id: "mul", + min: 2, + stackDelta: -1, + + stackFn(stack, index) { + stack[index - 2] = stack[index - 2] * stack[index - 1]; + } + +}, null, { + id: "sqrt", + min: 1, + stackDelta: 0 +}, { + id: "dup", + min: 1, + stackDelta: 1 +}, { + id: "exch", + min: 2, + stackDelta: 0 +}, { + id: "index", + min: 2, + stackDelta: 0 +}, { + id: "roll", + min: 3, + stackDelta: -2 +}, null, null, null, { + id: "hflex", + min: 7, + resetStack: true +}, { + id: "flex", + min: 13, + resetStack: true +}, { + id: "hflex1", + min: 9, + resetStack: true +}, { + id: "flex1", + min: 11, + resetStack: true +}]; + +class CFFParser { + constructor(file, properties, seacAnalysisEnabled) { + this.bytes = file.getBytes(); + this.properties = properties; + this.seacAnalysisEnabled = !!seacAnalysisEnabled; + } + + parse() { + const properties = this.properties; + const cff = new CFF(); + this.cff = cff; + const header = this.parseHeader(); + const nameIndex = this.parseIndex(header.endPos); + const topDictIndex = this.parseIndex(nameIndex.endPos); + const stringIndex = this.parseIndex(topDictIndex.endPos); + const globalSubrIndex = this.parseIndex(stringIndex.endPos); + const topDictParsed = this.parseDict(topDictIndex.obj.get(0)); + const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); + cff.header = header.obj; + cff.names = this.parseNameIndex(nameIndex.obj); + cff.strings = this.parseStringIndex(stringIndex.obj); + cff.topDict = topDict; + cff.globalSubrIndex = globalSubrIndex.obj; + this.parsePrivateDict(cff.topDict); + cff.isCIDFont = topDict.hasName("ROS"); + const charStringOffset = topDict.getByName("CharStrings"); + const charStringIndex = this.parseIndex(charStringOffset).obj; + const fontMatrix = topDict.getByName("FontMatrix"); + + if (fontMatrix) { + properties.fontMatrix = fontMatrix; + } + + const fontBBox = topDict.getByName("FontBBox"); + + if (fontBBox) { + properties.ascent = Math.max(fontBBox[3], fontBBox[1]); + properties.descent = Math.min(fontBBox[1], fontBBox[3]); + properties.ascentScaled = true; + } + + let charset, encoding; + + if (cff.isCIDFont) { + const fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj; + + for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) { + const dictRaw = fdArrayIndex.get(i); + const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); + this.parsePrivateDict(fontDict); + cff.fdArray.push(fontDict); + } + + encoding = null; + charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true); + cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count); + } else { + charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false); + encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset); + } + + cff.charset = charset; + cff.encoding = encoding; + const charStringsAndSeacs = this.parseCharStrings({ + charStrings: charStringIndex, + localSubrIndex: topDict.privateDict.subrsIndex, + globalSubrIndex: globalSubrIndex.obj, + fdSelect: cff.fdSelect, + fdArray: cff.fdArray, + privateDict: topDict.privateDict + }); + cff.charStrings = charStringsAndSeacs.charStrings; + cff.seacs = charStringsAndSeacs.seacs; + cff.widths = charStringsAndSeacs.widths; + return cff; + } + + parseHeader() { + let bytes = this.bytes; + const bytesLength = bytes.length; + let offset = 0; + + while (offset < bytesLength && bytes[offset] !== 1) { + ++offset; + } + + if (offset >= bytesLength) { + throw new _util.FormatError("Invalid CFF header"); + } + + if (offset !== 0) { + (0, _util.info)("cff data is shifted"); + bytes = bytes.subarray(offset); + this.bytes = bytes; + } + + const major = bytes[0]; + const minor = bytes[1]; + const hdrSize = bytes[2]; + const offSize = bytes[3]; + const header = new CFFHeader(major, minor, hdrSize, offSize); + return { + obj: header, + endPos: hdrSize + }; + } + + parseDict(dict) { + let pos = 0; + + function parseOperand() { + let value = dict[pos++]; + + if (value === 30) { + return parseFloatOperand(); + } else if (value === 28) { + value = dict[pos++]; + value = (value << 24 | dict[pos++] << 16) >> 16; + return value; + } else if (value === 29) { + value = dict[pos++]; + value = value << 8 | dict[pos++]; + value = value << 8 | dict[pos++]; + value = value << 8 | dict[pos++]; + return value; + } else if (value >= 32 && value <= 246) { + return value - 139; + } else if (value >= 247 && value <= 250) { + return (value - 247) * 256 + dict[pos++] + 108; + } else if (value >= 251 && value <= 254) { + return -((value - 251) * 256) - dict[pos++] - 108; + } + + (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); + return NaN; + } + + function parseFloatOperand() { + let str = ""; + const eof = 15; + const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; + const length = dict.length; + + while (pos < length) { + const b = dict[pos++]; + const b1 = b >> 4; + const b2 = b & 15; + + if (b1 === eof) { + break; + } + + str += lookup[b1]; + + if (b2 === eof) { + break; + } + + str += lookup[b2]; + } + + return parseFloat(str); + } + + let operands = []; + const entries = []; + pos = 0; + const end = dict.length; + + while (pos < end) { + let b = dict[pos]; + + if (b <= 21) { + if (b === 12) { + b = b << 8 | dict[++pos]; + } + + entries.push([b, operands]); + operands = []; + ++pos; + } else { + operands.push(parseOperand()); + } + } + + return entries; + } + + parseIndex(pos) { + const cffIndex = new CFFIndex(); + const bytes = this.bytes; + const count = bytes[pos++] << 8 | bytes[pos++]; + const offsets = []; + let end = pos; + let i, ii; + + if (count !== 0) { + const offsetSize = bytes[pos++]; + const startPos = pos + (count + 1) * offsetSize - 1; + + for (i = 0, ii = count + 1; i < ii; ++i) { + let offset = 0; + + for (let j = 0; j < offsetSize; ++j) { + offset <<= 8; + offset += bytes[pos++]; + } + + offsets.push(startPos + offset); + } + + end = offsets[count]; + } + + for (i = 0, ii = offsets.length - 1; i < ii; ++i) { + const offsetStart = offsets[i]; + const offsetEnd = offsets[i + 1]; + cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); + } + + return { + obj: cffIndex, + endPos: end + }; + } + + parseNameIndex(index) { + const names = []; + + for (let i = 0, ii = index.count; i < ii; ++i) { + const name = index.get(i); + names.push((0, _util.bytesToString)(name)); + } + + return names; + } + + parseStringIndex(index) { + const strings = new CFFStrings(); + + for (let i = 0, ii = index.count; i < ii; ++i) { + const data = index.get(i); + strings.add((0, _util.bytesToString)(data)); + } + + return strings; + } + + createDict(Type, dict, strings) { + const cffDict = new Type(strings); + + for (let i = 0, ii = dict.length; i < ii; ++i) { + const pair = dict[i]; + const key = pair[0]; + const value = pair[1]; + cffDict.setByKey(key, value); + } + + return cffDict; + } + + parseCharString(state, data, localSubrIndex, globalSubrIndex) { + if (!data || state.callDepth > MAX_SUBR_NESTING) { + return false; + } + + let stackSize = state.stackSize; + const stack = state.stack; + const length = data.length; + + for (let j = 0; j < length;) { + const value = data[j++]; + let validationCommand = null; + + if (value === 12) { + const q = data[j++]; + + if (q === 0) { + data[j - 2] = 139; + data[j - 1] = 22; + stackSize = 0; + } else { + validationCommand = CharstringValidationData12[q]; + } + } else if (value === 28) { + stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; + j += 2; + stackSize++; + } else if (value === 14) { + if (stackSize >= 4) { + stackSize -= 4; + + if (this.seacAnalysisEnabled) { + state.seac = stack.slice(stackSize, stackSize + 4); + return false; + } + } + + validationCommand = CharstringValidationData[value]; + } else if (value >= 32 && value <= 246) { + stack[stackSize] = value - 139; + stackSize++; + } else if (value >= 247 && value <= 254) { + stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; + j++; + stackSize++; + } else if (value === 255) { + stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; + j += 4; + stackSize++; + } else if (value === 19 || value === 20) { + state.hints += stackSize >> 1; + j += state.hints + 7 >> 3; + stackSize %= 2; + validationCommand = CharstringValidationData[value]; + } else if (value === 10 || value === 29) { + let subrsIndex; + + if (value === 10) { + subrsIndex = localSubrIndex; + } else { + subrsIndex = globalSubrIndex; + } + + if (!subrsIndex) { + validationCommand = CharstringValidationData[value]; + (0, _util.warn)("Missing subrsIndex for " + validationCommand.id); + return false; + } + + let bias = 32768; + + if (subrsIndex.count < 1240) { + bias = 107; + } else if (subrsIndex.count < 33900) { + bias = 1131; + } + + const subrNumber = stack[--stackSize] + bias; + + if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { + validationCommand = CharstringValidationData[value]; + (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id); + return false; + } + + state.stackSize = stackSize; + state.callDepth++; + const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); + + if (!valid) { + return false; + } + + state.callDepth--; + stackSize = state.stackSize; + continue; + } else if (value === 11) { + state.stackSize = stackSize; + return true; + } else if (value === 0 && j === data.length) { + data[j - 1] = 14; + validationCommand = CharstringValidationData[14]; + } else { + validationCommand = CharstringValidationData[value]; + } + + if (validationCommand) { + if (validationCommand.stem) { + state.hints += stackSize >> 1; + + if (value === 3 || value === 23) { + state.hasVStems = true; + } else if (state.hasVStems && (value === 1 || value === 18)) { + (0, _util.warn)("CFF stem hints are in wrong order"); + data[j - 1] = value === 1 ? 3 : 23; + } + } + + if ("min" in validationCommand) { + if (!state.undefStack && stackSize < validationCommand.min) { + (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min); + + if (stackSize === 0) { + data[j - 1] = 14; + return true; + } + + return false; + } + } + + if (state.firstStackClearing && validationCommand.stackClearing) { + state.firstStackClearing = false; + stackSize -= validationCommand.min; + + if (stackSize >= 2 && validationCommand.stem) { + stackSize %= 2; + } else if (stackSize > 1) { + (0, _util.warn)("Found too many parameters for stack-clearing command"); + } + + if (stackSize > 0) { + state.width = stack[stackSize - 1]; + } + } + + if ("stackDelta" in validationCommand) { + if ("stackFn" in validationCommand) { + validationCommand.stackFn(stack, stackSize); + } + + stackSize += validationCommand.stackDelta; + } else if (validationCommand.stackClearing) { + stackSize = 0; + } else if (validationCommand.resetStack) { + stackSize = 0; + state.undefStack = false; + } else if (validationCommand.undefStack) { + stackSize = 0; + state.undefStack = true; + state.firstStackClearing = false; + } + } + } + + state.stackSize = stackSize; + return true; + } + + parseCharStrings({ + charStrings, + localSubrIndex, + globalSubrIndex, + fdSelect, + fdArray, + privateDict + }) { + const seacs = []; + const widths = []; + const count = charStrings.count; + + for (let i = 0; i < count; i++) { + const charstring = charStrings.get(i); + const state = { + callDepth: 0, + stackSize: 0, + stack: [], + undefStack: true, + hints: 0, + firstStackClearing: true, + seac: null, + width: null, + hasVStems: false + }; + let valid = true; + let localSubrToUse = null; + let privateDictToUse = privateDict; + + if (fdSelect && fdArray.length) { + const fdIndex = fdSelect.getFDIndex(i); + + if (fdIndex === -1) { + (0, _util.warn)("Glyph index is not in fd select."); + valid = false; + } + + if (fdIndex >= fdArray.length) { + (0, _util.warn)("Invalid fd index for glyph index."); + valid = false; + } + + if (valid) { + privateDictToUse = fdArray[fdIndex].privateDict; + localSubrToUse = privateDictToUse.subrsIndex; + } + } else if (localSubrIndex) { + localSubrToUse = localSubrIndex; + } + + if (valid) { + valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); + } + + if (state.width !== null) { + const nominalWidth = privateDictToUse.getByName("nominalWidthX"); + widths[i] = nominalWidth + state.width; + } else { + const defaultWidth = privateDictToUse.getByName("defaultWidthX"); + widths[i] = defaultWidth; + } + + if (state.seac !== null) { + seacs[i] = state.seac; + } + + if (!valid) { + charStrings.set(i, new Uint8Array([14])); + } + } + + return { + charStrings, + seacs, + widths + }; + } + + emptyPrivateDictionary(parentDict) { + const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); + parentDict.setByKey(18, [0, 0]); + parentDict.privateDict = privateDict; + } + + parsePrivateDict(parentDict) { + if (!parentDict.hasName("Private")) { + this.emptyPrivateDictionary(parentDict); + return; + } + + const privateOffset = parentDict.getByName("Private"); + + if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { + parentDict.removeByName("Private"); + return; + } + + const size = privateOffset[0]; + const offset = privateOffset[1]; + + if (size === 0 || offset >= this.bytes.length) { + this.emptyPrivateDictionary(parentDict); + return; + } + + const privateDictEnd = offset + size; + const dictData = this.bytes.subarray(offset, privateDictEnd); + const dict = this.parseDict(dictData); + const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); + parentDict.privateDict = privateDict; + + if (!privateDict.getByName("Subrs")) { + return; + } + + const subrsOffset = privateDict.getByName("Subrs"); + const relativeOffset = offset + subrsOffset; + + if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { + this.emptyPrivateDictionary(parentDict); + return; + } + + const subrsIndex = this.parseIndex(relativeOffset); + privateDict.subrsIndex = subrsIndex.obj; + } + + parseCharsets(pos, length, strings, cid) { + if (pos === 0) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); + } else if (pos === 1) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); + } else if (pos === 2) { + return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); + } + + const bytes = this.bytes; + const start = pos; + const format = bytes[pos++]; + const charset = [cid ? 0 : ".notdef"]; + let id, count, i; + length -= 1; + + switch (format) { + case 0: + for (i = 0; i < length; i++) { + id = bytes[pos++] << 8 | bytes[pos++]; + charset.push(cid ? id : strings.get(id)); + } + + break; + + case 1: + while (charset.length <= length) { + id = bytes[pos++] << 8 | bytes[pos++]; + count = bytes[pos++]; + + for (i = 0; i <= count; i++) { + charset.push(cid ? id++ : strings.get(id++)); + } + } + + break; + + case 2: + while (charset.length <= length) { + id = bytes[pos++] << 8 | bytes[pos++]; + count = bytes[pos++] << 8 | bytes[pos++]; + + for (i = 0; i <= count; i++) { + charset.push(cid ? id++ : strings.get(id++)); + } + } + + break; + + default: + throw new _util.FormatError("Unknown charset format"); + } + + const end = pos; + const raw = bytes.subarray(start, end); + return new CFFCharset(false, format, charset, raw); + } + + parseEncoding(pos, properties, strings, charset) { + const encoding = Object.create(null); + const bytes = this.bytes; + let predefined = false; + let format, i, ii; + let raw = null; + + function readSupplement() { + const supplementsCount = bytes[pos++]; + + for (i = 0; i < supplementsCount; i++) { + const code = bytes[pos++]; + const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); + encoding[code] = charset.indexOf(strings.get(sid)); + } + } + + if (pos === 0 || pos === 1) { + predefined = true; + format = pos; + const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; + + for (i = 0, ii = charset.length; i < ii; i++) { + const index = baseEncoding.indexOf(charset[i]); + + if (index !== -1) { + encoding[index] = i; + } + } + } else { + const dataStart = pos; + format = bytes[pos++]; + + switch (format & 0x7f) { + case 0: + const glyphsCount = bytes[pos++]; + + for (i = 1; i <= glyphsCount; i++) { + encoding[bytes[pos++]] = i; + } + + break; + + case 1: + const rangesCount = bytes[pos++]; + let gid = 1; + + for (i = 0; i < rangesCount; i++) { + const start = bytes[pos++]; + const left = bytes[pos++]; + + for (let j = start; j <= start + left; j++) { + encoding[j] = gid++; + } + } + + break; + + default: + throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`); + } + + const dataEnd = pos; + + if (format & 0x80) { + bytes[dataStart] &= 0x7f; + readSupplement(); + } + + raw = bytes.subarray(dataStart, dataEnd); + } + + format &= 0x7f; + return new CFFEncoding(predefined, format, encoding, raw); + } + + parseFDSelect(pos, length) { + const bytes = this.bytes; + const format = bytes[pos++]; + const fdSelect = []; + let i; + + switch (format) { + case 0: + for (i = 0; i < length; ++i) { + const id = bytes[pos++]; + fdSelect.push(id); + } + + break; + + case 3: + const rangesCount = bytes[pos++] << 8 | bytes[pos++]; + + for (i = 0; i < rangesCount; ++i) { + let first = bytes[pos++] << 8 | bytes[pos++]; + + if (i === 0 && first !== 0) { + (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover."); + first = 0; + } + + const fdIndex = bytes[pos++]; + const next = bytes[pos] << 8 | bytes[pos + 1]; + + for (let j = first; j < next; ++j) { + fdSelect.push(fdIndex); + } + } + + pos += 2; + break; + + default: + throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`); + } + + if (fdSelect.length !== length) { + throw new _util.FormatError("parseFDSelect: Invalid font data."); + } + + return new CFFFDSelect(format, fdSelect); + } + +} + +exports.CFFParser = CFFParser; + +class CFF { + constructor() { + this.header = null; + this.names = []; + this.topDict = null; + this.strings = new CFFStrings(); + this.globalSubrIndex = null; + this.encoding = null; + this.charset = null; + this.charStrings = null; + this.fdArray = []; + this.fdSelect = null; + this.isCIDFont = false; + } + + duplicateFirstGlyph() { + if (this.charStrings.count >= 65535) { + (0, _util.warn)("Not enough space in charstrings to duplicate first glyph."); + return; + } + + const glyphZero = this.charStrings.get(0); + this.charStrings.add(glyphZero); + + if (this.isCIDFont) { + this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); + } + } + + hasGlyphId(id) { + if (id < 0 || id >= this.charStrings.count) { + return false; + } + + const glyph = this.charStrings.get(id); + return glyph.length > 0; + } + +} + +exports.CFF = CFF; + +class CFFHeader { + constructor(major, minor, hdrSize, offSize) { + this.major = major; + this.minor = minor; + this.hdrSize = hdrSize; + this.offSize = offSize; + } + +} + +exports.CFFHeader = CFFHeader; + +class CFFStrings { + constructor() { + this.strings = []; + } + + get(index) { + if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) { + return CFFStandardStrings[index]; + } + + if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) { + return this.strings[index - NUM_STANDARD_CFF_STRINGS]; + } + + return CFFStandardStrings[0]; + } + + getSID(str) { + let index = CFFStandardStrings.indexOf(str); + + if (index !== -1) { + return index; + } + + index = this.strings.indexOf(str); + + if (index !== -1) { + return index + NUM_STANDARD_CFF_STRINGS; + } + + return -1; + } + + add(value) { + this.strings.push(value); + } + + get count() { + return this.strings.length; + } + +} + +exports.CFFStrings = CFFStrings; + +class CFFIndex { + constructor() { + this.objects = []; + this.length = 0; + } + + add(data) { + this.length += data.length; + this.objects.push(data); + } + + set(index, data) { + this.length += data.length - this.objects[index].length; + this.objects[index] = data; + } + + get(index) { + return this.objects[index]; + } + + get count() { + return this.objects.length; + } + +} + +exports.CFFIndex = CFFIndex; + +class CFFDict { + constructor(tables, strings) { + this.keyToNameMap = tables.keyToNameMap; + this.nameToKeyMap = tables.nameToKeyMap; + this.defaults = tables.defaults; + this.types = tables.types; + this.opcodes = tables.opcodes; + this.order = tables.order; + this.strings = strings; + this.values = Object.create(null); + } + + setByKey(key, value) { + if (!(key in this.keyToNameMap)) { + return false; + } + + const valueLength = value.length; + + if (valueLength === 0) { + return true; + } + + for (let i = 0; i < valueLength; i++) { + if (isNaN(value[i])) { + (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); + return true; + } + } + + const type = this.types[key]; + + if (type === "num" || type === "sid" || type === "offset") { + value = value[0]; + } + + this.values[key] = value; + return true; + } + + setByName(name, value) { + if (!(name in this.nameToKeyMap)) { + throw new _util.FormatError(`Invalid dictionary name "${name}"`); + } + + this.values[this.nameToKeyMap[name]] = value; + } + + hasName(name) { + return this.nameToKeyMap[name] in this.values; + } + + getByName(name) { + if (!(name in this.nameToKeyMap)) { + throw new _util.FormatError(`Invalid dictionary name ${name}"`); + } + + const key = this.nameToKeyMap[name]; + + if (!(key in this.values)) { + return this.defaults[key]; + } + + return this.values[key]; + } + + removeByName(name) { + delete this.values[this.nameToKeyMap[name]]; + } + + static createTables(layout) { + const tables = { + keyToNameMap: {}, + nameToKeyMap: {}, + defaults: {}, + types: {}, + opcodes: {}, + order: [] + }; + + for (let i = 0, ii = layout.length; i < ii; ++i) { + const entry = layout[i]; + const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; + tables.keyToNameMap[key] = entry[1]; + tables.nameToKeyMap[entry[1]] = key; + tables.types[key] = entry[2]; + tables.defaults[key] = entry[3]; + tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; + tables.order.push(key); + } + + return tables; + } + +} + +const CFFTopDictLayout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]]; + +class CFFTopDict extends CFFDict { + static get tables() { + return (0, _util.shadow)(this, "tables", this.createTables(CFFTopDictLayout)); + } + + constructor(strings) { + super(CFFTopDict.tables, strings); + this.privateDict = null; + } + +} + +exports.CFFTopDict = CFFTopDict; +const CFFPrivateDictLayout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]]; + +class CFFPrivateDict extends CFFDict { + static get tables() { + return (0, _util.shadow)(this, "tables", this.createTables(CFFPrivateDictLayout)); + } + + constructor(strings) { + super(CFFPrivateDict.tables, strings); + this.subrsIndex = null; + } + +} + +exports.CFFPrivateDict = CFFPrivateDict; +const CFFCharsetPredefinedTypes = { + ISO_ADOBE: 0, + EXPERT: 1, + EXPERT_SUBSET: 2 +}; + +class CFFCharset { + constructor(predefined, format, charset, raw) { + this.predefined = predefined; + this.format = format; + this.charset = charset; + this.raw = raw; + } + +} + +exports.CFFCharset = CFFCharset; + +class CFFEncoding { + constructor(predefined, format, encoding, raw) { + this.predefined = predefined; + this.format = format; + this.encoding = encoding; + this.raw = raw; + } + +} + +class CFFFDSelect { + constructor(format, fdSelect) { + this.format = format; + this.fdSelect = fdSelect; + } + + getFDIndex(glyphIndex) { + if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { + return -1; + } + + return this.fdSelect[glyphIndex]; + } + +} + +exports.CFFFDSelect = CFFFDSelect; + +class CFFOffsetTracker { + constructor() { + this.offsets = Object.create(null); + } + + isTracking(key) { + return key in this.offsets; + } + + track(key, location) { + if (key in this.offsets) { + throw new _util.FormatError(`Already tracking location of ${key}`); + } + + this.offsets[key] = location; + } + + offset(value) { + for (const key in this.offsets) { + this.offsets[key] += value; + } + } + + setEntryLocation(key, values, output) { + if (!(key in this.offsets)) { + throw new _util.FormatError(`Not tracking location of ${key}`); + } + + const data = output.data; + const dataOffset = this.offsets[key]; + const size = 5; + + for (let i = 0, ii = values.length; i < ii; ++i) { + const offset0 = i * size + dataOffset; + const offset1 = offset0 + 1; + const offset2 = offset0 + 2; + const offset3 = offset0 + 3; + const offset4 = offset0 + 4; + + if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { + throw new _util.FormatError("writing to an offset that is not empty"); + } + + const value = values[i]; + data[offset0] = 0x1d; + data[offset1] = value >> 24 & 0xff; + data[offset2] = value >> 16 & 0xff; + data[offset3] = value >> 8 & 0xff; + data[offset4] = value & 0xff; + } + } + +} + +class CFFCompiler { + constructor(cff) { + this.cff = cff; + } + + compile() { + const cff = this.cff; + const output = { + data: [], + length: 0, + + add(data) { + this.data = this.data.concat(data); + this.length = this.data.length; + } + + }; + const header = this.compileHeader(cff.header); + output.add(header); + const nameIndex = this.compileNameIndex(cff.names); + output.add(nameIndex); + + if (cff.isCIDFont) { + if (cff.topDict.hasName("FontMatrix")) { + const base = cff.topDict.getByName("FontMatrix"); + cff.topDict.removeByName("FontMatrix"); + + for (let i = 0, ii = cff.fdArray.length; i < ii; i++) { + const subDict = cff.fdArray[i]; + let matrix = base.slice(0); + + if (subDict.hasName("FontMatrix")) { + matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix")); + } + + subDict.setByName("FontMatrix", matrix); + } + } + } + + const xuid = cff.topDict.getByName("XUID"); + + if (xuid && xuid.length > 16) { + cff.topDict.removeByName("XUID"); + } + + cff.topDict.setByName("charset", 0); + let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); + output.add(compiled.output); + const topDictTracker = compiled.trackers[0]; + const stringIndex = this.compileStringIndex(cff.strings.strings); + output.add(stringIndex); + const globalSubrIndex = this.compileIndex(cff.globalSubrIndex); + output.add(globalSubrIndex); + + if (cff.encoding && cff.topDict.hasName("Encoding")) { + if (cff.encoding.predefined) { + topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output); + } else { + const encoding = this.compileEncoding(cff.encoding); + topDictTracker.setEntryLocation("Encoding", [output.length], output); + output.add(encoding); + } + } + + const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont); + topDictTracker.setEntryLocation("charset", [output.length], output); + output.add(charset); + const charStrings = this.compileCharStrings(cff.charStrings); + topDictTracker.setEntryLocation("CharStrings", [output.length], output); + output.add(charStrings); + + if (cff.isCIDFont) { + topDictTracker.setEntryLocation("FDSelect", [output.length], output); + const fdSelect = this.compileFDSelect(cff.fdSelect); + output.add(fdSelect); + compiled = this.compileTopDicts(cff.fdArray, output.length, true); + topDictTracker.setEntryLocation("FDArray", [output.length], output); + output.add(compiled.output); + const fontDictTrackers = compiled.trackers; + this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); + } + + this.compilePrivateDicts([cff.topDict], [topDictTracker], output); + output.add([0]); + return output.data; + } + + encodeNumber(value) { + if (Number.isInteger(value)) { + return this.encodeInteger(value); + } + + return this.encodeFloat(value); + } + + static get EncodeFloatRegExp() { + return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/); + } + + encodeFloat(num) { + let value = num.toString(); + const m = CFFCompiler.EncodeFloatRegExp.exec(value); + + if (m) { + const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); + value = (Math.round(num * epsilon) / epsilon).toString(); + } + + let nibbles = ""; + let i, ii; + + for (i = 0, ii = value.length; i < ii; ++i) { + const a = value[i]; + + if (a === "e") { + nibbles += value[++i] === "-" ? "c" : "b"; + } else if (a === ".") { + nibbles += "a"; + } else if (a === "-") { + nibbles += "e"; + } else { + nibbles += a; + } + } + + nibbles += nibbles.length & 1 ? "f" : "ff"; + const out = [30]; + + for (i = 0, ii = nibbles.length; i < ii; i += 2) { + out.push(parseInt(nibbles.substring(i, i + 2), 16)); + } + + return out; + } + + encodeInteger(value) { + let code; + + if (value >= -107 && value <= 107) { + code = [value + 139]; + } else if (value >= 108 && value <= 1131) { + value -= 108; + code = [(value >> 8) + 247, value & 0xff]; + } else if (value >= -1131 && value <= -108) { + value = -value - 108; + code = [(value >> 8) + 251, value & 0xff]; + } else if (value >= -32768 && value <= 32767) { + code = [0x1c, value >> 8 & 0xff, value & 0xff]; + } else { + code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]; + } + + return code; + } + + compileHeader(header) { + return [header.major, header.minor, 4, header.offSize]; + } + + compileNameIndex(names) { + const nameIndex = new CFFIndex(); + + for (let i = 0, ii = names.length; i < ii; ++i) { + const name = names[i]; + const length = Math.min(name.length, 127); + let sanitizedName = new Array(length); + + for (let j = 0; j < length; j++) { + let char = name[j]; + + if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") { + char = "_"; + } + + sanitizedName[j] = char; + } + + sanitizedName = sanitizedName.join(""); + + if (sanitizedName === "") { + sanitizedName = "Bad_Font_Name"; + } + + nameIndex.add((0, _util.stringToBytes)(sanitizedName)); + } + + return this.compileIndex(nameIndex); + } + + compileTopDicts(dicts, length, removeCidKeys) { + const fontDictTrackers = []; + let fdArrayIndex = new CFFIndex(); + + for (let i = 0, ii = dicts.length; i < ii; ++i) { + const fontDict = dicts[i]; + + if (removeCidKeys) { + fontDict.removeByName("CIDFontVersion"); + fontDict.removeByName("CIDFontRevision"); + fontDict.removeByName("CIDFontType"); + fontDict.removeByName("CIDCount"); + fontDict.removeByName("UIDBase"); + } + + const fontDictTracker = new CFFOffsetTracker(); + const fontDictData = this.compileDict(fontDict, fontDictTracker); + fontDictTrackers.push(fontDictTracker); + fdArrayIndex.add(fontDictData); + fontDictTracker.offset(length); + } + + fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); + return { + trackers: fontDictTrackers, + output: fdArrayIndex + }; + } + + compilePrivateDicts(dicts, trackers, output) { + for (let i = 0, ii = dicts.length; i < ii; ++i) { + const fontDict = dicts[i]; + const privateDict = fontDict.privateDict; + + if (!privateDict || !fontDict.hasName("Private")) { + throw new _util.FormatError("There must be a private dictionary."); + } + + const privateDictTracker = new CFFOffsetTracker(); + const privateDictData = this.compileDict(privateDict, privateDictTracker); + let outputLength = output.length; + privateDictTracker.offset(outputLength); + + if (!privateDictData.length) { + outputLength = 0; + } + + trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output); + output.add(privateDictData); + + if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { + const subrs = this.compileIndex(privateDict.subrsIndex); + privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output); + output.add(subrs); + } + } + } + + compileDict(dict, offsetTracker) { + const out = []; + + for (const key of dict.order) { + if (!(key in dict.values)) { + continue; + } + + let values = dict.values[key]; + let types = dict.types[key]; + + if (!Array.isArray(types)) { + types = [types]; + } + + if (!Array.isArray(values)) { + values = [values]; + } + + if (values.length === 0) { + continue; + } + + for (let j = 0, jj = types.length; j < jj; ++j) { + const type = types[j]; + const value = values[j]; + + switch (type) { + case "num": + case "sid": + out.push(...this.encodeNumber(value)); + break; + + case "offset": + const name = dict.keyToNameMap[key]; + + if (!offsetTracker.isTracking(name)) { + offsetTracker.track(name, out.length); + } + + out.push(0x1d, 0, 0, 0, 0); + break; + + case "array": + case "delta": + out.push(...this.encodeNumber(value)); + + for (let k = 1, kk = values.length; k < kk; ++k) { + out.push(...this.encodeNumber(values[k])); + } + + break; + + default: + throw new _util.FormatError(`Unknown data type of ${type}`); + } + } + + out.push(...dict.opcodes[key]); + } + + return out; + } + + compileStringIndex(strings) { + const stringIndex = new CFFIndex(); + + for (let i = 0, ii = strings.length; i < ii; ++i) { + stringIndex.add((0, _util.stringToBytes)(strings[i])); + } + + return this.compileIndex(stringIndex); + } + + compileGlobalSubrIndex() { + const globalSubrIndex = this.cff.globalSubrIndex; + this.out.writeByteArray(this.compileIndex(globalSubrIndex)); + } + + compileCharStrings(charStrings) { + const charStringsIndex = new CFFIndex(); + + for (let i = 0; i < charStrings.count; i++) { + const glyph = charStrings.get(i); + + if (glyph.length === 0) { + charStringsIndex.add(new Uint8Array([0x8b, 0x0e])); + continue; + } + + charStringsIndex.add(glyph); + } + + return this.compileIndex(charStringsIndex); + } + + compileCharset(charset, numGlyphs, strings, isCIDFont) { + let out; + const numGlyphsLessNotDef = numGlyphs - 1; + + if (isCIDFont) { + out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]); + } else { + const length = 1 + numGlyphsLessNotDef * 2; + out = new Uint8Array(length); + out[0] = 0; + let charsetIndex = 0; + const numCharsets = charset.charset.length; + let warned = false; + + for (let i = 1; i < out.length; i += 2) { + let sid = 0; + + if (charsetIndex < numCharsets) { + const name = charset.charset[charsetIndex++]; + sid = strings.getSID(name); + + if (sid === -1) { + sid = 0; + + if (!warned) { + warned = true; + (0, _util.warn)(`Couldn't find ${name} in CFF strings`); + } + } + } + + out[i] = sid >> 8 & 0xff; + out[i + 1] = sid & 0xff; + } + } + + return this.compileTypedArray(out); + } + + compileEncoding(encoding) { + return this.compileTypedArray(encoding.raw); + } + + compileFDSelect(fdSelect) { + const format = fdSelect.format; + let out, i; + + switch (format) { + case 0: + out = new Uint8Array(1 + fdSelect.fdSelect.length); + out[0] = format; + + for (i = 0; i < fdSelect.fdSelect.length; i++) { + out[i + 1] = fdSelect.fdSelect[i]; + } + + break; + + case 3: + const start = 0; + let lastFD = fdSelect.fdSelect[0]; + const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD]; + + for (i = 1; i < fdSelect.fdSelect.length; i++) { + const currentFD = fdSelect.fdSelect[i]; + + if (currentFD !== lastFD) { + ranges.push(i >> 8 & 0xff, i & 0xff, currentFD); + lastFD = currentFD; + } + } + + const numRanges = (ranges.length - 3) / 3; + ranges[1] = numRanges >> 8 & 0xff; + ranges[2] = numRanges & 0xff; + ranges.push(i >> 8 & 0xff, i & 0xff); + out = new Uint8Array(ranges); + break; + } + + return this.compileTypedArray(out); + } + + compileTypedArray(data) { + const out = []; + + for (let i = 0, ii = data.length; i < ii; ++i) { + out[i] = data[i]; + } + + return out; + } + + compileIndex(index, trackers = []) { + const objects = index.objects; + const count = objects.length; + + if (count === 0) { + return [0, 0]; + } + + const data = [count >> 8 & 0xff, count & 0xff]; + let lastOffset = 1, + i; + + for (i = 0; i < count; ++i) { + lastOffset += objects[i].length; + } + + let offsetSize; + + if (lastOffset < 0x100) { + offsetSize = 1; + } else if (lastOffset < 0x10000) { + offsetSize = 2; + } else if (lastOffset < 0x1000000) { + offsetSize = 3; + } else { + offsetSize = 4; + } + + data.push(offsetSize); + let relativeOffset = 1; + + for (i = 0; i < count + 1; i++) { + if (offsetSize === 1) { + data.push(relativeOffset & 0xff); + } else if (offsetSize === 2) { + data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff); + } else if (offsetSize === 3) { + data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); + } else { + data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); + } + + if (objects[i]) { + relativeOffset += objects[i].length; + } + } + + for (i = 0; i < count; i++) { + if (trackers[i]) { + trackers[i].offset(data.length); + } + + for (let j = 0, jj = objects[i].length; j < jj; j++) { + data.push(objects[i][j]); + } + } + + return data; + } + +} + +exports.CFFCompiler = CFFCompiler; + +/***/ }), +/* 36 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0; +const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; +exports.ISOAdobeCharset = ISOAdobeCharset; +const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; +exports.ExpertCharset = ExpertCharset; +const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"]; +exports.ExpertSubsetCharset = ExpertSubsetCharset; + +/***/ }), +/* 37 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0; +exports.getEncoding = getEncoding; +const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; +exports.ExpertEncoding = ExpertEncoding; +const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""]; +const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; +exports.MacRomanEncoding = MacRomanEncoding; +const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; +exports.StandardEncoding = StandardEncoding; +const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; +exports.WinAnsiEncoding = WinAnsiEncoding; +const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; +exports.SymbolSetEncoding = SymbolSetEncoding; +const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; +exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; + +function getEncoding(encodingName) { + switch (encodingName) { + case "WinAnsiEncoding": + return WinAnsiEncoding; + + case "StandardEncoding": + return StandardEncoding; + + case "MacRomanEncoding": + return MacRomanEncoding; + + case "SymbolSetEncoding": + return SymbolSetEncoding; + + case "ZapfDingbatsEncoding": + return ZapfDingbatsEncoding; + + case "ExpertEncoding": + return ExpertEncoding; + + case "MacExpertEncoding": + return MacExpertEncoding; + + default: + return null; + } +} + +/***/ }), +/* 38 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontFlags = void 0; +exports.getFontType = getFontType; +exports.normalizeFontName = normalizeFontName; +exports.recoverGlyphName = recoverGlyphName; +exports.type1FontGlyphMapping = type1FontGlyphMapping; + +var _util = __w_pdfjs_require__(2); + +var _encodings = __w_pdfjs_require__(37); + +var _glyphlist = __w_pdfjs_require__(39); + +var _unicode = __w_pdfjs_require__(40); + +const SEAC_ANALYSIS_ENABLED = true; +exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; +const FontFlags = { + FixedPitch: 1, + Serif: 2, + Symbolic: 4, + Script: 8, + Nonsymbolic: 32, + Italic: 64, + AllCap: 65536, + SmallCap: 131072, + ForceBold: 262144 +}; +exports.FontFlags = FontFlags; +const MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; +exports.MacStandardGlyphOrdering = MacStandardGlyphOrdering; + +function getFontType(type, subtype, isStandardFont = false) { + switch (type) { + case "Type1": + if (isStandardFont) { + return _util.FontType.TYPE1STANDARD; + } + + return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1; + + case "CIDFontType0": + return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0; + + case "OpenType": + return _util.FontType.OPENTYPE; + + case "TrueType": + return _util.FontType.TRUETYPE; + + case "CIDFontType2": + return _util.FontType.CIDFONTTYPE2; + + case "MMType1": + return _util.FontType.MMTYPE1; + + case "Type0": + return _util.FontType.TYPE0; + + default: + return _util.FontType.UNKNOWN; + } +} + +function recoverGlyphName(name, glyphsUnicodeMap) { + if (glyphsUnicodeMap[name] !== undefined) { + return name; + } + + const unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); + + if (unicode !== -1) { + for (const key in glyphsUnicodeMap) { + if (glyphsUnicodeMap[key] === unicode) { + return key; + } + } + } + + (0, _util.info)("Unable to recover a standard glyph name for: " + name); + return name; +} + +function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { + const charCodeToGlyphId = Object.create(null); + let glyphId, charCode, baseEncoding; + const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); + + if (properties.isInternalFont) { + baseEncoding = builtInEncoding; + + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } else if (properties.baseEncodingName) { + baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); + + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } else if (isSymbolicFont) { + for (charCode in builtInEncoding) { + charCodeToGlyphId[charCode] = builtInEncoding[charCode]; + } + } else { + baseEncoding = _encodings.StandardEncoding; + + for (charCode = 0; charCode < baseEncoding.length; charCode++) { + glyphId = glyphNames.indexOf(baseEncoding[charCode]); + + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } + + const differences = properties.differences; + let glyphsUnicodeMap; + + if (differences) { + for (charCode in differences) { + const glyphName = differences[charCode]; + glyphId = glyphNames.indexOf(glyphName); + + if (glyphId === -1) { + if (!glyphsUnicodeMap) { + glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); + } + + const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); + + if (standardGlyphName !== glyphName) { + glyphId = glyphNames.indexOf(standardGlyphName); + } + } + + if (glyphId >= 0) { + charCodeToGlyphId[charCode] = glyphId; + } else { + charCodeToGlyphId[charCode] = 0; + } + } + } + + return charCodeToGlyphId; +} + +function normalizeFontName(name) { + return name.replace(/[,_]/g, "-").replace(/\s/g, ""); +} + +/***/ }), +/* 39 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { + +__w_pdfjs_require__.r(__webpack_exports__); +/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { +/* harmony export */ "getDingbatsGlyphsUnicode": () => (/* binding */ getDingbatsGlyphsUnicode), +/* harmony export */ "getGlyphsUnicode": () => (/* binding */ getGlyphsUnicode) +/* harmony export */ }); +/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(6); + +const getGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { + return [ + "A", + 0x0041, + "AE", + 0x00c6, + "AEacute", + 0x01fc, + "AEmacron", + 0x01e2, + "AEsmall", + 0xf7e6, + "Aacute", + 0x00c1, + "Aacutesmall", + 0xf7e1, + "Abreve", + 0x0102, + "Abreveacute", + 0x1eae, + "Abrevecyrillic", + 0x04d0, + "Abrevedotbelow", + 0x1eb6, + "Abrevegrave", + 0x1eb0, + "Abrevehookabove", + 0x1eb2, + "Abrevetilde", + 0x1eb4, + "Acaron", + 0x01cd, + "Acircle", + 0x24b6, + "Acircumflex", + 0x00c2, + "Acircumflexacute", + 0x1ea4, + "Acircumflexdotbelow", + 0x1eac, + "Acircumflexgrave", + 0x1ea6, + "Acircumflexhookabove", + 0x1ea8, + "Acircumflexsmall", + 0xf7e2, + "Acircumflextilde", + 0x1eaa, + "Acute", + 0xf6c9, + "Acutesmall", + 0xf7b4, + "Acyrillic", + 0x0410, + "Adblgrave", + 0x0200, + "Adieresis", + 0x00c4, + "Adieresiscyrillic", + 0x04d2, + "Adieresismacron", + 0x01de, + "Adieresissmall", + 0xf7e4, + "Adotbelow", + 0x1ea0, + "Adotmacron", + 0x01e0, + "Agrave", + 0x00c0, + "Agravesmall", + 0xf7e0, + "Ahookabove", + 0x1ea2, + "Aiecyrillic", + 0x04d4, + "Ainvertedbreve", + 0x0202, + "Alpha", + 0x0391, + "Alphatonos", + 0x0386, + "Amacron", + 0x0100, + "Amonospace", + 0xff21, + "Aogonek", + 0x0104, + "Aring", + 0x00c5, + "Aringacute", + 0x01fa, + "Aringbelow", + 0x1e00, + "Aringsmall", + 0xf7e5, + "Asmall", + 0xf761, + "Atilde", + 0x00c3, + "Atildesmall", + 0xf7e3, + "Aybarmenian", + 0x0531, + "B", + 0x0042, + "Bcircle", + 0x24b7, + "Bdotaccent", + 0x1e02, + "Bdotbelow", + 0x1e04, + "Becyrillic", + 0x0411, + "Benarmenian", + 0x0532, + "Beta", + 0x0392, + "Bhook", + 0x0181, + "Blinebelow", + 0x1e06, + "Bmonospace", + 0xff22, + "Brevesmall", + 0xf6f4, + "Bsmall", + 0xf762, + "Btopbar", + 0x0182, + "C", + 0x0043, + "Caarmenian", + 0x053e, + "Cacute", + 0x0106, + "Caron", + 0xf6ca, + "Caronsmall", + 0xf6f5, + "Ccaron", + 0x010c, + "Ccedilla", + 0x00c7, + "Ccedillaacute", + 0x1e08, + "Ccedillasmall", + 0xf7e7, + "Ccircle", + 0x24b8, + "Ccircumflex", + 0x0108, + "Cdot", + 0x010a, + "Cdotaccent", + 0x010a, + "Cedillasmall", + 0xf7b8, + "Chaarmenian", + 0x0549, + "Cheabkhasiancyrillic", + 0x04bc, + "Checyrillic", + 0x0427, + "Chedescenderabkhasiancyrillic", + 0x04be, + "Chedescendercyrillic", + 0x04b6, + "Chedieresiscyrillic", + 0x04f4, + "Cheharmenian", + 0x0543, + "Chekhakassiancyrillic", + 0x04cb, + "Cheverticalstrokecyrillic", + 0x04b8, + "Chi", + 0x03a7, + "Chook", + 0x0187, + "Circumflexsmall", + 0xf6f6, + "Cmonospace", + 0xff23, + "Coarmenian", + 0x0551, + "Csmall", + 0xf763, + "D", + 0x0044, + "DZ", + 0x01f1, + "DZcaron", + 0x01c4, + "Daarmenian", + 0x0534, + "Dafrican", + 0x0189, + "Dcaron", + 0x010e, + "Dcedilla", + 0x1e10, + "Dcircle", + 0x24b9, + "Dcircumflexbelow", + 0x1e12, + "Dcroat", + 0x0110, + "Ddotaccent", + 0x1e0a, + "Ddotbelow", + 0x1e0c, + "Decyrillic", + 0x0414, + "Deicoptic", + 0x03ee, + "Delta", + 0x2206, + "Deltagreek", + 0x0394, + "Dhook", + 0x018a, + "Dieresis", + 0xf6cb, + "DieresisAcute", + 0xf6cc, + "DieresisGrave", + 0xf6cd, + "Dieresissmall", + 0xf7a8, + "Digammagreek", + 0x03dc, + "Djecyrillic", + 0x0402, + "Dlinebelow", + 0x1e0e, + "Dmonospace", + 0xff24, + "Dotaccentsmall", + 0xf6f7, + "Dslash", + 0x0110, + "Dsmall", + 0xf764, + "Dtopbar", + 0x018b, + "Dz", + 0x01f2, + "Dzcaron", + 0x01c5, + "Dzeabkhasiancyrillic", + 0x04e0, + "Dzecyrillic", + 0x0405, + "Dzhecyrillic", + 0x040f, + "E", + 0x0045, + "Eacute", + 0x00c9, + "Eacutesmall", + 0xf7e9, + "Ebreve", + 0x0114, + "Ecaron", + 0x011a, + "Ecedillabreve", + 0x1e1c, + "Echarmenian", + 0x0535, + "Ecircle", + 0x24ba, + "Ecircumflex", + 0x00ca, + "Ecircumflexacute", + 0x1ebe, + "Ecircumflexbelow", + 0x1e18, + "Ecircumflexdotbelow", + 0x1ec6, + "Ecircumflexgrave", + 0x1ec0, + "Ecircumflexhookabove", + 0x1ec2, + "Ecircumflexsmall", + 0xf7ea, + "Ecircumflextilde", + 0x1ec4, + "Ecyrillic", + 0x0404, + "Edblgrave", + 0x0204, + "Edieresis", + 0x00cb, + "Edieresissmall", + 0xf7eb, + "Edot", + 0x0116, + "Edotaccent", + 0x0116, + "Edotbelow", + 0x1eb8, + "Efcyrillic", + 0x0424, + "Egrave", + 0x00c8, + "Egravesmall", + 0xf7e8, + "Eharmenian", + 0x0537, + "Ehookabove", + 0x1eba, + "Eightroman", + 0x2167, + "Einvertedbreve", + 0x0206, + "Eiotifiedcyrillic", + 0x0464, + "Elcyrillic", + 0x041b, + "Elevenroman", + 0x216a, + "Emacron", + 0x0112, + "Emacronacute", + 0x1e16, + "Emacrongrave", + 0x1e14, + "Emcyrillic", + 0x041c, + "Emonospace", + 0xff25, + "Encyrillic", + 0x041d, + "Endescendercyrillic", + 0x04a2, + "Eng", + 0x014a, + "Enghecyrillic", + 0x04a4, + "Enhookcyrillic", + 0x04c7, + "Eogonek", + 0x0118, + "Eopen", + 0x0190, + "Epsilon", + 0x0395, + "Epsilontonos", + 0x0388, + "Ercyrillic", + 0x0420, + "Ereversed", + 0x018e, + "Ereversedcyrillic", + 0x042d, + "Escyrillic", + 0x0421, + "Esdescendercyrillic", + 0x04aa, + "Esh", + 0x01a9, + "Esmall", + 0xf765, + "Eta", + 0x0397, + "Etarmenian", + 0x0538, + "Etatonos", + 0x0389, + "Eth", + 0x00d0, + "Ethsmall", + 0xf7f0, + "Etilde", + 0x1ebc, + "Etildebelow", + 0x1e1a, + "Euro", + 0x20ac, + "Ezh", + 0x01b7, + "Ezhcaron", + 0x01ee, + "Ezhreversed", + 0x01b8, + "F", + 0x0046, + "Fcircle", + 0x24bb, + "Fdotaccent", + 0x1e1e, + "Feharmenian", + 0x0556, + "Feicoptic", + 0x03e4, + "Fhook", + 0x0191, + "Fitacyrillic", + 0x0472, + "Fiveroman", + 0x2164, + "Fmonospace", + 0xff26, + "Fourroman", + 0x2163, + "Fsmall", + 0xf766, + "G", + 0x0047, + "GBsquare", + 0x3387, + "Gacute", + 0x01f4, + "Gamma", + 0x0393, + "Gammaafrican", + 0x0194, + "Gangiacoptic", + 0x03ea, + "Gbreve", + 0x011e, + "Gcaron", + 0x01e6, + "Gcedilla", + 0x0122, + "Gcircle", + 0x24bc, + "Gcircumflex", + 0x011c, + "Gcommaaccent", + 0x0122, + "Gdot", + 0x0120, + "Gdotaccent", + 0x0120, + "Gecyrillic", + 0x0413, + "Ghadarmenian", + 0x0542, + "Ghemiddlehookcyrillic", + 0x0494, + "Ghestrokecyrillic", + 0x0492, + "Gheupturncyrillic", + 0x0490, + "Ghook", + 0x0193, + "Gimarmenian", + 0x0533, + "Gjecyrillic", + 0x0403, + "Gmacron", + 0x1e20, + "Gmonospace", + 0xff27, + "Grave", + 0xf6ce, + "Gravesmall", + 0xf760, + "Gsmall", + 0xf767, + "Gsmallhook", + 0x029b, + "Gstroke", + 0x01e4, + "H", + 0x0048, + "H18533", + 0x25cf, + "H18543", + 0x25aa, + "H18551", + 0x25ab, + "H22073", + 0x25a1, + "HPsquare", + 0x33cb, + "Haabkhasiancyrillic", + 0x04a8, + "Hadescendercyrillic", + 0x04b2, + "Hardsigncyrillic", + 0x042a, + "Hbar", + 0x0126, + "Hbrevebelow", + 0x1e2a, + "Hcedilla", + 0x1e28, + "Hcircle", + 0x24bd, + "Hcircumflex", + 0x0124, + "Hdieresis", + 0x1e26, + "Hdotaccent", + 0x1e22, + "Hdotbelow", + 0x1e24, + "Hmonospace", + 0xff28, + "Hoarmenian", + 0x0540, + "Horicoptic", + 0x03e8, + "Hsmall", + 0xf768, + "Hungarumlaut", + 0xf6cf, + "Hungarumlautsmall", + 0xf6f8, + "Hzsquare", + 0x3390, + "I", + 0x0049, + "IAcyrillic", + 0x042f, + "IJ", + 0x0132, + "IUcyrillic", + 0x042e, + "Iacute", + 0x00cd, + "Iacutesmall", + 0xf7ed, + "Ibreve", + 0x012c, + "Icaron", + 0x01cf, + "Icircle", + 0x24be, + "Icircumflex", + 0x00ce, + "Icircumflexsmall", + 0xf7ee, + "Icyrillic", + 0x0406, + "Idblgrave", + 0x0208, + "Idieresis", + 0x00cf, + "Idieresisacute", + 0x1e2e, + "Idieresiscyrillic", + 0x04e4, + "Idieresissmall", + 0xf7ef, + "Idot", + 0x0130, + "Idotaccent", + 0x0130, + "Idotbelow", + 0x1eca, + "Iebrevecyrillic", + 0x04d6, + "Iecyrillic", + 0x0415, + "Ifraktur", + 0x2111, + "Igrave", + 0x00cc, + "Igravesmall", + 0xf7ec, + "Ihookabove", + 0x1ec8, + "Iicyrillic", + 0x0418, + "Iinvertedbreve", + 0x020a, + "Iishortcyrillic", + 0x0419, + "Imacron", + 0x012a, + "Imacroncyrillic", + 0x04e2, + "Imonospace", + 0xff29, + "Iniarmenian", + 0x053b, + "Iocyrillic", + 0x0401, + "Iogonek", + 0x012e, + "Iota", + 0x0399, + "Iotaafrican", + 0x0196, + "Iotadieresis", + 0x03aa, + "Iotatonos", + 0x038a, + "Ismall", + 0xf769, + "Istroke", + 0x0197, + "Itilde", + 0x0128, + "Itildebelow", + 0x1e2c, + "Izhitsacyrillic", + 0x0474, + "Izhitsadblgravecyrillic", + 0x0476, + "J", + 0x004a, + "Jaarmenian", + 0x0541, + "Jcircle", + 0x24bf, + "Jcircumflex", + 0x0134, + "Jecyrillic", + 0x0408, + "Jheharmenian", + 0x054b, + "Jmonospace", + 0xff2a, + "Jsmall", + 0xf76a, + "K", + 0x004b, + "KBsquare", + 0x3385, + "KKsquare", + 0x33cd, + "Kabashkircyrillic", + 0x04a0, + "Kacute", + 0x1e30, + "Kacyrillic", + 0x041a, + "Kadescendercyrillic", + 0x049a, + "Kahookcyrillic", + 0x04c3, + "Kappa", + 0x039a, + "Kastrokecyrillic", + 0x049e, + "Kaverticalstrokecyrillic", + 0x049c, + "Kcaron", + 0x01e8, + "Kcedilla", + 0x0136, + "Kcircle", + 0x24c0, + "Kcommaaccent", + 0x0136, + "Kdotbelow", + 0x1e32, + "Keharmenian", + 0x0554, + "Kenarmenian", + 0x053f, + "Khacyrillic", + 0x0425, + "Kheicoptic", + 0x03e6, + "Khook", + 0x0198, + "Kjecyrillic", + 0x040c, + "Klinebelow", + 0x1e34, + "Kmonospace", + 0xff2b, + "Koppacyrillic", + 0x0480, + "Koppagreek", + 0x03de, + "Ksicyrillic", + 0x046e, + "Ksmall", + 0xf76b, + "L", + 0x004c, + "LJ", + 0x01c7, + "LL", + 0xf6bf, + "Lacute", + 0x0139, + "Lambda", + 0x039b, + "Lcaron", + 0x013d, + "Lcedilla", + 0x013b, + "Lcircle", + 0x24c1, + "Lcircumflexbelow", + 0x1e3c, + "Lcommaaccent", + 0x013b, + "Ldot", + 0x013f, + "Ldotaccent", + 0x013f, + "Ldotbelow", + 0x1e36, + "Ldotbelowmacron", + 0x1e38, + "Liwnarmenian", + 0x053c, + "Lj", + 0x01c8, + "Ljecyrillic", + 0x0409, + "Llinebelow", + 0x1e3a, + "Lmonospace", + 0xff2c, + "Lslash", + 0x0141, + "Lslashsmall", + 0xf6f9, + "Lsmall", + 0xf76c, + "M", + 0x004d, + "MBsquare", + 0x3386, + "Macron", + 0xf6d0, + "Macronsmall", + 0xf7af, + "Macute", + 0x1e3e, + "Mcircle", + 0x24c2, + "Mdotaccent", + 0x1e40, + "Mdotbelow", + 0x1e42, + "Menarmenian", + 0x0544, + "Mmonospace", + 0xff2d, + "Msmall", + 0xf76d, + "Mturned", + 0x019c, + "Mu", + 0x039c, + "N", + 0x004e, + "NJ", + 0x01ca, + "Nacute", + 0x0143, + "Ncaron", + 0x0147, + "Ncedilla", + 0x0145, + "Ncircle", + 0x24c3, + "Ncircumflexbelow", + 0x1e4a, + "Ncommaaccent", + 0x0145, + "Ndotaccent", + 0x1e44, + "Ndotbelow", + 0x1e46, + "Nhookleft", + 0x019d, + "Nineroman", + 0x2168, + "Nj", + 0x01cb, + "Njecyrillic", + 0x040a, + "Nlinebelow", + 0x1e48, + "Nmonospace", + 0xff2e, + "Nowarmenian", + 0x0546, + "Nsmall", + 0xf76e, + "Ntilde", + 0x00d1, + "Ntildesmall", + 0xf7f1, + "Nu", + 0x039d, + "O", + 0x004f, + "OE", + 0x0152, + "OEsmall", + 0xf6fa, + "Oacute", + 0x00d3, + "Oacutesmall", + 0xf7f3, + "Obarredcyrillic", + 0x04e8, + "Obarreddieresiscyrillic", + 0x04ea, + "Obreve", + 0x014e, + "Ocaron", + 0x01d1, + "Ocenteredtilde", + 0x019f, + "Ocircle", + 0x24c4, + "Ocircumflex", + 0x00d4, + "Ocircumflexacute", + 0x1ed0, + "Ocircumflexdotbelow", + 0x1ed8, + "Ocircumflexgrave", + 0x1ed2, + "Ocircumflexhookabove", + 0x1ed4, + "Ocircumflexsmall", + 0xf7f4, + "Ocircumflextilde", + 0x1ed6, + "Ocyrillic", + 0x041e, + "Odblacute", + 0x0150, + "Odblgrave", + 0x020c, + "Odieresis", + 0x00d6, + "Odieresiscyrillic", + 0x04e6, + "Odieresissmall", + 0xf7f6, + "Odotbelow", + 0x1ecc, + "Ogoneksmall", + 0xf6fb, + "Ograve", + 0x00d2, + "Ogravesmall", + 0xf7f2, + "Oharmenian", + 0x0555, + "Ohm", + 0x2126, + "Ohookabove", + 0x1ece, + "Ohorn", + 0x01a0, + "Ohornacute", + 0x1eda, + "Ohorndotbelow", + 0x1ee2, + "Ohorngrave", + 0x1edc, + "Ohornhookabove", + 0x1ede, + "Ohorntilde", + 0x1ee0, + "Ohungarumlaut", + 0x0150, + "Oi", + 0x01a2, + "Oinvertedbreve", + 0x020e, + "Omacron", + 0x014c, + "Omacronacute", + 0x1e52, + "Omacrongrave", + 0x1e50, + "Omega", + 0x2126, + "Omegacyrillic", + 0x0460, + "Omegagreek", + 0x03a9, + "Omegaroundcyrillic", + 0x047a, + "Omegatitlocyrillic", + 0x047c, + "Omegatonos", + 0x038f, + "Omicron", + 0x039f, + "Omicrontonos", + 0x038c, + "Omonospace", + 0xff2f, + "Oneroman", + 0x2160, + "Oogonek", + 0x01ea, + "Oogonekmacron", + 0x01ec, + "Oopen", + 0x0186, + "Oslash", + 0x00d8, + "Oslashacute", + 0x01fe, + "Oslashsmall", + 0xf7f8, + "Osmall", + 0xf76f, + "Ostrokeacute", + 0x01fe, + "Otcyrillic", + 0x047e, + "Otilde", + 0x00d5, + "Otildeacute", + 0x1e4c, + "Otildedieresis", + 0x1e4e, + "Otildesmall", + 0xf7f5, + "P", + 0x0050, + "Pacute", + 0x1e54, + "Pcircle", + 0x24c5, + "Pdotaccent", + 0x1e56, + "Pecyrillic", + 0x041f, + "Peharmenian", + 0x054a, + "Pemiddlehookcyrillic", + 0x04a6, + "Phi", + 0x03a6, + "Phook", + 0x01a4, + "Pi", + 0x03a0, + "Piwrarmenian", + 0x0553, + "Pmonospace", + 0xff30, + "Psi", + 0x03a8, + "Psicyrillic", + 0x0470, + "Psmall", + 0xf770, + "Q", + 0x0051, + "Qcircle", + 0x24c6, + "Qmonospace", + 0xff31, + "Qsmall", + 0xf771, + "R", + 0x0052, + "Raarmenian", + 0x054c, + "Racute", + 0x0154, + "Rcaron", + 0x0158, + "Rcedilla", + 0x0156, + "Rcircle", + 0x24c7, + "Rcommaaccent", + 0x0156, + "Rdblgrave", + 0x0210, + "Rdotaccent", + 0x1e58, + "Rdotbelow", + 0x1e5a, + "Rdotbelowmacron", + 0x1e5c, + "Reharmenian", + 0x0550, + "Rfraktur", + 0x211c, + "Rho", + 0x03a1, + "Ringsmall", + 0xf6fc, + "Rinvertedbreve", + 0x0212, + "Rlinebelow", + 0x1e5e, + "Rmonospace", + 0xff32, + "Rsmall", + 0xf772, + "Rsmallinverted", + 0x0281, + "Rsmallinvertedsuperior", + 0x02b6, + "S", + 0x0053, + "SF010000", + 0x250c, + "SF020000", + 0x2514, + "SF030000", + 0x2510, + "SF040000", + 0x2518, + "SF050000", + 0x253c, + "SF060000", + 0x252c, + "SF070000", + 0x2534, + "SF080000", + 0x251c, + "SF090000", + 0x2524, + "SF100000", + 0x2500, + "SF110000", + 0x2502, + "SF190000", + 0x2561, + "SF200000", + 0x2562, + "SF210000", + 0x2556, + "SF220000", + 0x2555, + "SF230000", + 0x2563, + "SF240000", + 0x2551, + "SF250000", + 0x2557, + "SF260000", + 0x255d, + "SF270000", + 0x255c, + "SF280000", + 0x255b, + "SF360000", + 0x255e, + "SF370000", + 0x255f, + "SF380000", + 0x255a, + "SF390000", + 0x2554, + "SF400000", + 0x2569, + "SF410000", + 0x2566, + "SF420000", + 0x2560, + "SF430000", + 0x2550, + "SF440000", + 0x256c, + "SF450000", + 0x2567, + "SF460000", + 0x2568, + "SF470000", + 0x2564, + "SF480000", + 0x2565, + "SF490000", + 0x2559, + "SF500000", + 0x2558, + "SF510000", + 0x2552, + "SF520000", + 0x2553, + "SF530000", + 0x256b, + "SF540000", + 0x256a, + "Sacute", + 0x015a, + "Sacutedotaccent", + 0x1e64, + "Sampigreek", + 0x03e0, + "Scaron", + 0x0160, + "Scarondotaccent", + 0x1e66, + "Scaronsmall", + 0xf6fd, + "Scedilla", + 0x015e, + "Schwa", + 0x018f, + "Schwacyrillic", + 0x04d8, + "Schwadieresiscyrillic", + 0x04da, + "Scircle", + 0x24c8, + "Scircumflex", + 0x015c, + "Scommaaccent", + 0x0218, + "Sdotaccent", + 0x1e60, + "Sdotbelow", + 0x1e62, + "Sdotbelowdotaccent", + 0x1e68, + "Seharmenian", + 0x054d, + "Sevenroman", + 0x2166, + "Shaarmenian", + 0x0547, + "Shacyrillic", + 0x0428, + "Shchacyrillic", + 0x0429, + "Sheicoptic", + 0x03e2, + "Shhacyrillic", + 0x04ba, + "Shimacoptic", + 0x03ec, + "Sigma", + 0x03a3, + "Sixroman", + 0x2165, + "Smonospace", + 0xff33, + "Softsigncyrillic", + 0x042c, + "Ssmall", + 0xf773, + "Stigmagreek", + 0x03da, + "T", + 0x0054, + "Tau", + 0x03a4, + "Tbar", + 0x0166, + "Tcaron", + 0x0164, + "Tcedilla", + 0x0162, + "Tcircle", + 0x24c9, + "Tcircumflexbelow", + 0x1e70, + "Tcommaaccent", + 0x0162, + "Tdotaccent", + 0x1e6a, + "Tdotbelow", + 0x1e6c, + "Tecyrillic", + 0x0422, + "Tedescendercyrillic", + 0x04ac, + "Tenroman", + 0x2169, + "Tetsecyrillic", + 0x04b4, + "Theta", + 0x0398, + "Thook", + 0x01ac, + "Thorn", + 0x00de, + "Thornsmall", + 0xf7fe, + "Threeroman", + 0x2162, + "Tildesmall", + 0xf6fe, + "Tiwnarmenian", + 0x054f, + "Tlinebelow", + 0x1e6e, + "Tmonospace", + 0xff34, + "Toarmenian", + 0x0539, + "Tonefive", + 0x01bc, + "Tonesix", + 0x0184, + "Tonetwo", + 0x01a7, + "Tretroflexhook", + 0x01ae, + "Tsecyrillic", + 0x0426, + "Tshecyrillic", + 0x040b, + "Tsmall", + 0xf774, + "Twelveroman", + 0x216b, + "Tworoman", + 0x2161, + "U", + 0x0055, + "Uacute", + 0x00da, + "Uacutesmall", + 0xf7fa, + "Ubreve", + 0x016c, + "Ucaron", + 0x01d3, + "Ucircle", + 0x24ca, + "Ucircumflex", + 0x00db, + "Ucircumflexbelow", + 0x1e76, + "Ucircumflexsmall", + 0xf7fb, + "Ucyrillic", + 0x0423, + "Udblacute", + 0x0170, + "Udblgrave", + 0x0214, + "Udieresis", + 0x00dc, + "Udieresisacute", + 0x01d7, + "Udieresisbelow", + 0x1e72, + "Udieresiscaron", + 0x01d9, + "Udieresiscyrillic", + 0x04f0, + "Udieresisgrave", + 0x01db, + "Udieresismacron", + 0x01d5, + "Udieresissmall", + 0xf7fc, + "Udotbelow", + 0x1ee4, + "Ugrave", + 0x00d9, + "Ugravesmall", + 0xf7f9, + "Uhookabove", + 0x1ee6, + "Uhorn", + 0x01af, + "Uhornacute", + 0x1ee8, + "Uhorndotbelow", + 0x1ef0, + "Uhorngrave", + 0x1eea, + "Uhornhookabove", + 0x1eec, + "Uhorntilde", + 0x1eee, + "Uhungarumlaut", + 0x0170, + "Uhungarumlautcyrillic", + 0x04f2, + "Uinvertedbreve", + 0x0216, + "Ukcyrillic", + 0x0478, + "Umacron", + 0x016a, + "Umacroncyrillic", + 0x04ee, + "Umacrondieresis", + 0x1e7a, + "Umonospace", + 0xff35, + "Uogonek", + 0x0172, + "Upsilon", + 0x03a5, + "Upsilon1", + 0x03d2, + "Upsilonacutehooksymbolgreek", + 0x03d3, + "Upsilonafrican", + 0x01b1, + "Upsilondieresis", + 0x03ab, + "Upsilondieresishooksymbolgreek", + 0x03d4, + "Upsilonhooksymbol", + 0x03d2, + "Upsilontonos", + 0x038e, + "Uring", + 0x016e, + "Ushortcyrillic", + 0x040e, + "Usmall", + 0xf775, + "Ustraightcyrillic", + 0x04ae, + "Ustraightstrokecyrillic", + 0x04b0, + "Utilde", + 0x0168, + "Utildeacute", + 0x1e78, + "Utildebelow", + 0x1e74, + "V", + 0x0056, + "Vcircle", + 0x24cb, + "Vdotbelow", + 0x1e7e, + "Vecyrillic", + 0x0412, + "Vewarmenian", + 0x054e, + "Vhook", + 0x01b2, + "Vmonospace", + 0xff36, + "Voarmenian", + 0x0548, + "Vsmall", + 0xf776, + "Vtilde", + 0x1e7c, + "W", + 0x0057, + "Wacute", + 0x1e82, + "Wcircle", + 0x24cc, + "Wcircumflex", + 0x0174, + "Wdieresis", + 0x1e84, + "Wdotaccent", + 0x1e86, + "Wdotbelow", + 0x1e88, + "Wgrave", + 0x1e80, + "Wmonospace", + 0xff37, + "Wsmall", + 0xf777, + "X", + 0x0058, + "Xcircle", + 0x24cd, + "Xdieresis", + 0x1e8c, + "Xdotaccent", + 0x1e8a, + "Xeharmenian", + 0x053d, + "Xi", + 0x039e, + "Xmonospace", + 0xff38, + "Xsmall", + 0xf778, + "Y", + 0x0059, + "Yacute", + 0x00dd, + "Yacutesmall", + 0xf7fd, + "Yatcyrillic", + 0x0462, + "Ycircle", + 0x24ce, + "Ycircumflex", + 0x0176, + "Ydieresis", + 0x0178, + "Ydieresissmall", + 0xf7ff, + "Ydotaccent", + 0x1e8e, + "Ydotbelow", + 0x1ef4, + "Yericyrillic", + 0x042b, + "Yerudieresiscyrillic", + 0x04f8, + "Ygrave", + 0x1ef2, + "Yhook", + 0x01b3, + "Yhookabove", + 0x1ef6, + "Yiarmenian", + 0x0545, + "Yicyrillic", + 0x0407, + "Yiwnarmenian", + 0x0552, + "Ymonospace", + 0xff39, + "Ysmall", + 0xf779, + "Ytilde", + 0x1ef8, + "Yusbigcyrillic", + 0x046a, + "Yusbigiotifiedcyrillic", + 0x046c, + "Yuslittlecyrillic", + 0x0466, + "Yuslittleiotifiedcyrillic", + 0x0468, + "Z", + 0x005a, + "Zaarmenian", + 0x0536, + "Zacute", + 0x0179, + "Zcaron", + 0x017d, + "Zcaronsmall", + 0xf6ff, + "Zcircle", + 0x24cf, + "Zcircumflex", + 0x1e90, + "Zdot", + 0x017b, + "Zdotaccent", + 0x017b, + "Zdotbelow", + 0x1e92, + "Zecyrillic", + 0x0417, + "Zedescendercyrillic", + 0x0498, + "Zedieresiscyrillic", + 0x04de, + "Zeta", + 0x0396, + "Zhearmenian", + 0x053a, + "Zhebrevecyrillic", + 0x04c1, + "Zhecyrillic", + 0x0416, + "Zhedescendercyrillic", + 0x0496, + "Zhedieresiscyrillic", + 0x04dc, + "Zlinebelow", + 0x1e94, + "Zmonospace", + 0xff3a, + "Zsmall", + 0xf77a, + "Zstroke", + 0x01b5, + "a", + 0x0061, + "aabengali", + 0x0986, + "aacute", + 0x00e1, + "aadeva", + 0x0906, + "aagujarati", + 0x0a86, + "aagurmukhi", + 0x0a06, + "aamatragurmukhi", + 0x0a3e, + "aarusquare", + 0x3303, + "aavowelsignbengali", + 0x09be, + "aavowelsigndeva", + 0x093e, + "aavowelsigngujarati", + 0x0abe, + "abbreviationmarkarmenian", + 0x055f, + "abbreviationsigndeva", + 0x0970, + "abengali", + 0x0985, + "abopomofo", + 0x311a, + "abreve", + 0x0103, + "abreveacute", + 0x1eaf, + "abrevecyrillic", + 0x04d1, + "abrevedotbelow", + 0x1eb7, + "abrevegrave", + 0x1eb1, + "abrevehookabove", + 0x1eb3, + "abrevetilde", + 0x1eb5, + "acaron", + 0x01ce, + "acircle", + 0x24d0, + "acircumflex", + 0x00e2, + "acircumflexacute", + 0x1ea5, + "acircumflexdotbelow", + 0x1ead, + "acircumflexgrave", + 0x1ea7, + "acircumflexhookabove", + 0x1ea9, + "acircumflextilde", + 0x1eab, + "acute", + 0x00b4, + "acutebelowcmb", + 0x0317, + "acutecmb", + 0x0301, + "acutecomb", + 0x0301, + "acutedeva", + 0x0954, + "acutelowmod", + 0x02cf, + "acutetonecmb", + 0x0341, + "acyrillic", + 0x0430, + "adblgrave", + 0x0201, + "addakgurmukhi", + 0x0a71, + "adeva", + 0x0905, + "adieresis", + 0x00e4, + "adieresiscyrillic", + 0x04d3, + "adieresismacron", + 0x01df, + "adotbelow", + 0x1ea1, + "adotmacron", + 0x01e1, + "ae", + 0x00e6, + "aeacute", + 0x01fd, + "aekorean", + 0x3150, + "aemacron", + 0x01e3, + "afii00208", + 0x2015, + "afii08941", + 0x20a4, + "afii10017", + 0x0410, + "afii10018", + 0x0411, + "afii10019", + 0x0412, + "afii10020", + 0x0413, + "afii10021", + 0x0414, + "afii10022", + 0x0415, + "afii10023", + 0x0401, + "afii10024", + 0x0416, + "afii10025", + 0x0417, + "afii10026", + 0x0418, + "afii10027", + 0x0419, + "afii10028", + 0x041a, + "afii10029", + 0x041b, + "afii10030", + 0x041c, + "afii10031", + 0x041d, + "afii10032", + 0x041e, + "afii10033", + 0x041f, + "afii10034", + 0x0420, + "afii10035", + 0x0421, + "afii10036", + 0x0422, + "afii10037", + 0x0423, + "afii10038", + 0x0424, + "afii10039", + 0x0425, + "afii10040", + 0x0426, + "afii10041", + 0x0427, + "afii10042", + 0x0428, + "afii10043", + 0x0429, + "afii10044", + 0x042a, + "afii10045", + 0x042b, + "afii10046", + 0x042c, + "afii10047", + 0x042d, + "afii10048", + 0x042e, + "afii10049", + 0x042f, + "afii10050", + 0x0490, + "afii10051", + 0x0402, + "afii10052", + 0x0403, + "afii10053", + 0x0404, + "afii10054", + 0x0405, + "afii10055", + 0x0406, + "afii10056", + 0x0407, + "afii10057", + 0x0408, + "afii10058", + 0x0409, + "afii10059", + 0x040a, + "afii10060", + 0x040b, + "afii10061", + 0x040c, + "afii10062", + 0x040e, + "afii10063", + 0xf6c4, + "afii10064", + 0xf6c5, + "afii10065", + 0x0430, + "afii10066", + 0x0431, + "afii10067", + 0x0432, + "afii10068", + 0x0433, + "afii10069", + 0x0434, + "afii10070", + 0x0435, + "afii10071", + 0x0451, + "afii10072", + 0x0436, + "afii10073", + 0x0437, + "afii10074", + 0x0438, + "afii10075", + 0x0439, + "afii10076", + 0x043a, + "afii10077", + 0x043b, + "afii10078", + 0x043c, + "afii10079", + 0x043d, + "afii10080", + 0x043e, + "afii10081", + 0x043f, + "afii10082", + 0x0440, + "afii10083", + 0x0441, + "afii10084", + 0x0442, + "afii10085", + 0x0443, + "afii10086", + 0x0444, + "afii10087", + 0x0445, + "afii10088", + 0x0446, + "afii10089", + 0x0447, + "afii10090", + 0x0448, + "afii10091", + 0x0449, + "afii10092", + 0x044a, + "afii10093", + 0x044b, + "afii10094", + 0x044c, + "afii10095", + 0x044d, + "afii10096", + 0x044e, + "afii10097", + 0x044f, + "afii10098", + 0x0491, + "afii10099", + 0x0452, + "afii10100", + 0x0453, + "afii10101", + 0x0454, + "afii10102", + 0x0455, + "afii10103", + 0x0456, + "afii10104", + 0x0457, + "afii10105", + 0x0458, + "afii10106", + 0x0459, + "afii10107", + 0x045a, + "afii10108", + 0x045b, + "afii10109", + 0x045c, + "afii10110", + 0x045e, + "afii10145", + 0x040f, + "afii10146", + 0x0462, + "afii10147", + 0x0472, + "afii10148", + 0x0474, + "afii10192", + 0xf6c6, + "afii10193", + 0x045f, + "afii10194", + 0x0463, + "afii10195", + 0x0473, + "afii10196", + 0x0475, + "afii10831", + 0xf6c7, + "afii10832", + 0xf6c8, + "afii10846", + 0x04d9, + "afii299", + 0x200e, + "afii300", + 0x200f, + "afii301", + 0x200d, + "afii57381", + 0x066a, + "afii57388", + 0x060c, + "afii57392", + 0x0660, + "afii57393", + 0x0661, + "afii57394", + 0x0662, + "afii57395", + 0x0663, + "afii57396", + 0x0664, + "afii57397", + 0x0665, + "afii57398", + 0x0666, + "afii57399", + 0x0667, + "afii57400", + 0x0668, + "afii57401", + 0x0669, + "afii57403", + 0x061b, + "afii57407", + 0x061f, + "afii57409", + 0x0621, + "afii57410", + 0x0622, + "afii57411", + 0x0623, + "afii57412", + 0x0624, + "afii57413", + 0x0625, + "afii57414", + 0x0626, + "afii57415", + 0x0627, + "afii57416", + 0x0628, + "afii57417", + 0x0629, + "afii57418", + 0x062a, + "afii57419", + 0x062b, + "afii57420", + 0x062c, + "afii57421", + 0x062d, + "afii57422", + 0x062e, + "afii57423", + 0x062f, + "afii57424", + 0x0630, + "afii57425", + 0x0631, + "afii57426", + 0x0632, + "afii57427", + 0x0633, + "afii57428", + 0x0634, + "afii57429", + 0x0635, + "afii57430", + 0x0636, + "afii57431", + 0x0637, + "afii57432", + 0x0638, + "afii57433", + 0x0639, + "afii57434", + 0x063a, + "afii57440", + 0x0640, + "afii57441", + 0x0641, + "afii57442", + 0x0642, + "afii57443", + 0x0643, + "afii57444", + 0x0644, + "afii57445", + 0x0645, + "afii57446", + 0x0646, + "afii57448", + 0x0648, + "afii57449", + 0x0649, + "afii57450", + 0x064a, + "afii57451", + 0x064b, + "afii57452", + 0x064c, + "afii57453", + 0x064d, + "afii57454", + 0x064e, + "afii57455", + 0x064f, + "afii57456", + 0x0650, + "afii57457", + 0x0651, + "afii57458", + 0x0652, + "afii57470", + 0x0647, + "afii57505", + 0x06a4, + "afii57506", + 0x067e, + "afii57507", + 0x0686, + "afii57508", + 0x0698, + "afii57509", + 0x06af, + "afii57511", + 0x0679, + "afii57512", + 0x0688, + "afii57513", + 0x0691, + "afii57514", + 0x06ba, + "afii57519", + 0x06d2, + "afii57534", + 0x06d5, + "afii57636", + 0x20aa, + "afii57645", + 0x05be, + "afii57658", + 0x05c3, + "afii57664", + 0x05d0, + "afii57665", + 0x05d1, + "afii57666", + 0x05d2, + "afii57667", + 0x05d3, + "afii57668", + 0x05d4, + "afii57669", + 0x05d5, + "afii57670", + 0x05d6, + "afii57671", + 0x05d7, + "afii57672", + 0x05d8, + "afii57673", + 0x05d9, + "afii57674", + 0x05da, + "afii57675", + 0x05db, + "afii57676", + 0x05dc, + "afii57677", + 0x05dd, + "afii57678", + 0x05de, + "afii57679", + 0x05df, + "afii57680", + 0x05e0, + "afii57681", + 0x05e1, + "afii57682", + 0x05e2, + "afii57683", + 0x05e3, + "afii57684", + 0x05e4, + "afii57685", + 0x05e5, + "afii57686", + 0x05e6, + "afii57687", + 0x05e7, + "afii57688", + 0x05e8, + "afii57689", + 0x05e9, + "afii57690", + 0x05ea, + "afii57694", + 0xfb2a, + "afii57695", + 0xfb2b, + "afii57700", + 0xfb4b, + "afii57705", + 0xfb1f, + "afii57716", + 0x05f0, + "afii57717", + 0x05f1, + "afii57718", + 0x05f2, + "afii57723", + 0xfb35, + "afii57793", + 0x05b4, + "afii57794", + 0x05b5, + "afii57795", + 0x05b6, + "afii57796", + 0x05bb, + "afii57797", + 0x05b8, + "afii57798", + 0x05b7, + "afii57799", + 0x05b0, + "afii57800", + 0x05b2, + "afii57801", + 0x05b1, + "afii57802", + 0x05b3, + "afii57803", + 0x05c2, + "afii57804", + 0x05c1, + "afii57806", + 0x05b9, + "afii57807", + 0x05bc, + "afii57839", + 0x05bd, + "afii57841", + 0x05bf, + "afii57842", + 0x05c0, + "afii57929", + 0x02bc, + "afii61248", + 0x2105, + "afii61289", + 0x2113, + "afii61352", + 0x2116, + "afii61573", + 0x202c, + "afii61574", + 0x202d, + "afii61575", + 0x202e, + "afii61664", + 0x200c, + "afii63167", + 0x066d, + "afii64937", + 0x02bd, + "agrave", + 0x00e0, + "agujarati", + 0x0a85, + "agurmukhi", + 0x0a05, + "ahiragana", + 0x3042, + "ahookabove", + 0x1ea3, + "aibengali", + 0x0990, + "aibopomofo", + 0x311e, + "aideva", + 0x0910, + "aiecyrillic", + 0x04d5, + "aigujarati", + 0x0a90, + "aigurmukhi", + 0x0a10, + "aimatragurmukhi", + 0x0a48, + "ainarabic", + 0x0639, + "ainfinalarabic", + 0xfeca, + "aininitialarabic", + 0xfecb, + "ainmedialarabic", + 0xfecc, + "ainvertedbreve", + 0x0203, + "aivowelsignbengali", + 0x09c8, + "aivowelsigndeva", + 0x0948, + "aivowelsigngujarati", + 0x0ac8, + "akatakana", + 0x30a2, + "akatakanahalfwidth", + 0xff71, + "akorean", + 0x314f, + "alef", + 0x05d0, + "alefarabic", + 0x0627, + "alefdageshhebrew", + 0xfb30, + "aleffinalarabic", + 0xfe8e, + "alefhamzaabovearabic", + 0x0623, + "alefhamzaabovefinalarabic", + 0xfe84, + "alefhamzabelowarabic", + 0x0625, + "alefhamzabelowfinalarabic", + 0xfe88, + "alefhebrew", + 0x05d0, + "aleflamedhebrew", + 0xfb4f, + "alefmaddaabovearabic", + 0x0622, + "alefmaddaabovefinalarabic", + 0xfe82, + "alefmaksuraarabic", + 0x0649, + "alefmaksurafinalarabic", + 0xfef0, + "alefmaksurainitialarabic", + 0xfef3, + "alefmaksuramedialarabic", + 0xfef4, + "alefpatahhebrew", + 0xfb2e, + "alefqamatshebrew", + 0xfb2f, + "aleph", + 0x2135, + "allequal", + 0x224c, + "alpha", + 0x03b1, + "alphatonos", + 0x03ac, + "amacron", + 0x0101, + "amonospace", + 0xff41, + "ampersand", + 0x0026, + "ampersandmonospace", + 0xff06, + "ampersandsmall", + 0xf726, + "amsquare", + 0x33c2, + "anbopomofo", + 0x3122, + "angbopomofo", + 0x3124, + "angbracketleft", + 0x3008, + "angbracketright", + 0x3009, + "angkhankhuthai", + 0x0e5a, + "angle", + 0x2220, + "anglebracketleft", + 0x3008, + "anglebracketleftvertical", + 0xfe3f, + "anglebracketright", + 0x3009, + "anglebracketrightvertical", + 0xfe40, + "angleleft", + 0x2329, + "angleright", + 0x232a, + "angstrom", + 0x212b, + "anoteleia", + 0x0387, + "anudattadeva", + 0x0952, + "anusvarabengali", + 0x0982, + "anusvaradeva", + 0x0902, + "anusvaragujarati", + 0x0a82, + "aogonek", + 0x0105, + "apaatosquare", + 0x3300, + "aparen", + 0x249c, + "apostrophearmenian", + 0x055a, + "apostrophemod", + 0x02bc, + "apple", + 0xf8ff, + "approaches", + 0x2250, + "approxequal", + 0x2248, + "approxequalorimage", + 0x2252, + "approximatelyequal", + 0x2245, + "araeaekorean", + 0x318e, + "araeakorean", + 0x318d, + "arc", + 0x2312, + "arighthalfring", + 0x1e9a, + "aring", + 0x00e5, + "aringacute", + 0x01fb, + "aringbelow", + 0x1e01, + "arrowboth", + 0x2194, + "arrowdashdown", + 0x21e3, + "arrowdashleft", + 0x21e0, + "arrowdashright", + 0x21e2, + "arrowdashup", + 0x21e1, + "arrowdblboth", + 0x21d4, + "arrowdbldown", + 0x21d3, + "arrowdblleft", + 0x21d0, + "arrowdblright", + 0x21d2, + "arrowdblup", + 0x21d1, + "arrowdown", + 0x2193, + "arrowdownleft", + 0x2199, + "arrowdownright", + 0x2198, + "arrowdownwhite", + 0x21e9, + "arrowheaddownmod", + 0x02c5, + "arrowheadleftmod", + 0x02c2, + "arrowheadrightmod", + 0x02c3, + "arrowheadupmod", + 0x02c4, + "arrowhorizex", + 0xf8e7, + "arrowleft", + 0x2190, + "arrowleftdbl", + 0x21d0, + "arrowleftdblstroke", + 0x21cd, + "arrowleftoverright", + 0x21c6, + "arrowleftwhite", + 0x21e6, + "arrowright", + 0x2192, + "arrowrightdblstroke", + 0x21cf, + "arrowrightheavy", + 0x279e, + "arrowrightoverleft", + 0x21c4, + "arrowrightwhite", + 0x21e8, + "arrowtableft", + 0x21e4, + "arrowtabright", + 0x21e5, + "arrowup", + 0x2191, + "arrowupdn", + 0x2195, + "arrowupdnbse", + 0x21a8, + "arrowupdownbase", + 0x21a8, + "arrowupleft", + 0x2196, + "arrowupleftofdown", + 0x21c5, + "arrowupright", + 0x2197, + "arrowupwhite", + 0x21e7, + "arrowvertex", + 0xf8e6, + "asciicircum", + 0x005e, + "asciicircummonospace", + 0xff3e, + "asciitilde", + 0x007e, + "asciitildemonospace", + 0xff5e, + "ascript", + 0x0251, + "ascriptturned", + 0x0252, + "asmallhiragana", + 0x3041, + "asmallkatakana", + 0x30a1, + "asmallkatakanahalfwidth", + 0xff67, + "asterisk", + 0x002a, + "asteriskaltonearabic", + 0x066d, + "asteriskarabic", + 0x066d, + "asteriskmath", + 0x2217, + "asteriskmonospace", + 0xff0a, + "asterisksmall", + 0xfe61, + "asterism", + 0x2042, + "asuperior", + 0xf6e9, + "asymptoticallyequal", + 0x2243, + "at", + 0x0040, + "atilde", + 0x00e3, + "atmonospace", + 0xff20, + "atsmall", + 0xfe6b, + "aturned", + 0x0250, + "aubengali", + 0x0994, + "aubopomofo", + 0x3120, + "audeva", + 0x0914, + "augujarati", + 0x0a94, + "augurmukhi", + 0x0a14, + "aulengthmarkbengali", + 0x09d7, + "aumatragurmukhi", + 0x0a4c, + "auvowelsignbengali", + 0x09cc, + "auvowelsigndeva", + 0x094c, + "auvowelsigngujarati", + 0x0acc, + "avagrahadeva", + 0x093d, + "aybarmenian", + 0x0561, + "ayin", + 0x05e2, + "ayinaltonehebrew", + 0xfb20, + "ayinhebrew", + 0x05e2, + "b", + 0x0062, + "babengali", + 0x09ac, + "backslash", + 0x005c, + "backslashmonospace", + 0xff3c, + "badeva", + 0x092c, + "bagujarati", + 0x0aac, + "bagurmukhi", + 0x0a2c, + "bahiragana", + 0x3070, + "bahtthai", + 0x0e3f, + "bakatakana", + 0x30d0, + "bar", + 0x007c, + "barmonospace", + 0xff5c, + "bbopomofo", + 0x3105, + "bcircle", + 0x24d1, + "bdotaccent", + 0x1e03, + "bdotbelow", + 0x1e05, + "beamedsixteenthnotes", + 0x266c, + "because", + 0x2235, + "becyrillic", + 0x0431, + "beharabic", + 0x0628, + "behfinalarabic", + 0xfe90, + "behinitialarabic", + 0xfe91, + "behiragana", + 0x3079, + "behmedialarabic", + 0xfe92, + "behmeeminitialarabic", + 0xfc9f, + "behmeemisolatedarabic", + 0xfc08, + "behnoonfinalarabic", + 0xfc6d, + "bekatakana", + 0x30d9, + "benarmenian", + 0x0562, + "bet", + 0x05d1, + "beta", + 0x03b2, + "betasymbolgreek", + 0x03d0, + "betdagesh", + 0xfb31, + "betdageshhebrew", + 0xfb31, + "bethebrew", + 0x05d1, + "betrafehebrew", + 0xfb4c, + "bhabengali", + 0x09ad, + "bhadeva", + 0x092d, + "bhagujarati", + 0x0aad, + "bhagurmukhi", + 0x0a2d, + "bhook", + 0x0253, + "bihiragana", + 0x3073, + "bikatakana", + 0x30d3, + "bilabialclick", + 0x0298, + "bindigurmukhi", + 0x0a02, + "birusquare", + 0x3331, + "blackcircle", + 0x25cf, + "blackdiamond", + 0x25c6, + "blackdownpointingtriangle", + 0x25bc, + "blackleftpointingpointer", + 0x25c4, + "blackleftpointingtriangle", + 0x25c0, + "blacklenticularbracketleft", + 0x3010, + "blacklenticularbracketleftvertical", + 0xfe3b, + "blacklenticularbracketright", + 0x3011, + "blacklenticularbracketrightvertical", + 0xfe3c, + "blacklowerlefttriangle", + 0x25e3, + "blacklowerrighttriangle", + 0x25e2, + "blackrectangle", + 0x25ac, + "blackrightpointingpointer", + 0x25ba, + "blackrightpointingtriangle", + 0x25b6, + "blacksmallsquare", + 0x25aa, + "blacksmilingface", + 0x263b, + "blacksquare", + 0x25a0, + "blackstar", + 0x2605, + "blackupperlefttriangle", + 0x25e4, + "blackupperrighttriangle", + 0x25e5, + "blackuppointingsmalltriangle", + 0x25b4, + "blackuppointingtriangle", + 0x25b2, + "blank", + 0x2423, + "blinebelow", + 0x1e07, + "block", + 0x2588, + "bmonospace", + 0xff42, + "bobaimaithai", + 0x0e1a, + "bohiragana", + 0x307c, + "bokatakana", + 0x30dc, + "bparen", + 0x249d, + "bqsquare", + 0x33c3, + "braceex", + 0xf8f4, + "braceleft", + 0x007b, + "braceleftbt", + 0xf8f3, + "braceleftmid", + 0xf8f2, + "braceleftmonospace", + 0xff5b, + "braceleftsmall", + 0xfe5b, + "bracelefttp", + 0xf8f1, + "braceleftvertical", + 0xfe37, + "braceright", + 0x007d, + "bracerightbt", + 0xf8fe, + "bracerightmid", + 0xf8fd, + "bracerightmonospace", + 0xff5d, + "bracerightsmall", + 0xfe5c, + "bracerighttp", + 0xf8fc, + "bracerightvertical", + 0xfe38, + "bracketleft", + 0x005b, + "bracketleftbt", + 0xf8f0, + "bracketleftex", + 0xf8ef, + "bracketleftmonospace", + 0xff3b, + "bracketlefttp", + 0xf8ee, + "bracketright", + 0x005d, + "bracketrightbt", + 0xf8fb, + "bracketrightex", + 0xf8fa, + "bracketrightmonospace", + 0xff3d, + "bracketrighttp", + 0xf8f9, + "breve", + 0x02d8, + "brevebelowcmb", + 0x032e, + "brevecmb", + 0x0306, + "breveinvertedbelowcmb", + 0x032f, + "breveinvertedcmb", + 0x0311, + "breveinverteddoublecmb", + 0x0361, + "bridgebelowcmb", + 0x032a, + "bridgeinvertedbelowcmb", + 0x033a, + "brokenbar", + 0x00a6, + "bstroke", + 0x0180, + "bsuperior", + 0xf6ea, + "btopbar", + 0x0183, + "buhiragana", + 0x3076, + "bukatakana", + 0x30d6, + "bullet", + 0x2022, + "bulletinverse", + 0x25d8, + "bulletoperator", + 0x2219, + "bullseye", + 0x25ce, + "c", + 0x0063, + "caarmenian", + 0x056e, + "cabengali", + 0x099a, + "cacute", + 0x0107, + "cadeva", + 0x091a, + "cagujarati", + 0x0a9a, + "cagurmukhi", + 0x0a1a, + "calsquare", + 0x3388, + "candrabindubengali", + 0x0981, + "candrabinducmb", + 0x0310, + "candrabindudeva", + 0x0901, + "candrabindugujarati", + 0x0a81, + "capslock", + 0x21ea, + "careof", + 0x2105, + "caron", + 0x02c7, + "caronbelowcmb", + 0x032c, + "caroncmb", + 0x030c, + "carriagereturn", + 0x21b5, + "cbopomofo", + 0x3118, + "ccaron", + 0x010d, + "ccedilla", + 0x00e7, + "ccedillaacute", + 0x1e09, + "ccircle", + 0x24d2, + "ccircumflex", + 0x0109, + "ccurl", + 0x0255, + "cdot", + 0x010b, + "cdotaccent", + 0x010b, + "cdsquare", + 0x33c5, + "cedilla", + 0x00b8, + "cedillacmb", + 0x0327, + "cent", + 0x00a2, + "centigrade", + 0x2103, + "centinferior", + 0xf6df, + "centmonospace", + 0xffe0, + "centoldstyle", + 0xf7a2, + "centsuperior", + 0xf6e0, + "chaarmenian", + 0x0579, + "chabengali", + 0x099b, + "chadeva", + 0x091b, + "chagujarati", + 0x0a9b, + "chagurmukhi", + 0x0a1b, + "chbopomofo", + 0x3114, + "cheabkhasiancyrillic", + 0x04bd, + "checkmark", + 0x2713, + "checyrillic", + 0x0447, + "chedescenderabkhasiancyrillic", + 0x04bf, + "chedescendercyrillic", + 0x04b7, + "chedieresiscyrillic", + 0x04f5, + "cheharmenian", + 0x0573, + "chekhakassiancyrillic", + 0x04cc, + "cheverticalstrokecyrillic", + 0x04b9, + "chi", + 0x03c7, + "chieuchacirclekorean", + 0x3277, + "chieuchaparenkorean", + 0x3217, + "chieuchcirclekorean", + 0x3269, + "chieuchkorean", + 0x314a, + "chieuchparenkorean", + 0x3209, + "chochangthai", + 0x0e0a, + "chochanthai", + 0x0e08, + "chochingthai", + 0x0e09, + "chochoethai", + 0x0e0c, + "chook", + 0x0188, + "cieucacirclekorean", + 0x3276, + "cieucaparenkorean", + 0x3216, + "cieuccirclekorean", + 0x3268, + "cieuckorean", + 0x3148, + "cieucparenkorean", + 0x3208, + "cieucuparenkorean", + 0x321c, + "circle", + 0x25cb, + "circlecopyrt", + 0x00a9, + "circlemultiply", + 0x2297, + "circleot", + 0x2299, + "circleplus", + 0x2295, + "circlepostalmark", + 0x3036, + "circlewithlefthalfblack", + 0x25d0, + "circlewithrighthalfblack", + 0x25d1, + "circumflex", + 0x02c6, + "circumflexbelowcmb", + 0x032d, + "circumflexcmb", + 0x0302, + "clear", + 0x2327, + "clickalveolar", + 0x01c2, + "clickdental", + 0x01c0, + "clicklateral", + 0x01c1, + "clickretroflex", + 0x01c3, + "club", + 0x2663, + "clubsuitblack", + 0x2663, + "clubsuitwhite", + 0x2667, + "cmcubedsquare", + 0x33a4, + "cmonospace", + 0xff43, + "cmsquaredsquare", + 0x33a0, + "coarmenian", + 0x0581, + "colon", + 0x003a, + "colonmonetary", + 0x20a1, + "colonmonospace", + 0xff1a, + "colonsign", + 0x20a1, + "colonsmall", + 0xfe55, + "colontriangularhalfmod", + 0x02d1, + "colontriangularmod", + 0x02d0, + "comma", + 0x002c, + "commaabovecmb", + 0x0313, + "commaaboverightcmb", + 0x0315, + "commaaccent", + 0xf6c3, + "commaarabic", + 0x060c, + "commaarmenian", + 0x055d, + "commainferior", + 0xf6e1, + "commamonospace", + 0xff0c, + "commareversedabovecmb", + 0x0314, + "commareversedmod", + 0x02bd, + "commasmall", + 0xfe50, + "commasuperior", + 0xf6e2, + "commaturnedabovecmb", + 0x0312, + "commaturnedmod", + 0x02bb, + "compass", + 0x263c, + "congruent", + 0x2245, + "contourintegral", + 0x222e, + "control", + 0x2303, + "controlACK", + 0x0006, + "controlBEL", + 0x0007, + "controlBS", + 0x0008, + "controlCAN", + 0x0018, + "controlCR", + 0x000d, + "controlDC1", + 0x0011, + "controlDC2", + 0x0012, + "controlDC3", + 0x0013, + "controlDC4", + 0x0014, + "controlDEL", + 0x007f, + "controlDLE", + 0x0010, + "controlEM", + 0x0019, + "controlENQ", + 0x0005, + "controlEOT", + 0x0004, + "controlESC", + 0x001b, + "controlETB", + 0x0017, + "controlETX", + 0x0003, + "controlFF", + 0x000c, + "controlFS", + 0x001c, + "controlGS", + 0x001d, + "controlHT", + 0x0009, + "controlLF", + 0x000a, + "controlNAK", + 0x0015, + "controlNULL", + 0x0000, + "controlRS", + 0x001e, + "controlSI", + 0x000f, + "controlSO", + 0x000e, + "controlSOT", + 0x0002, + "controlSTX", + 0x0001, + "controlSUB", + 0x001a, + "controlSYN", + 0x0016, + "controlUS", + 0x001f, + "controlVT", + 0x000b, + "copyright", + 0x00a9, + "copyrightsans", + 0xf8e9, + "copyrightserif", + 0xf6d9, + "cornerbracketleft", + 0x300c, + "cornerbracketlefthalfwidth", + 0xff62, + "cornerbracketleftvertical", + 0xfe41, + "cornerbracketright", + 0x300d, + "cornerbracketrighthalfwidth", + 0xff63, + "cornerbracketrightvertical", + 0xfe42, + "corporationsquare", + 0x337f, + "cosquare", + 0x33c7, + "coverkgsquare", + 0x33c6, + "cparen", + 0x249e, + "cruzeiro", + 0x20a2, + "cstretched", + 0x0297, + "curlyand", + 0x22cf, + "curlyor", + 0x22ce, + "currency", + 0x00a4, + "cyrBreve", + 0xf6d1, + "cyrFlex", + 0xf6d2, + "cyrbreve", + 0xf6d4, + "cyrflex", + 0xf6d5, + "d", + 0x0064, + "daarmenian", + 0x0564, + "dabengali", + 0x09a6, + "dadarabic", + 0x0636, + "dadeva", + 0x0926, + "dadfinalarabic", + 0xfebe, + "dadinitialarabic", + 0xfebf, + "dadmedialarabic", + 0xfec0, + "dagesh", + 0x05bc, + "dageshhebrew", + 0x05bc, + "dagger", + 0x2020, + "daggerdbl", + 0x2021, + "dagujarati", + 0x0aa6, + "dagurmukhi", + 0x0a26, + "dahiragana", + 0x3060, + "dakatakana", + 0x30c0, + "dalarabic", + 0x062f, + "dalet", + 0x05d3, + "daletdagesh", + 0xfb33, + "daletdageshhebrew", + 0xfb33, + "dalethebrew", + 0x05d3, + "dalfinalarabic", + 0xfeaa, + "dammaarabic", + 0x064f, + "dammalowarabic", + 0x064f, + "dammatanaltonearabic", + 0x064c, + "dammatanarabic", + 0x064c, + "danda", + 0x0964, + "dargahebrew", + 0x05a7, + "dargalefthebrew", + 0x05a7, + "dasiapneumatacyrilliccmb", + 0x0485, + "dblGrave", + 0xf6d3, + "dblanglebracketleft", + 0x300a, + "dblanglebracketleftvertical", + 0xfe3d, + "dblanglebracketright", + 0x300b, + "dblanglebracketrightvertical", + 0xfe3e, + "dblarchinvertedbelowcmb", + 0x032b, + "dblarrowleft", + 0x21d4, + "dblarrowright", + 0x21d2, + "dbldanda", + 0x0965, + "dblgrave", + 0xf6d6, + "dblgravecmb", + 0x030f, + "dblintegral", + 0x222c, + "dbllowline", + 0x2017, + "dbllowlinecmb", + 0x0333, + "dbloverlinecmb", + 0x033f, + "dblprimemod", + 0x02ba, + "dblverticalbar", + 0x2016, + "dblverticallineabovecmb", + 0x030e, + "dbopomofo", + 0x3109, + "dbsquare", + 0x33c8, + "dcaron", + 0x010f, + "dcedilla", + 0x1e11, + "dcircle", + 0x24d3, + "dcircumflexbelow", + 0x1e13, + "dcroat", + 0x0111, + "ddabengali", + 0x09a1, + "ddadeva", + 0x0921, + "ddagujarati", + 0x0aa1, + "ddagurmukhi", + 0x0a21, + "ddalarabic", + 0x0688, + "ddalfinalarabic", + 0xfb89, + "dddhadeva", + 0x095c, + "ddhabengali", + 0x09a2, + "ddhadeva", + 0x0922, + "ddhagujarati", + 0x0aa2, + "ddhagurmukhi", + 0x0a22, + "ddotaccent", + 0x1e0b, + "ddotbelow", + 0x1e0d, + "decimalseparatorarabic", + 0x066b, + "decimalseparatorpersian", + 0x066b, + "decyrillic", + 0x0434, + "degree", + 0x00b0, + "dehihebrew", + 0x05ad, + "dehiragana", + 0x3067, + "deicoptic", + 0x03ef, + "dekatakana", + 0x30c7, + "deleteleft", + 0x232b, + "deleteright", + 0x2326, + "delta", + 0x03b4, + "deltaturned", + 0x018d, + "denominatorminusonenumeratorbengali", + 0x09f8, + "dezh", + 0x02a4, + "dhabengali", + 0x09a7, + "dhadeva", + 0x0927, + "dhagujarati", + 0x0aa7, + "dhagurmukhi", + 0x0a27, + "dhook", + 0x0257, + "dialytikatonos", + 0x0385, + "dialytikatonoscmb", + 0x0344, + "diamond", + 0x2666, + "diamondsuitwhite", + 0x2662, + "dieresis", + 0x00a8, + "dieresisacute", + 0xf6d7, + "dieresisbelowcmb", + 0x0324, + "dieresiscmb", + 0x0308, + "dieresisgrave", + 0xf6d8, + "dieresistonos", + 0x0385, + "dihiragana", + 0x3062, + "dikatakana", + 0x30c2, + "dittomark", + 0x3003, + "divide", + 0x00f7, + "divides", + 0x2223, + "divisionslash", + 0x2215, + "djecyrillic", + 0x0452, + "dkshade", + 0x2593, + "dlinebelow", + 0x1e0f, + "dlsquare", + 0x3397, + "dmacron", + 0x0111, + "dmonospace", + 0xff44, + "dnblock", + 0x2584, + "dochadathai", + 0x0e0e, + "dodekthai", + 0x0e14, + "dohiragana", + 0x3069, + "dokatakana", + 0x30c9, + "dollar", + 0x0024, + "dollarinferior", + 0xf6e3, + "dollarmonospace", + 0xff04, + "dollaroldstyle", + 0xf724, + "dollarsmall", + 0xfe69, + "dollarsuperior", + 0xf6e4, + "dong", + 0x20ab, + "dorusquare", + 0x3326, + "dotaccent", + 0x02d9, + "dotaccentcmb", + 0x0307, + "dotbelowcmb", + 0x0323, + "dotbelowcomb", + 0x0323, + "dotkatakana", + 0x30fb, + "dotlessi", + 0x0131, + "dotlessj", + 0xf6be, + "dotlessjstrokehook", + 0x0284, + "dotmath", + 0x22c5, + "dottedcircle", + 0x25cc, + "doubleyodpatah", + 0xfb1f, + "doubleyodpatahhebrew", + 0xfb1f, + "downtackbelowcmb", + 0x031e, + "downtackmod", + 0x02d5, + "dparen", + 0x249f, + "dsuperior", + 0xf6eb, + "dtail", + 0x0256, + "dtopbar", + 0x018c, + "duhiragana", + 0x3065, + "dukatakana", + 0x30c5, + "dz", + 0x01f3, + "dzaltone", + 0x02a3, + "dzcaron", + 0x01c6, + "dzcurl", + 0x02a5, + "dzeabkhasiancyrillic", + 0x04e1, + "dzecyrillic", + 0x0455, + "dzhecyrillic", + 0x045f, + "e", + 0x0065, + "eacute", + 0x00e9, + "earth", + 0x2641, + "ebengali", + 0x098f, + "ebopomofo", + 0x311c, + "ebreve", + 0x0115, + "ecandradeva", + 0x090d, + "ecandragujarati", + 0x0a8d, + "ecandravowelsigndeva", + 0x0945, + "ecandravowelsigngujarati", + 0x0ac5, + "ecaron", + 0x011b, + "ecedillabreve", + 0x1e1d, + "echarmenian", + 0x0565, + "echyiwnarmenian", + 0x0587, + "ecircle", + 0x24d4, + "ecircumflex", + 0x00ea, + "ecircumflexacute", + 0x1ebf, + "ecircumflexbelow", + 0x1e19, + "ecircumflexdotbelow", + 0x1ec7, + "ecircumflexgrave", + 0x1ec1, + "ecircumflexhookabove", + 0x1ec3, + "ecircumflextilde", + 0x1ec5, + "ecyrillic", + 0x0454, + "edblgrave", + 0x0205, + "edeva", + 0x090f, + "edieresis", + 0x00eb, + "edot", + 0x0117, + "edotaccent", + 0x0117, + "edotbelow", + 0x1eb9, + "eegurmukhi", + 0x0a0f, + "eematragurmukhi", + 0x0a47, + "efcyrillic", + 0x0444, + "egrave", + 0x00e8, + "egujarati", + 0x0a8f, + "eharmenian", + 0x0567, + "ehbopomofo", + 0x311d, + "ehiragana", + 0x3048, + "ehookabove", + 0x1ebb, + "eibopomofo", + 0x311f, + "eight", + 0x0038, + "eightarabic", + 0x0668, + "eightbengali", + 0x09ee, + "eightcircle", + 0x2467, + "eightcircleinversesansserif", + 0x2791, + "eightdeva", + 0x096e, + "eighteencircle", + 0x2471, + "eighteenparen", + 0x2485, + "eighteenperiod", + 0x2499, + "eightgujarati", + 0x0aee, + "eightgurmukhi", + 0x0a6e, + "eighthackarabic", + 0x0668, + "eighthangzhou", + 0x3028, + "eighthnotebeamed", + 0x266b, + "eightideographicparen", + 0x3227, + "eightinferior", + 0x2088, + "eightmonospace", + 0xff18, + "eightoldstyle", + 0xf738, + "eightparen", + 0x247b, + "eightperiod", + 0x248f, + "eightpersian", + 0x06f8, + "eightroman", + 0x2177, + "eightsuperior", + 0x2078, + "eightthai", + 0x0e58, + "einvertedbreve", + 0x0207, + "eiotifiedcyrillic", + 0x0465, + "ekatakana", + 0x30a8, + "ekatakanahalfwidth", + 0xff74, + "ekonkargurmukhi", + 0x0a74, + "ekorean", + 0x3154, + "elcyrillic", + 0x043b, + "element", + 0x2208, + "elevencircle", + 0x246a, + "elevenparen", + 0x247e, + "elevenperiod", + 0x2492, + "elevenroman", + 0x217a, + "ellipsis", + 0x2026, + "ellipsisvertical", + 0x22ee, + "emacron", + 0x0113, + "emacronacute", + 0x1e17, + "emacrongrave", + 0x1e15, + "emcyrillic", + 0x043c, + "emdash", + 0x2014, + "emdashvertical", + 0xfe31, + "emonospace", + 0xff45, + "emphasismarkarmenian", + 0x055b, + "emptyset", + 0x2205, + "enbopomofo", + 0x3123, + "encyrillic", + 0x043d, + "endash", + 0x2013, + "endashvertical", + 0xfe32, + "endescendercyrillic", + 0x04a3, + "eng", + 0x014b, + "engbopomofo", + 0x3125, + "enghecyrillic", + 0x04a5, + "enhookcyrillic", + 0x04c8, + "enspace", + 0x2002, + "eogonek", + 0x0119, + "eokorean", + 0x3153, + "eopen", + 0x025b, + "eopenclosed", + 0x029a, + "eopenreversed", + 0x025c, + "eopenreversedclosed", + 0x025e, + "eopenreversedhook", + 0x025d, + "eparen", + 0x24a0, + "epsilon", + 0x03b5, + "epsilontonos", + 0x03ad, + "equal", + 0x003d, + "equalmonospace", + 0xff1d, + "equalsmall", + 0xfe66, + "equalsuperior", + 0x207c, + "equivalence", + 0x2261, + "erbopomofo", + 0x3126, + "ercyrillic", + 0x0440, + "ereversed", + 0x0258, + "ereversedcyrillic", + 0x044d, + "escyrillic", + 0x0441, + "esdescendercyrillic", + 0x04ab, + "esh", + 0x0283, + "eshcurl", + 0x0286, + "eshortdeva", + 0x090e, + "eshortvowelsigndeva", + 0x0946, + "eshreversedloop", + 0x01aa, + "eshsquatreversed", + 0x0285, + "esmallhiragana", + 0x3047, + "esmallkatakana", + 0x30a7, + "esmallkatakanahalfwidth", + 0xff6a, + "estimated", + 0x212e, + "esuperior", + 0xf6ec, + "eta", + 0x03b7, + "etarmenian", + 0x0568, + "etatonos", + 0x03ae, + "eth", + 0x00f0, + "etilde", + 0x1ebd, + "etildebelow", + 0x1e1b, + "etnahtafoukhhebrew", + 0x0591, + "etnahtafoukhlefthebrew", + 0x0591, + "etnahtahebrew", + 0x0591, + "etnahtalefthebrew", + 0x0591, + "eturned", + 0x01dd, + "eukorean", + 0x3161, + "euro", + 0x20ac, + "evowelsignbengali", + 0x09c7, + "evowelsigndeva", + 0x0947, + "evowelsigngujarati", + 0x0ac7, + "exclam", + 0x0021, + "exclamarmenian", + 0x055c, + "exclamdbl", + 0x203c, + "exclamdown", + 0x00a1, + "exclamdownsmall", + 0xf7a1, + "exclammonospace", + 0xff01, + "exclamsmall", + 0xf721, + "existential", + 0x2203, + "ezh", + 0x0292, + "ezhcaron", + 0x01ef, + "ezhcurl", + 0x0293, + "ezhreversed", + 0x01b9, + "ezhtail", + 0x01ba, + "f", + 0x0066, + "fadeva", + 0x095e, + "fagurmukhi", + 0x0a5e, + "fahrenheit", + 0x2109, + "fathaarabic", + 0x064e, + "fathalowarabic", + 0x064e, + "fathatanarabic", + 0x064b, + "fbopomofo", + 0x3108, + "fcircle", + 0x24d5, + "fdotaccent", + 0x1e1f, + "feharabic", + 0x0641, + "feharmenian", + 0x0586, + "fehfinalarabic", + 0xfed2, + "fehinitialarabic", + 0xfed3, + "fehmedialarabic", + 0xfed4, + "feicoptic", + 0x03e5, + "female", + 0x2640, + "ff", + 0xfb00, + "f_f", + 0xfb00, + "ffi", + 0xfb03, + "ffl", + 0xfb04, + "fi", + 0xfb01, + "fifteencircle", + 0x246e, + "fifteenparen", + 0x2482, + "fifteenperiod", + 0x2496, + "figuredash", + 0x2012, + "filledbox", + 0x25a0, + "filledrect", + 0x25ac, + "finalkaf", + 0x05da, + "finalkafdagesh", + 0xfb3a, + "finalkafdageshhebrew", + 0xfb3a, + "finalkafhebrew", + 0x05da, + "finalmem", + 0x05dd, + "finalmemhebrew", + 0x05dd, + "finalnun", + 0x05df, + "finalnunhebrew", + 0x05df, + "finalpe", + 0x05e3, + "finalpehebrew", + 0x05e3, + "finaltsadi", + 0x05e5, + "finaltsadihebrew", + 0x05e5, + "firsttonechinese", + 0x02c9, + "fisheye", + 0x25c9, + "fitacyrillic", + 0x0473, + "five", + 0x0035, + "fivearabic", + 0x0665, + "fivebengali", + 0x09eb, + "fivecircle", + 0x2464, + "fivecircleinversesansserif", + 0x278e, + "fivedeva", + 0x096b, + "fiveeighths", + 0x215d, + "fivegujarati", + 0x0aeb, + "fivegurmukhi", + 0x0a6b, + "fivehackarabic", + 0x0665, + "fivehangzhou", + 0x3025, + "fiveideographicparen", + 0x3224, + "fiveinferior", + 0x2085, + "fivemonospace", + 0xff15, + "fiveoldstyle", + 0xf735, + "fiveparen", + 0x2478, + "fiveperiod", + 0x248c, + "fivepersian", + 0x06f5, + "fiveroman", + 0x2174, + "fivesuperior", + 0x2075, + "fivethai", + 0x0e55, + "fl", + 0xfb02, + "florin", + 0x0192, + "fmonospace", + 0xff46, + "fmsquare", + 0x3399, + "fofanthai", + 0x0e1f, + "fofathai", + 0x0e1d, + "fongmanthai", + 0x0e4f, + "forall", + 0x2200, + "four", + 0x0034, + "fourarabic", + 0x0664, + "fourbengali", + 0x09ea, + "fourcircle", + 0x2463, + "fourcircleinversesansserif", + 0x278d, + "fourdeva", + 0x096a, + "fourgujarati", + 0x0aea, + "fourgurmukhi", + 0x0a6a, + "fourhackarabic", + 0x0664, + "fourhangzhou", + 0x3024, + "fourideographicparen", + 0x3223, + "fourinferior", + 0x2084, + "fourmonospace", + 0xff14, + "fournumeratorbengali", + 0x09f7, + "fouroldstyle", + 0xf734, + "fourparen", + 0x2477, + "fourperiod", + 0x248b, + "fourpersian", + 0x06f4, + "fourroman", + 0x2173, + "foursuperior", + 0x2074, + "fourteencircle", + 0x246d, + "fourteenparen", + 0x2481, + "fourteenperiod", + 0x2495, + "fourthai", + 0x0e54, + "fourthtonechinese", + 0x02cb, + "fparen", + 0x24a1, + "fraction", + 0x2044, + "franc", + 0x20a3, + "g", + 0x0067, + "gabengali", + 0x0997, + "gacute", + 0x01f5, + "gadeva", + 0x0917, + "gafarabic", + 0x06af, + "gaffinalarabic", + 0xfb93, + "gafinitialarabic", + 0xfb94, + "gafmedialarabic", + 0xfb95, + "gagujarati", + 0x0a97, + "gagurmukhi", + 0x0a17, + "gahiragana", + 0x304c, + "gakatakana", + 0x30ac, + "gamma", + 0x03b3, + "gammalatinsmall", + 0x0263, + "gammasuperior", + 0x02e0, + "gangiacoptic", + 0x03eb, + "gbopomofo", + 0x310d, + "gbreve", + 0x011f, + "gcaron", + 0x01e7, + "gcedilla", + 0x0123, + "gcircle", + 0x24d6, + "gcircumflex", + 0x011d, + "gcommaaccent", + 0x0123, + "gdot", + 0x0121, + "gdotaccent", + 0x0121, + "gecyrillic", + 0x0433, + "gehiragana", + 0x3052, + "gekatakana", + 0x30b2, + "geometricallyequal", + 0x2251, + "gereshaccenthebrew", + 0x059c, + "gereshhebrew", + 0x05f3, + "gereshmuqdamhebrew", + 0x059d, + "germandbls", + 0x00df, + "gershayimaccenthebrew", + 0x059e, + "gershayimhebrew", + 0x05f4, + "getamark", + 0x3013, + "ghabengali", + 0x0998, + "ghadarmenian", + 0x0572, + "ghadeva", + 0x0918, + "ghagujarati", + 0x0a98, + "ghagurmukhi", + 0x0a18, + "ghainarabic", + 0x063a, + "ghainfinalarabic", + 0xfece, + "ghaininitialarabic", + 0xfecf, + "ghainmedialarabic", + 0xfed0, + "ghemiddlehookcyrillic", + 0x0495, + "ghestrokecyrillic", + 0x0493, + "gheupturncyrillic", + 0x0491, + "ghhadeva", + 0x095a, + "ghhagurmukhi", + 0x0a5a, + "ghook", + 0x0260, + "ghzsquare", + 0x3393, + "gihiragana", + 0x304e, + "gikatakana", + 0x30ae, + "gimarmenian", + 0x0563, + "gimel", + 0x05d2, + "gimeldagesh", + 0xfb32, + "gimeldageshhebrew", + 0xfb32, + "gimelhebrew", + 0x05d2, + "gjecyrillic", + 0x0453, + "glottalinvertedstroke", + 0x01be, + "glottalstop", + 0x0294, + "glottalstopinverted", + 0x0296, + "glottalstopmod", + 0x02c0, + "glottalstopreversed", + 0x0295, + "glottalstopreversedmod", + 0x02c1, + "glottalstopreversedsuperior", + 0x02e4, + "glottalstopstroke", + 0x02a1, + "glottalstopstrokereversed", + 0x02a2, + "gmacron", + 0x1e21, + "gmonospace", + 0xff47, + "gohiragana", + 0x3054, + "gokatakana", + 0x30b4, + "gparen", + 0x24a2, + "gpasquare", + 0x33ac, + "gradient", + 0x2207, + "grave", + 0x0060, + "gravebelowcmb", + 0x0316, + "gravecmb", + 0x0300, + "gravecomb", + 0x0300, + "gravedeva", + 0x0953, + "gravelowmod", + 0x02ce, + "gravemonospace", + 0xff40, + "gravetonecmb", + 0x0340, + "greater", + 0x003e, + "greaterequal", + 0x2265, + "greaterequalorless", + 0x22db, + "greatermonospace", + 0xff1e, + "greaterorequivalent", + 0x2273, + "greaterorless", + 0x2277, + "greateroverequal", + 0x2267, + "greatersmall", + 0xfe65, + "gscript", + 0x0261, + "gstroke", + 0x01e5, + "guhiragana", + 0x3050, + "guillemotleft", + 0x00ab, + "guillemotright", + 0x00bb, + "guilsinglleft", + 0x2039, + "guilsinglright", + 0x203a, + "gukatakana", + 0x30b0, + "guramusquare", + 0x3318, + "gysquare", + 0x33c9, + "h", + 0x0068, + "haabkhasiancyrillic", + 0x04a9, + "haaltonearabic", + 0x06c1, + "habengali", + 0x09b9, + "hadescendercyrillic", + 0x04b3, + "hadeva", + 0x0939, + "hagujarati", + 0x0ab9, + "hagurmukhi", + 0x0a39, + "haharabic", + 0x062d, + "hahfinalarabic", + 0xfea2, + "hahinitialarabic", + 0xfea3, + "hahiragana", + 0x306f, + "hahmedialarabic", + 0xfea4, + "haitusquare", + 0x332a, + "hakatakana", + 0x30cf, + "hakatakanahalfwidth", + 0xff8a, + "halantgurmukhi", + 0x0a4d, + "hamzaarabic", + 0x0621, + "hamzalowarabic", + 0x0621, + "hangulfiller", + 0x3164, + "hardsigncyrillic", + 0x044a, + "harpoonleftbarbup", + 0x21bc, + "harpoonrightbarbup", + 0x21c0, + "hasquare", + 0x33ca, + "hatafpatah", + 0x05b2, + "hatafpatah16", + 0x05b2, + "hatafpatah23", + 0x05b2, + "hatafpatah2f", + 0x05b2, + "hatafpatahhebrew", + 0x05b2, + "hatafpatahnarrowhebrew", + 0x05b2, + "hatafpatahquarterhebrew", + 0x05b2, + "hatafpatahwidehebrew", + 0x05b2, + "hatafqamats", + 0x05b3, + "hatafqamats1b", + 0x05b3, + "hatafqamats28", + 0x05b3, + "hatafqamats34", + 0x05b3, + "hatafqamatshebrew", + 0x05b3, + "hatafqamatsnarrowhebrew", + 0x05b3, + "hatafqamatsquarterhebrew", + 0x05b3, + "hatafqamatswidehebrew", + 0x05b3, + "hatafsegol", + 0x05b1, + "hatafsegol17", + 0x05b1, + "hatafsegol24", + 0x05b1, + "hatafsegol30", + 0x05b1, + "hatafsegolhebrew", + 0x05b1, + "hatafsegolnarrowhebrew", + 0x05b1, + "hatafsegolquarterhebrew", + 0x05b1, + "hatafsegolwidehebrew", + 0x05b1, + "hbar", + 0x0127, + "hbopomofo", + 0x310f, + "hbrevebelow", + 0x1e2b, + "hcedilla", + 0x1e29, + "hcircle", + 0x24d7, + "hcircumflex", + 0x0125, + "hdieresis", + 0x1e27, + "hdotaccent", + 0x1e23, + "hdotbelow", + 0x1e25, + "he", + 0x05d4, + "heart", + 0x2665, + "heartsuitblack", + 0x2665, + "heartsuitwhite", + 0x2661, + "hedagesh", + 0xfb34, + "hedageshhebrew", + 0xfb34, + "hehaltonearabic", + 0x06c1, + "heharabic", + 0x0647, + "hehebrew", + 0x05d4, + "hehfinalaltonearabic", + 0xfba7, + "hehfinalalttwoarabic", + 0xfeea, + "hehfinalarabic", + 0xfeea, + "hehhamzaabovefinalarabic", + 0xfba5, + "hehhamzaaboveisolatedarabic", + 0xfba4, + "hehinitialaltonearabic", + 0xfba8, + "hehinitialarabic", + 0xfeeb, + "hehiragana", + 0x3078, + "hehmedialaltonearabic", + 0xfba9, + "hehmedialarabic", + 0xfeec, + "heiseierasquare", + 0x337b, + "hekatakana", + 0x30d8, + "hekatakanahalfwidth", + 0xff8d, + "hekutaarusquare", + 0x3336, + "henghook", + 0x0267, + "herutusquare", + 0x3339, + "het", + 0x05d7, + "hethebrew", + 0x05d7, + "hhook", + 0x0266, + "hhooksuperior", + 0x02b1, + "hieuhacirclekorean", + 0x327b, + "hieuhaparenkorean", + 0x321b, + "hieuhcirclekorean", + 0x326d, + "hieuhkorean", + 0x314e, + "hieuhparenkorean", + 0x320d, + "hihiragana", + 0x3072, + "hikatakana", + 0x30d2, + "hikatakanahalfwidth", + 0xff8b, + "hiriq", + 0x05b4, + "hiriq14", + 0x05b4, + "hiriq21", + 0x05b4, + "hiriq2d", + 0x05b4, + "hiriqhebrew", + 0x05b4, + "hiriqnarrowhebrew", + 0x05b4, + "hiriqquarterhebrew", + 0x05b4, + "hiriqwidehebrew", + 0x05b4, + "hlinebelow", + 0x1e96, + "hmonospace", + 0xff48, + "hoarmenian", + 0x0570, + "hohipthai", + 0x0e2b, + "hohiragana", + 0x307b, + "hokatakana", + 0x30db, + "hokatakanahalfwidth", + 0xff8e, + "holam", + 0x05b9, + "holam19", + 0x05b9, + "holam26", + 0x05b9, + "holam32", + 0x05b9, + "holamhebrew", + 0x05b9, + "holamnarrowhebrew", + 0x05b9, + "holamquarterhebrew", + 0x05b9, + "holamwidehebrew", + 0x05b9, + "honokhukthai", + 0x0e2e, + "hookabovecomb", + 0x0309, + "hookcmb", + 0x0309, + "hookpalatalizedbelowcmb", + 0x0321, + "hookretroflexbelowcmb", + 0x0322, + "hoonsquare", + 0x3342, + "horicoptic", + 0x03e9, + "horizontalbar", + 0x2015, + "horncmb", + 0x031b, + "hotsprings", + 0x2668, + "house", + 0x2302, + "hparen", + 0x24a3, + "hsuperior", + 0x02b0, + "hturned", + 0x0265, + "huhiragana", + 0x3075, + "huiitosquare", + 0x3333, + "hukatakana", + 0x30d5, + "hukatakanahalfwidth", + 0xff8c, + "hungarumlaut", + 0x02dd, + "hungarumlautcmb", + 0x030b, + "hv", + 0x0195, + "hyphen", + 0x002d, + "hypheninferior", + 0xf6e5, + "hyphenmonospace", + 0xff0d, + "hyphensmall", + 0xfe63, + "hyphensuperior", + 0xf6e6, + "hyphentwo", + 0x2010, + "i", + 0x0069, + "iacute", + 0x00ed, + "iacyrillic", + 0x044f, + "ibengali", + 0x0987, + "ibopomofo", + 0x3127, + "ibreve", + 0x012d, + "icaron", + 0x01d0, + "icircle", + 0x24d8, + "icircumflex", + 0x00ee, + "icyrillic", + 0x0456, + "idblgrave", + 0x0209, + "ideographearthcircle", + 0x328f, + "ideographfirecircle", + 0x328b, + "ideographicallianceparen", + 0x323f, + "ideographiccallparen", + 0x323a, + "ideographiccentrecircle", + 0x32a5, + "ideographicclose", + 0x3006, + "ideographiccomma", + 0x3001, + "ideographiccommaleft", + 0xff64, + "ideographiccongratulationparen", + 0x3237, + "ideographiccorrectcircle", + 0x32a3, + "ideographicearthparen", + 0x322f, + "ideographicenterpriseparen", + 0x323d, + "ideographicexcellentcircle", + 0x329d, + "ideographicfestivalparen", + 0x3240, + "ideographicfinancialcircle", + 0x3296, + "ideographicfinancialparen", + 0x3236, + "ideographicfireparen", + 0x322b, + "ideographichaveparen", + 0x3232, + "ideographichighcircle", + 0x32a4, + "ideographiciterationmark", + 0x3005, + "ideographiclaborcircle", + 0x3298, + "ideographiclaborparen", + 0x3238, + "ideographicleftcircle", + 0x32a7, + "ideographiclowcircle", + 0x32a6, + "ideographicmedicinecircle", + 0x32a9, + "ideographicmetalparen", + 0x322e, + "ideographicmoonparen", + 0x322a, + "ideographicnameparen", + 0x3234, + "ideographicperiod", + 0x3002, + "ideographicprintcircle", + 0x329e, + "ideographicreachparen", + 0x3243, + "ideographicrepresentparen", + 0x3239, + "ideographicresourceparen", + 0x323e, + "ideographicrightcircle", + 0x32a8, + "ideographicsecretcircle", + 0x3299, + "ideographicselfparen", + 0x3242, + "ideographicsocietyparen", + 0x3233, + "ideographicspace", + 0x3000, + "ideographicspecialparen", + 0x3235, + "ideographicstockparen", + 0x3231, + "ideographicstudyparen", + 0x323b, + "ideographicsunparen", + 0x3230, + "ideographicsuperviseparen", + 0x323c, + "ideographicwaterparen", + 0x322c, + "ideographicwoodparen", + 0x322d, + "ideographiczero", + 0x3007, + "ideographmetalcircle", + 0x328e, + "ideographmooncircle", + 0x328a, + "ideographnamecircle", + 0x3294, + "ideographsuncircle", + 0x3290, + "ideographwatercircle", + 0x328c, + "ideographwoodcircle", + 0x328d, + "ideva", + 0x0907, + "idieresis", + 0x00ef, + "idieresisacute", + 0x1e2f, + "idieresiscyrillic", + 0x04e5, + "idotbelow", + 0x1ecb, + "iebrevecyrillic", + 0x04d7, + "iecyrillic", + 0x0435, + "ieungacirclekorean", + 0x3275, + "ieungaparenkorean", + 0x3215, + "ieungcirclekorean", + 0x3267, + "ieungkorean", + 0x3147, + "ieungparenkorean", + 0x3207, + "igrave", + 0x00ec, + "igujarati", + 0x0a87, + "igurmukhi", + 0x0a07, + "ihiragana", + 0x3044, + "ihookabove", + 0x1ec9, + "iibengali", + 0x0988, + "iicyrillic", + 0x0438, + "iideva", + 0x0908, + "iigujarati", + 0x0a88, + "iigurmukhi", + 0x0a08, + "iimatragurmukhi", + 0x0a40, + "iinvertedbreve", + 0x020b, + "iishortcyrillic", + 0x0439, + "iivowelsignbengali", + 0x09c0, + "iivowelsigndeva", + 0x0940, + "iivowelsigngujarati", + 0x0ac0, + "ij", + 0x0133, + "ikatakana", + 0x30a4, + "ikatakanahalfwidth", + 0xff72, + "ikorean", + 0x3163, + "ilde", + 0x02dc, + "iluyhebrew", + 0x05ac, + "imacron", + 0x012b, + "imacroncyrillic", + 0x04e3, + "imageorapproximatelyequal", + 0x2253, + "imatragurmukhi", + 0x0a3f, + "imonospace", + 0xff49, + "increment", + 0x2206, + "infinity", + 0x221e, + "iniarmenian", + 0x056b, + "integral", + 0x222b, + "integralbottom", + 0x2321, + "integralbt", + 0x2321, + "integralex", + 0xf8f5, + "integraltop", + 0x2320, + "integraltp", + 0x2320, + "intersection", + 0x2229, + "intisquare", + 0x3305, + "invbullet", + 0x25d8, + "invcircle", + 0x25d9, + "invsmileface", + 0x263b, + "iocyrillic", + 0x0451, + "iogonek", + 0x012f, + "iota", + 0x03b9, + "iotadieresis", + 0x03ca, + "iotadieresistonos", + 0x0390, + "iotalatin", + 0x0269, + "iotatonos", + 0x03af, + "iparen", + 0x24a4, + "irigurmukhi", + 0x0a72, + "ismallhiragana", + 0x3043, + "ismallkatakana", + 0x30a3, + "ismallkatakanahalfwidth", + 0xff68, + "issharbengali", + 0x09fa, + "istroke", + 0x0268, + "isuperior", + 0xf6ed, + "iterationhiragana", + 0x309d, + "iterationkatakana", + 0x30fd, + "itilde", + 0x0129, + "itildebelow", + 0x1e2d, + "iubopomofo", + 0x3129, + "iucyrillic", + 0x044e, + "ivowelsignbengali", + 0x09bf, + "ivowelsigndeva", + 0x093f, + "ivowelsigngujarati", + 0x0abf, + "izhitsacyrillic", + 0x0475, + "izhitsadblgravecyrillic", + 0x0477, + "j", + 0x006a, + "jaarmenian", + 0x0571, + "jabengali", + 0x099c, + "jadeva", + 0x091c, + "jagujarati", + 0x0a9c, + "jagurmukhi", + 0x0a1c, + "jbopomofo", + 0x3110, + "jcaron", + 0x01f0, + "jcircle", + 0x24d9, + "jcircumflex", + 0x0135, + "jcrossedtail", + 0x029d, + "jdotlessstroke", + 0x025f, + "jecyrillic", + 0x0458, + "jeemarabic", + 0x062c, + "jeemfinalarabic", + 0xfe9e, + "jeeminitialarabic", + 0xfe9f, + "jeemmedialarabic", + 0xfea0, + "jeharabic", + 0x0698, + "jehfinalarabic", + 0xfb8b, + "jhabengali", + 0x099d, + "jhadeva", + 0x091d, + "jhagujarati", + 0x0a9d, + "jhagurmukhi", + 0x0a1d, + "jheharmenian", + 0x057b, + "jis", + 0x3004, + "jmonospace", + 0xff4a, + "jparen", + 0x24a5, + "jsuperior", + 0x02b2, + "k", + 0x006b, + "kabashkircyrillic", + 0x04a1, + "kabengali", + 0x0995, + "kacute", + 0x1e31, + "kacyrillic", + 0x043a, + "kadescendercyrillic", + 0x049b, + "kadeva", + 0x0915, + "kaf", + 0x05db, + "kafarabic", + 0x0643, + "kafdagesh", + 0xfb3b, + "kafdageshhebrew", + 0xfb3b, + "kaffinalarabic", + 0xfeda, + "kafhebrew", + 0x05db, + "kafinitialarabic", + 0xfedb, + "kafmedialarabic", + 0xfedc, + "kafrafehebrew", + 0xfb4d, + "kagujarati", + 0x0a95, + "kagurmukhi", + 0x0a15, + "kahiragana", + 0x304b, + "kahookcyrillic", + 0x04c4, + "kakatakana", + 0x30ab, + "kakatakanahalfwidth", + 0xff76, + "kappa", + 0x03ba, + "kappasymbolgreek", + 0x03f0, + "kapyeounmieumkorean", + 0x3171, + "kapyeounphieuphkorean", + 0x3184, + "kapyeounpieupkorean", + 0x3178, + "kapyeounssangpieupkorean", + 0x3179, + "karoriisquare", + 0x330d, + "kashidaautoarabic", + 0x0640, + "kashidaautonosidebearingarabic", + 0x0640, + "kasmallkatakana", + 0x30f5, + "kasquare", + 0x3384, + "kasraarabic", + 0x0650, + "kasratanarabic", + 0x064d, + "kastrokecyrillic", + 0x049f, + "katahiraprolongmarkhalfwidth", + 0xff70, + "kaverticalstrokecyrillic", + 0x049d, + "kbopomofo", + 0x310e, + "kcalsquare", + 0x3389, + "kcaron", + 0x01e9, + "kcedilla", + 0x0137, + "kcircle", + 0x24da, + "kcommaaccent", + 0x0137, + "kdotbelow", + 0x1e33, + "keharmenian", + 0x0584, + "kehiragana", + 0x3051, + "kekatakana", + 0x30b1, + "kekatakanahalfwidth", + 0xff79, + "kenarmenian", + 0x056f, + "kesmallkatakana", + 0x30f6, + "kgreenlandic", + 0x0138, + "khabengali", + 0x0996, + "khacyrillic", + 0x0445, + "khadeva", + 0x0916, + "khagujarati", + 0x0a96, + "khagurmukhi", + 0x0a16, + "khaharabic", + 0x062e, + "khahfinalarabic", + 0xfea6, + "khahinitialarabic", + 0xfea7, + "khahmedialarabic", + 0xfea8, + "kheicoptic", + 0x03e7, + "khhadeva", + 0x0959, + "khhagurmukhi", + 0x0a59, + "khieukhacirclekorean", + 0x3278, + "khieukhaparenkorean", + 0x3218, + "khieukhcirclekorean", + 0x326a, + "khieukhkorean", + 0x314b, + "khieukhparenkorean", + 0x320a, + "khokhaithai", + 0x0e02, + "khokhonthai", + 0x0e05, + "khokhuatthai", + 0x0e03, + "khokhwaithai", + 0x0e04, + "khomutthai", + 0x0e5b, + "khook", + 0x0199, + "khorakhangthai", + 0x0e06, + "khzsquare", + 0x3391, + "kihiragana", + 0x304d, + "kikatakana", + 0x30ad, + "kikatakanahalfwidth", + 0xff77, + "kiroguramusquare", + 0x3315, + "kiromeetorusquare", + 0x3316, + "kirosquare", + 0x3314, + "kiyeokacirclekorean", + 0x326e, + "kiyeokaparenkorean", + 0x320e, + "kiyeokcirclekorean", + 0x3260, + "kiyeokkorean", + 0x3131, + "kiyeokparenkorean", + 0x3200, + "kiyeoksioskorean", + 0x3133, + "kjecyrillic", + 0x045c, + "klinebelow", + 0x1e35, + "klsquare", + 0x3398, + "kmcubedsquare", + 0x33a6, + "kmonospace", + 0xff4b, + "kmsquaredsquare", + 0x33a2, + "kohiragana", + 0x3053, + "kohmsquare", + 0x33c0, + "kokaithai", + 0x0e01, + "kokatakana", + 0x30b3, + "kokatakanahalfwidth", + 0xff7a, + "kooposquare", + 0x331e, + "koppacyrillic", + 0x0481, + "koreanstandardsymbol", + 0x327f, + "koroniscmb", + 0x0343, + "kparen", + 0x24a6, + "kpasquare", + 0x33aa, + "ksicyrillic", + 0x046f, + "ktsquare", + 0x33cf, + "kturned", + 0x029e, + "kuhiragana", + 0x304f, + "kukatakana", + 0x30af, + "kukatakanahalfwidth", + 0xff78, + "kvsquare", + 0x33b8, + "kwsquare", + 0x33be, + "l", + 0x006c, + "labengali", + 0x09b2, + "lacute", + 0x013a, + "ladeva", + 0x0932, + "lagujarati", + 0x0ab2, + "lagurmukhi", + 0x0a32, + "lakkhangyaothai", + 0x0e45, + "lamaleffinalarabic", + 0xfefc, + "lamalefhamzaabovefinalarabic", + 0xfef8, + "lamalefhamzaaboveisolatedarabic", + 0xfef7, + "lamalefhamzabelowfinalarabic", + 0xfefa, + "lamalefhamzabelowisolatedarabic", + 0xfef9, + "lamalefisolatedarabic", + 0xfefb, + "lamalefmaddaabovefinalarabic", + 0xfef6, + "lamalefmaddaaboveisolatedarabic", + 0xfef5, + "lamarabic", + 0x0644, + "lambda", + 0x03bb, + "lambdastroke", + 0x019b, + "lamed", + 0x05dc, + "lameddagesh", + 0xfb3c, + "lameddageshhebrew", + 0xfb3c, + "lamedhebrew", + 0x05dc, + "lamfinalarabic", + 0xfede, + "lamhahinitialarabic", + 0xfcca, + "laminitialarabic", + 0xfedf, + "lamjeeminitialarabic", + 0xfcc9, + "lamkhahinitialarabic", + 0xfccb, + "lamlamhehisolatedarabic", + 0xfdf2, + "lammedialarabic", + 0xfee0, + "lammeemhahinitialarabic", + 0xfd88, + "lammeeminitialarabic", + 0xfccc, + "largecircle", + 0x25ef, + "lbar", + 0x019a, + "lbelt", + 0x026c, + "lbopomofo", + 0x310c, + "lcaron", + 0x013e, + "lcedilla", + 0x013c, + "lcircle", + 0x24db, + "lcircumflexbelow", + 0x1e3d, + "lcommaaccent", + 0x013c, + "ldot", + 0x0140, + "ldotaccent", + 0x0140, + "ldotbelow", + 0x1e37, + "ldotbelowmacron", + 0x1e39, + "leftangleabovecmb", + 0x031a, + "lefttackbelowcmb", + 0x0318, + "less", + 0x003c, + "lessequal", + 0x2264, + "lessequalorgreater", + 0x22da, + "lessmonospace", + 0xff1c, + "lessorequivalent", + 0x2272, + "lessorgreater", + 0x2276, + "lessoverequal", + 0x2266, + "lesssmall", + 0xfe64, + "lezh", + 0x026e, + "lfblock", + 0x258c, + "lhookretroflex", + 0x026d, + "lira", + 0x20a4, + "liwnarmenian", + 0x056c, + "lj", + 0x01c9, + "ljecyrillic", + 0x0459, + "ll", + 0xf6c0, + "lladeva", + 0x0933, + "llagujarati", + 0x0ab3, + "llinebelow", + 0x1e3b, + "llladeva", + 0x0934, + "llvocalicbengali", + 0x09e1, + "llvocalicdeva", + 0x0961, + "llvocalicvowelsignbengali", + 0x09e3, + "llvocalicvowelsigndeva", + 0x0963, + "lmiddletilde", + 0x026b, + "lmonospace", + 0xff4c, + "lmsquare", + 0x33d0, + "lochulathai", + 0x0e2c, + "logicaland", + 0x2227, + "logicalnot", + 0x00ac, + "logicalnotreversed", + 0x2310, + "logicalor", + 0x2228, + "lolingthai", + 0x0e25, + "longs", + 0x017f, + "lowlinecenterline", + 0xfe4e, + "lowlinecmb", + 0x0332, + "lowlinedashed", + 0xfe4d, + "lozenge", + 0x25ca, + "lparen", + 0x24a7, + "lslash", + 0x0142, + "lsquare", + 0x2113, + "lsuperior", + 0xf6ee, + "ltshade", + 0x2591, + "luthai", + 0x0e26, + "lvocalicbengali", + 0x098c, + "lvocalicdeva", + 0x090c, + "lvocalicvowelsignbengali", + 0x09e2, + "lvocalicvowelsigndeva", + 0x0962, + "lxsquare", + 0x33d3, + "m", + 0x006d, + "mabengali", + 0x09ae, + "macron", + 0x00af, + "macronbelowcmb", + 0x0331, + "macroncmb", + 0x0304, + "macronlowmod", + 0x02cd, + "macronmonospace", + 0xffe3, + "macute", + 0x1e3f, + "madeva", + 0x092e, + "magujarati", + 0x0aae, + "magurmukhi", + 0x0a2e, + "mahapakhhebrew", + 0x05a4, + "mahapakhlefthebrew", + 0x05a4, + "mahiragana", + 0x307e, + "maichattawalowleftthai", + 0xf895, + "maichattawalowrightthai", + 0xf894, + "maichattawathai", + 0x0e4b, + "maichattawaupperleftthai", + 0xf893, + "maieklowleftthai", + 0xf88c, + "maieklowrightthai", + 0xf88b, + "maiekthai", + 0x0e48, + "maiekupperleftthai", + 0xf88a, + "maihanakatleftthai", + 0xf884, + "maihanakatthai", + 0x0e31, + "maitaikhuleftthai", + 0xf889, + "maitaikhuthai", + 0x0e47, + "maitholowleftthai", + 0xf88f, + "maitholowrightthai", + 0xf88e, + "maithothai", + 0x0e49, + "maithoupperleftthai", + 0xf88d, + "maitrilowleftthai", + 0xf892, + "maitrilowrightthai", + 0xf891, + "maitrithai", + 0x0e4a, + "maitriupperleftthai", + 0xf890, + "maiyamokthai", + 0x0e46, + "makatakana", + 0x30de, + "makatakanahalfwidth", + 0xff8f, + "male", + 0x2642, + "mansyonsquare", + 0x3347, + "maqafhebrew", + 0x05be, + "mars", + 0x2642, + "masoracirclehebrew", + 0x05af, + "masquare", + 0x3383, + "mbopomofo", + 0x3107, + "mbsquare", + 0x33d4, + "mcircle", + 0x24dc, + "mcubedsquare", + 0x33a5, + "mdotaccent", + 0x1e41, + "mdotbelow", + 0x1e43, + "meemarabic", + 0x0645, + "meemfinalarabic", + 0xfee2, + "meeminitialarabic", + 0xfee3, + "meemmedialarabic", + 0xfee4, + "meemmeeminitialarabic", + 0xfcd1, + "meemmeemisolatedarabic", + 0xfc48, + "meetorusquare", + 0x334d, + "mehiragana", + 0x3081, + "meizierasquare", + 0x337e, + "mekatakana", + 0x30e1, + "mekatakanahalfwidth", + 0xff92, + "mem", + 0x05de, + "memdagesh", + 0xfb3e, + "memdageshhebrew", + 0xfb3e, + "memhebrew", + 0x05de, + "menarmenian", + 0x0574, + "merkhahebrew", + 0x05a5, + "merkhakefulahebrew", + 0x05a6, + "merkhakefulalefthebrew", + 0x05a6, + "merkhalefthebrew", + 0x05a5, + "mhook", + 0x0271, + "mhzsquare", + 0x3392, + "middledotkatakanahalfwidth", + 0xff65, + "middot", + 0x00b7, + "mieumacirclekorean", + 0x3272, + "mieumaparenkorean", + 0x3212, + "mieumcirclekorean", + 0x3264, + "mieumkorean", + 0x3141, + "mieumpansioskorean", + 0x3170, + "mieumparenkorean", + 0x3204, + "mieumpieupkorean", + 0x316e, + "mieumsioskorean", + 0x316f, + "mihiragana", + 0x307f, + "mikatakana", + 0x30df, + "mikatakanahalfwidth", + 0xff90, + "minus", + 0x2212, + "minusbelowcmb", + 0x0320, + "minuscircle", + 0x2296, + "minusmod", + 0x02d7, + "minusplus", + 0x2213, + "minute", + 0x2032, + "miribaarusquare", + 0x334a, + "mirisquare", + 0x3349, + "mlonglegturned", + 0x0270, + "mlsquare", + 0x3396, + "mmcubedsquare", + 0x33a3, + "mmonospace", + 0xff4d, + "mmsquaredsquare", + 0x339f, + "mohiragana", + 0x3082, + "mohmsquare", + 0x33c1, + "mokatakana", + 0x30e2, + "mokatakanahalfwidth", + 0xff93, + "molsquare", + 0x33d6, + "momathai", + 0x0e21, + "moverssquare", + 0x33a7, + "moverssquaredsquare", + 0x33a8, + "mparen", + 0x24a8, + "mpasquare", + 0x33ab, + "mssquare", + 0x33b3, + "msuperior", + 0xf6ef, + "mturned", + 0x026f, + "mu", + 0x00b5, + "mu1", + 0x00b5, + "muasquare", + 0x3382, + "muchgreater", + 0x226b, + "muchless", + 0x226a, + "mufsquare", + 0x338c, + "mugreek", + 0x03bc, + "mugsquare", + 0x338d, + "muhiragana", + 0x3080, + "mukatakana", + 0x30e0, + "mukatakanahalfwidth", + 0xff91, + "mulsquare", + 0x3395, + "multiply", + 0x00d7, + "mumsquare", + 0x339b, + "munahhebrew", + 0x05a3, + "munahlefthebrew", + 0x05a3, + "musicalnote", + 0x266a, + "musicalnotedbl", + 0x266b, + "musicflatsign", + 0x266d, + "musicsharpsign", + 0x266f, + "mussquare", + 0x33b2, + "muvsquare", + 0x33b6, + "muwsquare", + 0x33bc, + "mvmegasquare", + 0x33b9, + "mvsquare", + 0x33b7, + "mwmegasquare", + 0x33bf, + "mwsquare", + 0x33bd, + "n", + 0x006e, + "nabengali", + 0x09a8, + "nabla", + 0x2207, + "nacute", + 0x0144, + "nadeva", + 0x0928, + "nagujarati", + 0x0aa8, + "nagurmukhi", + 0x0a28, + "nahiragana", + 0x306a, + "nakatakana", + 0x30ca, + "nakatakanahalfwidth", + 0xff85, + "napostrophe", + 0x0149, + "nasquare", + 0x3381, + "nbopomofo", + 0x310b, + "nbspace", + 0x00a0, + "ncaron", + 0x0148, + "ncedilla", + 0x0146, + "ncircle", + 0x24dd, + "ncircumflexbelow", + 0x1e4b, + "ncommaaccent", + 0x0146, + "ndotaccent", + 0x1e45, + "ndotbelow", + 0x1e47, + "nehiragana", + 0x306d, + "nekatakana", + 0x30cd, + "nekatakanahalfwidth", + 0xff88, + "newsheqelsign", + 0x20aa, + "nfsquare", + 0x338b, + "ngabengali", + 0x0999, + "ngadeva", + 0x0919, + "ngagujarati", + 0x0a99, + "ngagurmukhi", + 0x0a19, + "ngonguthai", + 0x0e07, + "nhiragana", + 0x3093, + "nhookleft", + 0x0272, + "nhookretroflex", + 0x0273, + "nieunacirclekorean", + 0x326f, + "nieunaparenkorean", + 0x320f, + "nieuncieuckorean", + 0x3135, + "nieuncirclekorean", + 0x3261, + "nieunhieuhkorean", + 0x3136, + "nieunkorean", + 0x3134, + "nieunpansioskorean", + 0x3168, + "nieunparenkorean", + 0x3201, + "nieunsioskorean", + 0x3167, + "nieuntikeutkorean", + 0x3166, + "nihiragana", + 0x306b, + "nikatakana", + 0x30cb, + "nikatakanahalfwidth", + 0xff86, + "nikhahitleftthai", + 0xf899, + "nikhahitthai", + 0x0e4d, + "nine", + 0x0039, + "ninearabic", + 0x0669, + "ninebengali", + 0x09ef, + "ninecircle", + 0x2468, + "ninecircleinversesansserif", + 0x2792, + "ninedeva", + 0x096f, + "ninegujarati", + 0x0aef, + "ninegurmukhi", + 0x0a6f, + "ninehackarabic", + 0x0669, + "ninehangzhou", + 0x3029, + "nineideographicparen", + 0x3228, + "nineinferior", + 0x2089, + "ninemonospace", + 0xff19, + "nineoldstyle", + 0xf739, + "nineparen", + 0x247c, + "nineperiod", + 0x2490, + "ninepersian", + 0x06f9, + "nineroman", + 0x2178, + "ninesuperior", + 0x2079, + "nineteencircle", + 0x2472, + "nineteenparen", + 0x2486, + "nineteenperiod", + 0x249a, + "ninethai", + 0x0e59, + "nj", + 0x01cc, + "njecyrillic", + 0x045a, + "nkatakana", + 0x30f3, + "nkatakanahalfwidth", + 0xff9d, + "nlegrightlong", + 0x019e, + "nlinebelow", + 0x1e49, + "nmonospace", + 0xff4e, + "nmsquare", + 0x339a, + "nnabengali", + 0x09a3, + "nnadeva", + 0x0923, + "nnagujarati", + 0x0aa3, + "nnagurmukhi", + 0x0a23, + "nnnadeva", + 0x0929, + "nohiragana", + 0x306e, + "nokatakana", + 0x30ce, + "nokatakanahalfwidth", + 0xff89, + "nonbreakingspace", + 0x00a0, + "nonenthai", + 0x0e13, + "nonuthai", + 0x0e19, + "noonarabic", + 0x0646, + "noonfinalarabic", + 0xfee6, + "noonghunnaarabic", + 0x06ba, + "noonghunnafinalarabic", + 0xfb9f, + "nooninitialarabic", + 0xfee7, + "noonjeeminitialarabic", + 0xfcd2, + "noonjeemisolatedarabic", + 0xfc4b, + "noonmedialarabic", + 0xfee8, + "noonmeeminitialarabic", + 0xfcd5, + "noonmeemisolatedarabic", + 0xfc4e, + "noonnoonfinalarabic", + 0xfc8d, + "notcontains", + 0x220c, + "notelement", + 0x2209, + "notelementof", + 0x2209, + "notequal", + 0x2260, + "notgreater", + 0x226f, + "notgreaternorequal", + 0x2271, + "notgreaternorless", + 0x2279, + "notidentical", + 0x2262, + "notless", + 0x226e, + "notlessnorequal", + 0x2270, + "notparallel", + 0x2226, + "notprecedes", + 0x2280, + "notsubset", + 0x2284, + "notsucceeds", + 0x2281, + "notsuperset", + 0x2285, + "nowarmenian", + 0x0576, + "nparen", + 0x24a9, + "nssquare", + 0x33b1, + "nsuperior", + 0x207f, + "ntilde", + 0x00f1, + "nu", + 0x03bd, + "nuhiragana", + 0x306c, + "nukatakana", + 0x30cc, + "nukatakanahalfwidth", + 0xff87, + "nuktabengali", + 0x09bc, + "nuktadeva", + 0x093c, + "nuktagujarati", + 0x0abc, + "nuktagurmukhi", + 0x0a3c, + "numbersign", + 0x0023, + "numbersignmonospace", + 0xff03, + "numbersignsmall", + 0xfe5f, + "numeralsigngreek", + 0x0374, + "numeralsignlowergreek", + 0x0375, + "numero", + 0x2116, + "nun", + 0x05e0, + "nundagesh", + 0xfb40, + "nundageshhebrew", + 0xfb40, + "nunhebrew", + 0x05e0, + "nvsquare", + 0x33b5, + "nwsquare", + 0x33bb, + "nyabengali", + 0x099e, + "nyadeva", + 0x091e, + "nyagujarati", + 0x0a9e, + "nyagurmukhi", + 0x0a1e, + "o", + 0x006f, + "oacute", + 0x00f3, + "oangthai", + 0x0e2d, + "obarred", + 0x0275, + "obarredcyrillic", + 0x04e9, + "obarreddieresiscyrillic", + 0x04eb, + "obengali", + 0x0993, + "obopomofo", + 0x311b, + "obreve", + 0x014f, + "ocandradeva", + 0x0911, + "ocandragujarati", + 0x0a91, + "ocandravowelsigndeva", + 0x0949, + "ocandravowelsigngujarati", + 0x0ac9, + "ocaron", + 0x01d2, + "ocircle", + 0x24de, + "ocircumflex", + 0x00f4, + "ocircumflexacute", + 0x1ed1, + "ocircumflexdotbelow", + 0x1ed9, + "ocircumflexgrave", + 0x1ed3, + "ocircumflexhookabove", + 0x1ed5, + "ocircumflextilde", + 0x1ed7, + "ocyrillic", + 0x043e, + "odblacute", + 0x0151, + "odblgrave", + 0x020d, + "odeva", + 0x0913, + "odieresis", + 0x00f6, + "odieresiscyrillic", + 0x04e7, + "odotbelow", + 0x1ecd, + "oe", + 0x0153, + "oekorean", + 0x315a, + "ogonek", + 0x02db, + "ogonekcmb", + 0x0328, + "ograve", + 0x00f2, + "ogujarati", + 0x0a93, + "oharmenian", + 0x0585, + "ohiragana", + 0x304a, + "ohookabove", + 0x1ecf, + "ohorn", + 0x01a1, + "ohornacute", + 0x1edb, + "ohorndotbelow", + 0x1ee3, + "ohorngrave", + 0x1edd, + "ohornhookabove", + 0x1edf, + "ohorntilde", + 0x1ee1, + "ohungarumlaut", + 0x0151, + "oi", + 0x01a3, + "oinvertedbreve", + 0x020f, + "okatakana", + 0x30aa, + "okatakanahalfwidth", + 0xff75, + "okorean", + 0x3157, + "olehebrew", + 0x05ab, + "omacron", + 0x014d, + "omacronacute", + 0x1e53, + "omacrongrave", + 0x1e51, + "omdeva", + 0x0950, + "omega", + 0x03c9, + "omega1", + 0x03d6, + "omegacyrillic", + 0x0461, + "omegalatinclosed", + 0x0277, + "omegaroundcyrillic", + 0x047b, + "omegatitlocyrillic", + 0x047d, + "omegatonos", + 0x03ce, + "omgujarati", + 0x0ad0, + "omicron", + 0x03bf, + "omicrontonos", + 0x03cc, + "omonospace", + 0xff4f, + "one", + 0x0031, + "onearabic", + 0x0661, + "onebengali", + 0x09e7, + "onecircle", + 0x2460, + "onecircleinversesansserif", + 0x278a, + "onedeva", + 0x0967, + "onedotenleader", + 0x2024, + "oneeighth", + 0x215b, + "onefitted", + 0xf6dc, + "onegujarati", + 0x0ae7, + "onegurmukhi", + 0x0a67, + "onehackarabic", + 0x0661, + "onehalf", + 0x00bd, + "onehangzhou", + 0x3021, + "oneideographicparen", + 0x3220, + "oneinferior", + 0x2081, + "onemonospace", + 0xff11, + "onenumeratorbengali", + 0x09f4, + "oneoldstyle", + 0xf731, + "oneparen", + 0x2474, + "oneperiod", + 0x2488, + "onepersian", + 0x06f1, + "onequarter", + 0x00bc, + "oneroman", + 0x2170, + "onesuperior", + 0x00b9, + "onethai", + 0x0e51, + "onethird", + 0x2153, + "oogonek", + 0x01eb, + "oogonekmacron", + 0x01ed, + "oogurmukhi", + 0x0a13, + "oomatragurmukhi", + 0x0a4b, + "oopen", + 0x0254, + "oparen", + 0x24aa, + "openbullet", + 0x25e6, + "option", + 0x2325, + "ordfeminine", + 0x00aa, + "ordmasculine", + 0x00ba, + "orthogonal", + 0x221f, + "oshortdeva", + 0x0912, + "oshortvowelsigndeva", + 0x094a, + "oslash", + 0x00f8, + "oslashacute", + 0x01ff, + "osmallhiragana", + 0x3049, + "osmallkatakana", + 0x30a9, + "osmallkatakanahalfwidth", + 0xff6b, + "ostrokeacute", + 0x01ff, + "osuperior", + 0xf6f0, + "otcyrillic", + 0x047f, + "otilde", + 0x00f5, + "otildeacute", + 0x1e4d, + "otildedieresis", + 0x1e4f, + "oubopomofo", + 0x3121, + "overline", + 0x203e, + "overlinecenterline", + 0xfe4a, + "overlinecmb", + 0x0305, + "overlinedashed", + 0xfe49, + "overlinedblwavy", + 0xfe4c, + "overlinewavy", + 0xfe4b, + "overscore", + 0x00af, + "ovowelsignbengali", + 0x09cb, + "ovowelsigndeva", + 0x094b, + "ovowelsigngujarati", + 0x0acb, + "p", + 0x0070, + "paampssquare", + 0x3380, + "paasentosquare", + 0x332b, + "pabengali", + 0x09aa, + "pacute", + 0x1e55, + "padeva", + 0x092a, + "pagedown", + 0x21df, + "pageup", + 0x21de, + "pagujarati", + 0x0aaa, + "pagurmukhi", + 0x0a2a, + "pahiragana", + 0x3071, + "paiyannoithai", + 0x0e2f, + "pakatakana", + 0x30d1, + "palatalizationcyrilliccmb", + 0x0484, + "palochkacyrillic", + 0x04c0, + "pansioskorean", + 0x317f, + "paragraph", + 0x00b6, + "parallel", + 0x2225, + "parenleft", + 0x0028, + "parenleftaltonearabic", + 0xfd3e, + "parenleftbt", + 0xf8ed, + "parenleftex", + 0xf8ec, + "parenleftinferior", + 0x208d, + "parenleftmonospace", + 0xff08, + "parenleftsmall", + 0xfe59, + "parenleftsuperior", + 0x207d, + "parenlefttp", + 0xf8eb, + "parenleftvertical", + 0xfe35, + "parenright", + 0x0029, + "parenrightaltonearabic", + 0xfd3f, + "parenrightbt", + 0xf8f8, + "parenrightex", + 0xf8f7, + "parenrightinferior", + 0x208e, + "parenrightmonospace", + 0xff09, + "parenrightsmall", + 0xfe5a, + "parenrightsuperior", + 0x207e, + "parenrighttp", + 0xf8f6, + "parenrightvertical", + 0xfe36, + "partialdiff", + 0x2202, + "paseqhebrew", + 0x05c0, + "pashtahebrew", + 0x0599, + "pasquare", + 0x33a9, + "patah", + 0x05b7, + "patah11", + 0x05b7, + "patah1d", + 0x05b7, + "patah2a", + 0x05b7, + "patahhebrew", + 0x05b7, + "patahnarrowhebrew", + 0x05b7, + "patahquarterhebrew", + 0x05b7, + "patahwidehebrew", + 0x05b7, + "pazerhebrew", + 0x05a1, + "pbopomofo", + 0x3106, + "pcircle", + 0x24df, + "pdotaccent", + 0x1e57, + "pe", + 0x05e4, + "pecyrillic", + 0x043f, + "pedagesh", + 0xfb44, + "pedageshhebrew", + 0xfb44, + "peezisquare", + 0x333b, + "pefinaldageshhebrew", + 0xfb43, + "peharabic", + 0x067e, + "peharmenian", + 0x057a, + "pehebrew", + 0x05e4, + "pehfinalarabic", + 0xfb57, + "pehinitialarabic", + 0xfb58, + "pehiragana", + 0x307a, + "pehmedialarabic", + 0xfb59, + "pekatakana", + 0x30da, + "pemiddlehookcyrillic", + 0x04a7, + "perafehebrew", + 0xfb4e, + "percent", + 0x0025, + "percentarabic", + 0x066a, + "percentmonospace", + 0xff05, + "percentsmall", + 0xfe6a, + "period", + 0x002e, + "periodarmenian", + 0x0589, + "periodcentered", + 0x00b7, + "periodhalfwidth", + 0xff61, + "periodinferior", + 0xf6e7, + "periodmonospace", + 0xff0e, + "periodsmall", + 0xfe52, + "periodsuperior", + 0xf6e8, + "perispomenigreekcmb", + 0x0342, + "perpendicular", + 0x22a5, + "perthousand", + 0x2030, + "peseta", + 0x20a7, + "pfsquare", + 0x338a, + "phabengali", + 0x09ab, + "phadeva", + 0x092b, + "phagujarati", + 0x0aab, + "phagurmukhi", + 0x0a2b, + "phi", + 0x03c6, + "phi1", + 0x03d5, + "phieuphacirclekorean", + 0x327a, + "phieuphaparenkorean", + 0x321a, + "phieuphcirclekorean", + 0x326c, + "phieuphkorean", + 0x314d, + "phieuphparenkorean", + 0x320c, + "philatin", + 0x0278, + "phinthuthai", + 0x0e3a, + "phisymbolgreek", + 0x03d5, + "phook", + 0x01a5, + "phophanthai", + 0x0e1e, + "phophungthai", + 0x0e1c, + "phosamphaothai", + 0x0e20, + "pi", + 0x03c0, + "pieupacirclekorean", + 0x3273, + "pieupaparenkorean", + 0x3213, + "pieupcieuckorean", + 0x3176, + "pieupcirclekorean", + 0x3265, + "pieupkiyeokkorean", + 0x3172, + "pieupkorean", + 0x3142, + "pieupparenkorean", + 0x3205, + "pieupsioskiyeokkorean", + 0x3174, + "pieupsioskorean", + 0x3144, + "pieupsiostikeutkorean", + 0x3175, + "pieupthieuthkorean", + 0x3177, + "pieuptikeutkorean", + 0x3173, + "pihiragana", + 0x3074, + "pikatakana", + 0x30d4, + "pisymbolgreek", + 0x03d6, + "piwrarmenian", + 0x0583, + "plus", + 0x002b, + "plusbelowcmb", + 0x031f, + "pluscircle", + 0x2295, + "plusminus", + 0x00b1, + "plusmod", + 0x02d6, + "plusmonospace", + 0xff0b, + "plussmall", + 0xfe62, + "plussuperior", + 0x207a, + "pmonospace", + 0xff50, + "pmsquare", + 0x33d8, + "pohiragana", + 0x307d, + "pointingindexdownwhite", + 0x261f, + "pointingindexleftwhite", + 0x261c, + "pointingindexrightwhite", + 0x261e, + "pointingindexupwhite", + 0x261d, + "pokatakana", + 0x30dd, + "poplathai", + 0x0e1b, + "postalmark", + 0x3012, + "postalmarkface", + 0x3020, + "pparen", + 0x24ab, + "precedes", + 0x227a, + "prescription", + 0x211e, + "primemod", + 0x02b9, + "primereversed", + 0x2035, + "product", + 0x220f, + "projective", + 0x2305, + "prolongedkana", + 0x30fc, + "propellor", + 0x2318, + "propersubset", + 0x2282, + "propersuperset", + 0x2283, + "proportion", + 0x2237, + "proportional", + 0x221d, + "psi", + 0x03c8, + "psicyrillic", + 0x0471, + "psilipneumatacyrilliccmb", + 0x0486, + "pssquare", + 0x33b0, + "puhiragana", + 0x3077, + "pukatakana", + 0x30d7, + "pvsquare", + 0x33b4, + "pwsquare", + 0x33ba, + "q", + 0x0071, + "qadeva", + 0x0958, + "qadmahebrew", + 0x05a8, + "qafarabic", + 0x0642, + "qaffinalarabic", + 0xfed6, + "qafinitialarabic", + 0xfed7, + "qafmedialarabic", + 0xfed8, + "qamats", + 0x05b8, + "qamats10", + 0x05b8, + "qamats1a", + 0x05b8, + "qamats1c", + 0x05b8, + "qamats27", + 0x05b8, + "qamats29", + 0x05b8, + "qamats33", + 0x05b8, + "qamatsde", + 0x05b8, + "qamatshebrew", + 0x05b8, + "qamatsnarrowhebrew", + 0x05b8, + "qamatsqatanhebrew", + 0x05b8, + "qamatsqatannarrowhebrew", + 0x05b8, + "qamatsqatanquarterhebrew", + 0x05b8, + "qamatsqatanwidehebrew", + 0x05b8, + "qamatsquarterhebrew", + 0x05b8, + "qamatswidehebrew", + 0x05b8, + "qarneyparahebrew", + 0x059f, + "qbopomofo", + 0x3111, + "qcircle", + 0x24e0, + "qhook", + 0x02a0, + "qmonospace", + 0xff51, + "qof", + 0x05e7, + "qofdagesh", + 0xfb47, + "qofdageshhebrew", + 0xfb47, + "qofhebrew", + 0x05e7, + "qparen", + 0x24ac, + "quarternote", + 0x2669, + "qubuts", + 0x05bb, + "qubuts18", + 0x05bb, + "qubuts25", + 0x05bb, + "qubuts31", + 0x05bb, + "qubutshebrew", + 0x05bb, + "qubutsnarrowhebrew", + 0x05bb, + "qubutsquarterhebrew", + 0x05bb, + "qubutswidehebrew", + 0x05bb, + "question", + 0x003f, + "questionarabic", + 0x061f, + "questionarmenian", + 0x055e, + "questiondown", + 0x00bf, + "questiondownsmall", + 0xf7bf, + "questiongreek", + 0x037e, + "questionmonospace", + 0xff1f, + "questionsmall", + 0xf73f, + "quotedbl", + 0x0022, + "quotedblbase", + 0x201e, + "quotedblleft", + 0x201c, + "quotedblmonospace", + 0xff02, + "quotedblprime", + 0x301e, + "quotedblprimereversed", + 0x301d, + "quotedblright", + 0x201d, + "quoteleft", + 0x2018, + "quoteleftreversed", + 0x201b, + "quotereversed", + 0x201b, + "quoteright", + 0x2019, + "quoterightn", + 0x0149, + "quotesinglbase", + 0x201a, + "quotesingle", + 0x0027, + "quotesinglemonospace", + 0xff07, + "r", + 0x0072, + "raarmenian", + 0x057c, + "rabengali", + 0x09b0, + "racute", + 0x0155, + "radeva", + 0x0930, + "radical", + 0x221a, + "radicalex", + 0xf8e5, + "radoverssquare", + 0x33ae, + "radoverssquaredsquare", + 0x33af, + "radsquare", + 0x33ad, + "rafe", + 0x05bf, + "rafehebrew", + 0x05bf, + "ragujarati", + 0x0ab0, + "ragurmukhi", + 0x0a30, + "rahiragana", + 0x3089, + "rakatakana", + 0x30e9, + "rakatakanahalfwidth", + 0xff97, + "ralowerdiagonalbengali", + 0x09f1, + "ramiddlediagonalbengali", + 0x09f0, + "ramshorn", + 0x0264, + "ratio", + 0x2236, + "rbopomofo", + 0x3116, + "rcaron", + 0x0159, + "rcedilla", + 0x0157, + "rcircle", + 0x24e1, + "rcommaaccent", + 0x0157, + "rdblgrave", + 0x0211, + "rdotaccent", + 0x1e59, + "rdotbelow", + 0x1e5b, + "rdotbelowmacron", + 0x1e5d, + "referencemark", + 0x203b, + "reflexsubset", + 0x2286, + "reflexsuperset", + 0x2287, + "registered", + 0x00ae, + "registersans", + 0xf8e8, + "registerserif", + 0xf6da, + "reharabic", + 0x0631, + "reharmenian", + 0x0580, + "rehfinalarabic", + 0xfeae, + "rehiragana", + 0x308c, + "rekatakana", + 0x30ec, + "rekatakanahalfwidth", + 0xff9a, + "resh", + 0x05e8, + "reshdageshhebrew", + 0xfb48, + "reshhebrew", + 0x05e8, + "reversedtilde", + 0x223d, + "reviahebrew", + 0x0597, + "reviamugrashhebrew", + 0x0597, + "revlogicalnot", + 0x2310, + "rfishhook", + 0x027e, + "rfishhookreversed", + 0x027f, + "rhabengali", + 0x09dd, + "rhadeva", + 0x095d, + "rho", + 0x03c1, + "rhook", + 0x027d, + "rhookturned", + 0x027b, + "rhookturnedsuperior", + 0x02b5, + "rhosymbolgreek", + 0x03f1, + "rhotichookmod", + 0x02de, + "rieulacirclekorean", + 0x3271, + "rieulaparenkorean", + 0x3211, + "rieulcirclekorean", + 0x3263, + "rieulhieuhkorean", + 0x3140, + "rieulkiyeokkorean", + 0x313a, + "rieulkiyeoksioskorean", + 0x3169, + "rieulkorean", + 0x3139, + "rieulmieumkorean", + 0x313b, + "rieulpansioskorean", + 0x316c, + "rieulparenkorean", + 0x3203, + "rieulphieuphkorean", + 0x313f, + "rieulpieupkorean", + 0x313c, + "rieulpieupsioskorean", + 0x316b, + "rieulsioskorean", + 0x313d, + "rieulthieuthkorean", + 0x313e, + "rieultikeutkorean", + 0x316a, + "rieulyeorinhieuhkorean", + 0x316d, + "rightangle", + 0x221f, + "righttackbelowcmb", + 0x0319, + "righttriangle", + 0x22bf, + "rihiragana", + 0x308a, + "rikatakana", + 0x30ea, + "rikatakanahalfwidth", + 0xff98, + "ring", + 0x02da, + "ringbelowcmb", + 0x0325, + "ringcmb", + 0x030a, + "ringhalfleft", + 0x02bf, + "ringhalfleftarmenian", + 0x0559, + "ringhalfleftbelowcmb", + 0x031c, + "ringhalfleftcentered", + 0x02d3, + "ringhalfright", + 0x02be, + "ringhalfrightbelowcmb", + 0x0339, + "ringhalfrightcentered", + 0x02d2, + "rinvertedbreve", + 0x0213, + "rittorusquare", + 0x3351, + "rlinebelow", + 0x1e5f, + "rlongleg", + 0x027c, + "rlonglegturned", + 0x027a, + "rmonospace", + 0xff52, + "rohiragana", + 0x308d, + "rokatakana", + 0x30ed, + "rokatakanahalfwidth", + 0xff9b, + "roruathai", + 0x0e23, + "rparen", + 0x24ad, + "rrabengali", + 0x09dc, + "rradeva", + 0x0931, + "rragurmukhi", + 0x0a5c, + "rreharabic", + 0x0691, + "rrehfinalarabic", + 0xfb8d, + "rrvocalicbengali", + 0x09e0, + "rrvocalicdeva", + 0x0960, + "rrvocalicgujarati", + 0x0ae0, + "rrvocalicvowelsignbengali", + 0x09c4, + "rrvocalicvowelsigndeva", + 0x0944, + "rrvocalicvowelsigngujarati", + 0x0ac4, + "rsuperior", + 0xf6f1, + "rtblock", + 0x2590, + "rturned", + 0x0279, + "rturnedsuperior", + 0x02b4, + "ruhiragana", + 0x308b, + "rukatakana", + 0x30eb, + "rukatakanahalfwidth", + 0xff99, + "rupeemarkbengali", + 0x09f2, + "rupeesignbengali", + 0x09f3, + "rupiah", + 0xf6dd, + "ruthai", + 0x0e24, + "rvocalicbengali", + 0x098b, + "rvocalicdeva", + 0x090b, + "rvocalicgujarati", + 0x0a8b, + "rvocalicvowelsignbengali", + 0x09c3, + "rvocalicvowelsigndeva", + 0x0943, + "rvocalicvowelsigngujarati", + 0x0ac3, + "s", + 0x0073, + "sabengali", + 0x09b8, + "sacute", + 0x015b, + "sacutedotaccent", + 0x1e65, + "sadarabic", + 0x0635, + "sadeva", + 0x0938, + "sadfinalarabic", + 0xfeba, + "sadinitialarabic", + 0xfebb, + "sadmedialarabic", + 0xfebc, + "sagujarati", + 0x0ab8, + "sagurmukhi", + 0x0a38, + "sahiragana", + 0x3055, + "sakatakana", + 0x30b5, + "sakatakanahalfwidth", + 0xff7b, + "sallallahoualayhewasallamarabic", + 0xfdfa, + "samekh", + 0x05e1, + "samekhdagesh", + 0xfb41, + "samekhdageshhebrew", + 0xfb41, + "samekhhebrew", + 0x05e1, + "saraaathai", + 0x0e32, + "saraaethai", + 0x0e41, + "saraaimaimalaithai", + 0x0e44, + "saraaimaimuanthai", + 0x0e43, + "saraamthai", + 0x0e33, + "saraathai", + 0x0e30, + "saraethai", + 0x0e40, + "saraiileftthai", + 0xf886, + "saraiithai", + 0x0e35, + "saraileftthai", + 0xf885, + "saraithai", + 0x0e34, + "saraothai", + 0x0e42, + "saraueeleftthai", + 0xf888, + "saraueethai", + 0x0e37, + "saraueleftthai", + 0xf887, + "sarauethai", + 0x0e36, + "sarauthai", + 0x0e38, + "sarauuthai", + 0x0e39, + "sbopomofo", + 0x3119, + "scaron", + 0x0161, + "scarondotaccent", + 0x1e67, + "scedilla", + 0x015f, + "schwa", + 0x0259, + "schwacyrillic", + 0x04d9, + "schwadieresiscyrillic", + 0x04db, + "schwahook", + 0x025a, + "scircle", + 0x24e2, + "scircumflex", + 0x015d, + "scommaaccent", + 0x0219, + "sdotaccent", + 0x1e61, + "sdotbelow", + 0x1e63, + "sdotbelowdotaccent", + 0x1e69, + "seagullbelowcmb", + 0x033c, + "second", + 0x2033, + "secondtonechinese", + 0x02ca, + "section", + 0x00a7, + "seenarabic", + 0x0633, + "seenfinalarabic", + 0xfeb2, + "seeninitialarabic", + 0xfeb3, + "seenmedialarabic", + 0xfeb4, + "segol", + 0x05b6, + "segol13", + 0x05b6, + "segol1f", + 0x05b6, + "segol2c", + 0x05b6, + "segolhebrew", + 0x05b6, + "segolnarrowhebrew", + 0x05b6, + "segolquarterhebrew", + 0x05b6, + "segoltahebrew", + 0x0592, + "segolwidehebrew", + 0x05b6, + "seharmenian", + 0x057d, + "sehiragana", + 0x305b, + "sekatakana", + 0x30bb, + "sekatakanahalfwidth", + 0xff7e, + "semicolon", + 0x003b, + "semicolonarabic", + 0x061b, + "semicolonmonospace", + 0xff1b, + "semicolonsmall", + 0xfe54, + "semivoicedmarkkana", + 0x309c, + "semivoicedmarkkanahalfwidth", + 0xff9f, + "sentisquare", + 0x3322, + "sentosquare", + 0x3323, + "seven", + 0x0037, + "sevenarabic", + 0x0667, + "sevenbengali", + 0x09ed, + "sevencircle", + 0x2466, + "sevencircleinversesansserif", + 0x2790, + "sevendeva", + 0x096d, + "seveneighths", + 0x215e, + "sevengujarati", + 0x0aed, + "sevengurmukhi", + 0x0a6d, + "sevenhackarabic", + 0x0667, + "sevenhangzhou", + 0x3027, + "sevenideographicparen", + 0x3226, + "seveninferior", + 0x2087, + "sevenmonospace", + 0xff17, + "sevenoldstyle", + 0xf737, + "sevenparen", + 0x247a, + "sevenperiod", + 0x248e, + "sevenpersian", + 0x06f7, + "sevenroman", + 0x2176, + "sevensuperior", + 0x2077, + "seventeencircle", + 0x2470, + "seventeenparen", + 0x2484, + "seventeenperiod", + 0x2498, + "seventhai", + 0x0e57, + "sfthyphen", + 0x00ad, + "shaarmenian", + 0x0577, + "shabengali", + 0x09b6, + "shacyrillic", + 0x0448, + "shaddaarabic", + 0x0651, + "shaddadammaarabic", + 0xfc61, + "shaddadammatanarabic", + 0xfc5e, + "shaddafathaarabic", + 0xfc60, + "shaddakasraarabic", + 0xfc62, + "shaddakasratanarabic", + 0xfc5f, + "shade", + 0x2592, + "shadedark", + 0x2593, + "shadelight", + 0x2591, + "shademedium", + 0x2592, + "shadeva", + 0x0936, + "shagujarati", + 0x0ab6, + "shagurmukhi", + 0x0a36, + "shalshelethebrew", + 0x0593, + "shbopomofo", + 0x3115, + "shchacyrillic", + 0x0449, + "sheenarabic", + 0x0634, + "sheenfinalarabic", + 0xfeb6, + "sheeninitialarabic", + 0xfeb7, + "sheenmedialarabic", + 0xfeb8, + "sheicoptic", + 0x03e3, + "sheqel", + 0x20aa, + "sheqelhebrew", + 0x20aa, + "sheva", + 0x05b0, + "sheva115", + 0x05b0, + "sheva15", + 0x05b0, + "sheva22", + 0x05b0, + "sheva2e", + 0x05b0, + "shevahebrew", + 0x05b0, + "shevanarrowhebrew", + 0x05b0, + "shevaquarterhebrew", + 0x05b0, + "shevawidehebrew", + 0x05b0, + "shhacyrillic", + 0x04bb, + "shimacoptic", + 0x03ed, + "shin", + 0x05e9, + "shindagesh", + 0xfb49, + "shindageshhebrew", + 0xfb49, + "shindageshshindot", + 0xfb2c, + "shindageshshindothebrew", + 0xfb2c, + "shindageshsindot", + 0xfb2d, + "shindageshsindothebrew", + 0xfb2d, + "shindothebrew", + 0x05c1, + "shinhebrew", + 0x05e9, + "shinshindot", + 0xfb2a, + "shinshindothebrew", + 0xfb2a, + "shinsindot", + 0xfb2b, + "shinsindothebrew", + 0xfb2b, + "shook", + 0x0282, + "sigma", + 0x03c3, + "sigma1", + 0x03c2, + "sigmafinal", + 0x03c2, + "sigmalunatesymbolgreek", + 0x03f2, + "sihiragana", + 0x3057, + "sikatakana", + 0x30b7, + "sikatakanahalfwidth", + 0xff7c, + "siluqhebrew", + 0x05bd, + "siluqlefthebrew", + 0x05bd, + "similar", + 0x223c, + "sindothebrew", + 0x05c2, + "siosacirclekorean", + 0x3274, + "siosaparenkorean", + 0x3214, + "sioscieuckorean", + 0x317e, + "sioscirclekorean", + 0x3266, + "sioskiyeokkorean", + 0x317a, + "sioskorean", + 0x3145, + "siosnieunkorean", + 0x317b, + "siosparenkorean", + 0x3206, + "siospieupkorean", + 0x317d, + "siostikeutkorean", + 0x317c, + "six", + 0x0036, + "sixarabic", + 0x0666, + "sixbengali", + 0x09ec, + "sixcircle", + 0x2465, + "sixcircleinversesansserif", + 0x278f, + "sixdeva", + 0x096c, + "sixgujarati", + 0x0aec, + "sixgurmukhi", + 0x0a6c, + "sixhackarabic", + 0x0666, + "sixhangzhou", + 0x3026, + "sixideographicparen", + 0x3225, + "sixinferior", + 0x2086, + "sixmonospace", + 0xff16, + "sixoldstyle", + 0xf736, + "sixparen", + 0x2479, + "sixperiod", + 0x248d, + "sixpersian", + 0x06f6, + "sixroman", + 0x2175, + "sixsuperior", + 0x2076, + "sixteencircle", + 0x246f, + "sixteencurrencydenominatorbengali", + 0x09f9, + "sixteenparen", + 0x2483, + "sixteenperiod", + 0x2497, + "sixthai", + 0x0e56, + "slash", + 0x002f, + "slashmonospace", + 0xff0f, + "slong", + 0x017f, + "slongdotaccent", + 0x1e9b, + "smileface", + 0x263a, + "smonospace", + 0xff53, + "sofpasuqhebrew", + 0x05c3, + "softhyphen", + 0x00ad, + "softsigncyrillic", + 0x044c, + "sohiragana", + 0x305d, + "sokatakana", + 0x30bd, + "sokatakanahalfwidth", + 0xff7f, + "soliduslongoverlaycmb", + 0x0338, + "solidusshortoverlaycmb", + 0x0337, + "sorusithai", + 0x0e29, + "sosalathai", + 0x0e28, + "sosothai", + 0x0e0b, + "sosuathai", + 0x0e2a, + "space", + 0x0020, + "spacehackarabic", + 0x0020, + "spade", + 0x2660, + "spadesuitblack", + 0x2660, + "spadesuitwhite", + 0x2664, + "sparen", + 0x24ae, + "squarebelowcmb", + 0x033b, + "squarecc", + 0x33c4, + "squarecm", + 0x339d, + "squarediagonalcrosshatchfill", + 0x25a9, + "squarehorizontalfill", + 0x25a4, + "squarekg", + 0x338f, + "squarekm", + 0x339e, + "squarekmcapital", + 0x33ce, + "squareln", + 0x33d1, + "squarelog", + 0x33d2, + "squaremg", + 0x338e, + "squaremil", + 0x33d5, + "squaremm", + 0x339c, + "squaremsquared", + 0x33a1, + "squareorthogonalcrosshatchfill", + 0x25a6, + "squareupperlefttolowerrightfill", + 0x25a7, + "squareupperrighttolowerleftfill", + 0x25a8, + "squareverticalfill", + 0x25a5, + "squarewhitewithsmallblack", + 0x25a3, + "srsquare", + 0x33db, + "ssabengali", + 0x09b7, + "ssadeva", + 0x0937, + "ssagujarati", + 0x0ab7, + "ssangcieuckorean", + 0x3149, + "ssanghieuhkorean", + 0x3185, + "ssangieungkorean", + 0x3180, + "ssangkiyeokkorean", + 0x3132, + "ssangnieunkorean", + 0x3165, + "ssangpieupkorean", + 0x3143, + "ssangsioskorean", + 0x3146, + "ssangtikeutkorean", + 0x3138, + "ssuperior", + 0xf6f2, + "sterling", + 0x00a3, + "sterlingmonospace", + 0xffe1, + "strokelongoverlaycmb", + 0x0336, + "strokeshortoverlaycmb", + 0x0335, + "subset", + 0x2282, + "subsetnotequal", + 0x228a, + "subsetorequal", + 0x2286, + "succeeds", + 0x227b, + "suchthat", + 0x220b, + "suhiragana", + 0x3059, + "sukatakana", + 0x30b9, + "sukatakanahalfwidth", + 0xff7d, + "sukunarabic", + 0x0652, + "summation", + 0x2211, + "sun", + 0x263c, + "superset", + 0x2283, + "supersetnotequal", + 0x228b, + "supersetorequal", + 0x2287, + "svsquare", + 0x33dc, + "syouwaerasquare", + 0x337c, + "t", + 0x0074, + "tabengali", + 0x09a4, + "tackdown", + 0x22a4, + "tackleft", + 0x22a3, + "tadeva", + 0x0924, + "tagujarati", + 0x0aa4, + "tagurmukhi", + 0x0a24, + "taharabic", + 0x0637, + "tahfinalarabic", + 0xfec2, + "tahinitialarabic", + 0xfec3, + "tahiragana", + 0x305f, + "tahmedialarabic", + 0xfec4, + "taisyouerasquare", + 0x337d, + "takatakana", + 0x30bf, + "takatakanahalfwidth", + 0xff80, + "tatweelarabic", + 0x0640, + "tau", + 0x03c4, + "tav", + 0x05ea, + "tavdages", + 0xfb4a, + "tavdagesh", + 0xfb4a, + "tavdageshhebrew", + 0xfb4a, + "tavhebrew", + 0x05ea, + "tbar", + 0x0167, + "tbopomofo", + 0x310a, + "tcaron", + 0x0165, + "tccurl", + 0x02a8, + "tcedilla", + 0x0163, + "tcheharabic", + 0x0686, + "tchehfinalarabic", + 0xfb7b, + "tchehinitialarabic", + 0xfb7c, + "tchehmedialarabic", + 0xfb7d, + "tcircle", + 0x24e3, + "tcircumflexbelow", + 0x1e71, + "tcommaaccent", + 0x0163, + "tdieresis", + 0x1e97, + "tdotaccent", + 0x1e6b, + "tdotbelow", + 0x1e6d, + "tecyrillic", + 0x0442, + "tedescendercyrillic", + 0x04ad, + "teharabic", + 0x062a, + "tehfinalarabic", + 0xfe96, + "tehhahinitialarabic", + 0xfca2, + "tehhahisolatedarabic", + 0xfc0c, + "tehinitialarabic", + 0xfe97, + "tehiragana", + 0x3066, + "tehjeeminitialarabic", + 0xfca1, + "tehjeemisolatedarabic", + 0xfc0b, + "tehmarbutaarabic", + 0x0629, + "tehmarbutafinalarabic", + 0xfe94, + "tehmedialarabic", + 0xfe98, + "tehmeeminitialarabic", + 0xfca4, + "tehmeemisolatedarabic", + 0xfc0e, + "tehnoonfinalarabic", + 0xfc73, + "tekatakana", + 0x30c6, + "tekatakanahalfwidth", + 0xff83, + "telephone", + 0x2121, + "telephoneblack", + 0x260e, + "telishagedolahebrew", + 0x05a0, + "telishaqetanahebrew", + 0x05a9, + "tencircle", + 0x2469, + "tenideographicparen", + 0x3229, + "tenparen", + 0x247d, + "tenperiod", + 0x2491, + "tenroman", + 0x2179, + "tesh", + 0x02a7, + "tet", + 0x05d8, + "tetdagesh", + 0xfb38, + "tetdageshhebrew", + 0xfb38, + "tethebrew", + 0x05d8, + "tetsecyrillic", + 0x04b5, + "tevirhebrew", + 0x059b, + "tevirlefthebrew", + 0x059b, + "thabengali", + 0x09a5, + "thadeva", + 0x0925, + "thagujarati", + 0x0aa5, + "thagurmukhi", + 0x0a25, + "thalarabic", + 0x0630, + "thalfinalarabic", + 0xfeac, + "thanthakhatlowleftthai", + 0xf898, + "thanthakhatlowrightthai", + 0xf897, + "thanthakhatthai", + 0x0e4c, + "thanthakhatupperleftthai", + 0xf896, + "theharabic", + 0x062b, + "thehfinalarabic", + 0xfe9a, + "thehinitialarabic", + 0xfe9b, + "thehmedialarabic", + 0xfe9c, + "thereexists", + 0x2203, + "therefore", + 0x2234, + "theta", + 0x03b8, + "theta1", + 0x03d1, + "thetasymbolgreek", + 0x03d1, + "thieuthacirclekorean", + 0x3279, + "thieuthaparenkorean", + 0x3219, + "thieuthcirclekorean", + 0x326b, + "thieuthkorean", + 0x314c, + "thieuthparenkorean", + 0x320b, + "thirteencircle", + 0x246c, + "thirteenparen", + 0x2480, + "thirteenperiod", + 0x2494, + "thonangmonthothai", + 0x0e11, + "thook", + 0x01ad, + "thophuthaothai", + 0x0e12, + "thorn", + 0x00fe, + "thothahanthai", + 0x0e17, + "thothanthai", + 0x0e10, + "thothongthai", + 0x0e18, + "thothungthai", + 0x0e16, + "thousandcyrillic", + 0x0482, + "thousandsseparatorarabic", + 0x066c, + "thousandsseparatorpersian", + 0x066c, + "three", + 0x0033, + "threearabic", + 0x0663, + "threebengali", + 0x09e9, + "threecircle", + 0x2462, + "threecircleinversesansserif", + 0x278c, + "threedeva", + 0x0969, + "threeeighths", + 0x215c, + "threegujarati", + 0x0ae9, + "threegurmukhi", + 0x0a69, + "threehackarabic", + 0x0663, + "threehangzhou", + 0x3023, + "threeideographicparen", + 0x3222, + "threeinferior", + 0x2083, + "threemonospace", + 0xff13, + "threenumeratorbengali", + 0x09f6, + "threeoldstyle", + 0xf733, + "threeparen", + 0x2476, + "threeperiod", + 0x248a, + "threepersian", + 0x06f3, + "threequarters", + 0x00be, + "threequartersemdash", + 0xf6de, + "threeroman", + 0x2172, + "threesuperior", + 0x00b3, + "threethai", + 0x0e53, + "thzsquare", + 0x3394, + "tihiragana", + 0x3061, + "tikatakana", + 0x30c1, + "tikatakanahalfwidth", + 0xff81, + "tikeutacirclekorean", + 0x3270, + "tikeutaparenkorean", + 0x3210, + "tikeutcirclekorean", + 0x3262, + "tikeutkorean", + 0x3137, + "tikeutparenkorean", + 0x3202, + "tilde", + 0x02dc, + "tildebelowcmb", + 0x0330, + "tildecmb", + 0x0303, + "tildecomb", + 0x0303, + "tildedoublecmb", + 0x0360, + "tildeoperator", + 0x223c, + "tildeoverlaycmb", + 0x0334, + "tildeverticalcmb", + 0x033e, + "timescircle", + 0x2297, + "tipehahebrew", + 0x0596, + "tipehalefthebrew", + 0x0596, + "tippigurmukhi", + 0x0a70, + "titlocyrilliccmb", + 0x0483, + "tiwnarmenian", + 0x057f, + "tlinebelow", + 0x1e6f, + "tmonospace", + 0xff54, + "toarmenian", + 0x0569, + "tohiragana", + 0x3068, + "tokatakana", + 0x30c8, + "tokatakanahalfwidth", + 0xff84, + "tonebarextrahighmod", + 0x02e5, + "tonebarextralowmod", + 0x02e9, + "tonebarhighmod", + 0x02e6, + "tonebarlowmod", + 0x02e8, + "tonebarmidmod", + 0x02e7, + "tonefive", + 0x01bd, + "tonesix", + 0x0185, + "tonetwo", + 0x01a8, + "tonos", + 0x0384, + "tonsquare", + 0x3327, + "topatakthai", + 0x0e0f, + "tortoiseshellbracketleft", + 0x3014, + "tortoiseshellbracketleftsmall", + 0xfe5d, + "tortoiseshellbracketleftvertical", + 0xfe39, + "tortoiseshellbracketright", + 0x3015, + "tortoiseshellbracketrightsmall", + 0xfe5e, + "tortoiseshellbracketrightvertical", + 0xfe3a, + "totaothai", + 0x0e15, + "tpalatalhook", + 0x01ab, + "tparen", + 0x24af, + "trademark", + 0x2122, + "trademarksans", + 0xf8ea, + "trademarkserif", + 0xf6db, + "tretroflexhook", + 0x0288, + "triagdn", + 0x25bc, + "triaglf", + 0x25c4, + "triagrt", + 0x25ba, + "triagup", + 0x25b2, + "ts", + 0x02a6, + "tsadi", + 0x05e6, + "tsadidagesh", + 0xfb46, + "tsadidageshhebrew", + 0xfb46, + "tsadihebrew", + 0x05e6, + "tsecyrillic", + 0x0446, + "tsere", + 0x05b5, + "tsere12", + 0x05b5, + "tsere1e", + 0x05b5, + "tsere2b", + 0x05b5, + "tserehebrew", + 0x05b5, + "tserenarrowhebrew", + 0x05b5, + "tserequarterhebrew", + 0x05b5, + "tserewidehebrew", + 0x05b5, + "tshecyrillic", + 0x045b, + "tsuperior", + 0xf6f3, + "ttabengali", + 0x099f, + "ttadeva", + 0x091f, + "ttagujarati", + 0x0a9f, + "ttagurmukhi", + 0x0a1f, + "tteharabic", + 0x0679, + "ttehfinalarabic", + 0xfb67, + "ttehinitialarabic", + 0xfb68, + "ttehmedialarabic", + 0xfb69, + "tthabengali", + 0x09a0, + "tthadeva", + 0x0920, + "tthagujarati", + 0x0aa0, + "tthagurmukhi", + 0x0a20, + "tturned", + 0x0287, + "tuhiragana", + 0x3064, + "tukatakana", + 0x30c4, + "tukatakanahalfwidth", + 0xff82, + "tusmallhiragana", + 0x3063, + "tusmallkatakana", + 0x30c3, + "tusmallkatakanahalfwidth", + 0xff6f, + "twelvecircle", + 0x246b, + "twelveparen", + 0x247f, + "twelveperiod", + 0x2493, + "twelveroman", + 0x217b, + "twentycircle", + 0x2473, + "twentyhangzhou", + 0x5344, + "twentyparen", + 0x2487, + "twentyperiod", + 0x249b, + "two", + 0x0032, + "twoarabic", + 0x0662, + "twobengali", + 0x09e8, + "twocircle", + 0x2461, + "twocircleinversesansserif", + 0x278b, + "twodeva", + 0x0968, + "twodotenleader", + 0x2025, + "twodotleader", + 0x2025, + "twodotleadervertical", + 0xfe30, + "twogujarati", + 0x0ae8, + "twogurmukhi", + 0x0a68, + "twohackarabic", + 0x0662, + "twohangzhou", + 0x3022, + "twoideographicparen", + 0x3221, + "twoinferior", + 0x2082, + "twomonospace", + 0xff12, + "twonumeratorbengali", + 0x09f5, + "twooldstyle", + 0xf732, + "twoparen", + 0x2475, + "twoperiod", + 0x2489, + "twopersian", + 0x06f2, + "tworoman", + 0x2171, + "twostroke", + 0x01bb, + "twosuperior", + 0x00b2, + "twothai", + 0x0e52, + "twothirds", + 0x2154, + "u", + 0x0075, + "uacute", + 0x00fa, + "ubar", + 0x0289, + "ubengali", + 0x0989, + "ubopomofo", + 0x3128, + "ubreve", + 0x016d, + "ucaron", + 0x01d4, + "ucircle", + 0x24e4, + "ucircumflex", + 0x00fb, + "ucircumflexbelow", + 0x1e77, + "ucyrillic", + 0x0443, + "udattadeva", + 0x0951, + "udblacute", + 0x0171, + "udblgrave", + 0x0215, + "udeva", + 0x0909, + "udieresis", + 0x00fc, + "udieresisacute", + 0x01d8, + "udieresisbelow", + 0x1e73, + "udieresiscaron", + 0x01da, + "udieresiscyrillic", + 0x04f1, + "udieresisgrave", + 0x01dc, + "udieresismacron", + 0x01d6, + "udotbelow", + 0x1ee5, + "ugrave", + 0x00f9, + "ugujarati", + 0x0a89, + "ugurmukhi", + 0x0a09, + "uhiragana", + 0x3046, + "uhookabove", + 0x1ee7, + "uhorn", + 0x01b0, + "uhornacute", + 0x1ee9, + "uhorndotbelow", + 0x1ef1, + "uhorngrave", + 0x1eeb, + "uhornhookabove", + 0x1eed, + "uhorntilde", + 0x1eef, + "uhungarumlaut", + 0x0171, + "uhungarumlautcyrillic", + 0x04f3, + "uinvertedbreve", + 0x0217, + "ukatakana", + 0x30a6, + "ukatakanahalfwidth", + 0xff73, + "ukcyrillic", + 0x0479, + "ukorean", + 0x315c, + "umacron", + 0x016b, + "umacroncyrillic", + 0x04ef, + "umacrondieresis", + 0x1e7b, + "umatragurmukhi", + 0x0a41, + "umonospace", + 0xff55, + "underscore", + 0x005f, + "underscoredbl", + 0x2017, + "underscoremonospace", + 0xff3f, + "underscorevertical", + 0xfe33, + "underscorewavy", + 0xfe4f, + "union", + 0x222a, + "universal", + 0x2200, + "uogonek", + 0x0173, + "uparen", + 0x24b0, + "upblock", + 0x2580, + "upperdothebrew", + 0x05c4, + "upsilon", + 0x03c5, + "upsilondieresis", + 0x03cb, + "upsilondieresistonos", + 0x03b0, + "upsilonlatin", + 0x028a, + "upsilontonos", + 0x03cd, + "uptackbelowcmb", + 0x031d, + "uptackmod", + 0x02d4, + "uragurmukhi", + 0x0a73, + "uring", + 0x016f, + "ushortcyrillic", + 0x045e, + "usmallhiragana", + 0x3045, + "usmallkatakana", + 0x30a5, + "usmallkatakanahalfwidth", + 0xff69, + "ustraightcyrillic", + 0x04af, + "ustraightstrokecyrillic", + 0x04b1, + "utilde", + 0x0169, + "utildeacute", + 0x1e79, + "utildebelow", + 0x1e75, + "uubengali", + 0x098a, + "uudeva", + 0x090a, + "uugujarati", + 0x0a8a, + "uugurmukhi", + 0x0a0a, + "uumatragurmukhi", + 0x0a42, + "uuvowelsignbengali", + 0x09c2, + "uuvowelsigndeva", + 0x0942, + "uuvowelsigngujarati", + 0x0ac2, + "uvowelsignbengali", + 0x09c1, + "uvowelsigndeva", + 0x0941, + "uvowelsigngujarati", + 0x0ac1, + "v", + 0x0076, + "vadeva", + 0x0935, + "vagujarati", + 0x0ab5, + "vagurmukhi", + 0x0a35, + "vakatakana", + 0x30f7, + "vav", + 0x05d5, + "vavdagesh", + 0xfb35, + "vavdagesh65", + 0xfb35, + "vavdageshhebrew", + 0xfb35, + "vavhebrew", + 0x05d5, + "vavholam", + 0xfb4b, + "vavholamhebrew", + 0xfb4b, + "vavvavhebrew", + 0x05f0, + "vavyodhebrew", + 0x05f1, + "vcircle", + 0x24e5, + "vdotbelow", + 0x1e7f, + "vecyrillic", + 0x0432, + "veharabic", + 0x06a4, + "vehfinalarabic", + 0xfb6b, + "vehinitialarabic", + 0xfb6c, + "vehmedialarabic", + 0xfb6d, + "vekatakana", + 0x30f9, + "venus", + 0x2640, + "verticalbar", + 0x007c, + "verticallineabovecmb", + 0x030d, + "verticallinebelowcmb", + 0x0329, + "verticallinelowmod", + 0x02cc, + "verticallinemod", + 0x02c8, + "vewarmenian", + 0x057e, + "vhook", + 0x028b, + "vikatakana", + 0x30f8, + "viramabengali", + 0x09cd, + "viramadeva", + 0x094d, + "viramagujarati", + 0x0acd, + "visargabengali", + 0x0983, + "visargadeva", + 0x0903, + "visargagujarati", + 0x0a83, + "vmonospace", + 0xff56, + "voarmenian", + 0x0578, + "voicediterationhiragana", + 0x309e, + "voicediterationkatakana", + 0x30fe, + "voicedmarkkana", + 0x309b, + "voicedmarkkanahalfwidth", + 0xff9e, + "vokatakana", + 0x30fa, + "vparen", + 0x24b1, + "vtilde", + 0x1e7d, + "vturned", + 0x028c, + "vuhiragana", + 0x3094, + "vukatakana", + 0x30f4, + "w", + 0x0077, + "wacute", + 0x1e83, + "waekorean", + 0x3159, + "wahiragana", + 0x308f, + "wakatakana", + 0x30ef, + "wakatakanahalfwidth", + 0xff9c, + "wakorean", + 0x3158, + "wasmallhiragana", + 0x308e, + "wasmallkatakana", + 0x30ee, + "wattosquare", + 0x3357, + "wavedash", + 0x301c, + "wavyunderscorevertical", + 0xfe34, + "wawarabic", + 0x0648, + "wawfinalarabic", + 0xfeee, + "wawhamzaabovearabic", + 0x0624, + "wawhamzaabovefinalarabic", + 0xfe86, + "wbsquare", + 0x33dd, + "wcircle", + 0x24e6, + "wcircumflex", + 0x0175, + "wdieresis", + 0x1e85, + "wdotaccent", + 0x1e87, + "wdotbelow", + 0x1e89, + "wehiragana", + 0x3091, + "weierstrass", + 0x2118, + "wekatakana", + 0x30f1, + "wekorean", + 0x315e, + "weokorean", + 0x315d, + "wgrave", + 0x1e81, + "whitebullet", + 0x25e6, + "whitecircle", + 0x25cb, + "whitecircleinverse", + 0x25d9, + "whitecornerbracketleft", + 0x300e, + "whitecornerbracketleftvertical", + 0xfe43, + "whitecornerbracketright", + 0x300f, + "whitecornerbracketrightvertical", + 0xfe44, + "whitediamond", + 0x25c7, + "whitediamondcontainingblacksmalldiamond", + 0x25c8, + "whitedownpointingsmalltriangle", + 0x25bf, + "whitedownpointingtriangle", + 0x25bd, + "whiteleftpointingsmalltriangle", + 0x25c3, + "whiteleftpointingtriangle", + 0x25c1, + "whitelenticularbracketleft", + 0x3016, + "whitelenticularbracketright", + 0x3017, + "whiterightpointingsmalltriangle", + 0x25b9, + "whiterightpointingtriangle", + 0x25b7, + "whitesmallsquare", + 0x25ab, + "whitesmilingface", + 0x263a, + "whitesquare", + 0x25a1, + "whitestar", + 0x2606, + "whitetelephone", + 0x260f, + "whitetortoiseshellbracketleft", + 0x3018, + "whitetortoiseshellbracketright", + 0x3019, + "whiteuppointingsmalltriangle", + 0x25b5, + "whiteuppointingtriangle", + 0x25b3, + "wihiragana", + 0x3090, + "wikatakana", + 0x30f0, + "wikorean", + 0x315f, + "wmonospace", + 0xff57, + "wohiragana", + 0x3092, + "wokatakana", + 0x30f2, + "wokatakanahalfwidth", + 0xff66, + "won", + 0x20a9, + "wonmonospace", + 0xffe6, + "wowaenthai", + 0x0e27, + "wparen", + 0x24b2, + "wring", + 0x1e98, + "wsuperior", + 0x02b7, + "wturned", + 0x028d, + "wynn", + 0x01bf, + "x", + 0x0078, + "xabovecmb", + 0x033d, + "xbopomofo", + 0x3112, + "xcircle", + 0x24e7, + "xdieresis", + 0x1e8d, + "xdotaccent", + 0x1e8b, + "xeharmenian", + 0x056d, + "xi", + 0x03be, + "xmonospace", + 0xff58, + "xparen", + 0x24b3, + "xsuperior", + 0x02e3, + "y", + 0x0079, + "yaadosquare", + 0x334e, + "yabengali", + 0x09af, + "yacute", + 0x00fd, + "yadeva", + 0x092f, + "yaekorean", + 0x3152, + "yagujarati", + 0x0aaf, + "yagurmukhi", + 0x0a2f, + "yahiragana", + 0x3084, + "yakatakana", + 0x30e4, + "yakatakanahalfwidth", + 0xff94, + "yakorean", + 0x3151, + "yamakkanthai", + 0x0e4e, + "yasmallhiragana", + 0x3083, + "yasmallkatakana", + 0x30e3, + "yasmallkatakanahalfwidth", + 0xff6c, + "yatcyrillic", + 0x0463, + "ycircle", + 0x24e8, + "ycircumflex", + 0x0177, + "ydieresis", + 0x00ff, + "ydotaccent", + 0x1e8f, + "ydotbelow", + 0x1ef5, + "yeharabic", + 0x064a, + "yehbarreearabic", + 0x06d2, + "yehbarreefinalarabic", + 0xfbaf, + "yehfinalarabic", + 0xfef2, + "yehhamzaabovearabic", + 0x0626, + "yehhamzaabovefinalarabic", + 0xfe8a, + "yehhamzaaboveinitialarabic", + 0xfe8b, + "yehhamzaabovemedialarabic", + 0xfe8c, + "yehinitialarabic", + 0xfef3, + "yehmedialarabic", + 0xfef4, + "yehmeeminitialarabic", + 0xfcdd, + "yehmeemisolatedarabic", + 0xfc58, + "yehnoonfinalarabic", + 0xfc94, + "yehthreedotsbelowarabic", + 0x06d1, + "yekorean", + 0x3156, + "yen", + 0x00a5, + "yenmonospace", + 0xffe5, + "yeokorean", + 0x3155, + "yeorinhieuhkorean", + 0x3186, + "yerahbenyomohebrew", + 0x05aa, + "yerahbenyomolefthebrew", + 0x05aa, + "yericyrillic", + 0x044b, + "yerudieresiscyrillic", + 0x04f9, + "yesieungkorean", + 0x3181, + "yesieungpansioskorean", + 0x3183, + "yesieungsioskorean", + 0x3182, + "yetivhebrew", + 0x059a, + "ygrave", + 0x1ef3, + "yhook", + 0x01b4, + "yhookabove", + 0x1ef7, + "yiarmenian", + 0x0575, + "yicyrillic", + 0x0457, + "yikorean", + 0x3162, + "yinyang", + 0x262f, + "yiwnarmenian", + 0x0582, + "ymonospace", + 0xff59, + "yod", + 0x05d9, + "yoddagesh", + 0xfb39, + "yoddageshhebrew", + 0xfb39, + "yodhebrew", + 0x05d9, + "yodyodhebrew", + 0x05f2, + "yodyodpatahhebrew", + 0xfb1f, + "yohiragana", + 0x3088, + "yoikorean", + 0x3189, + "yokatakana", + 0x30e8, + "yokatakanahalfwidth", + 0xff96, + "yokorean", + 0x315b, + "yosmallhiragana", + 0x3087, + "yosmallkatakana", + 0x30e7, + "yosmallkatakanahalfwidth", + 0xff6e, + "yotgreek", + 0x03f3, + "yoyaekorean", + 0x3188, + "yoyakorean", + 0x3187, + "yoyakthai", + 0x0e22, + "yoyingthai", + 0x0e0d, + "yparen", + 0x24b4, + "ypogegrammeni", + 0x037a, + "ypogegrammenigreekcmb", + 0x0345, + "yr", + 0x01a6, + "yring", + 0x1e99, + "ysuperior", + 0x02b8, + "ytilde", + 0x1ef9, + "yturned", + 0x028e, + "yuhiragana", + 0x3086, + "yuikorean", + 0x318c, + "yukatakana", + 0x30e6, + "yukatakanahalfwidth", + 0xff95, + "yukorean", + 0x3160, + "yusbigcyrillic", + 0x046b, + "yusbigiotifiedcyrillic", + 0x046d, + "yuslittlecyrillic", + 0x0467, + "yuslittleiotifiedcyrillic", + 0x0469, + "yusmallhiragana", + 0x3085, + "yusmallkatakana", + 0x30e5, + "yusmallkatakanahalfwidth", + 0xff6d, + "yuyekorean", + 0x318b, + "yuyeokorean", + 0x318a, + "yyabengali", + 0x09df, + "yyadeva", + 0x095f, + "z", + 0x007a, + "zaarmenian", + 0x0566, + "zacute", + 0x017a, + "zadeva", + 0x095b, + "zagurmukhi", + 0x0a5b, + "zaharabic", + 0x0638, + "zahfinalarabic", + 0xfec6, + "zahinitialarabic", + 0xfec7, + "zahiragana", + 0x3056, + "zahmedialarabic", + 0xfec8, + "zainarabic", + 0x0632, + "zainfinalarabic", + 0xfeb0, + "zakatakana", + 0x30b6, + "zaqefgadolhebrew", + 0x0595, + "zaqefqatanhebrew", + 0x0594, + "zarqahebrew", + 0x0598, + "zayin", + 0x05d6, + "zayindagesh", + 0xfb36, + "zayindageshhebrew", + 0xfb36, + "zayinhebrew", + 0x05d6, + "zbopomofo", + 0x3117, + "zcaron", + 0x017e, + "zcircle", + 0x24e9, + "zcircumflex", + 0x1e91, + "zcurl", + 0x0291, + "zdot", + 0x017c, + "zdotaccent", + 0x017c, + "zdotbelow", + 0x1e93, + "zecyrillic", + 0x0437, + "zedescendercyrillic", + 0x0499, + "zedieresiscyrillic", + 0x04df, + "zehiragana", + 0x305c, + "zekatakana", + 0x30bc, + "zero", + 0x0030, + "zeroarabic", + 0x0660, + "zerobengali", + 0x09e6, + "zerodeva", + 0x0966, + "zerogujarati", + 0x0ae6, + "zerogurmukhi", + 0x0a66, + "zerohackarabic", + 0x0660, + "zeroinferior", + 0x2080, + "zeromonospace", + 0xff10, + "zerooldstyle", + 0xf730, + "zeropersian", + 0x06f0, + "zerosuperior", + 0x2070, + "zerothai", + 0x0e50, + "zerowidthjoiner", + 0xfeff, + "zerowidthnonjoiner", + 0x200c, + "zerowidthspace", + 0x200b, + "zeta", + 0x03b6, + "zhbopomofo", + 0x3113, + "zhearmenian", + 0x056a, + "zhebrevecyrillic", + 0x04c2, + "zhecyrillic", + 0x0436, + "zhedescendercyrillic", + 0x0497, + "zhedieresiscyrillic", + 0x04dd, + "zihiragana", + 0x3058, + "zikatakana", + 0x30b8, + "zinorhebrew", + 0x05ae, + "zlinebelow", + 0x1e95, + "zmonospace", + 0xff5a, + "zohiragana", + 0x305e, + "zokatakana", + 0x30be, + "zparen", + 0x24b5, + "zretroflexhook", + 0x0290, + "zstroke", + 0x01b6, + "zuhiragana", + 0x305a, + "zukatakana", + 0x30ba, + ".notdef", + 0x0000, + "angbracketleftbig", + 0x2329, + "angbracketleftBig", + 0x2329, + "angbracketleftbigg", + 0x2329, + "angbracketleftBigg", + 0x2329, + "angbracketrightBig", + 0x232a, + "angbracketrightbig", + 0x232a, + "angbracketrightBigg", + 0x232a, + "angbracketrightbigg", + 0x232a, + "arrowhookleft", + 0x21aa, + "arrowhookright", + 0x21a9, + "arrowlefttophalf", + 0x21bc, + "arrowleftbothalf", + 0x21bd, + "arrownortheast", + 0x2197, + "arrownorthwest", + 0x2196, + "arrowrighttophalf", + 0x21c0, + "arrowrightbothalf", + 0x21c1, + "arrowsoutheast", + 0x2198, + "arrowsouthwest", + 0x2199, + "backslashbig", + 0x2216, + "backslashBig", + 0x2216, + "backslashBigg", + 0x2216, + "backslashbigg", + 0x2216, + "bardbl", + 0x2016, + "bracehtipdownleft", + 0xfe37, + "bracehtipdownright", + 0xfe37, + "bracehtipupleft", + 0xfe38, + "bracehtipupright", + 0xfe38, + "braceleftBig", + 0x007b, + "braceleftbig", + 0x007b, + "braceleftbigg", + 0x007b, + "braceleftBigg", + 0x007b, + "bracerightBig", + 0x007d, + "bracerightbig", + 0x007d, + "bracerightbigg", + 0x007d, + "bracerightBigg", + 0x007d, + "bracketleftbig", + 0x005b, + "bracketleftBig", + 0x005b, + "bracketleftbigg", + 0x005b, + "bracketleftBigg", + 0x005b, + "bracketrightBig", + 0x005d, + "bracketrightbig", + 0x005d, + "bracketrightbigg", + 0x005d, + "bracketrightBigg", + 0x005d, + "ceilingleftbig", + 0x2308, + "ceilingleftBig", + 0x2308, + "ceilingleftBigg", + 0x2308, + "ceilingleftbigg", + 0x2308, + "ceilingrightbig", + 0x2309, + "ceilingrightBig", + 0x2309, + "ceilingrightbigg", + 0x2309, + "ceilingrightBigg", + 0x2309, + "circledotdisplay", + 0x2299, + "circledottext", + 0x2299, + "circlemultiplydisplay", + 0x2297, + "circlemultiplytext", + 0x2297, + "circleplusdisplay", + 0x2295, + "circleplustext", + 0x2295, + "contintegraldisplay", + 0x222e, + "contintegraltext", + 0x222e, + "coproductdisplay", + 0x2210, + "coproducttext", + 0x2210, + "floorleftBig", + 0x230a, + "floorleftbig", + 0x230a, + "floorleftbigg", + 0x230a, + "floorleftBigg", + 0x230a, + "floorrightbig", + 0x230b, + "floorrightBig", + 0x230b, + "floorrightBigg", + 0x230b, + "floorrightbigg", + 0x230b, + "hatwide", + 0x0302, + "hatwider", + 0x0302, + "hatwidest", + 0x0302, + "intercal", + 0x1d40, + "integraldisplay", + 0x222b, + "integraltext", + 0x222b, + "intersectiondisplay", + 0x22c2, + "intersectiontext", + 0x22c2, + "logicalanddisplay", + 0x2227, + "logicalandtext", + 0x2227, + "logicalordisplay", + 0x2228, + "logicalortext", + 0x2228, + "parenleftBig", + 0x0028, + "parenleftbig", + 0x0028, + "parenleftBigg", + 0x0028, + "parenleftbigg", + 0x0028, + "parenrightBig", + 0x0029, + "parenrightbig", + 0x0029, + "parenrightBigg", + 0x0029, + "parenrightbigg", + 0x0029, + "prime", + 0x2032, + "productdisplay", + 0x220f, + "producttext", + 0x220f, + "radicalbig", + 0x221a, + "radicalBig", + 0x221a, + "radicalBigg", + 0x221a, + "radicalbigg", + 0x221a, + "radicalbt", + 0x221a, + "radicaltp", + 0x221a, + "radicalvertex", + 0x221a, + "slashbig", + 0x002f, + "slashBig", + 0x002f, + "slashBigg", + 0x002f, + "slashbigg", + 0x002f, + "summationdisplay", + 0x2211, + "summationtext", + 0x2211, + "tildewide", + 0x02dc, + "tildewider", + 0x02dc, + "tildewidest", + 0x02dc, + "uniondisplay", + 0x22c3, + "unionmultidisplay", + 0x228e, + "unionmultitext", + 0x228e, + "unionsqdisplay", + 0x2294, + "unionsqtext", + 0x2294, + "uniontext", + 0x22c3, + "vextenddouble", + 0x2225, + "vextendsingle", + 0x2223 + ]; +}); +const getDingbatsGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { + return [ + "space", + 0x0020, + "a1", + 0x2701, + "a2", + 0x2702, + "a202", + 0x2703, + "a3", + 0x2704, + "a4", + 0x260e, + "a5", + 0x2706, + "a119", + 0x2707, + "a118", + 0x2708, + "a117", + 0x2709, + "a11", + 0x261b, + "a12", + 0x261e, + "a13", + 0x270c, + "a14", + 0x270d, + "a15", + 0x270e, + "a16", + 0x270f, + "a105", + 0x2710, + "a17", + 0x2711, + "a18", + 0x2712, + "a19", + 0x2713, + "a20", + 0x2714, + "a21", + 0x2715, + "a22", + 0x2716, + "a23", + 0x2717, + "a24", + 0x2718, + "a25", + 0x2719, + "a26", + 0x271a, + "a27", + 0x271b, + "a28", + 0x271c, + "a6", + 0x271d, + "a7", + 0x271e, + "a8", + 0x271f, + "a9", + 0x2720, + "a10", + 0x2721, + "a29", + 0x2722, + "a30", + 0x2723, + "a31", + 0x2724, + "a32", + 0x2725, + "a33", + 0x2726, + "a34", + 0x2727, + "a35", + 0x2605, + "a36", + 0x2729, + "a37", + 0x272a, + "a38", + 0x272b, + "a39", + 0x272c, + "a40", + 0x272d, + "a41", + 0x272e, + "a42", + 0x272f, + "a43", + 0x2730, + "a44", + 0x2731, + "a45", + 0x2732, + "a46", + 0x2733, + "a47", + 0x2734, + "a48", + 0x2735, + "a49", + 0x2736, + "a50", + 0x2737, + "a51", + 0x2738, + "a52", + 0x2739, + "a53", + 0x273a, + "a54", + 0x273b, + "a55", + 0x273c, + "a56", + 0x273d, + "a57", + 0x273e, + "a58", + 0x273f, + "a59", + 0x2740, + "a60", + 0x2741, + "a61", + 0x2742, + "a62", + 0x2743, + "a63", + 0x2744, + "a64", + 0x2745, + "a65", + 0x2746, + "a66", + 0x2747, + "a67", + 0x2748, + "a68", + 0x2749, + "a69", + 0x274a, + "a70", + 0x274b, + "a71", + 0x25cf, + "a72", + 0x274d, + "a73", + 0x25a0, + "a74", + 0x274f, + "a203", + 0x2750, + "a75", + 0x2751, + "a204", + 0x2752, + "a76", + 0x25b2, + "a77", + 0x25bc, + "a78", + 0x25c6, + "a79", + 0x2756, + "a81", + 0x25d7, + "a82", + 0x2758, + "a83", + 0x2759, + "a84", + 0x275a, + "a97", + 0x275b, + "a98", + 0x275c, + "a99", + 0x275d, + "a100", + 0x275e, + "a101", + 0x2761, + "a102", + 0x2762, + "a103", + 0x2763, + "a104", + 0x2764, + "a106", + 0x2765, + "a107", + 0x2766, + "a108", + 0x2767, + "a112", + 0x2663, + "a111", + 0x2666, + "a110", + 0x2665, + "a109", + 0x2660, + "a120", + 0x2460, + "a121", + 0x2461, + "a122", + 0x2462, + "a123", + 0x2463, + "a124", + 0x2464, + "a125", + 0x2465, + "a126", + 0x2466, + "a127", + 0x2467, + "a128", + 0x2468, + "a129", + 0x2469, + "a130", + 0x2776, + "a131", + 0x2777, + "a132", + 0x2778, + "a133", + 0x2779, + "a134", + 0x277a, + "a135", + 0x277b, + "a136", + 0x277c, + "a137", + 0x277d, + "a138", + 0x277e, + "a139", + 0x277f, + "a140", + 0x2780, + "a141", + 0x2781, + "a142", + 0x2782, + "a143", + 0x2783, + "a144", + 0x2784, + "a145", + 0x2785, + "a146", + 0x2786, + "a147", + 0x2787, + "a148", + 0x2788, + "a149", + 0x2789, + "a150", + 0x278a, + "a151", + 0x278b, + "a152", + 0x278c, + "a153", + 0x278d, + "a154", + 0x278e, + "a155", + 0x278f, + "a156", + 0x2790, + "a157", + 0x2791, + "a158", + 0x2792, + "a159", + 0x2793, + "a160", + 0x2794, + "a161", + 0x2192, + "a163", + 0x2194, + "a164", + 0x2195, + "a196", + 0x2798, + "a165", + 0x2799, + "a192", + 0x279a, + "a166", + 0x279b, + "a167", + 0x279c, + "a168", + 0x279d, + "a169", + 0x279e, + "a170", + 0x279f, + "a171", + 0x27a0, + "a172", + 0x27a1, + "a173", + 0x27a2, + "a162", + 0x27a3, + "a174", + 0x27a4, + "a175", + 0x27a5, + "a176", + 0x27a6, + "a177", + 0x27a7, + "a178", + 0x27a8, + "a179", + 0x27a9, + "a193", + 0x27aa, + "a180", + 0x27ab, + "a199", + 0x27ac, + "a181", + 0x27ad, + "a200", + 0x27ae, + "a182", + 0x27af, + "a201", + 0x27b1, + "a183", + 0x27b2, + "a184", + 0x27b3, + "a197", + 0x27b4, + "a185", + 0x27b5, + "a194", + 0x27b6, + "a198", + 0x27b7, + "a186", + 0x27b8, + "a195", + 0x27b9, + "a187", + 0x27ba, + "a188", + 0x27bb, + "a189", + 0x27bc, + "a190", + 0x27bd, + "a191", + 0x27be, + "a89", + 0x2768, + "a90", + 0x2769, + "a93", + 0x276a, + "a94", + 0x276b, + "a91", + 0x276c, + "a92", + 0x276d, + "a205", + 0x276e, + "a85", + 0x276f, + "a206", + 0x2770, + "a86", + 0x2771, + "a87", + 0x2772, + "a88", + 0x2773, + "a95", + 0x2774, + "a96", + 0x2775, + ".notdef", + 0x0000 + ]; +}); + + +/***/ }), +/* 40 */ +/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { + +__w_pdfjs_require__.r(__webpack_exports__); +/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { +/* harmony export */ "clearUnicodeCaches": () => (/* binding */ clearUnicodeCaches), +/* harmony export */ "getCharUnicodeCategory": () => (/* binding */ getCharUnicodeCategory), +/* harmony export */ "getNormalizedUnicodes": () => (/* binding */ getNormalizedUnicodes), +/* harmony export */ "getUnicodeForGlyph": () => (/* binding */ getUnicodeForGlyph), +/* harmony export */ "getUnicodeRangeFor": () => (/* binding */ getUnicodeRangeFor), +/* harmony export */ "mapSpecialUnicodeValues": () => (/* binding */ mapSpecialUnicodeValues), +/* harmony export */ "reverseIfRtl": () => (/* binding */ reverseIfRtl) +/* harmony export */ }); +/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(6); + +const getSpecialPUASymbols = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function (t) { + t[63721] = 0x00a9; + t[63193] = 0x00a9; + t[63720] = 0x00ae; + t[63194] = 0x00ae; + t[63722] = 0x2122; + t[63195] = 0x2122; + t[63729] = 0x23a7; + t[63730] = 0x23a8; + t[63731] = 0x23a9; + t[63740] = 0x23ab; + t[63741] = 0x23ac; + t[63742] = 0x23ad; + t[63726] = 0x23a1; + t[63727] = 0x23a2; + t[63728] = 0x23a3; + t[63737] = 0x23a4; + t[63738] = 0x23a5; + t[63739] = 0x23a6; + t[63723] = 0x239b; + t[63724] = 0x239c; + t[63725] = 0x239d; + t[63734] = 0x239e; + t[63735] = 0x239f; + t[63736] = 0x23a0; +}); +function mapSpecialUnicodeValues(code) { + if (code >= 0xfff0 && code <= 0xffff) { + return 0; + } else if (code >= 0xf600 && code <= 0xf8ff) { + return getSpecialPUASymbols()[code] || code; + } else if (code === 0x00ad) { + return 0x002d; + } + return code; +} +function getUnicodeForGlyph(name, glyphsUnicodeMap) { + let unicode = glyphsUnicodeMap[name]; + if (unicode !== undefined) { + return unicode; + } + if (!name) { + return -1; + } + if (name[0] === "u") { + const nameLen = name.length; + let hexStr; + if (nameLen === 7 && name[1] === "n" && name[2] === "i") { + hexStr = name.substring(3); + } else if (nameLen >= 5 && nameLen <= 7) { + hexStr = name.substring(1); + } else { + return -1; + } + if (hexStr === hexStr.toUpperCase()) { + unicode = parseInt(hexStr, 16); + if (unicode >= 0) { + return unicode; + } + } + } + return -1; +} +const UnicodeRanges = [ + { + begin: 0x0000, + end: 0x007f + }, + { + begin: 0x0080, + end: 0x00ff + }, + { + begin: 0x0100, + end: 0x017f + }, + { + begin: 0x0180, + end: 0x024f + }, + { + begin: 0x0250, + end: 0x02af + }, + { + begin: 0x02b0, + end: 0x02ff + }, + { + begin: 0x0300, + end: 0x036f + }, + { + begin: 0x0370, + end: 0x03ff + }, + { + begin: 0x2c80, + end: 0x2cff + }, + { + begin: 0x0400, + end: 0x04ff + }, + { + begin: 0x0530, + end: 0x058f + }, + { + begin: 0x0590, + end: 0x05ff + }, + { + begin: 0xa500, + end: 0xa63f + }, + { + begin: 0x0600, + end: 0x06ff + }, + { + begin: 0x07c0, + end: 0x07ff + }, + { + begin: 0x0900, + end: 0x097f + }, + { + begin: 0x0980, + end: 0x09ff + }, + { + begin: 0x0a00, + end: 0x0a7f + }, + { + begin: 0x0a80, + end: 0x0aff + }, + { + begin: 0x0b00, + end: 0x0b7f + }, + { + begin: 0x0b80, + end: 0x0bff + }, + { + begin: 0x0c00, + end: 0x0c7f + }, + { + begin: 0x0c80, + end: 0x0cff + }, + { + begin: 0x0d00, + end: 0x0d7f + }, + { + begin: 0x0e00, + end: 0x0e7f + }, + { + begin: 0x0e80, + end: 0x0eff + }, + { + begin: 0x10a0, + end: 0x10ff + }, + { + begin: 0x1b00, + end: 0x1b7f + }, + { + begin: 0x1100, + end: 0x11ff + }, + { + begin: 0x1e00, + end: 0x1eff + }, + { + begin: 0x1f00, + end: 0x1fff + }, + { + begin: 0x2000, + end: 0x206f + }, + { + begin: 0x2070, + end: 0x209f + }, + { + begin: 0x20a0, + end: 0x20cf + }, + { + begin: 0x20d0, + end: 0x20ff + }, + { + begin: 0x2100, + end: 0x214f + }, + { + begin: 0x2150, + end: 0x218f + }, + { + begin: 0x2190, + end: 0x21ff + }, + { + begin: 0x2200, + end: 0x22ff + }, + { + begin: 0x2300, + end: 0x23ff + }, + { + begin: 0x2400, + end: 0x243f + }, + { + begin: 0x2440, + end: 0x245f + }, + { + begin: 0x2460, + end: 0x24ff + }, + { + begin: 0x2500, + end: 0x257f + }, + { + begin: 0x2580, + end: 0x259f + }, + { + begin: 0x25a0, + end: 0x25ff + }, + { + begin: 0x2600, + end: 0x26ff + }, + { + begin: 0x2700, + end: 0x27bf + }, + { + begin: 0x3000, + end: 0x303f + }, + { + begin: 0x3040, + end: 0x309f + }, + { + begin: 0x30a0, + end: 0x30ff + }, + { + begin: 0x3100, + end: 0x312f + }, + { + begin: 0x3130, + end: 0x318f + }, + { + begin: 0xa840, + end: 0xa87f + }, + { + begin: 0x3200, + end: 0x32ff + }, + { + begin: 0x3300, + end: 0x33ff + }, + { + begin: 0xac00, + end: 0xd7af + }, + { + begin: 0xd800, + end: 0xdfff + }, + { + begin: 0x10900, + end: 0x1091f + }, + { + begin: 0x4e00, + end: 0x9fff + }, + { + begin: 0xe000, + end: 0xf8ff + }, + { + begin: 0x31c0, + end: 0x31ef + }, + { + begin: 0xfb00, + end: 0xfb4f + }, + { + begin: 0xfb50, + end: 0xfdff + }, + { + begin: 0xfe20, + end: 0xfe2f + }, + { + begin: 0xfe10, + end: 0xfe1f + }, + { + begin: 0xfe50, + end: 0xfe6f + }, + { + begin: 0xfe70, + end: 0xfeff + }, + { + begin: 0xff00, + end: 0xffef + }, + { + begin: 0xfff0, + end: 0xffff + }, + { + begin: 0x0f00, + end: 0x0fff + }, + { + begin: 0x0700, + end: 0x074f + }, + { + begin: 0x0780, + end: 0x07bf + }, + { + begin: 0x0d80, + end: 0x0dff + }, + { + begin: 0x1000, + end: 0x109f + }, + { + begin: 0x1200, + end: 0x137f + }, + { + begin: 0x13a0, + end: 0x13ff + }, + { + begin: 0x1400, + end: 0x167f + }, + { + begin: 0x1680, + end: 0x169f + }, + { + begin: 0x16a0, + end: 0x16ff + }, + { + begin: 0x1780, + end: 0x17ff + }, + { + begin: 0x1800, + end: 0x18af + }, + { + begin: 0x2800, + end: 0x28ff + }, + { + begin: 0xa000, + end: 0xa48f + }, + { + begin: 0x1700, + end: 0x171f + }, + { + begin: 0x10300, + end: 0x1032f + }, + { + begin: 0x10330, + end: 0x1034f + }, + { + begin: 0x10400, + end: 0x1044f + }, + { + begin: 0x1d000, + end: 0x1d0ff + }, + { + begin: 0x1d400, + end: 0x1d7ff + }, + { + begin: 0xff000, + end: 0xffffd + }, + { + begin: 0xfe00, + end: 0xfe0f + }, + { + begin: 0xe0000, + end: 0xe007f + }, + { + begin: 0x1900, + end: 0x194f + }, + { + begin: 0x1950, + end: 0x197f + }, + { + begin: 0x1980, + end: 0x19df + }, + { + begin: 0x1a00, + end: 0x1a1f + }, + { + begin: 0x2c00, + end: 0x2c5f + }, + { + begin: 0x2d30, + end: 0x2d7f + }, + { + begin: 0x4dc0, + end: 0x4dff + }, + { + begin: 0xa800, + end: 0xa82f + }, + { + begin: 0x10000, + end: 0x1007f + }, + { + begin: 0x10140, + end: 0x1018f + }, + { + begin: 0x10380, + end: 0x1039f + }, + { + begin: 0x103a0, + end: 0x103df + }, + { + begin: 0x10450, + end: 0x1047f + }, + { + begin: 0x10480, + end: 0x104af + }, + { + begin: 0x10800, + end: 0x1083f + }, + { + begin: 0x10a00, + end: 0x10a5f + }, + { + begin: 0x1d300, + end: 0x1d35f + }, + { + begin: 0x12000, + end: 0x123ff + }, + { + begin: 0x1d360, + end: 0x1d37f + }, + { + begin: 0x1b80, + end: 0x1bbf + }, + { + begin: 0x1c00, + end: 0x1c4f + }, + { + begin: 0x1c50, + end: 0x1c7f + }, + { + begin: 0xa880, + end: 0xa8df + }, + { + begin: 0xa900, + end: 0xa92f + }, + { + begin: 0xa930, + end: 0xa95f + }, + { + begin: 0xaa00, + end: 0xaa5f + }, + { + begin: 0x10190, + end: 0x101cf + }, + { + begin: 0x101d0, + end: 0x101ff + }, + { + begin: 0x102a0, + end: 0x102df + }, + { + begin: 0x1f030, + end: 0x1f09f + } +]; +function getUnicodeRangeFor(value) { + for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) { + const range = UnicodeRanges[i]; + if (value >= range.begin && value < range.end) { + return i; + } + } + return -1; +} +function isRTLRangeFor(value) { + let range = UnicodeRanges[13]; + if (value >= range.begin && value < range.end) { + return true; + } + range = UnicodeRanges[11]; + if (value >= range.begin && value < range.end) { + return true; + } + return false; +} +const getNormalizedUnicodes = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { + return [ + "\u00A8", + "\u0020\u0308", + "\u00AF", + "\u0020\u0304", + "\u00B4", + "\u0020\u0301", + "\u00B5", + "\u03BC", + "\u00B8", + "\u0020\u0327", + "\u0132", + "\u0049\u004A", + "\u0133", + "\u0069\u006A", + "\u013F", + "\u004C\u00B7", + "\u0140", + "\u006C\u00B7", + "\u0149", + "\u02BC\u006E", + "\u017F", + "\u0073", + "\u01C4", + "\u0044\u017D", + "\u01C5", + "\u0044\u017E", + "\u01C6", + "\u0064\u017E", + "\u01C7", + "\u004C\u004A", + "\u01C8", + "\u004C\u006A", + "\u01C9", + "\u006C\u006A", + "\u01CA", + "\u004E\u004A", + "\u01CB", + "\u004E\u006A", + "\u01CC", + "\u006E\u006A", + "\u01F1", + "\u0044\u005A", + "\u01F2", + "\u0044\u007A", + "\u01F3", + "\u0064\u007A", + "\u02D8", + "\u0020\u0306", + "\u02D9", + "\u0020\u0307", + "\u02DA", + "\u0020\u030A", + "\u02DB", + "\u0020\u0328", + "\u02DC", + "\u0020\u0303", + "\u02DD", + "\u0020\u030B", + "\u037A", + "\u0020\u0345", + "\u0384", + "\u0020\u0301", + "\u03D0", + "\u03B2", + "\u03D1", + "\u03B8", + "\u03D2", + "\u03A5", + "\u03D5", + "\u03C6", + "\u03D6", + "\u03C0", + "\u03F0", + "\u03BA", + "\u03F1", + "\u03C1", + "\u03F2", + "\u03C2", + "\u03F4", + "\u0398", + "\u03F5", + "\u03B5", + "\u03F9", + "\u03A3", + "\u0587", + "\u0565\u0582", + "\u0675", + "\u0627\u0674", + "\u0676", + "\u0648\u0674", + "\u0677", + "\u06C7\u0674", + "\u0678", + "\u064A\u0674", + "\u0E33", + "\u0E4D\u0E32", + "\u0EB3", + "\u0ECD\u0EB2", + "\u0EDC", + "\u0EAB\u0E99", + "\u0EDD", + "\u0EAB\u0EA1", + "\u0F77", + "\u0FB2\u0F81", + "\u0F79", + "\u0FB3\u0F81", + "\u1E9A", + "\u0061\u02BE", + "\u1FBD", + "\u0020\u0313", + "\u1FBF", + "\u0020\u0313", + "\u1FC0", + "\u0020\u0342", + "\u1FFE", + "\u0020\u0314", + "\u2002", + "\u0020", + "\u2003", + "\u0020", + "\u2004", + "\u0020", + "\u2005", + "\u0020", + "\u2006", + "\u0020", + "\u2008", + "\u0020", + "\u2009", + "\u0020", + "\u200A", + "\u0020", + "\u2017", + "\u0020\u0333", + "\u2024", + "\u002E", + "\u2025", + "\u002E\u002E", + "\u2026", + "\u002E\u002E\u002E", + "\u2033", + "\u2032\u2032", + "\u2034", + "\u2032\u2032\u2032", + "\u2036", + "\u2035\u2035", + "\u2037", + "\u2035\u2035\u2035", + "\u203C", + "\u0021\u0021", + "\u203E", + "\u0020\u0305", + "\u2047", + "\u003F\u003F", + "\u2048", + "\u003F\u0021", + "\u2049", + "\u0021\u003F", + "\u2057", + "\u2032\u2032\u2032\u2032", + "\u205F", + "\u0020", + "\u20A8", + "\u0052\u0073", + "\u2100", + "\u0061\u002F\u0063", + "\u2101", + "\u0061\u002F\u0073", + "\u2103", + "\u00B0\u0043", + "\u2105", + "\u0063\u002F\u006F", + "\u2106", + "\u0063\u002F\u0075", + "\u2107", + "\u0190", + "\u2109", + "\u00B0\u0046", + "\u2116", + "\u004E\u006F", + "\u2121", + "\u0054\u0045\u004C", + "\u2135", + "\u05D0", + "\u2136", + "\u05D1", + "\u2137", + "\u05D2", + "\u2138", + "\u05D3", + "\u213B", + "\u0046\u0041\u0058", + "\u2160", + "\u0049", + "\u2161", + "\u0049\u0049", + "\u2162", + "\u0049\u0049\u0049", + "\u2163", + "\u0049\u0056", + "\u2164", + "\u0056", + "\u2165", + "\u0056\u0049", + "\u2166", + "\u0056\u0049\u0049", + "\u2167", + "\u0056\u0049\u0049\u0049", + "\u2168", + "\u0049\u0058", + "\u2169", + "\u0058", + "\u216A", + "\u0058\u0049", + "\u216B", + "\u0058\u0049\u0049", + "\u216C", + "\u004C", + "\u216D", + "\u0043", + "\u216E", + "\u0044", + "\u216F", + "\u004D", + "\u2170", + "\u0069", + "\u2171", + "\u0069\u0069", + "\u2172", + "\u0069\u0069\u0069", + "\u2173", + "\u0069\u0076", + "\u2174", + "\u0076", + "\u2175", + "\u0076\u0069", + "\u2176", + "\u0076\u0069\u0069", + "\u2177", + "\u0076\u0069\u0069\u0069", + "\u2178", + "\u0069\u0078", + "\u2179", + "\u0078", + "\u217A", + "\u0078\u0069", + "\u217B", + "\u0078\u0069\u0069", + "\u217C", + "\u006C", + "\u217D", + "\u0063", + "\u217E", + "\u0064", + "\u217F", + "\u006D", + "\u222C", + "\u222B\u222B", + "\u222D", + "\u222B\u222B\u222B", + "\u222F", + "\u222E\u222E", + "\u2230", + "\u222E\u222E\u222E", + "\u2474", + "\u0028\u0031\u0029", + "\u2475", + "\u0028\u0032\u0029", + "\u2476", + "\u0028\u0033\u0029", + "\u2477", + "\u0028\u0034\u0029", + "\u2478", + "\u0028\u0035\u0029", + "\u2479", + "\u0028\u0036\u0029", + "\u247A", + "\u0028\u0037\u0029", + "\u247B", + "\u0028\u0038\u0029", + "\u247C", + "\u0028\u0039\u0029", + "\u247D", + "\u0028\u0031\u0030\u0029", + "\u247E", + "\u0028\u0031\u0031\u0029", + "\u247F", + "\u0028\u0031\u0032\u0029", + "\u2480", + "\u0028\u0031\u0033\u0029", + "\u2481", + "\u0028\u0031\u0034\u0029", + "\u2482", + "\u0028\u0031\u0035\u0029", + "\u2483", + "\u0028\u0031\u0036\u0029", + "\u2484", + "\u0028\u0031\u0037\u0029", + "\u2485", + "\u0028\u0031\u0038\u0029", + "\u2486", + "\u0028\u0031\u0039\u0029", + "\u2487", + "\u0028\u0032\u0030\u0029", + "\u2488", + "\u0031\u002E", + "\u2489", + "\u0032\u002E", + "\u248A", + "\u0033\u002E", + "\u248B", + "\u0034\u002E", + "\u248C", + "\u0035\u002E", + "\u248D", + "\u0036\u002E", + "\u248E", + "\u0037\u002E", + "\u248F", + "\u0038\u002E", + "\u2490", + "\u0039\u002E", + "\u2491", + "\u0031\u0030\u002E", + "\u2492", + "\u0031\u0031\u002E", + "\u2493", + "\u0031\u0032\u002E", + "\u2494", + "\u0031\u0033\u002E", + "\u2495", + "\u0031\u0034\u002E", + "\u2496", + "\u0031\u0035\u002E", + "\u2497", + "\u0031\u0036\u002E", + "\u2498", + "\u0031\u0037\u002E", + "\u2499", + "\u0031\u0038\u002E", + "\u249A", + "\u0031\u0039\u002E", + "\u249B", + "\u0032\u0030\u002E", + "\u249C", + "\u0028\u0061\u0029", + "\u249D", + "\u0028\u0062\u0029", + "\u249E", + "\u0028\u0063\u0029", + "\u249F", + "\u0028\u0064\u0029", + "\u24A0", + "\u0028\u0065\u0029", + "\u24A1", + "\u0028\u0066\u0029", + "\u24A2", + "\u0028\u0067\u0029", + "\u24A3", + "\u0028\u0068\u0029", + "\u24A4", + "\u0028\u0069\u0029", + "\u24A5", + "\u0028\u006A\u0029", + "\u24A6", + "\u0028\u006B\u0029", + "\u24A7", + "\u0028\u006C\u0029", + "\u24A8", + "\u0028\u006D\u0029", + "\u24A9", + "\u0028\u006E\u0029", + "\u24AA", + "\u0028\u006F\u0029", + "\u24AB", + "\u0028\u0070\u0029", + "\u24AC", + "\u0028\u0071\u0029", + "\u24AD", + "\u0028\u0072\u0029", + "\u24AE", + "\u0028\u0073\u0029", + "\u24AF", + "\u0028\u0074\u0029", + "\u24B0", + "\u0028\u0075\u0029", + "\u24B1", + "\u0028\u0076\u0029", + "\u24B2", + "\u0028\u0077\u0029", + "\u24B3", + "\u0028\u0078\u0029", + "\u24B4", + "\u0028\u0079\u0029", + "\u24B5", + "\u0028\u007A\u0029", + "\u2A0C", + "\u222B\u222B\u222B\u222B", + "\u2A74", + "\u003A\u003A\u003D", + "\u2A75", + "\u003D\u003D", + "\u2A76", + "\u003D\u003D\u003D", + "\u2E9F", + "\u6BCD", + "\u2EF3", + "\u9F9F", + "\u2F00", + "\u4E00", + "\u2F01", + "\u4E28", + "\u2F02", + "\u4E36", + "\u2F03", + "\u4E3F", + "\u2F04", + "\u4E59", + "\u2F05", + "\u4E85", + "\u2F06", + "\u4E8C", + "\u2F07", + "\u4EA0", + "\u2F08", + "\u4EBA", + "\u2F09", + "\u513F", + "\u2F0A", + "\u5165", + "\u2F0B", + "\u516B", + "\u2F0C", + "\u5182", + "\u2F0D", + "\u5196", + "\u2F0E", + "\u51AB", + "\u2F0F", + "\u51E0", + "\u2F10", + "\u51F5", + "\u2F11", + "\u5200", + "\u2F12", + "\u529B", + "\u2F13", + "\u52F9", + "\u2F14", + "\u5315", + "\u2F15", + "\u531A", + "\u2F16", + "\u5338", + "\u2F17", + "\u5341", + "\u2F18", + "\u535C", + "\u2F19", + "\u5369", + "\u2F1A", + "\u5382", + "\u2F1B", + "\u53B6", + "\u2F1C", + "\u53C8", + "\u2F1D", + "\u53E3", + "\u2F1E", + "\u56D7", + "\u2F1F", + "\u571F", + "\u2F20", + "\u58EB", + "\u2F21", + "\u5902", + "\u2F22", + "\u590A", + "\u2F23", + "\u5915", + "\u2F24", + "\u5927", + "\u2F25", + "\u5973", + "\u2F26", + "\u5B50", + "\u2F27", + "\u5B80", + "\u2F28", + "\u5BF8", + "\u2F29", + "\u5C0F", + "\u2F2A", + "\u5C22", + "\u2F2B", + "\u5C38", + "\u2F2C", + "\u5C6E", + "\u2F2D", + "\u5C71", + "\u2F2E", + "\u5DDB", + "\u2F2F", + "\u5DE5", + "\u2F30", + "\u5DF1", + "\u2F31", + "\u5DFE", + "\u2F32", + "\u5E72", + "\u2F33", + "\u5E7A", + "\u2F34", + "\u5E7F", + "\u2F35", + "\u5EF4", + "\u2F36", + "\u5EFE", + "\u2F37", + "\u5F0B", + "\u2F38", + "\u5F13", + "\u2F39", + "\u5F50", + "\u2F3A", + "\u5F61", + "\u2F3B", + "\u5F73", + "\u2F3C", + "\u5FC3", + "\u2F3D", + "\u6208", + "\u2F3E", + "\u6236", + "\u2F3F", + "\u624B", + "\u2F40", + "\u652F", + "\u2F41", + "\u6534", + "\u2F42", + "\u6587", + "\u2F43", + "\u6597", + "\u2F44", + "\u65A4", + "\u2F45", + "\u65B9", + "\u2F46", + "\u65E0", + "\u2F47", + "\u65E5", + "\u2F48", + "\u66F0", + "\u2F49", + "\u6708", + "\u2F4A", + "\u6728", + "\u2F4B", + "\u6B20", + "\u2F4C", + "\u6B62", + "\u2F4D", + "\u6B79", + "\u2F4E", + "\u6BB3", + "\u2F4F", + "\u6BCB", + "\u2F50", + "\u6BD4", + "\u2F51", + "\u6BDB", + "\u2F52", + "\u6C0F", + "\u2F53", + "\u6C14", + "\u2F54", + "\u6C34", + "\u2F55", + "\u706B", + "\u2F56", + "\u722A", + "\u2F57", + "\u7236", + "\u2F58", + "\u723B", + "\u2F59", + "\u723F", + "\u2F5A", + "\u7247", + "\u2F5B", + "\u7259", + "\u2F5C", + "\u725B", + "\u2F5D", + "\u72AC", + "\u2F5E", + "\u7384", + "\u2F5F", + "\u7389", + "\u2F60", + "\u74DC", + "\u2F61", + "\u74E6", + "\u2F62", + "\u7518", + "\u2F63", + "\u751F", + "\u2F64", + "\u7528", + "\u2F65", + "\u7530", + "\u2F66", + "\u758B", + "\u2F67", + "\u7592", + "\u2F68", + "\u7676", + "\u2F69", + "\u767D", + "\u2F6A", + "\u76AE", + "\u2F6B", + "\u76BF", + "\u2F6C", + "\u76EE", + "\u2F6D", + "\u77DB", + "\u2F6E", + "\u77E2", + "\u2F6F", + "\u77F3", + "\u2F70", + "\u793A", + "\u2F71", + "\u79B8", + "\u2F72", + "\u79BE", + "\u2F73", + "\u7A74", + "\u2F74", + "\u7ACB", + "\u2F75", + "\u7AF9", + "\u2F76", + "\u7C73", + "\u2F77", + "\u7CF8", + "\u2F78", + "\u7F36", + "\u2F79", + "\u7F51", + "\u2F7A", + "\u7F8A", + "\u2F7B", + "\u7FBD", + "\u2F7C", + "\u8001", + "\u2F7D", + "\u800C", + "\u2F7E", + "\u8012", + "\u2F7F", + "\u8033", + "\u2F80", + "\u807F", + "\u2F81", + "\u8089", + "\u2F82", + "\u81E3", + "\u2F83", + "\u81EA", + "\u2F84", + "\u81F3", + "\u2F85", + "\u81FC", + "\u2F86", + "\u820C", + "\u2F87", + "\u821B", + "\u2F88", + "\u821F", + "\u2F89", + "\u826E", + "\u2F8A", + "\u8272", + "\u2F8B", + "\u8278", + "\u2F8C", + "\u864D", + "\u2F8D", + "\u866B", + "\u2F8E", + "\u8840", + "\u2F8F", + "\u884C", + "\u2F90", + "\u8863", + "\u2F91", + "\u897E", + "\u2F92", + "\u898B", + "\u2F93", + "\u89D2", + "\u2F94", + "\u8A00", + "\u2F95", + "\u8C37", + "\u2F96", + "\u8C46", + "\u2F97", + "\u8C55", + "\u2F98", + "\u8C78", + "\u2F99", + "\u8C9D", + "\u2F9A", + "\u8D64", + "\u2F9B", + "\u8D70", + "\u2F9C", + "\u8DB3", + "\u2F9D", + "\u8EAB", + "\u2F9E", + "\u8ECA", + "\u2F9F", + "\u8F9B", + "\u2FA0", + "\u8FB0", + "\u2FA1", + "\u8FB5", + "\u2FA2", + "\u9091", + "\u2FA3", + "\u9149", + "\u2FA4", + "\u91C6", + "\u2FA5", + "\u91CC", + "\u2FA6", + "\u91D1", + "\u2FA7", + "\u9577", + "\u2FA8", + "\u9580", + "\u2FA9", + "\u961C", + "\u2FAA", + "\u96B6", + "\u2FAB", + "\u96B9", + "\u2FAC", + "\u96E8", + "\u2FAD", + "\u9751", + "\u2FAE", + "\u975E", + "\u2FAF", + "\u9762", + "\u2FB0", + "\u9769", + "\u2FB1", + "\u97CB", + "\u2FB2", + "\u97ED", + "\u2FB3", + "\u97F3", + "\u2FB4", + "\u9801", + "\u2FB5", + "\u98A8", + "\u2FB6", + "\u98DB", + "\u2FB7", + "\u98DF", + "\u2FB8", + "\u9996", + "\u2FB9", + "\u9999", + "\u2FBA", + "\u99AC", + "\u2FBB", + "\u9AA8", + "\u2FBC", + "\u9AD8", + "\u2FBD", + "\u9ADF", + "\u2FBE", + "\u9B25", + "\u2FBF", + "\u9B2F", + "\u2FC0", + "\u9B32", + "\u2FC1", + "\u9B3C", + "\u2FC2", + "\u9B5A", + "\u2FC3", + "\u9CE5", + "\u2FC4", + "\u9E75", + "\u2FC5", + "\u9E7F", + "\u2FC6", + "\u9EA5", + "\u2FC7", + "\u9EBB", + "\u2FC8", + "\u9EC3", + "\u2FC9", + "\u9ECD", + "\u2FCA", + "\u9ED1", + "\u2FCB", + "\u9EF9", + "\u2FCC", + "\u9EFD", + "\u2FCD", + "\u9F0E", + "\u2FCE", + "\u9F13", + "\u2FCF", + "\u9F20", + "\u2FD0", + "\u9F3B", + "\u2FD1", + "\u9F4A", + "\u2FD2", + "\u9F52", + "\u2FD3", + "\u9F8D", + "\u2FD4", + "\u9F9C", + "\u2FD5", + "\u9FA0", + "\u3036", + "\u3012", + "\u3038", + "\u5341", + "\u3039", + "\u5344", + "\u303A", + "\u5345", + "\u309B", + "\u0020\u3099", + "\u309C", + "\u0020\u309A", + "\u3131", + "\u1100", + "\u3132", + "\u1101", + "\u3133", + "\u11AA", + "\u3134", + "\u1102", + "\u3135", + "\u11AC", + "\u3136", + "\u11AD", + "\u3137", + "\u1103", + "\u3138", + "\u1104", + "\u3139", + "\u1105", + "\u313A", + "\u11B0", + "\u313B", + "\u11B1", + "\u313C", + "\u11B2", + "\u313D", + "\u11B3", + "\u313E", + "\u11B4", + "\u313F", + "\u11B5", + "\u3140", + "\u111A", + "\u3141", + "\u1106", + "\u3142", + "\u1107", + "\u3143", + "\u1108", + "\u3144", + "\u1121", + "\u3145", + "\u1109", + "\u3146", + "\u110A", + "\u3147", + "\u110B", + "\u3148", + "\u110C", + "\u3149", + "\u110D", + "\u314A", + "\u110E", + "\u314B", + "\u110F", + "\u314C", + "\u1110", + "\u314D", + "\u1111", + "\u314E", + "\u1112", + "\u314F", + "\u1161", + "\u3150", + "\u1162", + "\u3151", + "\u1163", + "\u3152", + "\u1164", + "\u3153", + "\u1165", + "\u3154", + "\u1166", + "\u3155", + "\u1167", + "\u3156", + "\u1168", + "\u3157", + "\u1169", + "\u3158", + "\u116A", + "\u3159", + "\u116B", + "\u315A", + "\u116C", + "\u315B", + "\u116D", + "\u315C", + "\u116E", + "\u315D", + "\u116F", + "\u315E", + "\u1170", + "\u315F", + "\u1171", + "\u3160", + "\u1172", + "\u3161", + "\u1173", + "\u3162", + "\u1174", + "\u3163", + "\u1175", + "\u3164", + "\u1160", + "\u3165", + "\u1114", + "\u3166", + "\u1115", + "\u3167", + "\u11C7", + "\u3168", + "\u11C8", + "\u3169", + "\u11CC", + "\u316A", + "\u11CE", + "\u316B", + "\u11D3", + "\u316C", + "\u11D7", + "\u316D", + "\u11D9", + "\u316E", + "\u111C", + "\u316F", + "\u11DD", + "\u3170", + "\u11DF", + "\u3171", + "\u111D", + "\u3172", + "\u111E", + "\u3173", + "\u1120", + "\u3174", + "\u1122", + "\u3175", + "\u1123", + "\u3176", + "\u1127", + "\u3177", + "\u1129", + "\u3178", + "\u112B", + "\u3179", + "\u112C", + "\u317A", + "\u112D", + "\u317B", + "\u112E", + "\u317C", + "\u112F", + "\u317D", + "\u1132", + "\u317E", + "\u1136", + "\u317F", + "\u1140", + "\u3180", + "\u1147", + "\u3181", + "\u114C", + "\u3182", + "\u11F1", + "\u3183", + "\u11F2", + "\u3184", + "\u1157", + "\u3185", + "\u1158", + "\u3186", + "\u1159", + "\u3187", + "\u1184", + "\u3188", + "\u1185", + "\u3189", + "\u1188", + "\u318A", + "\u1191", + "\u318B", + "\u1192", + "\u318C", + "\u1194", + "\u318D", + "\u119E", + "\u318E", + "\u11A1", + "\u3200", + "\u0028\u1100\u0029", + "\u3201", + "\u0028\u1102\u0029", + "\u3202", + "\u0028\u1103\u0029", + "\u3203", + "\u0028\u1105\u0029", + "\u3204", + "\u0028\u1106\u0029", + "\u3205", + "\u0028\u1107\u0029", + "\u3206", + "\u0028\u1109\u0029", + "\u3207", + "\u0028\u110B\u0029", + "\u3208", + "\u0028\u110C\u0029", + "\u3209", + "\u0028\u110E\u0029", + "\u320A", + "\u0028\u110F\u0029", + "\u320B", + "\u0028\u1110\u0029", + "\u320C", + "\u0028\u1111\u0029", + "\u320D", + "\u0028\u1112\u0029", + "\u320E", + "\u0028\u1100\u1161\u0029", + "\u320F", + "\u0028\u1102\u1161\u0029", + "\u3210", + "\u0028\u1103\u1161\u0029", + "\u3211", + "\u0028\u1105\u1161\u0029", + "\u3212", + "\u0028\u1106\u1161\u0029", + "\u3213", + "\u0028\u1107\u1161\u0029", + "\u3214", + "\u0028\u1109\u1161\u0029", + "\u3215", + "\u0028\u110B\u1161\u0029", + "\u3216", + "\u0028\u110C\u1161\u0029", + "\u3217", + "\u0028\u110E\u1161\u0029", + "\u3218", + "\u0028\u110F\u1161\u0029", + "\u3219", + "\u0028\u1110\u1161\u0029", + "\u321A", + "\u0028\u1111\u1161\u0029", + "\u321B", + "\u0028\u1112\u1161\u0029", + "\u321C", + "\u0028\u110C\u116E\u0029", + "\u321D", + "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029", + "\u321E", + "\u0028\u110B\u1169\u1112\u116E\u0029", + "\u3220", + "\u0028\u4E00\u0029", + "\u3221", + "\u0028\u4E8C\u0029", + "\u3222", + "\u0028\u4E09\u0029", + "\u3223", + "\u0028\u56DB\u0029", + "\u3224", + "\u0028\u4E94\u0029", + "\u3225", + "\u0028\u516D\u0029", + "\u3226", + "\u0028\u4E03\u0029", + "\u3227", + "\u0028\u516B\u0029", + "\u3228", + "\u0028\u4E5D\u0029", + "\u3229", + "\u0028\u5341\u0029", + "\u322A", + "\u0028\u6708\u0029", + "\u322B", + "\u0028\u706B\u0029", + "\u322C", + "\u0028\u6C34\u0029", + "\u322D", + "\u0028\u6728\u0029", + "\u322E", + "\u0028\u91D1\u0029", + "\u322F", + "\u0028\u571F\u0029", + "\u3230", + "\u0028\u65E5\u0029", + "\u3231", + "\u0028\u682A\u0029", + "\u3232", + "\u0028\u6709\u0029", + "\u3233", + "\u0028\u793E\u0029", + "\u3234", + "\u0028\u540D\u0029", + "\u3235", + "\u0028\u7279\u0029", + "\u3236", + "\u0028\u8CA1\u0029", + "\u3237", + "\u0028\u795D\u0029", + "\u3238", + "\u0028\u52B4\u0029", + "\u3239", + "\u0028\u4EE3\u0029", + "\u323A", + "\u0028\u547C\u0029", + "\u323B", + "\u0028\u5B66\u0029", + "\u323C", + "\u0028\u76E3\u0029", + "\u323D", + "\u0028\u4F01\u0029", + "\u323E", + "\u0028\u8CC7\u0029", + "\u323F", + "\u0028\u5354\u0029", + "\u3240", + "\u0028\u796D\u0029", + "\u3241", + "\u0028\u4F11\u0029", + "\u3242", + "\u0028\u81EA\u0029", + "\u3243", + "\u0028\u81F3\u0029", + "\u32C0", + "\u0031\u6708", + "\u32C1", + "\u0032\u6708", + "\u32C2", + "\u0033\u6708", + "\u32C3", + "\u0034\u6708", + "\u32C4", + "\u0035\u6708", + "\u32C5", + "\u0036\u6708", + "\u32C6", + "\u0037\u6708", + "\u32C7", + "\u0038\u6708", + "\u32C8", + "\u0039\u6708", + "\u32C9", + "\u0031\u0030\u6708", + "\u32CA", + "\u0031\u0031\u6708", + "\u32CB", + "\u0031\u0032\u6708", + "\u3358", + "\u0030\u70B9", + "\u3359", + "\u0031\u70B9", + "\u335A", + "\u0032\u70B9", + "\u335B", + "\u0033\u70B9", + "\u335C", + "\u0034\u70B9", + "\u335D", + "\u0035\u70B9", + "\u335E", + "\u0036\u70B9", + "\u335F", + "\u0037\u70B9", + "\u3360", + "\u0038\u70B9", + "\u3361", + "\u0039\u70B9", + "\u3362", + "\u0031\u0030\u70B9", + "\u3363", + "\u0031\u0031\u70B9", + "\u3364", + "\u0031\u0032\u70B9", + "\u3365", + "\u0031\u0033\u70B9", + "\u3366", + "\u0031\u0034\u70B9", + "\u3367", + "\u0031\u0035\u70B9", + "\u3368", + "\u0031\u0036\u70B9", + "\u3369", + "\u0031\u0037\u70B9", + "\u336A", + "\u0031\u0038\u70B9", + "\u336B", + "\u0031\u0039\u70B9", + "\u336C", + "\u0032\u0030\u70B9", + "\u336D", + "\u0032\u0031\u70B9", + "\u336E", + "\u0032\u0032\u70B9", + "\u336F", + "\u0032\u0033\u70B9", + "\u3370", + "\u0032\u0034\u70B9", + "\u33E0", + "\u0031\u65E5", + "\u33E1", + "\u0032\u65E5", + "\u33E2", + "\u0033\u65E5", + "\u33E3", + "\u0034\u65E5", + "\u33E4", + "\u0035\u65E5", + "\u33E5", + "\u0036\u65E5", + "\u33E6", + "\u0037\u65E5", + "\u33E7", + "\u0038\u65E5", + "\u33E8", + "\u0039\u65E5", + "\u33E9", + "\u0031\u0030\u65E5", + "\u33EA", + "\u0031\u0031\u65E5", + "\u33EB", + "\u0031\u0032\u65E5", + "\u33EC", + "\u0031\u0033\u65E5", + "\u33ED", + "\u0031\u0034\u65E5", + "\u33EE", + "\u0031\u0035\u65E5", + "\u33EF", + "\u0031\u0036\u65E5", + "\u33F0", + "\u0031\u0037\u65E5", + "\u33F1", + "\u0031\u0038\u65E5", + "\u33F2", + "\u0031\u0039\u65E5", + "\u33F3", + "\u0032\u0030\u65E5", + "\u33F4", + "\u0032\u0031\u65E5", + "\u33F5", + "\u0032\u0032\u65E5", + "\u33F6", + "\u0032\u0033\u65E5", + "\u33F7", + "\u0032\u0034\u65E5", + "\u33F8", + "\u0032\u0035\u65E5", + "\u33F9", + "\u0032\u0036\u65E5", + "\u33FA", + "\u0032\u0037\u65E5", + "\u33FB", + "\u0032\u0038\u65E5", + "\u33FC", + "\u0032\u0039\u65E5", + "\u33FD", + "\u0033\u0030\u65E5", + "\u33FE", + "\u0033\u0031\u65E5", + "\uFB00", + "\u0066\u0066", + "\uFB01", + "\u0066\u0069", + "\uFB02", + "\u0066\u006C", + "\uFB03", + "\u0066\u0066\u0069", + "\uFB04", + "\u0066\u0066\u006C", + "\uFB05", + "\u017F\u0074", + "\uFB06", + "\u0073\u0074", + "\uFB13", + "\u0574\u0576", + "\uFB14", + "\u0574\u0565", + "\uFB15", + "\u0574\u056B", + "\uFB16", + "\u057E\u0576", + "\uFB17", + "\u0574\u056D", + "\uFB4F", + "\u05D0\u05DC", + "\uFB50", + "\u0671", + "\uFB51", + "\u0671", + "\uFB52", + "\u067B", + "\uFB53", + "\u067B", + "\uFB54", + "\u067B", + "\uFB55", + "\u067B", + "\uFB56", + "\u067E", + "\uFB57", + "\u067E", + "\uFB58", + "\u067E", + "\uFB59", + "\u067E", + "\uFB5A", + "\u0680", + "\uFB5B", + "\u0680", + "\uFB5C", + "\u0680", + "\uFB5D", + "\u0680", + "\uFB5E", + "\u067A", + "\uFB5F", + "\u067A", + "\uFB60", + "\u067A", + "\uFB61", + "\u067A", + "\uFB62", + "\u067F", + "\uFB63", + "\u067F", + "\uFB64", + "\u067F", + "\uFB65", + "\u067F", + "\uFB66", + "\u0679", + "\uFB67", + "\u0679", + "\uFB68", + "\u0679", + "\uFB69", + "\u0679", + "\uFB6A", + "\u06A4", + "\uFB6B", + "\u06A4", + "\uFB6C", + "\u06A4", + "\uFB6D", + "\u06A4", + "\uFB6E", + "\u06A6", + "\uFB6F", + "\u06A6", + "\uFB70", + "\u06A6", + "\uFB71", + "\u06A6", + "\uFB72", + "\u0684", + "\uFB73", + "\u0684", + "\uFB74", + "\u0684", + "\uFB75", + "\u0684", + "\uFB76", + "\u0683", + "\uFB77", + "\u0683", + "\uFB78", + "\u0683", + "\uFB79", + "\u0683", + "\uFB7A", + "\u0686", + "\uFB7B", + "\u0686", + "\uFB7C", + "\u0686", + "\uFB7D", + "\u0686", + "\uFB7E", + "\u0687", + "\uFB7F", + "\u0687", + "\uFB80", + "\u0687", + "\uFB81", + "\u0687", + "\uFB82", + "\u068D", + "\uFB83", + "\u068D", + "\uFB84", + "\u068C", + "\uFB85", + "\u068C", + "\uFB86", + "\u068E", + "\uFB87", + "\u068E", + "\uFB88", + "\u0688", + "\uFB89", + "\u0688", + "\uFB8A", + "\u0698", + "\uFB8B", + "\u0698", + "\uFB8C", + "\u0691", + "\uFB8D", + "\u0691", + "\uFB8E", + "\u06A9", + "\uFB8F", + "\u06A9", + "\uFB90", + "\u06A9", + "\uFB91", + "\u06A9", + "\uFB92", + "\u06AF", + "\uFB93", + "\u06AF", + "\uFB94", + "\u06AF", + "\uFB95", + "\u06AF", + "\uFB96", + "\u06B3", + "\uFB97", + "\u06B3", + "\uFB98", + "\u06B3", + "\uFB99", + "\u06B3", + "\uFB9A", + "\u06B1", + "\uFB9B", + "\u06B1", + "\uFB9C", + "\u06B1", + "\uFB9D", + "\u06B1", + "\uFB9E", + "\u06BA", + "\uFB9F", + "\u06BA", + "\uFBA0", + "\u06BB", + "\uFBA1", + "\u06BB", + "\uFBA2", + "\u06BB", + "\uFBA3", + "\u06BB", + "\uFBA4", + "\u06C0", + "\uFBA5", + "\u06C0", + "\uFBA6", + "\u06C1", + "\uFBA7", + "\u06C1", + "\uFBA8", + "\u06C1", + "\uFBA9", + "\u06C1", + "\uFBAA", + "\u06BE", + "\uFBAB", + "\u06BE", + "\uFBAC", + "\u06BE", + "\uFBAD", + "\u06BE", + "\uFBAE", + "\u06D2", + "\uFBAF", + "\u06D2", + "\uFBB0", + "\u06D3", + "\uFBB1", + "\u06D3", + "\uFBD3", + "\u06AD", + "\uFBD4", + "\u06AD", + "\uFBD5", + "\u06AD", + "\uFBD6", + "\u06AD", + "\uFBD7", + "\u06C7", + "\uFBD8", + "\u06C7", + "\uFBD9", + "\u06C6", + "\uFBDA", + "\u06C6", + "\uFBDB", + "\u06C8", + "\uFBDC", + "\u06C8", + "\uFBDD", + "\u0677", + "\uFBDE", + "\u06CB", + "\uFBDF", + "\u06CB", + "\uFBE0", + "\u06C5", + "\uFBE1", + "\u06C5", + "\uFBE2", + "\u06C9", + "\uFBE3", + "\u06C9", + "\uFBE4", + "\u06D0", + "\uFBE5", + "\u06D0", + "\uFBE6", + "\u06D0", + "\uFBE7", + "\u06D0", + "\uFBE8", + "\u0649", + "\uFBE9", + "\u0649", + "\uFBEA", + "\u0626\u0627", + "\uFBEB", + "\u0626\u0627", + "\uFBEC", + "\u0626\u06D5", + "\uFBED", + "\u0626\u06D5", + "\uFBEE", + "\u0626\u0648", + "\uFBEF", + "\u0626\u0648", + "\uFBF0", + "\u0626\u06C7", + "\uFBF1", + "\u0626\u06C7", + "\uFBF2", + "\u0626\u06C6", + "\uFBF3", + "\u0626\u06C6", + "\uFBF4", + "\u0626\u06C8", + "\uFBF5", + "\u0626\u06C8", + "\uFBF6", + "\u0626\u06D0", + "\uFBF7", + "\u0626\u06D0", + "\uFBF8", + "\u0626\u06D0", + "\uFBF9", + "\u0626\u0649", + "\uFBFA", + "\u0626\u0649", + "\uFBFB", + "\u0626\u0649", + "\uFBFC", + "\u06CC", + "\uFBFD", + "\u06CC", + "\uFBFE", + "\u06CC", + "\uFBFF", + "\u06CC", + "\uFC00", + "\u0626\u062C", + "\uFC01", + "\u0626\u062D", + "\uFC02", + "\u0626\u0645", + "\uFC03", + "\u0626\u0649", + "\uFC04", + "\u0626\u064A", + "\uFC05", + "\u0628\u062C", + "\uFC06", + "\u0628\u062D", + "\uFC07", + "\u0628\u062E", + "\uFC08", + "\u0628\u0645", + "\uFC09", + "\u0628\u0649", + "\uFC0A", + "\u0628\u064A", + "\uFC0B", + "\u062A\u062C", + "\uFC0C", + "\u062A\u062D", + "\uFC0D", + "\u062A\u062E", + "\uFC0E", + "\u062A\u0645", + "\uFC0F", + "\u062A\u0649", + "\uFC10", + "\u062A\u064A", + "\uFC11", + "\u062B\u062C", + "\uFC12", + "\u062B\u0645", + "\uFC13", + "\u062B\u0649", + "\uFC14", + "\u062B\u064A", + "\uFC15", + "\u062C\u062D", + "\uFC16", + "\u062C\u0645", + "\uFC17", + "\u062D\u062C", + "\uFC18", + "\u062D\u0645", + "\uFC19", + "\u062E\u062C", + "\uFC1A", + "\u062E\u062D", + "\uFC1B", + "\u062E\u0645", + "\uFC1C", + "\u0633\u062C", + "\uFC1D", + "\u0633\u062D", + "\uFC1E", + "\u0633\u062E", + "\uFC1F", + "\u0633\u0645", + "\uFC20", + "\u0635\u062D", + "\uFC21", + "\u0635\u0645", + "\uFC22", + "\u0636\u062C", + "\uFC23", + "\u0636\u062D", + "\uFC24", + "\u0636\u062E", + "\uFC25", + "\u0636\u0645", + "\uFC26", + "\u0637\u062D", + "\uFC27", + "\u0637\u0645", + "\uFC28", + "\u0638\u0645", + "\uFC29", + "\u0639\u062C", + "\uFC2A", + "\u0639\u0645", + "\uFC2B", + "\u063A\u062C", + "\uFC2C", + "\u063A\u0645", + "\uFC2D", + "\u0641\u062C", + "\uFC2E", + "\u0641\u062D", + "\uFC2F", + "\u0641\u062E", + "\uFC30", + "\u0641\u0645", + "\uFC31", + "\u0641\u0649", + "\uFC32", + "\u0641\u064A", + "\uFC33", + "\u0642\u062D", + "\uFC34", + "\u0642\u0645", + "\uFC35", + "\u0642\u0649", + "\uFC36", + "\u0642\u064A", + "\uFC37", + "\u0643\u0627", + "\uFC38", + "\u0643\u062C", + "\uFC39", + "\u0643\u062D", + "\uFC3A", + "\u0643\u062E", + "\uFC3B", + "\u0643\u0644", + "\uFC3C", + "\u0643\u0645", + "\uFC3D", + "\u0643\u0649", + "\uFC3E", + "\u0643\u064A", + "\uFC3F", + "\u0644\u062C", + "\uFC40", + "\u0644\u062D", + "\uFC41", + "\u0644\u062E", + "\uFC42", + "\u0644\u0645", + "\uFC43", + "\u0644\u0649", + "\uFC44", + "\u0644\u064A", + "\uFC45", + "\u0645\u062C", + "\uFC46", + "\u0645\u062D", + "\uFC47", + "\u0645\u062E", + "\uFC48", + "\u0645\u0645", + "\uFC49", + "\u0645\u0649", + "\uFC4A", + "\u0645\u064A", + "\uFC4B", + "\u0646\u062C", + "\uFC4C", + "\u0646\u062D", + "\uFC4D", + "\u0646\u062E", + "\uFC4E", + "\u0646\u0645", + "\uFC4F", + "\u0646\u0649", + "\uFC50", + "\u0646\u064A", + "\uFC51", + "\u0647\u062C", + "\uFC52", + "\u0647\u0645", + "\uFC53", + "\u0647\u0649", + "\uFC54", + "\u0647\u064A", + "\uFC55", + "\u064A\u062C", + "\uFC56", + "\u064A\u062D", + "\uFC57", + "\u064A\u062E", + "\uFC58", + "\u064A\u0645", + "\uFC59", + "\u064A\u0649", + "\uFC5A", + "\u064A\u064A", + "\uFC5B", + "\u0630\u0670", + "\uFC5C", + "\u0631\u0670", + "\uFC5D", + "\u0649\u0670", + "\uFC5E", + "\u0020\u064C\u0651", + "\uFC5F", + "\u0020\u064D\u0651", + "\uFC60", + "\u0020\u064E\u0651", + "\uFC61", + "\u0020\u064F\u0651", + "\uFC62", + "\u0020\u0650\u0651", + "\uFC63", + "\u0020\u0651\u0670", + "\uFC64", + "\u0626\u0631", + "\uFC65", + "\u0626\u0632", + "\uFC66", + "\u0626\u0645", + "\uFC67", + "\u0626\u0646", + "\uFC68", + "\u0626\u0649", + "\uFC69", + "\u0626\u064A", + "\uFC6A", + "\u0628\u0631", + "\uFC6B", + "\u0628\u0632", + "\uFC6C", + "\u0628\u0645", + "\uFC6D", + "\u0628\u0646", + "\uFC6E", + "\u0628\u0649", + "\uFC6F", + "\u0628\u064A", + "\uFC70", + "\u062A\u0631", + "\uFC71", + "\u062A\u0632", + "\uFC72", + "\u062A\u0645", + "\uFC73", + "\u062A\u0646", + "\uFC74", + "\u062A\u0649", + "\uFC75", + "\u062A\u064A", + "\uFC76", + "\u062B\u0631", + "\uFC77", + "\u062B\u0632", + "\uFC78", + "\u062B\u0645", + "\uFC79", + "\u062B\u0646", + "\uFC7A", + "\u062B\u0649", + "\uFC7B", + "\u062B\u064A", + "\uFC7C", + "\u0641\u0649", + "\uFC7D", + "\u0641\u064A", + "\uFC7E", + "\u0642\u0649", + "\uFC7F", + "\u0642\u064A", + "\uFC80", + "\u0643\u0627", + "\uFC81", + "\u0643\u0644", + "\uFC82", + "\u0643\u0645", + "\uFC83", + "\u0643\u0649", + "\uFC84", + "\u0643\u064A", + "\uFC85", + "\u0644\u0645", + "\uFC86", + "\u0644\u0649", + "\uFC87", + "\u0644\u064A", + "\uFC88", + "\u0645\u0627", + "\uFC89", + "\u0645\u0645", + "\uFC8A", + "\u0646\u0631", + "\uFC8B", + "\u0646\u0632", + "\uFC8C", + "\u0646\u0645", + "\uFC8D", + "\u0646\u0646", + "\uFC8E", + "\u0646\u0649", + "\uFC8F", + "\u0646\u064A", + "\uFC90", + "\u0649\u0670", + "\uFC91", + "\u064A\u0631", + "\uFC92", + "\u064A\u0632", + "\uFC93", + "\u064A\u0645", + "\uFC94", + "\u064A\u0646", + "\uFC95", + "\u064A\u0649", + "\uFC96", + "\u064A\u064A", + "\uFC97", + "\u0626\u062C", + "\uFC98", + "\u0626\u062D", + "\uFC99", + "\u0626\u062E", + "\uFC9A", + "\u0626\u0645", + "\uFC9B", + "\u0626\u0647", + "\uFC9C", + "\u0628\u062C", + "\uFC9D", + "\u0628\u062D", + "\uFC9E", + "\u0628\u062E", + "\uFC9F", + "\u0628\u0645", + "\uFCA0", + "\u0628\u0647", + "\uFCA1", + "\u062A\u062C", + "\uFCA2", + "\u062A\u062D", + "\uFCA3", + "\u062A\u062E", + "\uFCA4", + "\u062A\u0645", + "\uFCA5", + "\u062A\u0647", + "\uFCA6", + "\u062B\u0645", + "\uFCA7", + "\u062C\u062D", + "\uFCA8", + "\u062C\u0645", + "\uFCA9", + "\u062D\u062C", + "\uFCAA", + "\u062D\u0645", + "\uFCAB", + "\u062E\u062C", + "\uFCAC", + "\u062E\u0645", + "\uFCAD", + "\u0633\u062C", + "\uFCAE", + "\u0633\u062D", + "\uFCAF", + "\u0633\u062E", + "\uFCB0", + "\u0633\u0645", + "\uFCB1", + "\u0635\u062D", + "\uFCB2", + "\u0635\u062E", + "\uFCB3", + "\u0635\u0645", + "\uFCB4", + "\u0636\u062C", + "\uFCB5", + "\u0636\u062D", + "\uFCB6", + "\u0636\u062E", + "\uFCB7", + "\u0636\u0645", + "\uFCB8", + "\u0637\u062D", + "\uFCB9", + "\u0638\u0645", + "\uFCBA", + "\u0639\u062C", + "\uFCBB", + "\u0639\u0645", + "\uFCBC", + "\u063A\u062C", + "\uFCBD", + "\u063A\u0645", + "\uFCBE", + "\u0641\u062C", + "\uFCBF", + "\u0641\u062D", + "\uFCC0", + "\u0641\u062E", + "\uFCC1", + "\u0641\u0645", + "\uFCC2", + "\u0642\u062D", + "\uFCC3", + "\u0642\u0645", + "\uFCC4", + "\u0643\u062C", + "\uFCC5", + "\u0643\u062D", + "\uFCC6", + "\u0643\u062E", + "\uFCC7", + "\u0643\u0644", + "\uFCC8", + "\u0643\u0645", + "\uFCC9", + "\u0644\u062C", + "\uFCCA", + "\u0644\u062D", + "\uFCCB", + "\u0644\u062E", + "\uFCCC", + "\u0644\u0645", + "\uFCCD", + "\u0644\u0647", + "\uFCCE", + "\u0645\u062C", + "\uFCCF", + "\u0645\u062D", + "\uFCD0", + "\u0645\u062E", + "\uFCD1", + "\u0645\u0645", + "\uFCD2", + "\u0646\u062C", + "\uFCD3", + "\u0646\u062D", + "\uFCD4", + "\u0646\u062E", + "\uFCD5", + "\u0646\u0645", + "\uFCD6", + "\u0646\u0647", + "\uFCD7", + "\u0647\u062C", + "\uFCD8", + "\u0647\u0645", + "\uFCD9", + "\u0647\u0670", + "\uFCDA", + "\u064A\u062C", + "\uFCDB", + "\u064A\u062D", + "\uFCDC", + "\u064A\u062E", + "\uFCDD", + "\u064A\u0645", + "\uFCDE", + "\u064A\u0647", + "\uFCDF", + "\u0626\u0645", + "\uFCE0", + "\u0626\u0647", + "\uFCE1", + "\u0628\u0645", + "\uFCE2", + "\u0628\u0647", + "\uFCE3", + "\u062A\u0645", + "\uFCE4", + "\u062A\u0647", + "\uFCE5", + "\u062B\u0645", + "\uFCE6", + "\u062B\u0647", + "\uFCE7", + "\u0633\u0645", + "\uFCE8", + "\u0633\u0647", + "\uFCE9", + "\u0634\u0645", + "\uFCEA", + "\u0634\u0647", + "\uFCEB", + "\u0643\u0644", + "\uFCEC", + "\u0643\u0645", + "\uFCED", + "\u0644\u0645", + "\uFCEE", + "\u0646\u0645", + "\uFCEF", + "\u0646\u0647", + "\uFCF0", + "\u064A\u0645", + "\uFCF1", + "\u064A\u0647", + "\uFCF2", + "\u0640\u064E\u0651", + "\uFCF3", + "\u0640\u064F\u0651", + "\uFCF4", + "\u0640\u0650\u0651", + "\uFCF5", + "\u0637\u0649", + "\uFCF6", + "\u0637\u064A", + "\uFCF7", + "\u0639\u0649", + "\uFCF8", + "\u0639\u064A", + "\uFCF9", + "\u063A\u0649", + "\uFCFA", + "\u063A\u064A", + "\uFCFB", + "\u0633\u0649", + "\uFCFC", + "\u0633\u064A", + "\uFCFD", + "\u0634\u0649", + "\uFCFE", + "\u0634\u064A", + "\uFCFF", + "\u062D\u0649", + "\uFD00", + "\u062D\u064A", + "\uFD01", + "\u062C\u0649", + "\uFD02", + "\u062C\u064A", + "\uFD03", + "\u062E\u0649", + "\uFD04", + "\u062E\u064A", + "\uFD05", + "\u0635\u0649", + "\uFD06", + "\u0635\u064A", + "\uFD07", + "\u0636\u0649", + "\uFD08", + "\u0636\u064A", + "\uFD09", + "\u0634\u062C", + "\uFD0A", + "\u0634\u062D", + "\uFD0B", + "\u0634\u062E", + "\uFD0C", + "\u0634\u0645", + "\uFD0D", + "\u0634\u0631", + "\uFD0E", + "\u0633\u0631", + "\uFD0F", + "\u0635\u0631", + "\uFD10", + "\u0636\u0631", + "\uFD11", + "\u0637\u0649", + "\uFD12", + "\u0637\u064A", + "\uFD13", + "\u0639\u0649", + "\uFD14", + "\u0639\u064A", + "\uFD15", + "\u063A\u0649", + "\uFD16", + "\u063A\u064A", + "\uFD17", + "\u0633\u0649", + "\uFD18", + "\u0633\u064A", + "\uFD19", + "\u0634\u0649", + "\uFD1A", + "\u0634\u064A", + "\uFD1B", + "\u062D\u0649", + "\uFD1C", + "\u062D\u064A", + "\uFD1D", + "\u062C\u0649", + "\uFD1E", + "\u062C\u064A", + "\uFD1F", + "\u062E\u0649", + "\uFD20", + "\u062E\u064A", + "\uFD21", + "\u0635\u0649", + "\uFD22", + "\u0635\u064A", + "\uFD23", + "\u0636\u0649", + "\uFD24", + "\u0636\u064A", + "\uFD25", + "\u0634\u062C", + "\uFD26", + "\u0634\u062D", + "\uFD27", + "\u0634\u062E", + "\uFD28", + "\u0634\u0645", + "\uFD29", + "\u0634\u0631", + "\uFD2A", + "\u0633\u0631", + "\uFD2B", + "\u0635\u0631", + "\uFD2C", + "\u0636\u0631", + "\uFD2D", + "\u0634\u062C", + "\uFD2E", + "\u0634\u062D", + "\uFD2F", + "\u0634\u062E", + "\uFD30", + "\u0634\u0645", + "\uFD31", + "\u0633\u0647", + "\uFD32", + "\u0634\u0647", + "\uFD33", + "\u0637\u0645", + "\uFD34", + "\u0633\u062C", + "\uFD35", + "\u0633\u062D", + "\uFD36", + "\u0633\u062E", + "\uFD37", + "\u0634\u062C", + "\uFD38", + "\u0634\u062D", + "\uFD39", + "\u0634\u062E", + "\uFD3A", + "\u0637\u0645", + "\uFD3B", + "\u0638\u0645", + "\uFD3C", + "\u0627\u064B", + "\uFD3D", + "\u0627\u064B", + "\uFD50", + "\u062A\u062C\u0645", + "\uFD51", + "\u062A\u062D\u062C", + "\uFD52", + "\u062A\u062D\u062C", + "\uFD53", + "\u062A\u062D\u0645", + "\uFD54", + "\u062A\u062E\u0645", + "\uFD55", + "\u062A\u0645\u062C", + "\uFD56", + "\u062A\u0645\u062D", + "\uFD57", + "\u062A\u0645\u062E", + "\uFD58", + "\u062C\u0645\u062D", + "\uFD59", + "\u062C\u0645\u062D", + "\uFD5A", + "\u062D\u0645\u064A", + "\uFD5B", + "\u062D\u0645\u0649", + "\uFD5C", + "\u0633\u062D\u062C", + "\uFD5D", + "\u0633\u062C\u062D", + "\uFD5E", + "\u0633\u062C\u0649", + "\uFD5F", + "\u0633\u0645\u062D", + "\uFD60", + "\u0633\u0645\u062D", + "\uFD61", + "\u0633\u0645\u062C", + "\uFD62", + "\u0633\u0645\u0645", + "\uFD63", + "\u0633\u0645\u0645", + "\uFD64", + "\u0635\u062D\u062D", + "\uFD65", + "\u0635\u062D\u062D", + "\uFD66", + "\u0635\u0645\u0645", + "\uFD67", + "\u0634\u062D\u0645", + "\uFD68", + "\u0634\u062D\u0645", + "\uFD69", + "\u0634\u062C\u064A", + "\uFD6A", + "\u0634\u0645\u062E", + "\uFD6B", + "\u0634\u0645\u062E", + "\uFD6C", + "\u0634\u0645\u0645", + "\uFD6D", + "\u0634\u0645\u0645", + "\uFD6E", + "\u0636\u062D\u0649", + "\uFD6F", + "\u0636\u062E\u0645", + "\uFD70", + "\u0636\u062E\u0645", + "\uFD71", + "\u0637\u0645\u062D", + "\uFD72", + "\u0637\u0645\u062D", + "\uFD73", + "\u0637\u0645\u0645", + "\uFD74", + "\u0637\u0645\u064A", + "\uFD75", + "\u0639\u062C\u0645", + "\uFD76", + "\u0639\u0645\u0645", + "\uFD77", + "\u0639\u0645\u0645", + "\uFD78", + "\u0639\u0645\u0649", + "\uFD79", + "\u063A\u0645\u0645", + "\uFD7A", + "\u063A\u0645\u064A", + "\uFD7B", + "\u063A\u0645\u0649", + "\uFD7C", + "\u0641\u062E\u0645", + "\uFD7D", + "\u0641\u062E\u0645", + "\uFD7E", + "\u0642\u0645\u062D", + "\uFD7F", + "\u0642\u0645\u0645", + "\uFD80", + "\u0644\u062D\u0645", + "\uFD81", + "\u0644\u062D\u064A", + "\uFD82", + "\u0644\u062D\u0649", + "\uFD83", + "\u0644\u062C\u062C", + "\uFD84", + "\u0644\u062C\u062C", + "\uFD85", + "\u0644\u062E\u0645", + "\uFD86", + "\u0644\u062E\u0645", + "\uFD87", + "\u0644\u0645\u062D", + "\uFD88", + "\u0644\u0645\u062D", + "\uFD89", + "\u0645\u062D\u062C", + "\uFD8A", + "\u0645\u062D\u0645", + "\uFD8B", + "\u0645\u062D\u064A", + "\uFD8C", + "\u0645\u062C\u062D", + "\uFD8D", + "\u0645\u062C\u0645", + "\uFD8E", + "\u0645\u062E\u062C", + "\uFD8F", + "\u0645\u062E\u0645", + "\uFD92", + "\u0645\u062C\u062E", + "\uFD93", + "\u0647\u0645\u062C", + "\uFD94", + "\u0647\u0645\u0645", + "\uFD95", + "\u0646\u062D\u0645", + "\uFD96", + "\u0646\u062D\u0649", + "\uFD97", + "\u0646\u062C\u0645", + "\uFD98", + "\u0646\u062C\u0645", + "\uFD99", + "\u0646\u062C\u0649", + "\uFD9A", + "\u0646\u0645\u064A", + "\uFD9B", + "\u0646\u0645\u0649", + "\uFD9C", + "\u064A\u0645\u0645", + "\uFD9D", + "\u064A\u0645\u0645", + "\uFD9E", + "\u0628\u062E\u064A", + "\uFD9F", + "\u062A\u062C\u064A", + "\uFDA0", + "\u062A\u062C\u0649", + "\uFDA1", + "\u062A\u062E\u064A", + "\uFDA2", + "\u062A\u062E\u0649", + "\uFDA3", + "\u062A\u0645\u064A", + "\uFDA4", + "\u062A\u0645\u0649", + "\uFDA5", + "\u062C\u0645\u064A", + "\uFDA6", + "\u062C\u062D\u0649", + "\uFDA7", + "\u062C\u0645\u0649", + "\uFDA8", + "\u0633\u062E\u0649", + "\uFDA9", + "\u0635\u062D\u064A", + "\uFDAA", + "\u0634\u062D\u064A", + "\uFDAB", + "\u0636\u062D\u064A", + "\uFDAC", + "\u0644\u062C\u064A", + "\uFDAD", + "\u0644\u0645\u064A", + "\uFDAE", + "\u064A\u062D\u064A", + "\uFDAF", + "\u064A\u062C\u064A", + "\uFDB0", + "\u064A\u0645\u064A", + "\uFDB1", + "\u0645\u0645\u064A", + "\uFDB2", + "\u0642\u0645\u064A", + "\uFDB3", + "\u0646\u062D\u064A", + "\uFDB4", + "\u0642\u0645\u062D", + "\uFDB5", + "\u0644\u062D\u0645", + "\uFDB6", + "\u0639\u0645\u064A", + "\uFDB7", + "\u0643\u0645\u064A", + "\uFDB8", + "\u0646\u062C\u062D", + "\uFDB9", + "\u0645\u062E\u064A", + "\uFDBA", + "\u0644\u062C\u0645", + "\uFDBB", + "\u0643\u0645\u0645", + "\uFDBC", + "\u0644\u062C\u0645", + "\uFDBD", + "\u0646\u062C\u062D", + "\uFDBE", + "\u062C\u062D\u064A", + "\uFDBF", + "\u062D\u062C\u064A", + "\uFDC0", + "\u0645\u062C\u064A", + "\uFDC1", + "\u0641\u0645\u064A", + "\uFDC2", + "\u0628\u062D\u064A", + "\uFDC3", + "\u0643\u0645\u0645", + "\uFDC4", + "\u0639\u062C\u0645", + "\uFDC5", + "\u0635\u0645\u0645", + "\uFDC6", + "\u0633\u062E\u064A", + "\uFDC7", + "\u0646\u062C\u064A", + "\uFE49", + "\u203E", + "\uFE4A", + "\u203E", + "\uFE4B", + "\u203E", + "\uFE4C", + "\u203E", + "\uFE4D", + "\u005F", + "\uFE4E", + "\u005F", + "\uFE4F", + "\u005F", + "\uFE80", + "\u0621", + "\uFE81", + "\u0622", + "\uFE82", + "\u0622", + "\uFE83", + "\u0623", + "\uFE84", + "\u0623", + "\uFE85", + "\u0624", + "\uFE86", + "\u0624", + "\uFE87", + "\u0625", + "\uFE88", + "\u0625", + "\uFE89", + "\u0626", + "\uFE8A", + "\u0626", + "\uFE8B", + "\u0626", + "\uFE8C", + "\u0626", + "\uFE8D", + "\u0627", + "\uFE8E", + "\u0627", + "\uFE8F", + "\u0628", + "\uFE90", + "\u0628", + "\uFE91", + "\u0628", + "\uFE92", + "\u0628", + "\uFE93", + "\u0629", + "\uFE94", + "\u0629", + "\uFE95", + "\u062A", + "\uFE96", + "\u062A", + "\uFE97", + "\u062A", + "\uFE98", + "\u062A", + "\uFE99", + "\u062B", + "\uFE9A", + "\u062B", + "\uFE9B", + "\u062B", + "\uFE9C", + "\u062B", + "\uFE9D", + "\u062C", + "\uFE9E", + "\u062C", + "\uFE9F", + "\u062C", + "\uFEA0", + "\u062C", + "\uFEA1", + "\u062D", + "\uFEA2", + "\u062D", + "\uFEA3", + "\u062D", + "\uFEA4", + "\u062D", + "\uFEA5", + "\u062E", + "\uFEA6", + "\u062E", + "\uFEA7", + "\u062E", + "\uFEA8", + "\u062E", + "\uFEA9", + "\u062F", + "\uFEAA", + "\u062F", + "\uFEAB", + "\u0630", + "\uFEAC", + "\u0630", + "\uFEAD", + "\u0631", + "\uFEAE", + "\u0631", + "\uFEAF", + "\u0632", + "\uFEB0", + "\u0632", + "\uFEB1", + "\u0633", + "\uFEB2", + "\u0633", + "\uFEB3", + "\u0633", + "\uFEB4", + "\u0633", + "\uFEB5", + "\u0634", + "\uFEB6", + "\u0634", + "\uFEB7", + "\u0634", + "\uFEB8", + "\u0634", + "\uFEB9", + "\u0635", + "\uFEBA", + "\u0635", + "\uFEBB", + "\u0635", + "\uFEBC", + "\u0635", + "\uFEBD", + "\u0636", + "\uFEBE", + "\u0636", + "\uFEBF", + "\u0636", + "\uFEC0", + "\u0636", + "\uFEC1", + "\u0637", + "\uFEC2", + "\u0637", + "\uFEC3", + "\u0637", + "\uFEC4", + "\u0637", + "\uFEC5", + "\u0638", + "\uFEC6", + "\u0638", + "\uFEC7", + "\u0638", + "\uFEC8", + "\u0638", + "\uFEC9", + "\u0639", + "\uFECA", + "\u0639", + "\uFECB", + "\u0639", + "\uFECC", + "\u0639", + "\uFECD", + "\u063A", + "\uFECE", + "\u063A", + "\uFECF", + "\u063A", + "\uFED0", + "\u063A", + "\uFED1", + "\u0641", + "\uFED2", + "\u0641", + "\uFED3", + "\u0641", + "\uFED4", + "\u0641", + "\uFED5", + "\u0642", + "\uFED6", + "\u0642", + "\uFED7", + "\u0642", + "\uFED8", + "\u0642", + "\uFED9", + "\u0643", + "\uFEDA", + "\u0643", + "\uFEDB", + "\u0643", + "\uFEDC", + "\u0643", + "\uFEDD", + "\u0644", + "\uFEDE", + "\u0644", + "\uFEDF", + "\u0644", + "\uFEE0", + "\u0644", + "\uFEE1", + "\u0645", + "\uFEE2", + "\u0645", + "\uFEE3", + "\u0645", + "\uFEE4", + "\u0645", + "\uFEE5", + "\u0646", + "\uFEE6", + "\u0646", + "\uFEE7", + "\u0646", + "\uFEE8", + "\u0646", + "\uFEE9", + "\u0647", + "\uFEEA", + "\u0647", + "\uFEEB", + "\u0647", + "\uFEEC", + "\u0647", + "\uFEED", + "\u0648", + "\uFEEE", + "\u0648", + "\uFEEF", + "\u0649", + "\uFEF0", + "\u0649", + "\uFEF1", + "\u064A", + "\uFEF2", + "\u064A", + "\uFEF3", + "\u064A", + "\uFEF4", + "\u064A", + "\uFEF5", + "\u0644\u0622", + "\uFEF6", + "\u0644\u0622", + "\uFEF7", + "\u0644\u0623", + "\uFEF8", + "\u0644\u0623", + "\uFEF9", + "\u0644\u0625", + "\uFEFA", + "\u0644\u0625", + "\uFEFB", + "\u0644\u0627", + "\uFEFC", + "\u0644\u0627" + ]; +}); +function reverseIfRtl(chars) { + const charsLength = chars.length; + if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { + return chars; + } + const buf = []; + for (let ii = charsLength - 1; ii >= 0; ii--) { + buf.push(chars[ii]); + } + return buf.join(""); +} +const SpecialCharRegExp = new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$", "u"); +const CategoryCache = new Map(); +function getCharUnicodeCategory(char) { + const cachedCategory = CategoryCache.get(char); + if (cachedCategory) { + return cachedCategory; + } + const groups = char.match(SpecialCharRegExp); + const category = { + isWhitespace: !!(groups && groups[1]), + isZeroWidthDiacritic: !!(groups && groups[2]), + isInvisibleFormatMark: !!(groups && groups[3]) + }; + CategoryCache.set(char, category); + return category; +} +function clearUnicodeCaches() { + CategoryCache.clear(); +} + + +/***/ }), +/* 41 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = exports.getFontNameToFileMap = void 0; +exports.getStandardFontName = getStandardFontName; +exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0; + +var _core_utils = __w_pdfjs_require__(6); + +var _fonts_utils = __w_pdfjs_require__(38); + +const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { + t["Times-Roman"] = "Times-Roman"; + t.Helvetica = "Helvetica"; + t.Courier = "Courier"; + t.Symbol = "Symbol"; + t["Times-Bold"] = "Times-Bold"; + t["Helvetica-Bold"] = "Helvetica-Bold"; + t["Courier-Bold"] = "Courier-Bold"; + t.ZapfDingbats = "ZapfDingbats"; + t["Times-Italic"] = "Times-Italic"; + t["Helvetica-Oblique"] = "Helvetica-Oblique"; + t["Courier-Oblique"] = "Courier-Oblique"; + t["Times-BoldItalic"] = "Times-BoldItalic"; + t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; + t["Courier-BoldOblique"] = "Courier-BoldOblique"; + t.ArialNarrow = "Helvetica"; + t["ArialNarrow-Bold"] = "Helvetica-Bold"; + t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; + t["ArialNarrow-Italic"] = "Helvetica-Oblique"; + t.ArialBlack = "Helvetica"; + t["ArialBlack-Bold"] = "Helvetica-Bold"; + t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; + t["ArialBlack-Italic"] = "Helvetica-Oblique"; + t["Arial-Black"] = "Helvetica"; + t["Arial-Black-Bold"] = "Helvetica-Bold"; + t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; + t["Arial-Black-Italic"] = "Helvetica-Oblique"; + t.Arial = "Helvetica"; + t["Arial-Bold"] = "Helvetica-Bold"; + t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; + t["Arial-Italic"] = "Helvetica-Oblique"; + t.ArialMT = "Helvetica"; + t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; + t["Arial-BoldMT"] = "Helvetica-Bold"; + t["Arial-ItalicMT"] = "Helvetica-Oblique"; + t.ArialUnicodeMS = "Helvetica"; + t["ArialUnicodeMS-Bold"] = "Helvetica-Bold"; + t["ArialUnicodeMS-BoldItalic"] = "Helvetica-BoldOblique"; + t["ArialUnicodeMS-Italic"] = "Helvetica-Oblique"; + t["Courier-BoldItalic"] = "Courier-BoldOblique"; + t["Courier-Italic"] = "Courier-Oblique"; + t.CourierNew = "Courier"; + t["CourierNew-Bold"] = "Courier-Bold"; + t["CourierNew-BoldItalic"] = "Courier-BoldOblique"; + t["CourierNew-Italic"] = "Courier-Oblique"; + t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; + t["CourierNewPS-BoldMT"] = "Courier-Bold"; + t["CourierNewPS-ItalicMT"] = "Courier-Oblique"; + t.CourierNewPSMT = "Courier"; + t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; + t["Helvetica-Italic"] = "Helvetica-Oblique"; + t["Symbol-Bold"] = "Symbol"; + t["Symbol-BoldItalic"] = "Symbol"; + t["Symbol-Italic"] = "Symbol"; + t.TimesNewRoman = "Times-Roman"; + t["TimesNewRoman-Bold"] = "Times-Bold"; + t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; + t["TimesNewRoman-Italic"] = "Times-Italic"; + t.TimesNewRomanPS = "Times-Roman"; + t["TimesNewRomanPS-Bold"] = "Times-Bold"; + t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; + t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; + t["TimesNewRomanPS-BoldMT"] = "Times-Bold"; + t["TimesNewRomanPS-Italic"] = "Times-Italic"; + t["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; + t.TimesNewRomanPSMT = "Times-Roman"; + t["TimesNewRomanPSMT-Bold"] = "Times-Bold"; + t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; + t["TimesNewRomanPSMT-Italic"] = "Times-Italic"; +}); +exports.getStdFontMap = getStdFontMap; +const getFontNameToFileMap = (0, _core_utils.getLookupTableFactory)(function (t) { + t.Courier = "FoxitFixed.pfb"; + t["Courier-Bold"] = "FoxitFixedBold.pfb"; + t["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb"; + t["Courier-Oblique"] = "FoxitFixedItalic.pfb"; + t.Helvetica = "FoxitSans.pfb"; + t["Helvetica-Bold"] = "FoxitSansBold.pfb"; + t["Helvetica-BoldOblique"] = "FoxitSansBoldItalic.pfb"; + t["Helvetica-Oblique"] = "FoxitSansItalic.pfb"; + t["Times-Roman"] = "FoxitSerif.pfb"; + t["Times-Bold"] = "FoxitSerifBold.pfb"; + t["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb"; + t["Times-Italic"] = "FoxitSerifItalic.pfb"; + t.Symbol = "FoxitSymbol.pfb"; + t.ZapfDingbats = "FoxitDingbats.pfb"; + t["LiberationSans-Regular"] = "LiberationSans-Regular.ttf"; + t["LiberationSans-Bold"] = "LiberationSans-Bold.ttf"; + t["LiberationSans-Italic"] = "LiberationSans-Italic.ttf"; + t["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf"; +}); +exports.getFontNameToFileMap = getFontNameToFileMap; +const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { + t.Calibri = "Helvetica"; + t["Calibri-Bold"] = "Helvetica-Bold"; + t["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; + t["Calibri-Italic"] = "Helvetica-Oblique"; + t.CenturyGothic = "Helvetica"; + t["CenturyGothic-Bold"] = "Helvetica-Bold"; + t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; + t["CenturyGothic-Italic"] = "Helvetica-Oblique"; + t.ComicSansMS = "Comic Sans MS"; + t["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; + t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; + t["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; + t["ItcSymbol-Bold"] = "Helvetica-Bold"; + t["ItcSymbol-BoldItalic"] = "Helvetica-BoldOblique"; + t["ItcSymbol-Book"] = "Helvetica"; + t["ItcSymbol-BookItalic"] = "Helvetica-Oblique"; + t["ItcSymbol-Medium"] = "Helvetica"; + t["ItcSymbol-MediumItalic"] = "Helvetica-Oblique"; + t.LucidaConsole = "Courier"; + t["LucidaConsole-Bold"] = "Courier-Bold"; + t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; + t["LucidaConsole-Italic"] = "Courier-Oblique"; + t["LucidaSans-Demi"] = "Helvetica-Bold"; + t["MS-Gothic"] = "MS Gothic"; + t["MS-Gothic-Bold"] = "MS Gothic-Bold"; + t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; + t["MS-Gothic-Italic"] = "MS Gothic-Italic"; + t["MS-Mincho"] = "MS Mincho"; + t["MS-Mincho-Bold"] = "MS Mincho-Bold"; + t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; + t["MS-Mincho-Italic"] = "MS Mincho-Italic"; + t["MS-PGothic"] = "MS PGothic"; + t["MS-PGothic-Bold"] = "MS PGothic-Bold"; + t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; + t["MS-PGothic-Italic"] = "MS PGothic-Italic"; + t["MS-PMincho"] = "MS PMincho"; + t["MS-PMincho-Bold"] = "MS PMincho-Bold"; + t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; + t["MS-PMincho-Italic"] = "MS PMincho-Italic"; + t.NuptialScript = "Times-Italic"; + t.SegoeUISymbol = "Helvetica"; + t.Wingdings = "ZapfDingbats"; + t["Wingdings-Regular"] = "ZapfDingbats"; +}); +exports.getNonStdFontMap = getNonStdFontMap; +const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) { + t["Adobe Jenson"] = true; + t["Adobe Text"] = true; + t.Albertus = true; + t.Aldus = true; + t.Alexandria = true; + t.Algerian = true; + t["American Typewriter"] = true; + t.Antiqua = true; + t.Apex = true; + t.Arno = true; + t.Aster = true; + t.Aurora = true; + t.Baskerville = true; + t.Bell = true; + t.Bembo = true; + t["Bembo Schoolbook"] = true; + t.Benguiat = true; + t["Berkeley Old Style"] = true; + t["Bernhard Modern"] = true; + t["Berthold City"] = true; + t.Bodoni = true; + t["Bauer Bodoni"] = true; + t["Book Antiqua"] = true; + t.Bookman = true; + t["Bordeaux Roman"] = true; + t["Californian FB"] = true; + t.Calisto = true; + t.Calvert = true; + t.Capitals = true; + t.Cambria = true; + t.Cartier = true; + t.Caslon = true; + t.Catull = true; + t.Centaur = true; + t["Century Old Style"] = true; + t["Century Schoolbook"] = true; + t.Chaparral = true; + t["Charis SIL"] = true; + t.Cheltenham = true; + t["Cholla Slab"] = true; + t.Clarendon = true; + t.Clearface = true; + t.Cochin = true; + t.Colonna = true; + t["Computer Modern"] = true; + t["Concrete Roman"] = true; + t.Constantia = true; + t["Cooper Black"] = true; + t.Corona = true; + t.Ecotype = true; + t.Egyptienne = true; + t.Elephant = true; + t.Excelsior = true; + t.Fairfield = true; + t["FF Scala"] = true; + t.Folkard = true; + t.Footlight = true; + t.FreeSerif = true; + t["Friz Quadrata"] = true; + t.Garamond = true; + t.Gentium = true; + t.Georgia = true; + t.Gloucester = true; + t["Goudy Old Style"] = true; + t["Goudy Schoolbook"] = true; + t["Goudy Pro Font"] = true; + t.Granjon = true; + t["Guardian Egyptian"] = true; + t.Heather = true; + t.Hercules = true; + t["High Tower Text"] = true; + t.Hiroshige = true; + t["Hoefler Text"] = true; + t["Humana Serif"] = true; + t.Imprint = true; + t["Ionic No. 5"] = true; + t.Janson = true; + t.Joanna = true; + t.Korinna = true; + t.Lexicon = true; + t.LiberationSerif = true; + t["Liberation Serif"] = true; + t["Linux Libertine"] = true; + t.Literaturnaya = true; + t.Lucida = true; + t["Lucida Bright"] = true; + t.Melior = true; + t.Memphis = true; + t.Miller = true; + t.Minion = true; + t.Modern = true; + t["Mona Lisa"] = true; + t["Mrs Eaves"] = true; + t["MS Serif"] = true; + t["Museo Slab"] = true; + t["New York"] = true; + t["Nimbus Roman"] = true; + t["NPS Rawlinson Roadway"] = true; + t.NuptialScript = true; + t.Palatino = true; + t.Perpetua = true; + t.Plantin = true; + t["Plantin Schoolbook"] = true; + t.Playbill = true; + t["Poor Richard"] = true; + t["Rawlinson Roadway"] = true; + t.Renault = true; + t.Requiem = true; + t.Rockwell = true; + t.Roman = true; + t["Rotis Serif"] = true; + t.Sabon = true; + t.Scala = true; + t.Seagull = true; + t.Sistina = true; + t.Souvenir = true; + t.STIX = true; + t["Stone Informal"] = true; + t["Stone Serif"] = true; + t.Sylfaen = true; + t.Times = true; + t.Trajan = true; + t["Trinité"] = true; + t["Trump Mediaeval"] = true; + t.Utopia = true; + t["Vale Type"] = true; + t["Bitstream Vera"] = true; + t["Vera Serif"] = true; + t.Versailles = true; + t.Wanted = true; + t.Weiss = true; + t["Wide Latin"] = true; + t.Windsor = true; + t.XITS = true; +}); +exports.getSerifFonts = getSerifFonts; +const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) { + t.Dingbats = true; + t.Symbol = true; + t.ZapfDingbats = true; +}); +exports.getSymbolsFonts = getSymbolsFonts; +const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) { + t[2] = 10; + t[3] = 32; + t[4] = 33; + t[5] = 34; + t[6] = 35; + t[7] = 36; + t[8] = 37; + t[9] = 38; + t[10] = 39; + t[11] = 40; + t[12] = 41; + t[13] = 42; + t[14] = 43; + t[15] = 44; + t[16] = 45; + t[17] = 46; + t[18] = 47; + t[19] = 48; + t[20] = 49; + t[21] = 50; + t[22] = 51; + t[23] = 52; + t[24] = 53; + t[25] = 54; + t[26] = 55; + t[27] = 56; + t[28] = 57; + t[29] = 58; + t[30] = 894; + t[31] = 60; + t[32] = 61; + t[33] = 62; + t[34] = 63; + t[35] = 64; + t[36] = 65; + t[37] = 66; + t[38] = 67; + t[39] = 68; + t[40] = 69; + t[41] = 70; + t[42] = 71; + t[43] = 72; + t[44] = 73; + t[45] = 74; + t[46] = 75; + t[47] = 76; + t[48] = 77; + t[49] = 78; + t[50] = 79; + t[51] = 80; + t[52] = 81; + t[53] = 82; + t[54] = 83; + t[55] = 84; + t[56] = 85; + t[57] = 86; + t[58] = 87; + t[59] = 88; + t[60] = 89; + t[61] = 90; + t[62] = 91; + t[63] = 92; + t[64] = 93; + t[65] = 94; + t[66] = 95; + t[67] = 96; + t[68] = 97; + t[69] = 98; + t[70] = 99; + t[71] = 100; + t[72] = 101; + t[73] = 102; + t[74] = 103; + t[75] = 104; + t[76] = 105; + t[77] = 106; + t[78] = 107; + t[79] = 108; + t[80] = 109; + t[81] = 110; + t[82] = 111; + t[83] = 112; + t[84] = 113; + t[85] = 114; + t[86] = 115; + t[87] = 116; + t[88] = 117; + t[89] = 118; + t[90] = 119; + t[91] = 120; + t[92] = 121; + t[93] = 122; + t[94] = 123; + t[95] = 124; + t[96] = 125; + t[97] = 126; + t[98] = 196; + t[99] = 197; + t[100] = 199; + t[101] = 201; + t[102] = 209; + t[103] = 214; + t[104] = 220; + t[105] = 225; + t[106] = 224; + t[107] = 226; + t[108] = 228; + t[109] = 227; + t[110] = 229; + t[111] = 231; + t[112] = 233; + t[113] = 232; + t[114] = 234; + t[115] = 235; + t[116] = 237; + t[117] = 236; + t[118] = 238; + t[119] = 239; + t[120] = 241; + t[121] = 243; + t[122] = 242; + t[123] = 244; + t[124] = 246; + t[125] = 245; + t[126] = 250; + t[127] = 249; + t[128] = 251; + t[129] = 252; + t[130] = 8224; + t[131] = 176; + t[132] = 162; + t[133] = 163; + t[134] = 167; + t[135] = 8226; + t[136] = 182; + t[137] = 223; + t[138] = 174; + t[139] = 169; + t[140] = 8482; + t[141] = 180; + t[142] = 168; + t[143] = 8800; + t[144] = 198; + t[145] = 216; + t[146] = 8734; + t[147] = 177; + t[148] = 8804; + t[149] = 8805; + t[150] = 165; + t[151] = 181; + t[152] = 8706; + t[153] = 8721; + t[154] = 8719; + t[156] = 8747; + t[157] = 170; + t[158] = 186; + t[159] = 8486; + t[160] = 230; + t[161] = 248; + t[162] = 191; + t[163] = 161; + t[164] = 172; + t[165] = 8730; + t[166] = 402; + t[167] = 8776; + t[168] = 8710; + t[169] = 171; + t[170] = 187; + t[171] = 8230; + t[200] = 193; + t[203] = 205; + t[210] = 218; + t[223] = 711; + t[224] = 321; + t[225] = 322; + t[226] = 352; + t[227] = 353; + t[228] = 381; + t[229] = 382; + t[233] = 221; + t[234] = 253; + t[252] = 263; + t[253] = 268; + t[254] = 269; + t[258] = 258; + t[260] = 260; + t[261] = 261; + t[265] = 280; + t[266] = 281; + t[267] = 282; + t[268] = 283; + t[269] = 313; + t[275] = 323; + t[276] = 324; + t[278] = 328; + t[283] = 344; + t[284] = 345; + t[285] = 346; + t[286] = 347; + t[292] = 367; + t[295] = 377; + t[296] = 378; + t[298] = 380; + t[305] = 963; + t[306] = 964; + t[307] = 966; + t[308] = 8215; + t[309] = 8252; + t[310] = 8319; + t[311] = 8359; + t[312] = 8592; + t[313] = 8593; + t[337] = 9552; + t[493] = 1039; + t[494] = 1040; + t[672] = 1488; + t[673] = 1489; + t[674] = 1490; + t[675] = 1491; + t[676] = 1492; + t[677] = 1493; + t[678] = 1494; + t[679] = 1495; + t[680] = 1496; + t[681] = 1497; + t[682] = 1498; + t[683] = 1499; + t[684] = 1500; + t[685] = 1501; + t[686] = 1502; + t[687] = 1503; + t[688] = 1504; + t[689] = 1505; + t[690] = 1506; + t[691] = 1507; + t[692] = 1508; + t[693] = 1509; + t[694] = 1510; + t[695] = 1511; + t[696] = 1512; + t[697] = 1513; + t[698] = 1514; + t[705] = 1524; + t[706] = 8362; + t[710] = 64288; + t[711] = 64298; + t[759] = 1617; + t[761] = 1776; + t[763] = 1778; + t[775] = 1652; + t[777] = 1764; + t[778] = 1780; + t[779] = 1781; + t[780] = 1782; + t[782] = 771; + t[783] = 64726; + t[786] = 8363; + t[788] = 8532; + t[790] = 768; + t[791] = 769; + t[792] = 768; + t[795] = 803; + t[797] = 64336; + t[798] = 64337; + t[799] = 64342; + t[800] = 64343; + t[801] = 64344; + t[802] = 64345; + t[803] = 64362; + t[804] = 64363; + t[805] = 64364; + t[2424] = 7821; + t[2425] = 7822; + t[2426] = 7823; + t[2427] = 7824; + t[2428] = 7825; + t[2429] = 7826; + t[2430] = 7827; + t[2433] = 7682; + t[2678] = 8045; + t[2679] = 8046; + t[2830] = 1552; + t[2838] = 686; + t[2840] = 751; + t[2842] = 753; + t[2843] = 754; + t[2844] = 755; + t[2846] = 757; + t[2856] = 767; + t[2857] = 848; + t[2858] = 849; + t[2862] = 853; + t[2863] = 854; + t[2864] = 855; + t[2865] = 861; + t[2866] = 862; + t[2906] = 7460; + t[2908] = 7462; + t[2909] = 7463; + t[2910] = 7464; + t[2912] = 7466; + t[2913] = 7467; + t[2914] = 7468; + t[2916] = 7470; + t[2917] = 7471; + t[2918] = 7472; + t[2920] = 7474; + t[2921] = 7475; + t[2922] = 7476; + t[2924] = 7478; + t[2925] = 7479; + t[2926] = 7480; + t[2928] = 7482; + t[2929] = 7483; + t[2930] = 7484; + t[2932] = 7486; + t[2933] = 7487; + t[2934] = 7488; + t[2936] = 7490; + t[2937] = 7491; + t[2938] = 7492; + t[2940] = 7494; + t[2941] = 7495; + t[2942] = 7496; + t[2944] = 7498; + t[2946] = 7500; + t[2948] = 7502; + t[2950] = 7504; + t[2951] = 7505; + t[2952] = 7506; + t[2954] = 7508; + t[2955] = 7509; + t[2956] = 7510; + t[2958] = 7512; + t[2959] = 7513; + t[2960] = 7514; + t[2962] = 7516; + t[2963] = 7517; + t[2964] = 7518; + t[2966] = 7520; + t[2967] = 7521; + t[2968] = 7522; + t[2970] = 7524; + t[2971] = 7525; + t[2972] = 7526; + t[2974] = 7528; + t[2975] = 7529; + t[2976] = 7530; + t[2978] = 1537; + t[2979] = 1538; + t[2980] = 1539; + t[2982] = 1549; + t[2983] = 1551; + t[2984] = 1552; + t[2986] = 1554; + t[2987] = 1555; + t[2988] = 1556; + t[2990] = 1623; + t[2991] = 1624; + t[2995] = 1775; + t[2999] = 1791; + t[3002] = 64290; + t[3003] = 64291; + t[3004] = 64292; + t[3006] = 64294; + t[3007] = 64295; + t[3008] = 64296; + t[3011] = 1900; + t[3014] = 8223; + t[3015] = 8244; + t[3017] = 7532; + t[3018] = 7533; + t[3019] = 7534; + t[3075] = 7590; + t[3076] = 7591; + t[3079] = 7594; + t[3080] = 7595; + t[3083] = 7598; + t[3084] = 7599; + t[3087] = 7602; + t[3088] = 7603; + t[3091] = 7606; + t[3092] = 7607; + t[3095] = 7610; + t[3096] = 7611; + t[3099] = 7614; + t[3100] = 7615; + t[3103] = 7618; + t[3104] = 7619; + t[3107] = 8337; + t[3108] = 8338; + t[3116] = 1884; + t[3119] = 1885; + t[3120] = 1885; + t[3123] = 1886; + t[3124] = 1886; + t[3127] = 1887; + t[3128] = 1887; + t[3131] = 1888; + t[3132] = 1888; + t[3135] = 1889; + t[3136] = 1889; + t[3139] = 1890; + t[3140] = 1890; + t[3143] = 1891; + t[3144] = 1891; + t[3147] = 1892; + t[3148] = 1892; + t[3153] = 580; + t[3154] = 581; + t[3157] = 584; + t[3158] = 585; + t[3161] = 588; + t[3162] = 589; + t[3165] = 891; + t[3166] = 892; + t[3169] = 1274; + t[3170] = 1275; + t[3173] = 1278; + t[3174] = 1279; + t[3181] = 7622; + t[3182] = 7623; + t[3282] = 11799; + t[3316] = 578; + t[3379] = 42785; + t[3393] = 1159; + t[3416] = 8377; +}); +exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; +const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) { + t[227] = 322; + t[264] = 261; + t[291] = 346; +}); +exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; +const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) { + t[1] = 32; + t[4] = 65; + t[6] = 193; + t[17] = 66; + t[18] = 67; + t[21] = 268; + t[24] = 68; + t[28] = 69; + t[30] = 201; + t[32] = 282; + t[38] = 70; + t[39] = 71; + t[44] = 72; + t[47] = 73; + t[49] = 205; + t[58] = 74; + t[60] = 75; + t[62] = 76; + t[68] = 77; + t[69] = 78; + t[75] = 79; + t[87] = 80; + t[89] = 81; + t[90] = 82; + t[92] = 344; + t[94] = 83; + t[97] = 352; + t[100] = 84; + t[104] = 85; + t[115] = 86; + t[116] = 87; + t[121] = 88; + t[122] = 89; + t[124] = 221; + t[127] = 90; + t[129] = 381; + t[258] = 97; + t[260] = 225; + t[268] = 261; + t[271] = 98; + t[272] = 99; + t[273] = 263; + t[275] = 269; + t[282] = 100; + t[286] = 101; + t[288] = 233; + t[290] = 283; + t[295] = 281; + t[296] = 102; + t[336] = 103; + t[346] = 104; + t[349] = 105; + t[351] = 237; + t[361] = 106; + t[364] = 107; + t[367] = 108; + t[371] = 322; + t[373] = 109; + t[374] = 110; + t[381] = 111; + t[383] = 243; + t[393] = 112; + t[395] = 113; + t[396] = 114; + t[398] = 345; + t[400] = 115; + t[401] = 347; + t[403] = 353; + t[410] = 116; + t[437] = 117; + t[448] = 118; + t[449] = 119; + t[454] = 120; + t[455] = 121; + t[457] = 253; + t[460] = 122; + t[462] = 382; + t[463] = 380; + t[853] = 44; + t[855] = 58; + t[856] = 46; + t[876] = 47; + t[878] = 45; + t[882] = 45; + t[894] = 40; + t[895] = 41; + t[896] = 91; + t[897] = 93; + t[923] = 64; + t[1004] = 48; + t[1005] = 49; + t[1006] = 50; + t[1007] = 51; + t[1008] = 52; + t[1009] = 53; + t[1010] = 54; + t[1011] = 55; + t[1012] = 56; + t[1013] = 57; + t[1081] = 37; + t[1085] = 43; + t[1086] = 45; +}); +exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; + +function getStandardFontName(name) { + const fontName = (0, _fonts_utils.normalizeFontName)(name); + const stdFontMap = getStdFontMap(); + return stdFontMap[fontName]; +} + +/***/ }), +/* 42 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ToUnicodeMap = exports.IdentityToUnicodeMap = void 0; + +var _util = __w_pdfjs_require__(2); + +class ToUnicodeMap { + constructor(cmap = []) { + this._map = cmap; + } + + get length() { + return this._map.length; + } + + forEach(callback) { + for (const charCode in this._map) { + callback(charCode, this._map[charCode].charCodeAt(0)); + } + } + + has(i) { + return this._map[i] !== undefined; + } + + get(i) { + return this._map[i]; + } + + charCodeOf(value) { + const map = this._map; + + if (map.length <= 0x10000) { + return map.indexOf(value); + } + + for (const charCode in map) { + if (map[charCode] === value) { + return charCode | 0; + } + } + + return -1; + } + + amend(map) { + for (const charCode in map) { + this._map[charCode] = map[charCode]; + } + } + +} + +exports.ToUnicodeMap = ToUnicodeMap; + +class IdentityToUnicodeMap { + constructor(firstChar, lastChar) { + this.firstChar = firstChar; + this.lastChar = lastChar; + } + + get length() { + return this.lastChar + 1 - this.firstChar; + } + + forEach(callback) { + for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) { + callback(i, i); + } + } + + has(i) { + return this.firstChar <= i && i <= this.lastChar; + } + + get(i) { + if (this.firstChar <= i && i <= this.lastChar) { + return String.fromCharCode(i); + } + + return undefined; + } + + charCodeOf(v) { + return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; + } + + amend(map) { + (0, _util.unreachable)("Should not call amend()"); + } + +} + +exports.IdentityToUnicodeMap = IdentityToUnicodeMap; + +/***/ }), +/* 43 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CFFFont = void 0; + +var _cff_parser = __w_pdfjs_require__(35); + +var _fonts_utils = __w_pdfjs_require__(38); + +var _util = __w_pdfjs_require__(2); + +class CFFFont { + constructor(file, properties) { + this.properties = properties; + const parser = new _cff_parser.CFFParser(file, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); + this.cff = parser.parse(); + this.cff.duplicateFirstGlyph(); + const compiler = new _cff_parser.CFFCompiler(this.cff); + this.seacs = this.cff.seacs; + + try { + this.data = compiler.compile(); + } catch (e) { + (0, _util.warn)("Failed to compile font " + properties.loadedName); + this.data = file; + } + + this._createBuiltInEncoding(); + } + + get numGlyphs() { + return this.cff.charStrings.count; + } + + getCharset() { + return this.cff.charset.charset; + } + + getGlyphMapping() { + const cff = this.cff; + const properties = this.properties; + const charsets = cff.charset.charset; + let charCodeToGlyphId; + let glyphId; + + if (properties.composite) { + charCodeToGlyphId = Object.create(null); + let charCode; + + if (cff.isCIDFont) { + for (glyphId = 0; glyphId < charsets.length; glyphId++) { + const cid = charsets[glyphId]; + charCode = properties.cMap.charCodeOf(cid); + charCodeToGlyphId[charCode] = glyphId; + } + } else { + for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { + charCode = properties.cMap.charCodeOf(glyphId); + charCodeToGlyphId[charCode] = glyphId; + } + } + + return charCodeToGlyphId; + } + + let encoding = cff.encoding ? cff.encoding.encoding : null; + + if (properties.isInternalFont) { + encoding = properties.defaultEncoding; + } + + charCodeToGlyphId = (0, _fonts_utils.type1FontGlyphMapping)(properties, encoding, charsets); + return charCodeToGlyphId; + } + + hasGlyphId(id) { + return this.cff.hasGlyphId(id); + } + + _createBuiltInEncoding() { + const { + charset, + encoding + } = this.cff; + + if (!charset || !encoding) { + return; + } + + const charsets = charset.charset, + encodings = encoding.encoding; + const map = []; + + for (const charCode in encodings) { + const glyphId = encodings[charCode]; + + if (glyphId >= 0) { + const glyphName = charsets[glyphId]; + + if (glyphName) { + map[charCode] = glyphName; + } + } + } + + if (map.length > 0) { + this.properties.builtInEncoding = map; + } + } + +} + +exports.CFFFont = CFFFont; + +/***/ }), +/* 44 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FontRendererFactory = void 0; + +var _util = __w_pdfjs_require__(2); + +var _cff_parser = __w_pdfjs_require__(35); + +var _glyphlist = __w_pdfjs_require__(39); + +var _encodings = __w_pdfjs_require__(37); + +var _stream = __w_pdfjs_require__(10); + +function getUint32(data, offset) { + return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; +} + +function getUint16(data, offset) { + return data[offset] << 8 | data[offset + 1]; +} + +function getInt16(data, offset) { + return (data[offset] << 24 | data[offset + 1] << 16) >> 16; +} + +function getInt8(data, offset) { + return data[offset] << 24 >> 24; +} + +function getFloat214(data, offset) { + return getInt16(data, offset) / 16384; +} + +function getSubroutineBias(subrs) { + const numSubrs = subrs.length; + let bias = 32768; + + if (numSubrs < 1240) { + bias = 107; + } else if (numSubrs < 33900) { + bias = 1131; + } + + return bias; +} + +function parseCmap(data, start, end) { + const offset = getUint16(data, start + 2) === 1 ? getUint32(data, start + 8) : getUint32(data, start + 16); + const format = getUint16(data, start + offset); + let ranges, p, i; + + if (format === 4) { + getUint16(data, start + offset + 2); + const segCount = getUint16(data, start + offset + 6) >> 1; + p = start + offset + 14; + ranges = []; + + for (i = 0; i < segCount; i++, p += 2) { + ranges[i] = { + end: getUint16(data, p) + }; + } + + p += 2; + + for (i = 0; i < segCount; i++, p += 2) { + ranges[i].start = getUint16(data, p); + } + + for (i = 0; i < segCount; i++, p += 2) { + ranges[i].idDelta = getUint16(data, p); + } + + for (i = 0; i < segCount; i++, p += 2) { + let idOffset = getUint16(data, p); + + if (idOffset === 0) { + continue; + } + + ranges[i].ids = []; + + for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { + ranges[i].ids[j] = getUint16(data, p + idOffset); + idOffset += 2; + } + } + + return ranges; + } else if (format === 12) { + const groups = getUint32(data, start + offset + 12); + p = start + offset + 16; + ranges = []; + + for (i = 0; i < groups; i++) { + start = getUint32(data, p); + ranges.push({ + start, + end: getUint32(data, p + 4), + idDelta: getUint32(data, p + 8) - start + }); + p += 12; + } + + return ranges; + } + + throw new _util.FormatError(`unsupported cmap: ${format}`); +} + +function parseCff(data, start, end, seacAnalysisEnabled) { + const properties = {}; + const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); + const cff = parser.parse(); + return { + glyphs: cff.charStrings.objects, + subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, + gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects, + isCFFCIDFont: cff.isCIDFont, + fdSelect: cff.fdSelect, + fdArray: cff.fdArray + }; +} + +function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { + let itemSize, itemDecode; + + if (isGlyphLocationsLong) { + itemSize = 4; + itemDecode = getUint32; + } else { + itemSize = 2; + + itemDecode = (data, offset) => 2 * getUint16(data, offset); + } + + const glyphs = []; + let startOffset = itemDecode(loca, 0); + + for (let j = itemSize; j < loca.length; j += itemSize) { + const endOffset = itemDecode(loca, j); + glyphs.push(glyf.subarray(startOffset, endOffset)); + startOffset = endOffset; + } + + return glyphs; +} + +function lookupCmap(ranges, unicode) { + const code = unicode.codePointAt(0); + let gid = 0, + l = 0, + r = ranges.length - 1; + + while (l < r) { + const c = l + r + 1 >> 1; + + if (code < ranges[c].start) { + r = c - 1; + } else { + l = c; + } + } + + if (ranges[l].start <= code && code <= ranges[l].end) { + gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff; + } + + return { + charCode: code, + glyphId: gid + }; +} + +function compileGlyf(code, cmds, font) { + function moveTo(x, y) { + cmds.push({ + cmd: "moveTo", + args: [x, y] + }); + } + + function lineTo(x, y) { + cmds.push({ + cmd: "lineTo", + args: [x, y] + }); + } + + function quadraticCurveTo(xa, ya, x, y) { + cmds.push({ + cmd: "quadraticCurveTo", + args: [xa, ya, x, y] + }); + } + + let i = 0; + const numberOfContours = getInt16(code, i); + let flags; + let x = 0, + y = 0; + i += 10; + + if (numberOfContours < 0) { + do { + flags = getUint16(code, i); + const glyphIndex = getUint16(code, i + 2); + i += 4; + let arg1, arg2; + + if (flags & 0x01) { + if (flags & 0x02) { + arg1 = getInt16(code, i); + arg2 = getInt16(code, i + 2); + } else { + arg1 = getUint16(code, i); + arg2 = getUint16(code, i + 2); + } + + i += 4; + } else { + if (flags & 0x02) { + arg1 = getInt8(code, i++); + arg2 = getInt8(code, i++); + } else { + arg1 = code[i++]; + arg2 = code[i++]; + } + } + + if (flags & 0x02) { + x = arg1; + y = arg2; + } else { + x = 0; + y = 0; + } + + let scaleX = 1, + scaleY = 1, + scale01 = 0, + scale10 = 0; + + if (flags & 0x08) { + scaleX = scaleY = getFloat214(code, i); + i += 2; + } else if (flags & 0x40) { + scaleX = getFloat214(code, i); + scaleY = getFloat214(code, i + 2); + i += 4; + } else if (flags & 0x80) { + scaleX = getFloat214(code, i); + scale01 = getFloat214(code, i + 2); + scale10 = getFloat214(code, i + 4); + scaleY = getFloat214(code, i + 6); + i += 8; + } + + const subglyph = font.glyphs[glyphIndex]; + + if (subglyph) { + cmds.push({ + cmd: "save" + }, { + cmd: "transform", + args: [scaleX, scale01, scale10, scaleY, x, y] + }); + + if (!(flags & 0x02)) {} + + compileGlyf(subglyph, cmds, font); + cmds.push({ + cmd: "restore" + }); + } + } while (flags & 0x20); + } else { + const endPtsOfContours = []; + let j, jj; + + for (j = 0; j < numberOfContours; j++) { + endPtsOfContours.push(getUint16(code, i)); + i += 2; + } + + const instructionLength = getUint16(code, i); + i += 2 + instructionLength; + const numberOfPoints = endPtsOfContours.at(-1) + 1; + const points = []; + + while (points.length < numberOfPoints) { + flags = code[i++]; + let repeat = 1; + + if (flags & 0x08) { + repeat += code[i++]; + } + + while (repeat-- > 0) { + points.push({ + flags + }); + } + } + + for (j = 0; j < numberOfPoints; j++) { + switch (points[j].flags & 0x12) { + case 0x00: + x += getInt16(code, i); + i += 2; + break; + + case 0x02: + x -= code[i++]; + break; + + case 0x12: + x += code[i++]; + break; + } + + points[j].x = x; + } + + for (j = 0; j < numberOfPoints; j++) { + switch (points[j].flags & 0x24) { + case 0x00: + y += getInt16(code, i); + i += 2; + break; + + case 0x04: + y -= code[i++]; + break; + + case 0x24: + y += code[i++]; + break; + } + + points[j].y = y; + } + + let startPoint = 0; + + for (i = 0; i < numberOfContours; i++) { + const endPoint = endPtsOfContours[i]; + const contour = points.slice(startPoint, endPoint + 1); + + if (contour[0].flags & 1) { + contour.push(contour[0]); + } else if (contour.at(-1).flags & 1) { + contour.unshift(contour.at(-1)); + } else { + const p = { + flags: 1, + x: (contour[0].x + contour.at(-1).x) / 2, + y: (contour[0].y + contour.at(-1).y) / 2 + }; + contour.unshift(p); + contour.push(p); + } + + moveTo(contour[0].x, contour[0].y); + + for (j = 1, jj = contour.length; j < jj; j++) { + if (contour[j].flags & 1) { + lineTo(contour[j].x, contour[j].y); + } else if (contour[j + 1].flags & 1) { + quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); + j++; + } else { + quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); + } + } + + startPoint = endPoint + 1; + } + } +} + +function compileCharString(charStringCode, cmds, font, glyphId) { + function moveTo(x, y) { + cmds.push({ + cmd: "moveTo", + args: [x, y] + }); + } + + function lineTo(x, y) { + cmds.push({ + cmd: "lineTo", + args: [x, y] + }); + } + + function bezierCurveTo(x1, y1, x2, y2, x, y) { + cmds.push({ + cmd: "bezierCurveTo", + args: [x1, y1, x2, y2, x, y] + }); + } + + const stack = []; + let x = 0, + y = 0; + let stems = 0; + + function parse(code) { + let i = 0; + + while (i < code.length) { + let stackClean = false; + let v = code[i++]; + let xa, xb, ya, yb, y1, y2, y3, n, subrCode; + + switch (v) { + case 1: + stems += stack.length >> 1; + stackClean = true; + break; + + case 3: + stems += stack.length >> 1; + stackClean = true; + break; + + case 4: + y += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + + case 5: + while (stack.length > 0) { + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + } + + break; + + case 6: + while (stack.length > 0) { + x += stack.shift(); + lineTo(x, y); + + if (stack.length === 0) { + break; + } + + y += stack.shift(); + lineTo(x, y); + } + + break; + + case 7: + while (stack.length > 0) { + y += stack.shift(); + lineTo(x, y); + + if (stack.length === 0) { + break; + } + + x += stack.shift(); + lineTo(x, y); + } + + break; + + case 8: + while (stack.length > 0) { + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + + break; + + case 10: + n = stack.pop(); + subrCode = null; + + if (font.isCFFCIDFont) { + const fdIndex = font.fdSelect.getFDIndex(glyphId); + + if (fdIndex >= 0 && fdIndex < font.fdArray.length) { + const fontDict = font.fdArray[fdIndex]; + let subrs; + + if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { + subrs = fontDict.privateDict.subrsIndex.objects; + } + + if (subrs) { + n += getSubroutineBias(subrs); + subrCode = subrs[n]; + } + } else { + (0, _util.warn)("Invalid fd index for glyph index."); + } + } else { + subrCode = font.subrs[n + font.subrsBias]; + } + + if (subrCode) { + parse(subrCode); + } + + break; + + case 11: + return; + + case 12: + v = code[i++]; + + switch (v) { + case 34: + xa = x + stack.shift(); + xb = xa + stack.shift(); + y1 = y + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y, xb, y1, x, y1); + xa = x + stack.shift(); + xb = xa + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y1, xb, y, x, y); + break; + + case 35: + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + stack.pop(); + break; + + case 36: + xa = x + stack.shift(); + y1 = y + stack.shift(); + xb = xa + stack.shift(); + y2 = y1 + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y1, xb, y2, x, y2); + xa = x + stack.shift(); + xb = xa + stack.shift(); + y3 = y2 + stack.shift(); + x = xb + stack.shift(); + bezierCurveTo(xa, y2, xb, y3, x, y); + break; + + case 37: + const x0 = x, + y0 = y; + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb; + y = yb; + + if (Math.abs(x - x0) > Math.abs(y - y0)) { + x += stack.shift(); + } else { + y += stack.shift(); + } + + bezierCurveTo(xa, ya, xb, yb, x, y); + break; + + default: + throw new _util.FormatError(`unknown operator: 12 ${v}`); + } + + break; + + case 14: + if (stack.length >= 4) { + const achar = stack.pop(); + const bchar = stack.pop(); + y = stack.pop(); + x = stack.pop(); + cmds.push({ + cmd: "save" + }, { + cmd: "translate", + args: [x, y] + }); + let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); + compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); + cmds.push({ + cmd: "restore" + }); + cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); + compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); + } + + return; + + case 18: + stems += stack.length >> 1; + stackClean = true; + break; + + case 19: + stems += stack.length >> 1; + i += stems + 7 >> 3; + stackClean = true; + break; + + case 20: + stems += stack.length >> 1; + i += stems + 7 >> 3; + stackClean = true; + break; + + case 21: + y += stack.pop(); + x += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + + case 22: + x += stack.pop(); + moveTo(x, y); + stackClean = true; + break; + + case 23: + stems += stack.length >> 1; + stackClean = true; + break; + + case 24: + while (stack.length > 2) { + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + break; + + case 25: + while (stack.length > 6) { + x += stack.shift(); + y += stack.shift(); + lineTo(x, y); + } + + xa = x + stack.shift(); + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + break; + + case 26: + if (stack.length % 2) { + x += stack.shift(); + } + + while (stack.length > 0) { + xa = x; + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb; + y = yb + stack.shift(); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + + break; + + case 27: + if (stack.length % 2) { + y += stack.shift(); + } + + while (stack.length > 0) { + xa = x + stack.shift(); + ya = y; + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb; + bezierCurveTo(xa, ya, xb, yb, x, y); + } + + break; + + case 28: + stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); + i += 2; + break; + + case 29: + n = stack.pop() + font.gsubrsBias; + subrCode = font.gsubrs[n]; + + if (subrCode) { + parse(subrCode); + } + + break; + + case 30: + while (stack.length > 0) { + xa = x; + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + + if (stack.length === 0) { + break; + } + + xa = x + stack.shift(); + ya = y; + xb = xa + stack.shift(); + yb = ya + stack.shift(); + y = yb + stack.shift(); + x = xb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + + break; + + case 31: + while (stack.length > 0) { + xa = x + stack.shift(); + ya = y; + xb = xa + stack.shift(); + yb = ya + stack.shift(); + y = yb + stack.shift(); + x = xb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + + if (stack.length === 0) { + break; + } + + xa = x; + ya = y + stack.shift(); + xb = xa + stack.shift(); + yb = ya + stack.shift(); + x = xb + stack.shift(); + y = yb + (stack.length === 1 ? stack.shift() : 0); + bezierCurveTo(xa, ya, xb, yb, x, y); + } + + break; + + default: + if (v < 32) { + throw new _util.FormatError(`unknown operator: ${v}`); + } + + if (v < 247) { + stack.push(v - 139); + } else if (v < 251) { + stack.push((v - 247) * 256 + code[i++] + 108); + } else if (v < 255) { + stack.push(-(v - 251) * 256 - code[i++] - 108); + } else { + stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); + i += 4; + } + + break; + } + + if (stackClean) { + stack.length = 0; + } + } + } + + parse(charStringCode); +} + +const NOOP = []; + +class CompiledFont { + constructor(fontMatrix) { + if (this.constructor === CompiledFont) { + (0, _util.unreachable)("Cannot initialize CompiledFont."); + } + + this.fontMatrix = fontMatrix; + this.compiledGlyphs = Object.create(null); + this.compiledCharCodeToGlyphId = Object.create(null); + } + + getPathJs(unicode) { + const { + charCode, + glyphId + } = lookupCmap(this.cmap, unicode); + let fn = this.compiledGlyphs[glyphId]; + + if (!fn) { + try { + fn = this.compileGlyph(this.glyphs[glyphId], glyphId); + this.compiledGlyphs[glyphId] = fn; + } catch (ex) { + this.compiledGlyphs[glyphId] = NOOP; + + if (this.compiledCharCodeToGlyphId[charCode] === undefined) { + this.compiledCharCodeToGlyphId[charCode] = glyphId; + } + + throw ex; + } + } + + if (this.compiledCharCodeToGlyphId[charCode] === undefined) { + this.compiledCharCodeToGlyphId[charCode] = glyphId; + } + + return fn; + } + + compileGlyph(code, glyphId) { + if (!code || code.length === 0 || code[0] === 14) { + return NOOP; + } + + let fontMatrix = this.fontMatrix; + + if (this.isCFFCIDFont) { + const fdIndex = this.fdSelect.getFDIndex(glyphId); + + if (fdIndex >= 0 && fdIndex < this.fdArray.length) { + const fontDict = this.fdArray[fdIndex]; + fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX; + } else { + (0, _util.warn)("Invalid fd index for glyph index."); + } + } + + const cmds = [{ + cmd: "save" + }, { + cmd: "transform", + args: fontMatrix.slice() + }, { + cmd: "scale", + args: ["size", "-size"] + }]; + this.compileGlyphImpl(code, cmds, glyphId); + cmds.push({ + cmd: "restore" + }); + return cmds; + } + + compileGlyphImpl() { + (0, _util.unreachable)("Children classes should implement this."); + } + + hasBuiltPath(unicode) { + const { + charCode, + glyphId + } = lookupCmap(this.cmap, unicode); + return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined; + } + +} + +class TrueTypeCompiled extends CompiledFont { + constructor(glyphs, cmap, fontMatrix) { + super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]); + this.glyphs = glyphs; + this.cmap = cmap; + } + + compileGlyphImpl(code, cmds) { + compileGlyf(code, cmds, this); + } + +} + +class Type2Compiled extends CompiledFont { + constructor(cffInfo, cmap, fontMatrix, glyphNameMap) { + super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]); + this.glyphs = cffInfo.glyphs; + this.gsubrs = cffInfo.gsubrs || []; + this.subrs = cffInfo.subrs || []; + this.cmap = cmap; + this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); + this.gsubrsBias = getSubroutineBias(this.gsubrs); + this.subrsBias = getSubroutineBias(this.subrs); + this.isCFFCIDFont = cffInfo.isCFFCIDFont; + this.fdSelect = cffInfo.fdSelect; + this.fdArray = cffInfo.fdArray; + } + + compileGlyphImpl(code, cmds, glyphId) { + compileCharString(code, cmds, this, glyphId); + } + +} + +class FontRendererFactory { + static create(font, seacAnalysisEnabled) { + const data = new Uint8Array(font.data); + let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; + const numTables = getUint16(data, 4); + + for (let i = 0, p = 12; i < numTables; i++, p += 16) { + const tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); + const offset = getUint32(data, p + 8); + const length = getUint32(data, p + 12); + + switch (tag) { + case "cmap": + cmap = parseCmap(data, offset, offset + length); + break; + + case "glyf": + glyf = data.subarray(offset, offset + length); + break; + + case "loca": + loca = data.subarray(offset, offset + length); + break; + + case "head": + unitsPerEm = getUint16(data, offset + 18); + indexToLocFormat = getUint16(data, offset + 50); + break; + + case "CFF ": + cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); + break; + } + } + + if (glyf) { + const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; + return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); + } + + return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); + } + +} + +exports.FontRendererFactory = FontRendererFactory; + +/***/ }), +/* 45 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getMetrics = exports.getFontBasicMetrics = void 0; + +var _core_utils = __w_pdfjs_require__(6); + +const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { + t.Courier = 600; + t["Courier-Bold"] = 600; + t["Courier-BoldOblique"] = 600; + t["Courier-Oblique"] = 600; + t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 278; + t.exclam = 278; + t.quotedbl = 355; + t.numbersign = 556; + t.dollar = 556; + t.percent = 889; + t.ampersand = 667; + t.quoteright = 222; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 389; + t.plus = 584; + t.comma = 278; + t.hyphen = 333; + t.period = 278; + t.slash = 278; + t.zero = 556; + t.one = 556; + t.two = 556; + t.three = 556; + t.four = 556; + t.five = 556; + t.six = 556; + t.seven = 556; + t.eight = 556; + t.nine = 556; + t.colon = 278; + t.semicolon = 278; + t.less = 584; + t.equal = 584; + t.greater = 584; + t.question = 556; + t.at = 1015; + t.A = 667; + t.B = 667; + t.C = 722; + t.D = 722; + t.E = 667; + t.F = 611; + t.G = 778; + t.H = 722; + t.I = 278; + t.J = 500; + t.K = 667; + t.L = 556; + t.M = 833; + t.N = 722; + t.O = 778; + t.P = 667; + t.Q = 778; + t.R = 722; + t.S = 667; + t.T = 611; + t.U = 722; + t.V = 667; + t.W = 944; + t.X = 667; + t.Y = 667; + t.Z = 611; + t.bracketleft = 278; + t.backslash = 278; + t.bracketright = 278; + t.asciicircum = 469; + t.underscore = 556; + t.quoteleft = 222; + t.a = 556; + t.b = 556; + t.c = 500; + t.d = 556; + t.e = 556; + t.f = 278; + t.g = 556; + t.h = 556; + t.i = 222; + t.j = 222; + t.k = 500; + t.l = 222; + t.m = 833; + t.n = 556; + t.o = 556; + t.p = 556; + t.q = 556; + t.r = 333; + t.s = 500; + t.t = 278; + t.u = 556; + t.v = 500; + t.w = 722; + t.x = 500; + t.y = 500; + t.z = 500; + t.braceleft = 334; + t.bar = 260; + t.braceright = 334; + t.asciitilde = 584; + t.exclamdown = 333; + t.cent = 556; + t.sterling = 556; + t.fraction = 167; + t.yen = 556; + t.florin = 556; + t.section = 556; + t.currency = 556; + t.quotesingle = 191; + t.quotedblleft = 333; + t.guillemotleft = 556; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 500; + t.fl = 500; + t.endash = 556; + t.dagger = 556; + t.daggerdbl = 556; + t.periodcentered = 278; + t.paragraph = 537; + t.bullet = 350; + t.quotesinglbase = 222; + t.quotedblbase = 333; + t.quotedblright = 333; + t.guillemotright = 556; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 611; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 1000; + t.ordfeminine = 370; + t.Lslash = 556; + t.Oslash = 778; + t.OE = 1000; + t.ordmasculine = 365; + t.ae = 889; + t.dotlessi = 278; + t.lslash = 222; + t.oslash = 611; + t.oe = 944; + t.germandbls = 611; + t.Idieresis = 278; + t.eacute = 556; + t.abreve = 556; + t.uhungarumlaut = 556; + t.ecaron = 556; + t.Ydieresis = 667; + t.divide = 584; + t.Yacute = 667; + t.Acircumflex = 667; + t.aacute = 556; + t.Ucircumflex = 722; + t.yacute = 500; + t.scommaaccent = 500; + t.ecircumflex = 556; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 556; + t.Uacute = 722; + t.uogonek = 556; + t.Edieresis = 667; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 737; + t.Emacron = 667; + t.ccaron = 500; + t.aring = 556; + t.Ncommaaccent = 722; + t.lacute = 222; + t.agrave = 556; + t.Tcommaaccent = 611; + t.Cacute = 722; + t.atilde = 556; + t.Edotaccent = 667; + t.scaron = 500; + t.scedilla = 500; + t.iacute = 278; + t.lozenge = 471; + t.Rcaron = 722; + t.Gcommaaccent = 778; + t.ucircumflex = 556; + t.acircumflex = 556; + t.Amacron = 667; + t.rcaron = 333; + t.ccedilla = 500; + t.Zdotaccent = 611; + t.Thorn = 667; + t.Omacron = 778; + t.Racute = 722; + t.Sacute = 667; + t.dcaron = 643; + t.Umacron = 722; + t.uring = 556; + t.threesuperior = 333; + t.Ograve = 778; + t.Agrave = 667; + t.Abreve = 667; + t.multiply = 584; + t.uacute = 556; + t.Tcaron = 611; + t.partialdiff = 476; + t.ydieresis = 500; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 667; + t.adieresis = 556; + t.edieresis = 556; + t.cacute = 500; + t.nacute = 556; + t.umacron = 556; + t.Ncaron = 722; + t.Iacute = 278; + t.plusminus = 584; + t.brokenbar = 260; + t.registered = 737; + t.Gbreve = 778; + t.Idotaccent = 278; + t.summation = 600; + t.Egrave = 667; + t.racute = 333; + t.omacron = 556; + t.Zacute = 611; + t.Zcaron = 611; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 722; + t.lcommaaccent = 222; + t.tcaron = 317; + t.eogonek = 556; + t.Uogonek = 722; + t.Aacute = 667; + t.Adieresis = 667; + t.egrave = 556; + t.zacute = 500; + t.iogonek = 222; + t.Oacute = 778; + t.oacute = 556; + t.amacron = 556; + t.sacute = 500; + t.idieresis = 278; + t.Ocircumflex = 778; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 556; + t.twosuperior = 333; + t.Odieresis = 778; + t.mu = 556; + t.igrave = 278; + t.ohungarumlaut = 556; + t.Eogonek = 667; + t.dcroat = 556; + t.threequarters = 834; + t.Scedilla = 667; + t.lcaron = 299; + t.Kcommaaccent = 667; + t.Lacute = 556; + t.trademark = 1000; + t.edotaccent = 556; + t.Igrave = 278; + t.Imacron = 278; + t.Lcaron = 556; + t.onehalf = 834; + t.lessequal = 549; + t.ocircumflex = 556; + t.ntilde = 556; + t.Uhungarumlaut = 722; + t.Eacute = 667; + t.emacron = 556; + t.gbreve = 556; + t.onequarter = 834; + t.Scaron = 667; + t.Scommaaccent = 667; + t.Ohungarumlaut = 778; + t.degree = 400; + t.ograve = 556; + t.Ccaron = 722; + t.ugrave = 556; + t.radical = 453; + t.Dcaron = 722; + t.rcommaaccent = 333; + t.Ntilde = 722; + t.otilde = 556; + t.Rcommaaccent = 722; + t.Lcommaaccent = 556; + t.Atilde = 667; + t.Aogonek = 667; + t.Aring = 667; + t.Otilde = 778; + t.zdotaccent = 500; + t.Ecaron = 667; + t.Iogonek = 278; + t.kcommaaccent = 500; + t.minus = 584; + t.Icircumflex = 278; + t.ncaron = 556; + t.tcommaaccent = 278; + t.logicalnot = 584; + t.odieresis = 556; + t.udieresis = 556; + t.notequal = 549; + t.gcommaaccent = 556; + t.eth = 556; + t.zcaron = 500; + t.ncommaaccent = 556; + t.onesuperior = 333; + t.imacron = 278; + t.Euro = 556; + }); + t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 278; + t.exclam = 333; + t.quotedbl = 474; + t.numbersign = 556; + t.dollar = 556; + t.percent = 889; + t.ampersand = 722; + t.quoteright = 278; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 389; + t.plus = 584; + t.comma = 278; + t.hyphen = 333; + t.period = 278; + t.slash = 278; + t.zero = 556; + t.one = 556; + t.two = 556; + t.three = 556; + t.four = 556; + t.five = 556; + t.six = 556; + t.seven = 556; + t.eight = 556; + t.nine = 556; + t.colon = 333; + t.semicolon = 333; + t.less = 584; + t.equal = 584; + t.greater = 584; + t.question = 611; + t.at = 975; + t.A = 722; + t.B = 722; + t.C = 722; + t.D = 722; + t.E = 667; + t.F = 611; + t.G = 778; + t.H = 722; + t.I = 278; + t.J = 556; + t.K = 722; + t.L = 611; + t.M = 833; + t.N = 722; + t.O = 778; + t.P = 667; + t.Q = 778; + t.R = 722; + t.S = 667; + t.T = 611; + t.U = 722; + t.V = 667; + t.W = 944; + t.X = 667; + t.Y = 667; + t.Z = 611; + t.bracketleft = 333; + t.backslash = 278; + t.bracketright = 333; + t.asciicircum = 584; + t.underscore = 556; + t.quoteleft = 278; + t.a = 556; + t.b = 611; + t.c = 556; + t.d = 611; + t.e = 556; + t.f = 333; + t.g = 611; + t.h = 611; + t.i = 278; + t.j = 278; + t.k = 556; + t.l = 278; + t.m = 889; + t.n = 611; + t.o = 611; + t.p = 611; + t.q = 611; + t.r = 389; + t.s = 556; + t.t = 333; + t.u = 611; + t.v = 556; + t.w = 778; + t.x = 556; + t.y = 556; + t.z = 500; + t.braceleft = 389; + t.bar = 280; + t.braceright = 389; + t.asciitilde = 584; + t.exclamdown = 333; + t.cent = 556; + t.sterling = 556; + t.fraction = 167; + t.yen = 556; + t.florin = 556; + t.section = 556; + t.currency = 556; + t.quotesingle = 238; + t.quotedblleft = 500; + t.guillemotleft = 556; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 611; + t.fl = 611; + t.endash = 556; + t.dagger = 556; + t.daggerdbl = 556; + t.periodcentered = 278; + t.paragraph = 556; + t.bullet = 350; + t.quotesinglbase = 278; + t.quotedblbase = 500; + t.quotedblright = 500; + t.guillemotright = 556; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 611; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 1000; + t.ordfeminine = 370; + t.Lslash = 611; + t.Oslash = 778; + t.OE = 1000; + t.ordmasculine = 365; + t.ae = 889; + t.dotlessi = 278; + t.lslash = 278; + t.oslash = 611; + t.oe = 944; + t.germandbls = 611; + t.Idieresis = 278; + t.eacute = 556; + t.abreve = 556; + t.uhungarumlaut = 611; + t.ecaron = 556; + t.Ydieresis = 667; + t.divide = 584; + t.Yacute = 667; + t.Acircumflex = 722; + t.aacute = 556; + t.Ucircumflex = 722; + t.yacute = 556; + t.scommaaccent = 556; + t.ecircumflex = 556; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 556; + t.Uacute = 722; + t.uogonek = 611; + t.Edieresis = 667; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 737; + t.Emacron = 667; + t.ccaron = 556; + t.aring = 556; + t.Ncommaaccent = 722; + t.lacute = 278; + t.agrave = 556; + t.Tcommaaccent = 611; + t.Cacute = 722; + t.atilde = 556; + t.Edotaccent = 667; + t.scaron = 556; + t.scedilla = 556; + t.iacute = 278; + t.lozenge = 494; + t.Rcaron = 722; + t.Gcommaaccent = 778; + t.ucircumflex = 611; + t.acircumflex = 556; + t.Amacron = 722; + t.rcaron = 389; + t.ccedilla = 556; + t.Zdotaccent = 611; + t.Thorn = 667; + t.Omacron = 778; + t.Racute = 722; + t.Sacute = 667; + t.dcaron = 743; + t.Umacron = 722; + t.uring = 611; + t.threesuperior = 333; + t.Ograve = 778; + t.Agrave = 722; + t.Abreve = 722; + t.multiply = 584; + t.uacute = 611; + t.Tcaron = 611; + t.partialdiff = 494; + t.ydieresis = 556; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 667; + t.adieresis = 556; + t.edieresis = 556; + t.cacute = 556; + t.nacute = 611; + t.umacron = 611; + t.Ncaron = 722; + t.Iacute = 278; + t.plusminus = 584; + t.brokenbar = 280; + t.registered = 737; + t.Gbreve = 778; + t.Idotaccent = 278; + t.summation = 600; + t.Egrave = 667; + t.racute = 389; + t.omacron = 611; + t.Zacute = 611; + t.Zcaron = 611; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 722; + t.lcommaaccent = 278; + t.tcaron = 389; + t.eogonek = 556; + t.Uogonek = 722; + t.Aacute = 722; + t.Adieresis = 722; + t.egrave = 556; + t.zacute = 500; + t.iogonek = 278; + t.Oacute = 778; + t.oacute = 611; + t.amacron = 556; + t.sacute = 556; + t.idieresis = 278; + t.Ocircumflex = 778; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 611; + t.twosuperior = 333; + t.Odieresis = 778; + t.mu = 611; + t.igrave = 278; + t.ohungarumlaut = 611; + t.Eogonek = 667; + t.dcroat = 611; + t.threequarters = 834; + t.Scedilla = 667; + t.lcaron = 400; + t.Kcommaaccent = 722; + t.Lacute = 611; + t.trademark = 1000; + t.edotaccent = 556; + t.Igrave = 278; + t.Imacron = 278; + t.Lcaron = 611; + t.onehalf = 834; + t.lessequal = 549; + t.ocircumflex = 611; + t.ntilde = 611; + t.Uhungarumlaut = 722; + t.Eacute = 667; + t.emacron = 556; + t.gbreve = 611; + t.onequarter = 834; + t.Scaron = 667; + t.Scommaaccent = 667; + t.Ohungarumlaut = 778; + t.degree = 400; + t.ograve = 611; + t.Ccaron = 722; + t.ugrave = 611; + t.radical = 549; + t.Dcaron = 722; + t.rcommaaccent = 389; + t.Ntilde = 722; + t.otilde = 611; + t.Rcommaaccent = 722; + t.Lcommaaccent = 611; + t.Atilde = 722; + t.Aogonek = 722; + t.Aring = 722; + t.Otilde = 778; + t.zdotaccent = 500; + t.Ecaron = 667; + t.Iogonek = 278; + t.kcommaaccent = 556; + t.minus = 584; + t.Icircumflex = 278; + t.ncaron = 611; + t.tcommaaccent = 333; + t.logicalnot = 584; + t.odieresis = 611; + t.udieresis = 611; + t.notequal = 549; + t.gcommaaccent = 611; + t.eth = 611; + t.zcaron = 500; + t.ncommaaccent = 611; + t.onesuperior = 333; + t.imacron = 278; + t.Euro = 556; + }); + t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 278; + t.exclam = 333; + t.quotedbl = 474; + t.numbersign = 556; + t.dollar = 556; + t.percent = 889; + t.ampersand = 722; + t.quoteright = 278; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 389; + t.plus = 584; + t.comma = 278; + t.hyphen = 333; + t.period = 278; + t.slash = 278; + t.zero = 556; + t.one = 556; + t.two = 556; + t.three = 556; + t.four = 556; + t.five = 556; + t.six = 556; + t.seven = 556; + t.eight = 556; + t.nine = 556; + t.colon = 333; + t.semicolon = 333; + t.less = 584; + t.equal = 584; + t.greater = 584; + t.question = 611; + t.at = 975; + t.A = 722; + t.B = 722; + t.C = 722; + t.D = 722; + t.E = 667; + t.F = 611; + t.G = 778; + t.H = 722; + t.I = 278; + t.J = 556; + t.K = 722; + t.L = 611; + t.M = 833; + t.N = 722; + t.O = 778; + t.P = 667; + t.Q = 778; + t.R = 722; + t.S = 667; + t.T = 611; + t.U = 722; + t.V = 667; + t.W = 944; + t.X = 667; + t.Y = 667; + t.Z = 611; + t.bracketleft = 333; + t.backslash = 278; + t.bracketright = 333; + t.asciicircum = 584; + t.underscore = 556; + t.quoteleft = 278; + t.a = 556; + t.b = 611; + t.c = 556; + t.d = 611; + t.e = 556; + t.f = 333; + t.g = 611; + t.h = 611; + t.i = 278; + t.j = 278; + t.k = 556; + t.l = 278; + t.m = 889; + t.n = 611; + t.o = 611; + t.p = 611; + t.q = 611; + t.r = 389; + t.s = 556; + t.t = 333; + t.u = 611; + t.v = 556; + t.w = 778; + t.x = 556; + t.y = 556; + t.z = 500; + t.braceleft = 389; + t.bar = 280; + t.braceright = 389; + t.asciitilde = 584; + t.exclamdown = 333; + t.cent = 556; + t.sterling = 556; + t.fraction = 167; + t.yen = 556; + t.florin = 556; + t.section = 556; + t.currency = 556; + t.quotesingle = 238; + t.quotedblleft = 500; + t.guillemotleft = 556; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 611; + t.fl = 611; + t.endash = 556; + t.dagger = 556; + t.daggerdbl = 556; + t.periodcentered = 278; + t.paragraph = 556; + t.bullet = 350; + t.quotesinglbase = 278; + t.quotedblbase = 500; + t.quotedblright = 500; + t.guillemotright = 556; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 611; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 1000; + t.ordfeminine = 370; + t.Lslash = 611; + t.Oslash = 778; + t.OE = 1000; + t.ordmasculine = 365; + t.ae = 889; + t.dotlessi = 278; + t.lslash = 278; + t.oslash = 611; + t.oe = 944; + t.germandbls = 611; + t.Idieresis = 278; + t.eacute = 556; + t.abreve = 556; + t.uhungarumlaut = 611; + t.ecaron = 556; + t.Ydieresis = 667; + t.divide = 584; + t.Yacute = 667; + t.Acircumflex = 722; + t.aacute = 556; + t.Ucircumflex = 722; + t.yacute = 556; + t.scommaaccent = 556; + t.ecircumflex = 556; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 556; + t.Uacute = 722; + t.uogonek = 611; + t.Edieresis = 667; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 737; + t.Emacron = 667; + t.ccaron = 556; + t.aring = 556; + t.Ncommaaccent = 722; + t.lacute = 278; + t.agrave = 556; + t.Tcommaaccent = 611; + t.Cacute = 722; + t.atilde = 556; + t.Edotaccent = 667; + t.scaron = 556; + t.scedilla = 556; + t.iacute = 278; + t.lozenge = 494; + t.Rcaron = 722; + t.Gcommaaccent = 778; + t.ucircumflex = 611; + t.acircumflex = 556; + t.Amacron = 722; + t.rcaron = 389; + t.ccedilla = 556; + t.Zdotaccent = 611; + t.Thorn = 667; + t.Omacron = 778; + t.Racute = 722; + t.Sacute = 667; + t.dcaron = 743; + t.Umacron = 722; + t.uring = 611; + t.threesuperior = 333; + t.Ograve = 778; + t.Agrave = 722; + t.Abreve = 722; + t.multiply = 584; + t.uacute = 611; + t.Tcaron = 611; + t.partialdiff = 494; + t.ydieresis = 556; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 667; + t.adieresis = 556; + t.edieresis = 556; + t.cacute = 556; + t.nacute = 611; + t.umacron = 611; + t.Ncaron = 722; + t.Iacute = 278; + t.plusminus = 584; + t.brokenbar = 280; + t.registered = 737; + t.Gbreve = 778; + t.Idotaccent = 278; + t.summation = 600; + t.Egrave = 667; + t.racute = 389; + t.omacron = 611; + t.Zacute = 611; + t.Zcaron = 611; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 722; + t.lcommaaccent = 278; + t.tcaron = 389; + t.eogonek = 556; + t.Uogonek = 722; + t.Aacute = 722; + t.Adieresis = 722; + t.egrave = 556; + t.zacute = 500; + t.iogonek = 278; + t.Oacute = 778; + t.oacute = 611; + t.amacron = 556; + t.sacute = 556; + t.idieresis = 278; + t.Ocircumflex = 778; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 611; + t.twosuperior = 333; + t.Odieresis = 778; + t.mu = 611; + t.igrave = 278; + t.ohungarumlaut = 611; + t.Eogonek = 667; + t.dcroat = 611; + t.threequarters = 834; + t.Scedilla = 667; + t.lcaron = 400; + t.Kcommaaccent = 722; + t.Lacute = 611; + t.trademark = 1000; + t.edotaccent = 556; + t.Igrave = 278; + t.Imacron = 278; + t.Lcaron = 611; + t.onehalf = 834; + t.lessequal = 549; + t.ocircumflex = 611; + t.ntilde = 611; + t.Uhungarumlaut = 722; + t.Eacute = 667; + t.emacron = 556; + t.gbreve = 611; + t.onequarter = 834; + t.Scaron = 667; + t.Scommaaccent = 667; + t.Ohungarumlaut = 778; + t.degree = 400; + t.ograve = 611; + t.Ccaron = 722; + t.ugrave = 611; + t.radical = 549; + t.Dcaron = 722; + t.rcommaaccent = 389; + t.Ntilde = 722; + t.otilde = 611; + t.Rcommaaccent = 722; + t.Lcommaaccent = 611; + t.Atilde = 722; + t.Aogonek = 722; + t.Aring = 722; + t.Otilde = 778; + t.zdotaccent = 500; + t.Ecaron = 667; + t.Iogonek = 278; + t.kcommaaccent = 556; + t.minus = 584; + t.Icircumflex = 278; + t.ncaron = 611; + t.tcommaaccent = 333; + t.logicalnot = 584; + t.odieresis = 611; + t.udieresis = 611; + t.notequal = 549; + t.gcommaaccent = 611; + t.eth = 611; + t.zcaron = 500; + t.ncommaaccent = 611; + t.onesuperior = 333; + t.imacron = 278; + t.Euro = 556; + }); + t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 278; + t.exclam = 278; + t.quotedbl = 355; + t.numbersign = 556; + t.dollar = 556; + t.percent = 889; + t.ampersand = 667; + t.quoteright = 222; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 389; + t.plus = 584; + t.comma = 278; + t.hyphen = 333; + t.period = 278; + t.slash = 278; + t.zero = 556; + t.one = 556; + t.two = 556; + t.three = 556; + t.four = 556; + t.five = 556; + t.six = 556; + t.seven = 556; + t.eight = 556; + t.nine = 556; + t.colon = 278; + t.semicolon = 278; + t.less = 584; + t.equal = 584; + t.greater = 584; + t.question = 556; + t.at = 1015; + t.A = 667; + t.B = 667; + t.C = 722; + t.D = 722; + t.E = 667; + t.F = 611; + t.G = 778; + t.H = 722; + t.I = 278; + t.J = 500; + t.K = 667; + t.L = 556; + t.M = 833; + t.N = 722; + t.O = 778; + t.P = 667; + t.Q = 778; + t.R = 722; + t.S = 667; + t.T = 611; + t.U = 722; + t.V = 667; + t.W = 944; + t.X = 667; + t.Y = 667; + t.Z = 611; + t.bracketleft = 278; + t.backslash = 278; + t.bracketright = 278; + t.asciicircum = 469; + t.underscore = 556; + t.quoteleft = 222; + t.a = 556; + t.b = 556; + t.c = 500; + t.d = 556; + t.e = 556; + t.f = 278; + t.g = 556; + t.h = 556; + t.i = 222; + t.j = 222; + t.k = 500; + t.l = 222; + t.m = 833; + t.n = 556; + t.o = 556; + t.p = 556; + t.q = 556; + t.r = 333; + t.s = 500; + t.t = 278; + t.u = 556; + t.v = 500; + t.w = 722; + t.x = 500; + t.y = 500; + t.z = 500; + t.braceleft = 334; + t.bar = 260; + t.braceright = 334; + t.asciitilde = 584; + t.exclamdown = 333; + t.cent = 556; + t.sterling = 556; + t.fraction = 167; + t.yen = 556; + t.florin = 556; + t.section = 556; + t.currency = 556; + t.quotesingle = 191; + t.quotedblleft = 333; + t.guillemotleft = 556; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 500; + t.fl = 500; + t.endash = 556; + t.dagger = 556; + t.daggerdbl = 556; + t.periodcentered = 278; + t.paragraph = 537; + t.bullet = 350; + t.quotesinglbase = 222; + t.quotedblbase = 333; + t.quotedblright = 333; + t.guillemotright = 556; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 611; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 1000; + t.ordfeminine = 370; + t.Lslash = 556; + t.Oslash = 778; + t.OE = 1000; + t.ordmasculine = 365; + t.ae = 889; + t.dotlessi = 278; + t.lslash = 222; + t.oslash = 611; + t.oe = 944; + t.germandbls = 611; + t.Idieresis = 278; + t.eacute = 556; + t.abreve = 556; + t.uhungarumlaut = 556; + t.ecaron = 556; + t.Ydieresis = 667; + t.divide = 584; + t.Yacute = 667; + t.Acircumflex = 667; + t.aacute = 556; + t.Ucircumflex = 722; + t.yacute = 500; + t.scommaaccent = 500; + t.ecircumflex = 556; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 556; + t.Uacute = 722; + t.uogonek = 556; + t.Edieresis = 667; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 737; + t.Emacron = 667; + t.ccaron = 500; + t.aring = 556; + t.Ncommaaccent = 722; + t.lacute = 222; + t.agrave = 556; + t.Tcommaaccent = 611; + t.Cacute = 722; + t.atilde = 556; + t.Edotaccent = 667; + t.scaron = 500; + t.scedilla = 500; + t.iacute = 278; + t.lozenge = 471; + t.Rcaron = 722; + t.Gcommaaccent = 778; + t.ucircumflex = 556; + t.acircumflex = 556; + t.Amacron = 667; + t.rcaron = 333; + t.ccedilla = 500; + t.Zdotaccent = 611; + t.Thorn = 667; + t.Omacron = 778; + t.Racute = 722; + t.Sacute = 667; + t.dcaron = 643; + t.Umacron = 722; + t.uring = 556; + t.threesuperior = 333; + t.Ograve = 778; + t.Agrave = 667; + t.Abreve = 667; + t.multiply = 584; + t.uacute = 556; + t.Tcaron = 611; + t.partialdiff = 476; + t.ydieresis = 500; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 667; + t.adieresis = 556; + t.edieresis = 556; + t.cacute = 500; + t.nacute = 556; + t.umacron = 556; + t.Ncaron = 722; + t.Iacute = 278; + t.plusminus = 584; + t.brokenbar = 260; + t.registered = 737; + t.Gbreve = 778; + t.Idotaccent = 278; + t.summation = 600; + t.Egrave = 667; + t.racute = 333; + t.omacron = 556; + t.Zacute = 611; + t.Zcaron = 611; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 722; + t.lcommaaccent = 222; + t.tcaron = 317; + t.eogonek = 556; + t.Uogonek = 722; + t.Aacute = 667; + t.Adieresis = 667; + t.egrave = 556; + t.zacute = 500; + t.iogonek = 222; + t.Oacute = 778; + t.oacute = 556; + t.amacron = 556; + t.sacute = 500; + t.idieresis = 278; + t.Ocircumflex = 778; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 556; + t.twosuperior = 333; + t.Odieresis = 778; + t.mu = 556; + t.igrave = 278; + t.ohungarumlaut = 556; + t.Eogonek = 667; + t.dcroat = 556; + t.threequarters = 834; + t.Scedilla = 667; + t.lcaron = 299; + t.Kcommaaccent = 667; + t.Lacute = 556; + t.trademark = 1000; + t.edotaccent = 556; + t.Igrave = 278; + t.Imacron = 278; + t.Lcaron = 556; + t.onehalf = 834; + t.lessequal = 549; + t.ocircumflex = 556; + t.ntilde = 556; + t.Uhungarumlaut = 722; + t.Eacute = 667; + t.emacron = 556; + t.gbreve = 556; + t.onequarter = 834; + t.Scaron = 667; + t.Scommaaccent = 667; + t.Ohungarumlaut = 778; + t.degree = 400; + t.ograve = 556; + t.Ccaron = 722; + t.ugrave = 556; + t.radical = 453; + t.Dcaron = 722; + t.rcommaaccent = 333; + t.Ntilde = 722; + t.otilde = 556; + t.Rcommaaccent = 722; + t.Lcommaaccent = 556; + t.Atilde = 667; + t.Aogonek = 667; + t.Aring = 667; + t.Otilde = 778; + t.zdotaccent = 500; + t.Ecaron = 667; + t.Iogonek = 278; + t.kcommaaccent = 500; + t.minus = 584; + t.Icircumflex = 278; + t.ncaron = 556; + t.tcommaaccent = 278; + t.logicalnot = 584; + t.odieresis = 556; + t.udieresis = 556; + t.notequal = 549; + t.gcommaaccent = 556; + t.eth = 556; + t.zcaron = 500; + t.ncommaaccent = 556; + t.onesuperior = 333; + t.imacron = 278; + t.Euro = 556; + }); + t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 250; + t.exclam = 333; + t.universal = 713; + t.numbersign = 500; + t.existential = 549; + t.percent = 833; + t.ampersand = 778; + t.suchthat = 439; + t.parenleft = 333; + t.parenright = 333; + t.asteriskmath = 500; + t.plus = 549; + t.comma = 250; + t.minus = 549; + t.period = 250; + t.slash = 278; + t.zero = 500; + t.one = 500; + t.two = 500; + t.three = 500; + t.four = 500; + t.five = 500; + t.six = 500; + t.seven = 500; + t.eight = 500; + t.nine = 500; + t.colon = 278; + t.semicolon = 278; + t.less = 549; + t.equal = 549; + t.greater = 549; + t.question = 444; + t.congruent = 549; + t.Alpha = 722; + t.Beta = 667; + t.Chi = 722; + t.Delta = 612; + t.Epsilon = 611; + t.Phi = 763; + t.Gamma = 603; + t.Eta = 722; + t.Iota = 333; + t.theta1 = 631; + t.Kappa = 722; + t.Lambda = 686; + t.Mu = 889; + t.Nu = 722; + t.Omicron = 722; + t.Pi = 768; + t.Theta = 741; + t.Rho = 556; + t.Sigma = 592; + t.Tau = 611; + t.Upsilon = 690; + t.sigma1 = 439; + t.Omega = 768; + t.Xi = 645; + t.Psi = 795; + t.Zeta = 611; + t.bracketleft = 333; + t.therefore = 863; + t.bracketright = 333; + t.perpendicular = 658; + t.underscore = 500; + t.radicalex = 500; + t.alpha = 631; + t.beta = 549; + t.chi = 549; + t.delta = 494; + t.epsilon = 439; + t.phi = 521; + t.gamma = 411; + t.eta = 603; + t.iota = 329; + t.phi1 = 603; + t.kappa = 549; + t.lambda = 549; + t.mu = 576; + t.nu = 521; + t.omicron = 549; + t.pi = 549; + t.theta = 521; + t.rho = 549; + t.sigma = 603; + t.tau = 439; + t.upsilon = 576; + t.omega1 = 713; + t.omega = 686; + t.xi = 493; + t.psi = 686; + t.zeta = 494; + t.braceleft = 480; + t.bar = 200; + t.braceright = 480; + t.similar = 549; + t.Euro = 750; + t.Upsilon1 = 620; + t.minute = 247; + t.lessequal = 549; + t.fraction = 167; + t.infinity = 713; + t.florin = 500; + t.club = 753; + t.diamond = 753; + t.heart = 753; + t.spade = 753; + t.arrowboth = 1042; + t.arrowleft = 987; + t.arrowup = 603; + t.arrowright = 987; + t.arrowdown = 603; + t.degree = 400; + t.plusminus = 549; + t.second = 411; + t.greaterequal = 549; + t.multiply = 549; + t.proportional = 713; + t.partialdiff = 494; + t.bullet = 460; + t.divide = 549; + t.notequal = 549; + t.equivalence = 549; + t.approxequal = 549; + t.ellipsis = 1000; + t.arrowvertex = 603; + t.arrowhorizex = 1000; + t.carriagereturn = 658; + t.aleph = 823; + t.Ifraktur = 686; + t.Rfraktur = 795; + t.weierstrass = 987; + t.circlemultiply = 768; + t.circleplus = 768; + t.emptyset = 823; + t.intersection = 768; + t.union = 768; + t.propersuperset = 713; + t.reflexsuperset = 713; + t.notsubset = 713; + t.propersubset = 713; + t.reflexsubset = 713; + t.element = 713; + t.notelement = 713; + t.angle = 768; + t.gradient = 713; + t.registerserif = 790; + t.copyrightserif = 790; + t.trademarkserif = 890; + t.product = 823; + t.radical = 549; + t.dotmath = 250; + t.logicalnot = 713; + t.logicaland = 603; + t.logicalor = 603; + t.arrowdblboth = 1042; + t.arrowdblleft = 987; + t.arrowdblup = 603; + t.arrowdblright = 987; + t.arrowdbldown = 603; + t.lozenge = 494; + t.angleleft = 329; + t.registersans = 790; + t.copyrightsans = 790; + t.trademarksans = 786; + t.summation = 713; + t.parenlefttp = 384; + t.parenleftex = 384; + t.parenleftbt = 384; + t.bracketlefttp = 384; + t.bracketleftex = 384; + t.bracketleftbt = 384; + t.bracelefttp = 494; + t.braceleftmid = 494; + t.braceleftbt = 494; + t.braceex = 494; + t.angleright = 329; + t.integral = 274; + t.integraltp = 686; + t.integralex = 686; + t.integralbt = 686; + t.parenrighttp = 384; + t.parenrightex = 384; + t.parenrightbt = 384; + t.bracketrighttp = 384; + t.bracketrightex = 384; + t.bracketrightbt = 384; + t.bracerighttp = 494; + t.bracerightmid = 494; + t.bracerightbt = 494; + t.apple = 790; + }); + t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 250; + t.exclam = 333; + t.quotedbl = 408; + t.numbersign = 500; + t.dollar = 500; + t.percent = 833; + t.ampersand = 778; + t.quoteright = 333; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 500; + t.plus = 564; + t.comma = 250; + t.hyphen = 333; + t.period = 250; + t.slash = 278; + t.zero = 500; + t.one = 500; + t.two = 500; + t.three = 500; + t.four = 500; + t.five = 500; + t.six = 500; + t.seven = 500; + t.eight = 500; + t.nine = 500; + t.colon = 278; + t.semicolon = 278; + t.less = 564; + t.equal = 564; + t.greater = 564; + t.question = 444; + t.at = 921; + t.A = 722; + t.B = 667; + t.C = 667; + t.D = 722; + t.E = 611; + t.F = 556; + t.G = 722; + t.H = 722; + t.I = 333; + t.J = 389; + t.K = 722; + t.L = 611; + t.M = 889; + t.N = 722; + t.O = 722; + t.P = 556; + t.Q = 722; + t.R = 667; + t.S = 556; + t.T = 611; + t.U = 722; + t.V = 722; + t.W = 944; + t.X = 722; + t.Y = 722; + t.Z = 611; + t.bracketleft = 333; + t.backslash = 278; + t.bracketright = 333; + t.asciicircum = 469; + t.underscore = 500; + t.quoteleft = 333; + t.a = 444; + t.b = 500; + t.c = 444; + t.d = 500; + t.e = 444; + t.f = 333; + t.g = 500; + t.h = 500; + t.i = 278; + t.j = 278; + t.k = 500; + t.l = 278; + t.m = 778; + t.n = 500; + t.o = 500; + t.p = 500; + t.q = 500; + t.r = 333; + t.s = 389; + t.t = 278; + t.u = 500; + t.v = 500; + t.w = 722; + t.x = 500; + t.y = 500; + t.z = 444; + t.braceleft = 480; + t.bar = 200; + t.braceright = 480; + t.asciitilde = 541; + t.exclamdown = 333; + t.cent = 500; + t.sterling = 500; + t.fraction = 167; + t.yen = 500; + t.florin = 500; + t.section = 500; + t.currency = 500; + t.quotesingle = 180; + t.quotedblleft = 444; + t.guillemotleft = 500; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 556; + t.fl = 556; + t.endash = 500; + t.dagger = 500; + t.daggerdbl = 500; + t.periodcentered = 250; + t.paragraph = 453; + t.bullet = 350; + t.quotesinglbase = 333; + t.quotedblbase = 444; + t.quotedblright = 444; + t.guillemotright = 500; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 444; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 889; + t.ordfeminine = 276; + t.Lslash = 611; + t.Oslash = 722; + t.OE = 889; + t.ordmasculine = 310; + t.ae = 667; + t.dotlessi = 278; + t.lslash = 278; + t.oslash = 500; + t.oe = 722; + t.germandbls = 500; + t.Idieresis = 333; + t.eacute = 444; + t.abreve = 444; + t.uhungarumlaut = 500; + t.ecaron = 444; + t.Ydieresis = 722; + t.divide = 564; + t.Yacute = 722; + t.Acircumflex = 722; + t.aacute = 444; + t.Ucircumflex = 722; + t.yacute = 500; + t.scommaaccent = 389; + t.ecircumflex = 444; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 444; + t.Uacute = 722; + t.uogonek = 500; + t.Edieresis = 611; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 760; + t.Emacron = 611; + t.ccaron = 444; + t.aring = 444; + t.Ncommaaccent = 722; + t.lacute = 278; + t.agrave = 444; + t.Tcommaaccent = 611; + t.Cacute = 667; + t.atilde = 444; + t.Edotaccent = 611; + t.scaron = 389; + t.scedilla = 389; + t.iacute = 278; + t.lozenge = 471; + t.Rcaron = 667; + t.Gcommaaccent = 722; + t.ucircumflex = 500; + t.acircumflex = 444; + t.Amacron = 722; + t.rcaron = 333; + t.ccedilla = 444; + t.Zdotaccent = 611; + t.Thorn = 556; + t.Omacron = 722; + t.Racute = 667; + t.Sacute = 556; + t.dcaron = 588; + t.Umacron = 722; + t.uring = 500; + t.threesuperior = 300; + t.Ograve = 722; + t.Agrave = 722; + t.Abreve = 722; + t.multiply = 564; + t.uacute = 500; + t.Tcaron = 611; + t.partialdiff = 476; + t.ydieresis = 500; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 611; + t.adieresis = 444; + t.edieresis = 444; + t.cacute = 444; + t.nacute = 500; + t.umacron = 500; + t.Ncaron = 722; + t.Iacute = 333; + t.plusminus = 564; + t.brokenbar = 200; + t.registered = 760; + t.Gbreve = 722; + t.Idotaccent = 333; + t.summation = 600; + t.Egrave = 611; + t.racute = 333; + t.omacron = 500; + t.Zacute = 611; + t.Zcaron = 611; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 667; + t.lcommaaccent = 278; + t.tcaron = 326; + t.eogonek = 444; + t.Uogonek = 722; + t.Aacute = 722; + t.Adieresis = 722; + t.egrave = 444; + t.zacute = 444; + t.iogonek = 278; + t.Oacute = 722; + t.oacute = 500; + t.amacron = 444; + t.sacute = 389; + t.idieresis = 278; + t.Ocircumflex = 722; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 500; + t.twosuperior = 300; + t.Odieresis = 722; + t.mu = 500; + t.igrave = 278; + t.ohungarumlaut = 500; + t.Eogonek = 611; + t.dcroat = 500; + t.threequarters = 750; + t.Scedilla = 556; + t.lcaron = 344; + t.Kcommaaccent = 722; + t.Lacute = 611; + t.trademark = 980; + t.edotaccent = 444; + t.Igrave = 333; + t.Imacron = 333; + t.Lcaron = 611; + t.onehalf = 750; + t.lessequal = 549; + t.ocircumflex = 500; + t.ntilde = 500; + t.Uhungarumlaut = 722; + t.Eacute = 611; + t.emacron = 444; + t.gbreve = 500; + t.onequarter = 750; + t.Scaron = 556; + t.Scommaaccent = 556; + t.Ohungarumlaut = 722; + t.degree = 400; + t.ograve = 500; + t.Ccaron = 667; + t.ugrave = 500; + t.radical = 453; + t.Dcaron = 722; + t.rcommaaccent = 333; + t.Ntilde = 722; + t.otilde = 500; + t.Rcommaaccent = 667; + t.Lcommaaccent = 611; + t.Atilde = 722; + t.Aogonek = 722; + t.Aring = 722; + t.Otilde = 722; + t.zdotaccent = 444; + t.Ecaron = 611; + t.Iogonek = 333; + t.kcommaaccent = 500; + t.minus = 564; + t.Icircumflex = 333; + t.ncaron = 500; + t.tcommaaccent = 278; + t.logicalnot = 564; + t.odieresis = 500; + t.udieresis = 500; + t.notequal = 549; + t.gcommaaccent = 500; + t.eth = 500; + t.zcaron = 444; + t.ncommaaccent = 500; + t.onesuperior = 300; + t.imacron = 278; + t.Euro = 500; + }); + t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 250; + t.exclam = 333; + t.quotedbl = 555; + t.numbersign = 500; + t.dollar = 500; + t.percent = 1000; + t.ampersand = 833; + t.quoteright = 333; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 500; + t.plus = 570; + t.comma = 250; + t.hyphen = 333; + t.period = 250; + t.slash = 278; + t.zero = 500; + t.one = 500; + t.two = 500; + t.three = 500; + t.four = 500; + t.five = 500; + t.six = 500; + t.seven = 500; + t.eight = 500; + t.nine = 500; + t.colon = 333; + t.semicolon = 333; + t.less = 570; + t.equal = 570; + t.greater = 570; + t.question = 500; + t.at = 930; + t.A = 722; + t.B = 667; + t.C = 722; + t.D = 722; + t.E = 667; + t.F = 611; + t.G = 778; + t.H = 778; + t.I = 389; + t.J = 500; + t.K = 778; + t.L = 667; + t.M = 944; + t.N = 722; + t.O = 778; + t.P = 611; + t.Q = 778; + t.R = 722; + t.S = 556; + t.T = 667; + t.U = 722; + t.V = 722; + t.W = 1000; + t.X = 722; + t.Y = 722; + t.Z = 667; + t.bracketleft = 333; + t.backslash = 278; + t.bracketright = 333; + t.asciicircum = 581; + t.underscore = 500; + t.quoteleft = 333; + t.a = 500; + t.b = 556; + t.c = 444; + t.d = 556; + t.e = 444; + t.f = 333; + t.g = 500; + t.h = 556; + t.i = 278; + t.j = 333; + t.k = 556; + t.l = 278; + t.m = 833; + t.n = 556; + t.o = 500; + t.p = 556; + t.q = 556; + t.r = 444; + t.s = 389; + t.t = 333; + t.u = 556; + t.v = 500; + t.w = 722; + t.x = 500; + t.y = 500; + t.z = 444; + t.braceleft = 394; + t.bar = 220; + t.braceright = 394; + t.asciitilde = 520; + t.exclamdown = 333; + t.cent = 500; + t.sterling = 500; + t.fraction = 167; + t.yen = 500; + t.florin = 500; + t.section = 500; + t.currency = 500; + t.quotesingle = 278; + t.quotedblleft = 500; + t.guillemotleft = 500; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 556; + t.fl = 556; + t.endash = 500; + t.dagger = 500; + t.daggerdbl = 500; + t.periodcentered = 250; + t.paragraph = 540; + t.bullet = 350; + t.quotesinglbase = 333; + t.quotedblbase = 500; + t.quotedblright = 500; + t.guillemotright = 500; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 500; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 1000; + t.ordfeminine = 300; + t.Lslash = 667; + t.Oslash = 778; + t.OE = 1000; + t.ordmasculine = 330; + t.ae = 722; + t.dotlessi = 278; + t.lslash = 278; + t.oslash = 500; + t.oe = 722; + t.germandbls = 556; + t.Idieresis = 389; + t.eacute = 444; + t.abreve = 500; + t.uhungarumlaut = 556; + t.ecaron = 444; + t.Ydieresis = 722; + t.divide = 570; + t.Yacute = 722; + t.Acircumflex = 722; + t.aacute = 500; + t.Ucircumflex = 722; + t.yacute = 500; + t.scommaaccent = 389; + t.ecircumflex = 444; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 500; + t.Uacute = 722; + t.uogonek = 556; + t.Edieresis = 667; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 747; + t.Emacron = 667; + t.ccaron = 444; + t.aring = 500; + t.Ncommaaccent = 722; + t.lacute = 278; + t.agrave = 500; + t.Tcommaaccent = 667; + t.Cacute = 722; + t.atilde = 500; + t.Edotaccent = 667; + t.scaron = 389; + t.scedilla = 389; + t.iacute = 278; + t.lozenge = 494; + t.Rcaron = 722; + t.Gcommaaccent = 778; + t.ucircumflex = 556; + t.acircumflex = 500; + t.Amacron = 722; + t.rcaron = 444; + t.ccedilla = 444; + t.Zdotaccent = 667; + t.Thorn = 611; + t.Omacron = 778; + t.Racute = 722; + t.Sacute = 556; + t.dcaron = 672; + t.Umacron = 722; + t.uring = 556; + t.threesuperior = 300; + t.Ograve = 778; + t.Agrave = 722; + t.Abreve = 722; + t.multiply = 570; + t.uacute = 556; + t.Tcaron = 667; + t.partialdiff = 494; + t.ydieresis = 500; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 667; + t.adieresis = 500; + t.edieresis = 444; + t.cacute = 444; + t.nacute = 556; + t.umacron = 556; + t.Ncaron = 722; + t.Iacute = 389; + t.plusminus = 570; + t.brokenbar = 220; + t.registered = 747; + t.Gbreve = 778; + t.Idotaccent = 389; + t.summation = 600; + t.Egrave = 667; + t.racute = 444; + t.omacron = 500; + t.Zacute = 667; + t.Zcaron = 667; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 722; + t.lcommaaccent = 278; + t.tcaron = 416; + t.eogonek = 444; + t.Uogonek = 722; + t.Aacute = 722; + t.Adieresis = 722; + t.egrave = 444; + t.zacute = 444; + t.iogonek = 278; + t.Oacute = 778; + t.oacute = 500; + t.amacron = 500; + t.sacute = 389; + t.idieresis = 278; + t.Ocircumflex = 778; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 556; + t.twosuperior = 300; + t.Odieresis = 778; + t.mu = 556; + t.igrave = 278; + t.ohungarumlaut = 500; + t.Eogonek = 667; + t.dcroat = 556; + t.threequarters = 750; + t.Scedilla = 556; + t.lcaron = 394; + t.Kcommaaccent = 778; + t.Lacute = 667; + t.trademark = 1000; + t.edotaccent = 444; + t.Igrave = 389; + t.Imacron = 389; + t.Lcaron = 667; + t.onehalf = 750; + t.lessequal = 549; + t.ocircumflex = 500; + t.ntilde = 556; + t.Uhungarumlaut = 722; + t.Eacute = 667; + t.emacron = 444; + t.gbreve = 500; + t.onequarter = 750; + t.Scaron = 556; + t.Scommaaccent = 556; + t.Ohungarumlaut = 778; + t.degree = 400; + t.ograve = 500; + t.Ccaron = 722; + t.ugrave = 556; + t.radical = 549; + t.Dcaron = 722; + t.rcommaaccent = 444; + t.Ntilde = 722; + t.otilde = 500; + t.Rcommaaccent = 722; + t.Lcommaaccent = 667; + t.Atilde = 722; + t.Aogonek = 722; + t.Aring = 722; + t.Otilde = 778; + t.zdotaccent = 444; + t.Ecaron = 667; + t.Iogonek = 389; + t.kcommaaccent = 556; + t.minus = 570; + t.Icircumflex = 389; + t.ncaron = 556; + t.tcommaaccent = 333; + t.logicalnot = 570; + t.odieresis = 500; + t.udieresis = 556; + t.notequal = 549; + t.gcommaaccent = 500; + t.eth = 500; + t.zcaron = 444; + t.ncommaaccent = 556; + t.onesuperior = 300; + t.imacron = 278; + t.Euro = 500; + }); + t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 250; + t.exclam = 389; + t.quotedbl = 555; + t.numbersign = 500; + t.dollar = 500; + t.percent = 833; + t.ampersand = 778; + t.quoteright = 333; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 500; + t.plus = 570; + t.comma = 250; + t.hyphen = 333; + t.period = 250; + t.slash = 278; + t.zero = 500; + t.one = 500; + t.two = 500; + t.three = 500; + t.four = 500; + t.five = 500; + t.six = 500; + t.seven = 500; + t.eight = 500; + t.nine = 500; + t.colon = 333; + t.semicolon = 333; + t.less = 570; + t.equal = 570; + t.greater = 570; + t.question = 500; + t.at = 832; + t.A = 667; + t.B = 667; + t.C = 667; + t.D = 722; + t.E = 667; + t.F = 667; + t.G = 722; + t.H = 778; + t.I = 389; + t.J = 500; + t.K = 667; + t.L = 611; + t.M = 889; + t.N = 722; + t.O = 722; + t.P = 611; + t.Q = 722; + t.R = 667; + t.S = 556; + t.T = 611; + t.U = 722; + t.V = 667; + t.W = 889; + t.X = 667; + t.Y = 611; + t.Z = 611; + t.bracketleft = 333; + t.backslash = 278; + t.bracketright = 333; + t.asciicircum = 570; + t.underscore = 500; + t.quoteleft = 333; + t.a = 500; + t.b = 500; + t.c = 444; + t.d = 500; + t.e = 444; + t.f = 333; + t.g = 500; + t.h = 556; + t.i = 278; + t.j = 278; + t.k = 500; + t.l = 278; + t.m = 778; + t.n = 556; + t.o = 500; + t.p = 500; + t.q = 500; + t.r = 389; + t.s = 389; + t.t = 278; + t.u = 556; + t.v = 444; + t.w = 667; + t.x = 500; + t.y = 444; + t.z = 389; + t.braceleft = 348; + t.bar = 220; + t.braceright = 348; + t.asciitilde = 570; + t.exclamdown = 389; + t.cent = 500; + t.sterling = 500; + t.fraction = 167; + t.yen = 500; + t.florin = 500; + t.section = 500; + t.currency = 500; + t.quotesingle = 278; + t.quotedblleft = 500; + t.guillemotleft = 500; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 556; + t.fl = 556; + t.endash = 500; + t.dagger = 500; + t.daggerdbl = 500; + t.periodcentered = 250; + t.paragraph = 500; + t.bullet = 350; + t.quotesinglbase = 333; + t.quotedblbase = 500; + t.quotedblright = 500; + t.guillemotright = 500; + t.ellipsis = 1000; + t.perthousand = 1000; + t.questiondown = 500; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 1000; + t.AE = 944; + t.ordfeminine = 266; + t.Lslash = 611; + t.Oslash = 722; + t.OE = 944; + t.ordmasculine = 300; + t.ae = 722; + t.dotlessi = 278; + t.lslash = 278; + t.oslash = 500; + t.oe = 722; + t.germandbls = 500; + t.Idieresis = 389; + t.eacute = 444; + t.abreve = 500; + t.uhungarumlaut = 556; + t.ecaron = 444; + t.Ydieresis = 611; + t.divide = 570; + t.Yacute = 611; + t.Acircumflex = 667; + t.aacute = 500; + t.Ucircumflex = 722; + t.yacute = 444; + t.scommaaccent = 389; + t.ecircumflex = 444; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 500; + t.Uacute = 722; + t.uogonek = 556; + t.Edieresis = 667; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 747; + t.Emacron = 667; + t.ccaron = 444; + t.aring = 500; + t.Ncommaaccent = 722; + t.lacute = 278; + t.agrave = 500; + t.Tcommaaccent = 611; + t.Cacute = 667; + t.atilde = 500; + t.Edotaccent = 667; + t.scaron = 389; + t.scedilla = 389; + t.iacute = 278; + t.lozenge = 494; + t.Rcaron = 667; + t.Gcommaaccent = 722; + t.ucircumflex = 556; + t.acircumflex = 500; + t.Amacron = 667; + t.rcaron = 389; + t.ccedilla = 444; + t.Zdotaccent = 611; + t.Thorn = 611; + t.Omacron = 722; + t.Racute = 667; + t.Sacute = 556; + t.dcaron = 608; + t.Umacron = 722; + t.uring = 556; + t.threesuperior = 300; + t.Ograve = 722; + t.Agrave = 667; + t.Abreve = 667; + t.multiply = 570; + t.uacute = 556; + t.Tcaron = 611; + t.partialdiff = 494; + t.ydieresis = 444; + t.Nacute = 722; + t.icircumflex = 278; + t.Ecircumflex = 667; + t.adieresis = 500; + t.edieresis = 444; + t.cacute = 444; + t.nacute = 556; + t.umacron = 556; + t.Ncaron = 722; + t.Iacute = 389; + t.plusminus = 570; + t.brokenbar = 220; + t.registered = 747; + t.Gbreve = 722; + t.Idotaccent = 389; + t.summation = 600; + t.Egrave = 667; + t.racute = 389; + t.omacron = 500; + t.Zacute = 611; + t.Zcaron = 611; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 667; + t.lcommaaccent = 278; + t.tcaron = 366; + t.eogonek = 444; + t.Uogonek = 722; + t.Aacute = 667; + t.Adieresis = 667; + t.egrave = 444; + t.zacute = 389; + t.iogonek = 278; + t.Oacute = 722; + t.oacute = 500; + t.amacron = 500; + t.sacute = 389; + t.idieresis = 278; + t.Ocircumflex = 722; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 500; + t.twosuperior = 300; + t.Odieresis = 722; + t.mu = 576; + t.igrave = 278; + t.ohungarumlaut = 500; + t.Eogonek = 667; + t.dcroat = 500; + t.threequarters = 750; + t.Scedilla = 556; + t.lcaron = 382; + t.Kcommaaccent = 667; + t.Lacute = 611; + t.trademark = 1000; + t.edotaccent = 444; + t.Igrave = 389; + t.Imacron = 389; + t.Lcaron = 611; + t.onehalf = 750; + t.lessequal = 549; + t.ocircumflex = 500; + t.ntilde = 556; + t.Uhungarumlaut = 722; + t.Eacute = 667; + t.emacron = 444; + t.gbreve = 500; + t.onequarter = 750; + t.Scaron = 556; + t.Scommaaccent = 556; + t.Ohungarumlaut = 722; + t.degree = 400; + t.ograve = 500; + t.Ccaron = 667; + t.ugrave = 556; + t.radical = 549; + t.Dcaron = 722; + t.rcommaaccent = 389; + t.Ntilde = 722; + t.otilde = 500; + t.Rcommaaccent = 667; + t.Lcommaaccent = 611; + t.Atilde = 667; + t.Aogonek = 667; + t.Aring = 667; + t.Otilde = 722; + t.zdotaccent = 389; + t.Ecaron = 667; + t.Iogonek = 389; + t.kcommaaccent = 500; + t.minus = 606; + t.Icircumflex = 389; + t.ncaron = 556; + t.tcommaaccent = 278; + t.logicalnot = 606; + t.odieresis = 500; + t.udieresis = 556; + t.notequal = 549; + t.gcommaaccent = 500; + t.eth = 500; + t.zcaron = 389; + t.ncommaaccent = 556; + t.onesuperior = 300; + t.imacron = 278; + t.Euro = 500; + }); + t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 250; + t.exclam = 333; + t.quotedbl = 420; + t.numbersign = 500; + t.dollar = 500; + t.percent = 833; + t.ampersand = 778; + t.quoteright = 333; + t.parenleft = 333; + t.parenright = 333; + t.asterisk = 500; + t.plus = 675; + t.comma = 250; + t.hyphen = 333; + t.period = 250; + t.slash = 278; + t.zero = 500; + t.one = 500; + t.two = 500; + t.three = 500; + t.four = 500; + t.five = 500; + t.six = 500; + t.seven = 500; + t.eight = 500; + t.nine = 500; + t.colon = 333; + t.semicolon = 333; + t.less = 675; + t.equal = 675; + t.greater = 675; + t.question = 500; + t.at = 920; + t.A = 611; + t.B = 611; + t.C = 667; + t.D = 722; + t.E = 611; + t.F = 611; + t.G = 722; + t.H = 722; + t.I = 333; + t.J = 444; + t.K = 667; + t.L = 556; + t.M = 833; + t.N = 667; + t.O = 722; + t.P = 611; + t.Q = 722; + t.R = 611; + t.S = 500; + t.T = 556; + t.U = 722; + t.V = 611; + t.W = 833; + t.X = 611; + t.Y = 556; + t.Z = 556; + t.bracketleft = 389; + t.backslash = 278; + t.bracketright = 389; + t.asciicircum = 422; + t.underscore = 500; + t.quoteleft = 333; + t.a = 500; + t.b = 500; + t.c = 444; + t.d = 500; + t.e = 444; + t.f = 278; + t.g = 500; + t.h = 500; + t.i = 278; + t.j = 278; + t.k = 444; + t.l = 278; + t.m = 722; + t.n = 500; + t.o = 500; + t.p = 500; + t.q = 500; + t.r = 389; + t.s = 389; + t.t = 278; + t.u = 500; + t.v = 444; + t.w = 667; + t.x = 444; + t.y = 444; + t.z = 389; + t.braceleft = 400; + t.bar = 275; + t.braceright = 400; + t.asciitilde = 541; + t.exclamdown = 389; + t.cent = 500; + t.sterling = 500; + t.fraction = 167; + t.yen = 500; + t.florin = 500; + t.section = 500; + t.currency = 500; + t.quotesingle = 214; + t.quotedblleft = 556; + t.guillemotleft = 500; + t.guilsinglleft = 333; + t.guilsinglright = 333; + t.fi = 500; + t.fl = 500; + t.endash = 500; + t.dagger = 500; + t.daggerdbl = 500; + t.periodcentered = 250; + t.paragraph = 523; + t.bullet = 350; + t.quotesinglbase = 333; + t.quotedblbase = 556; + t.quotedblright = 556; + t.guillemotright = 500; + t.ellipsis = 889; + t.perthousand = 1000; + t.questiondown = 500; + t.grave = 333; + t.acute = 333; + t.circumflex = 333; + t.tilde = 333; + t.macron = 333; + t.breve = 333; + t.dotaccent = 333; + t.dieresis = 333; + t.ring = 333; + t.cedilla = 333; + t.hungarumlaut = 333; + t.ogonek = 333; + t.caron = 333; + t.emdash = 889; + t.AE = 889; + t.ordfeminine = 276; + t.Lslash = 556; + t.Oslash = 722; + t.OE = 944; + t.ordmasculine = 310; + t.ae = 667; + t.dotlessi = 278; + t.lslash = 278; + t.oslash = 500; + t.oe = 667; + t.germandbls = 500; + t.Idieresis = 333; + t.eacute = 444; + t.abreve = 500; + t.uhungarumlaut = 500; + t.ecaron = 444; + t.Ydieresis = 556; + t.divide = 675; + t.Yacute = 556; + t.Acircumflex = 611; + t.aacute = 500; + t.Ucircumflex = 722; + t.yacute = 444; + t.scommaaccent = 389; + t.ecircumflex = 444; + t.Uring = 722; + t.Udieresis = 722; + t.aogonek = 500; + t.Uacute = 722; + t.uogonek = 500; + t.Edieresis = 611; + t.Dcroat = 722; + t.commaaccent = 250; + t.copyright = 760; + t.Emacron = 611; + t.ccaron = 444; + t.aring = 500; + t.Ncommaaccent = 667; + t.lacute = 278; + t.agrave = 500; + t.Tcommaaccent = 556; + t.Cacute = 667; + t.atilde = 500; + t.Edotaccent = 611; + t.scaron = 389; + t.scedilla = 389; + t.iacute = 278; + t.lozenge = 471; + t.Rcaron = 611; + t.Gcommaaccent = 722; + t.ucircumflex = 500; + t.acircumflex = 500; + t.Amacron = 611; + t.rcaron = 389; + t.ccedilla = 444; + t.Zdotaccent = 556; + t.Thorn = 611; + t.Omacron = 722; + t.Racute = 611; + t.Sacute = 500; + t.dcaron = 544; + t.Umacron = 722; + t.uring = 500; + t.threesuperior = 300; + t.Ograve = 722; + t.Agrave = 611; + t.Abreve = 611; + t.multiply = 675; + t.uacute = 500; + t.Tcaron = 556; + t.partialdiff = 476; + t.ydieresis = 444; + t.Nacute = 667; + t.icircumflex = 278; + t.Ecircumflex = 611; + t.adieresis = 500; + t.edieresis = 444; + t.cacute = 444; + t.nacute = 500; + t.umacron = 500; + t.Ncaron = 667; + t.Iacute = 333; + t.plusminus = 675; + t.brokenbar = 275; + t.registered = 760; + t.Gbreve = 722; + t.Idotaccent = 333; + t.summation = 600; + t.Egrave = 611; + t.racute = 389; + t.omacron = 500; + t.Zacute = 556; + t.Zcaron = 556; + t.greaterequal = 549; + t.Eth = 722; + t.Ccedilla = 667; + t.lcommaaccent = 278; + t.tcaron = 300; + t.eogonek = 444; + t.Uogonek = 722; + t.Aacute = 611; + t.Adieresis = 611; + t.egrave = 444; + t.zacute = 389; + t.iogonek = 278; + t.Oacute = 722; + t.oacute = 500; + t.amacron = 500; + t.sacute = 389; + t.idieresis = 278; + t.Ocircumflex = 722; + t.Ugrave = 722; + t.Delta = 612; + t.thorn = 500; + t.twosuperior = 300; + t.Odieresis = 722; + t.mu = 500; + t.igrave = 278; + t.ohungarumlaut = 500; + t.Eogonek = 611; + t.dcroat = 500; + t.threequarters = 750; + t.Scedilla = 500; + t.lcaron = 300; + t.Kcommaaccent = 667; + t.Lacute = 556; + t.trademark = 980; + t.edotaccent = 444; + t.Igrave = 333; + t.Imacron = 333; + t.Lcaron = 611; + t.onehalf = 750; + t.lessequal = 549; + t.ocircumflex = 500; + t.ntilde = 500; + t.Uhungarumlaut = 722; + t.Eacute = 611; + t.emacron = 444; + t.gbreve = 500; + t.onequarter = 750; + t.Scaron = 500; + t.Scommaaccent = 500; + t.Ohungarumlaut = 722; + t.degree = 400; + t.ograve = 500; + t.Ccaron = 667; + t.ugrave = 500; + t.radical = 453; + t.Dcaron = 722; + t.rcommaaccent = 389; + t.Ntilde = 667; + t.otilde = 500; + t.Rcommaaccent = 611; + t.Lcommaaccent = 556; + t.Atilde = 611; + t.Aogonek = 611; + t.Aring = 611; + t.Otilde = 722; + t.zdotaccent = 389; + t.Ecaron = 611; + t.Iogonek = 333; + t.kcommaaccent = 444; + t.minus = 675; + t.Icircumflex = 333; + t.ncaron = 500; + t.tcommaaccent = 278; + t.logicalnot = 675; + t.odieresis = 500; + t.udieresis = 500; + t.notequal = 549; + t.gcommaaccent = 500; + t.eth = 500; + t.zcaron = 389; + t.ncommaaccent = 500; + t.onesuperior = 300; + t.imacron = 278; + t.Euro = 500; + }); + t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) { + t.space = 278; + t.a1 = 974; + t.a2 = 961; + t.a202 = 974; + t.a3 = 980; + t.a4 = 719; + t.a5 = 789; + t.a119 = 790; + t.a118 = 791; + t.a117 = 690; + t.a11 = 960; + t.a12 = 939; + t.a13 = 549; + t.a14 = 855; + t.a15 = 911; + t.a16 = 933; + t.a105 = 911; + t.a17 = 945; + t.a18 = 974; + t.a19 = 755; + t.a20 = 846; + t.a21 = 762; + t.a22 = 761; + t.a23 = 571; + t.a24 = 677; + t.a25 = 763; + t.a26 = 760; + t.a27 = 759; + t.a28 = 754; + t.a6 = 494; + t.a7 = 552; + t.a8 = 537; + t.a9 = 577; + t.a10 = 692; + t.a29 = 786; + t.a30 = 788; + t.a31 = 788; + t.a32 = 790; + t.a33 = 793; + t.a34 = 794; + t.a35 = 816; + t.a36 = 823; + t.a37 = 789; + t.a38 = 841; + t.a39 = 823; + t.a40 = 833; + t.a41 = 816; + t.a42 = 831; + t.a43 = 923; + t.a44 = 744; + t.a45 = 723; + t.a46 = 749; + t.a47 = 790; + t.a48 = 792; + t.a49 = 695; + t.a50 = 776; + t.a51 = 768; + t.a52 = 792; + t.a53 = 759; + t.a54 = 707; + t.a55 = 708; + t.a56 = 682; + t.a57 = 701; + t.a58 = 826; + t.a59 = 815; + t.a60 = 789; + t.a61 = 789; + t.a62 = 707; + t.a63 = 687; + t.a64 = 696; + t.a65 = 689; + t.a66 = 786; + t.a67 = 787; + t.a68 = 713; + t.a69 = 791; + t.a70 = 785; + t.a71 = 791; + t.a72 = 873; + t.a73 = 761; + t.a74 = 762; + t.a203 = 762; + t.a75 = 759; + t.a204 = 759; + t.a76 = 892; + t.a77 = 892; + t.a78 = 788; + t.a79 = 784; + t.a81 = 438; + t.a82 = 138; + t.a83 = 277; + t.a84 = 415; + t.a97 = 392; + t.a98 = 392; + t.a99 = 668; + t.a100 = 668; + t.a89 = 390; + t.a90 = 390; + t.a93 = 317; + t.a94 = 317; + t.a91 = 276; + t.a92 = 276; + t.a205 = 509; + t.a85 = 509; + t.a206 = 410; + t.a86 = 410; + t.a87 = 234; + t.a88 = 234; + t.a95 = 334; + t.a96 = 334; + t.a101 = 732; + t.a102 = 544; + t.a103 = 544; + t.a104 = 910; + t.a106 = 667; + t.a107 = 760; + t.a108 = 760; + t.a112 = 776; + t.a111 = 595; + t.a110 = 694; + t.a109 = 626; + t.a120 = 788; + t.a121 = 788; + t.a122 = 788; + t.a123 = 788; + t.a124 = 788; + t.a125 = 788; + t.a126 = 788; + t.a127 = 788; + t.a128 = 788; + t.a129 = 788; + t.a130 = 788; + t.a131 = 788; + t.a132 = 788; + t.a133 = 788; + t.a134 = 788; + t.a135 = 788; + t.a136 = 788; + t.a137 = 788; + t.a138 = 788; + t.a139 = 788; + t.a140 = 788; + t.a141 = 788; + t.a142 = 788; + t.a143 = 788; + t.a144 = 788; + t.a145 = 788; + t.a146 = 788; + t.a147 = 788; + t.a148 = 788; + t.a149 = 788; + t.a150 = 788; + t.a151 = 788; + t.a152 = 788; + t.a153 = 788; + t.a154 = 788; + t.a155 = 788; + t.a156 = 788; + t.a157 = 788; + t.a158 = 788; + t.a159 = 788; + t.a160 = 894; + t.a161 = 838; + t.a163 = 1016; + t.a164 = 458; + t.a196 = 748; + t.a165 = 924; + t.a192 = 748; + t.a166 = 918; + t.a167 = 927; + t.a168 = 928; + t.a169 = 928; + t.a170 = 834; + t.a171 = 873; + t.a172 = 828; + t.a173 = 924; + t.a162 = 924; + t.a174 = 917; + t.a175 = 930; + t.a176 = 931; + t.a177 = 463; + t.a178 = 883; + t.a179 = 836; + t.a193 = 836; + t.a180 = 867; + t.a199 = 867; + t.a181 = 696; + t.a200 = 696; + t.a182 = 874; + t.a201 = 874; + t.a183 = 760; + t.a184 = 946; + t.a197 = 771; + t.a185 = 865; + t.a194 = 771; + t.a198 = 888; + t.a186 = 967; + t.a195 = 888; + t.a187 = 831; + t.a188 = 873; + t.a189 = 927; + t.a190 = 970; + t.a191 = 918; + }); +}); +exports.getMetrics = getMetrics; +const getFontBasicMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { + t.Courier = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: -426 + }; + t["Courier-Bold"] = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: 439 + }; + t["Courier-Oblique"] = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: 426 + }; + t["Courier-BoldOblique"] = { + ascent: 629, + descent: -157, + capHeight: 562, + xHeight: 426 + }; + t.Helvetica = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 523 + }; + t["Helvetica-Bold"] = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 532 + }; + t["Helvetica-Oblique"] = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 523 + }; + t["Helvetica-BoldOblique"] = { + ascent: 718, + descent: -207, + capHeight: 718, + xHeight: 532 + }; + t["Times-Roman"] = { + ascent: 683, + descent: -217, + capHeight: 662, + xHeight: 450 + }; + t["Times-Bold"] = { + ascent: 683, + descent: -217, + capHeight: 676, + xHeight: 461 + }; + t["Times-Italic"] = { + ascent: 683, + descent: -217, + capHeight: 653, + xHeight: 441 + }; + t["Times-BoldItalic"] = { + ascent: 683, + descent: -217, + capHeight: 669, + xHeight: 462 + }; + t.Symbol = { + ascent: Math.NaN, + descent: Math.NaN, + capHeight: Math.NaN, + xHeight: Math.NaN + }; + t.ZapfDingbats = { + ascent: Math.NaN, + descent: Math.NaN, + capHeight: Math.NaN, + xHeight: Math.NaN + }; +}); +exports.getFontBasicMetrics = getFontBasicMetrics; + +/***/ }), +/* 46 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.GlyfTable = void 0; +const ON_CURVE_POINT = 1 << 0; +const X_SHORT_VECTOR = 1 << 1; +const Y_SHORT_VECTOR = 1 << 2; +const REPEAT_FLAG = 1 << 3; +const X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4; +const Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5; +const OVERLAP_SIMPLE = 1 << 6; +const ARG_1_AND_2_ARE_WORDS = 1 << 0; +const ARGS_ARE_XY_VALUES = 1 << 1; +const WE_HAVE_A_SCALE = 1 << 3; +const MORE_COMPONENTS = 1 << 5; +const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; +const WE_HAVE_A_TWO_BY_TWO = 1 << 7; +const WE_HAVE_INSTRUCTIONS = 1 << 8; + +class GlyfTable { + constructor({ + glyfTable, + isGlyphLocationsLong, + locaTable, + numGlyphs + }) { + this.glyphs = []; + const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength); + const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength); + const offsetSize = isGlyphLocationsLong ? 4 : 2; + let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0); + let pos = 0; + + for (let i = 0; i < numGlyphs; i++) { + pos += offsetSize; + const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos); + + if (next === prev) { + this.glyphs.push(new Glyph({})); + continue; + } + + const glyph = Glyph.parse(prev, glyf); + this.glyphs.push(glyph); + prev = next; + } + } + + getSize() { + return this.glyphs.reduce((a, g) => { + const size = g.getSize(); + return a + (size + 3 & ~3); + }, 0); + } + + write() { + const totalSize = this.getSize(); + const glyfTable = new DataView(new ArrayBuffer(totalSize)); + const isLocationLong = totalSize > 0x1fffe; + const offsetSize = isLocationLong ? 4 : 2; + const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize)); + + if (isLocationLong) { + locaTable.setUint32(0, 0); + } else { + locaTable.setUint16(0, 0); + } + + let pos = 0; + let locaIndex = 0; + + for (const glyph of this.glyphs) { + pos += glyph.write(pos, glyfTable); + pos = pos + 3 & ~3; + locaIndex += offsetSize; + + if (isLocationLong) { + locaTable.setUint32(locaIndex, pos); + } else { + locaTable.setUint16(locaIndex, pos >> 1); + } + } + + return { + isLocationLong, + loca: new Uint8Array(locaTable.buffer), + glyf: new Uint8Array(glyfTable.buffer) + }; + } + + scale(factors) { + for (let i = 0, ii = this.glyphs.length; i < ii; i++) { + this.glyphs[i].scale(factors[i]); + } + } + +} + +exports.GlyfTable = GlyfTable; + +class Glyph { + constructor({ + header = null, + simple = null, + composites = null + }) { + this.header = header; + this.simple = simple; + this.composites = composites; + } + + static parse(pos, glyf) { + const [read, header] = GlyphHeader.parse(pos, glyf); + pos += read; + + if (header.numberOfContours < 0) { + const composites = []; + + while (true) { + const [n, composite] = CompositeGlyph.parse(pos, glyf); + pos += n; + composites.push(composite); + + if (!(composite.flags & MORE_COMPONENTS)) { + break; + } + } + + return new Glyph({ + header, + composites + }); + } + + const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours); + return new Glyph({ + header, + simple + }); + } + + getSize() { + if (!this.header) { + return 0; + } + + const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0); + return this.header.getSize() + size; + } + + write(pos, buf) { + if (!this.header) { + return 0; + } + + const spos = pos; + pos += this.header.write(pos, buf); + + if (this.simple) { + pos += this.simple.write(pos, buf); + } else { + for (const composite of this.composites) { + pos += composite.write(pos, buf); + } + } + + return pos - spos; + } + + scale(factor) { + if (!this.header) { + return; + } + + const xMiddle = (this.header.xMin + this.header.xMax) / 2; + this.header.scale(xMiddle, factor); + + if (this.simple) { + this.simple.scale(xMiddle, factor); + } else { + for (const composite of this.composites) { + composite.scale(xMiddle, factor); + } + } + } + +} + +class GlyphHeader { + constructor({ + numberOfContours, + xMin, + yMin, + xMax, + yMax + }) { + this.numberOfContours = numberOfContours; + this.xMin = xMin; + this.yMin = yMin; + this.xMax = xMax; + this.yMax = yMax; + } + + static parse(pos, glyf) { + return [10, new GlyphHeader({ + numberOfContours: glyf.getInt16(pos), + xMin: glyf.getInt16(pos + 2), + yMin: glyf.getInt16(pos + 4), + xMax: glyf.getInt16(pos + 6), + yMax: glyf.getInt16(pos + 8) + })]; + } + + getSize() { + return 10; + } + + write(pos, buf) { + buf.setInt16(pos, this.numberOfContours); + buf.setInt16(pos + 2, this.xMin); + buf.setInt16(pos + 4, this.yMin); + buf.setInt16(pos + 6, this.xMax); + buf.setInt16(pos + 8, this.yMax); + return 10; + } + + scale(x, factor) { + this.xMin = Math.round(x + (this.xMin - x) * factor); + this.xMax = Math.round(x + (this.xMax - x) * factor); + } + +} + +class Contour { + constructor({ + flags, + xCoordinates, + yCoordinates + }) { + this.xCoordinates = xCoordinates; + this.yCoordinates = yCoordinates; + this.flags = flags; + } + +} + +class SimpleGlyph { + constructor({ + contours, + instructions + }) { + this.contours = contours; + this.instructions = instructions; + } + + static parse(pos, glyf, numberOfContours) { + const endPtsOfContours = []; + + for (let i = 0; i < numberOfContours; i++) { + const endPt = glyf.getUint16(pos); + pos += 2; + endPtsOfContours.push(endPt); + } + + const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1; + const instructionLength = glyf.getUint16(pos); + pos += 2; + const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); + pos += instructionLength; + const flags = []; + + for (let i = 0; i < numberOfPt; pos++, i++) { + let flag = glyf.getUint8(pos); + flags.push(flag); + + if (flag & REPEAT_FLAG) { + const count = glyf.getUint8(++pos); + flag ^= REPEAT_FLAG; + + for (let m = 0; m < count; m++) { + flags.push(flag); + } + + i += count; + } + } + + const allXCoordinates = []; + let xCoordinates = []; + let yCoordinates = []; + let pointFlags = []; + const contours = []; + let endPtsOfContoursIndex = 0; + let lastCoordinate = 0; + + for (let i = 0; i < numberOfPt; i++) { + const flag = flags[i]; + + if (flag & X_SHORT_VECTOR) { + const x = glyf.getUint8(pos++); + lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x; + xCoordinates.push(lastCoordinate); + } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) { + xCoordinates.push(lastCoordinate); + } else { + lastCoordinate += glyf.getInt16(pos); + pos += 2; + xCoordinates.push(lastCoordinate); + } + + if (endPtsOfContours[endPtsOfContoursIndex] === i) { + endPtsOfContoursIndex++; + allXCoordinates.push(xCoordinates); + xCoordinates = []; + } + } + + lastCoordinate = 0; + endPtsOfContoursIndex = 0; + + for (let i = 0; i < numberOfPt; i++) { + const flag = flags[i]; + + if (flag & Y_SHORT_VECTOR) { + const y = glyf.getUint8(pos++); + lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y; + yCoordinates.push(lastCoordinate); + } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) { + yCoordinates.push(lastCoordinate); + } else { + lastCoordinate += glyf.getInt16(pos); + pos += 2; + yCoordinates.push(lastCoordinate); + } + + pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE); + + if (endPtsOfContours[endPtsOfContoursIndex] === i) { + xCoordinates = allXCoordinates[endPtsOfContoursIndex]; + endPtsOfContoursIndex++; + contours.push(new Contour({ + flags: pointFlags, + xCoordinates, + yCoordinates + })); + yCoordinates = []; + pointFlags = []; + } + } + + return new SimpleGlyph({ + contours, + instructions + }); + } + + getSize() { + let size = this.contours.length * 2 + 2 + this.instructions.length; + let lastX = 0; + let lastY = 0; + + for (const contour of this.contours) { + size += contour.flags.length; + + for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { + const x = contour.xCoordinates[i]; + const y = contour.yCoordinates[i]; + let abs = Math.abs(x - lastX); + + if (abs > 255) { + size += 2; + } else if (abs > 0) { + size += 1; + } + + lastX = x; + abs = Math.abs(y - lastY); + + if (abs > 255) { + size += 2; + } else if (abs > 0) { + size += 1; + } + + lastY = y; + } + } + + return size; + } + + write(pos, buf) { + const spos = pos; + const xCoordinates = []; + const yCoordinates = []; + const flags = []; + let lastX = 0; + let lastY = 0; + + for (const contour of this.contours) { + for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { + let flag = contour.flags[i]; + const x = contour.xCoordinates[i]; + let delta = x - lastX; + + if (delta === 0) { + flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR; + xCoordinates.push(0); + } else { + const abs = Math.abs(delta); + + if (abs <= 255) { + flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR; + xCoordinates.push(abs); + } else { + xCoordinates.push(delta); + } + } + + lastX = x; + const y = contour.yCoordinates[i]; + delta = y - lastY; + + if (delta === 0) { + flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR; + yCoordinates.push(0); + } else { + const abs = Math.abs(delta); + + if (abs <= 255) { + flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR; + yCoordinates.push(abs); + } else { + yCoordinates.push(delta); + } + } + + lastY = y; + flags.push(flag); + } + + buf.setUint16(pos, xCoordinates.length - 1); + pos += 2; + } + + buf.setUint16(pos, this.instructions.length); + pos += 2; + + if (this.instructions.length) { + new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); + pos += this.instructions.length; + } + + for (const flag of flags) { + buf.setUint8(pos++, flag); + } + + for (let i = 0, ii = xCoordinates.length; i < ii; i++) { + const x = xCoordinates[i]; + const flag = flags[i]; + + if (flag & X_SHORT_VECTOR) { + buf.setUint8(pos++, x); + } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) { + buf.setInt16(pos, x); + pos += 2; + } + } + + for (let i = 0, ii = yCoordinates.length; i < ii; i++) { + const y = yCoordinates[i]; + const flag = flags[i]; + + if (flag & Y_SHORT_VECTOR) { + buf.setUint8(pos++, y); + } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) { + buf.setInt16(pos, y); + pos += 2; + } + } + + return pos - spos; + } + + scale(x, factor) { + for (const contour of this.contours) { + if (contour.xCoordinates.length === 0) { + continue; + } + + for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { + contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor); + } + } + } + +} + +class CompositeGlyph { + constructor({ + flags, + glyphIndex, + argument1, + argument2, + transf, + instructions + }) { + this.flags = flags; + this.glyphIndex = glyphIndex; + this.argument1 = argument1; + this.argument2 = argument2; + this.transf = transf; + this.instructions = instructions; + } + + static parse(pos, glyf) { + const spos = pos; + const transf = []; + let flags = glyf.getUint16(pos); + const glyphIndex = glyf.getUint16(pos + 2); + pos += 4; + let argument1, argument2; + + if (flags & ARG_1_AND_2_ARE_WORDS) { + if (flags & ARGS_ARE_XY_VALUES) { + argument1 = glyf.getInt16(pos); + argument2 = glyf.getInt16(pos + 2); + } else { + argument1 = glyf.getUint16(pos); + argument2 = glyf.getUint16(pos + 2); + } + + pos += 4; + flags ^= ARG_1_AND_2_ARE_WORDS; + } else { + if (flags & ARGS_ARE_XY_VALUES) { + argument1 = glyf.getInt8(pos); + argument2 = glyf.getInt8(pos + 1); + } else { + argument1 = glyf.getUint8(pos); + argument2 = glyf.getUint8(pos + 1); + } + + pos += 2; + } + + if (flags & WE_HAVE_A_SCALE) { + transf.push(glyf.getUint16(pos)); + pos += 2; + } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { + transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2)); + pos += 4; + } else if (flags & WE_HAVE_A_TWO_BY_TWO) { + transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6)); + pos += 8; + } + + let instructions = null; + + if (flags & WE_HAVE_INSTRUCTIONS) { + const instructionLength = glyf.getUint16(pos); + pos += 2; + instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); + pos += instructionLength; + } + + return [pos - spos, new CompositeGlyph({ + flags, + glyphIndex, + argument1, + argument2, + transf, + instructions + })]; + } + + getSize() { + let size = 2 + 2 + this.transf.length * 2; + + if (this.flags & WE_HAVE_INSTRUCTIONS) { + size += 2 + this.instructions.length; + } + + size += 2; + + if (this.flags & 2) { + if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { + size += 2; + } + } else { + if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { + size += 2; + } + } + + return size; + } + + write(pos, buf) { + const spos = pos; + + if (this.flags & ARGS_ARE_XY_VALUES) { + if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { + this.flags |= ARG_1_AND_2_ARE_WORDS; + } + } else { + if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { + this.flags |= ARG_1_AND_2_ARE_WORDS; + } + } + + buf.setUint16(pos, this.flags); + buf.setUint16(pos + 2, this.glyphIndex); + pos += 4; + + if (this.flags & ARG_1_AND_2_ARE_WORDS) { + if (this.flags & ARGS_ARE_XY_VALUES) { + buf.setInt16(pos, this.argument1); + buf.setInt16(pos + 2, this.argument2); + } else { + buf.setUint16(pos, this.argument1); + buf.setUint16(pos + 2, this.argument2); + } + + pos += 4; + } else { + buf.setUint8(pos, this.argument1); + buf.setUint8(pos + 1, this.argument2); + pos += 2; + } + + if (this.flags & WE_HAVE_INSTRUCTIONS) { + buf.setUint16(pos, this.instructions.length); + pos += 2; + + if (this.instructions.length) { + new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); + pos += this.instructions.length; + } + } + + return pos - spos; + } + + scale(x, factor) {} + +} + +/***/ }), +/* 47 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.OpenTypeFileBuilder = void 0; + +var _core_utils = __w_pdfjs_require__(6); + +var _util = __w_pdfjs_require__(2); + +function writeInt16(dest, offset, num) { + dest[offset] = num >> 8 & 0xff; + dest[offset + 1] = num & 0xff; +} + +function writeInt32(dest, offset, num) { + dest[offset] = num >> 24 & 0xff; + dest[offset + 1] = num >> 16 & 0xff; + dest[offset + 2] = num >> 8 & 0xff; + dest[offset + 3] = num & 0xff; +} + +function writeData(dest, offset, data) { + if (data instanceof Uint8Array) { + dest.set(data, offset); + } else if (typeof data === "string") { + for (let i = 0, ii = data.length; i < ii; i++) { + dest[offset++] = data.charCodeAt(i) & 0xff; + } + } else { + for (let i = 0, ii = data.length; i < ii; i++) { + dest[offset++] = data[i] & 0xff; + } + } +} + +const OTF_HEADER_SIZE = 12; +const OTF_TABLE_ENTRY_SIZE = 16; + +class OpenTypeFileBuilder { + constructor(sfnt) { + this.sfnt = sfnt; + this.tables = Object.create(null); + } + + static getSearchParams(entriesCount, entrySize) { + let maxPower2 = 1, + log2 = 0; + + while ((maxPower2 ^ entriesCount) > maxPower2) { + maxPower2 <<= 1; + log2++; + } + + const searchRange = maxPower2 * entrySize; + return { + range: searchRange, + entry: log2, + rangeShift: entrySize * entriesCount - searchRange + }; + } + + toArray() { + let sfnt = this.sfnt; + const tables = this.tables; + const tablesNames = Object.keys(tables); + tablesNames.sort(); + const numTables = tablesNames.length; + let i, j, jj, table, tableName; + let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; + const tableOffsets = [offset]; + + for (i = 0; i < numTables; i++) { + table = tables[tablesNames[i]]; + const paddedLength = (table.length + 3 & ~3) >>> 0; + offset += paddedLength; + tableOffsets.push(offset); + } + + const file = new Uint8Array(offset); + + for (i = 0; i < numTables; i++) { + table = tables[tablesNames[i]]; + writeData(file, tableOffsets[i], table); + } + + if (sfnt === "true") { + sfnt = (0, _util.string32)(0x00010000); + } + + file[0] = sfnt.charCodeAt(0) & 0xff; + file[1] = sfnt.charCodeAt(1) & 0xff; + file[2] = sfnt.charCodeAt(2) & 0xff; + file[3] = sfnt.charCodeAt(3) & 0xff; + writeInt16(file, 4, numTables); + const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); + writeInt16(file, 6, searchParams.range); + writeInt16(file, 8, searchParams.entry); + writeInt16(file, 10, searchParams.rangeShift); + offset = OTF_HEADER_SIZE; + + for (i = 0; i < numTables; i++) { + tableName = tablesNames[i]; + file[offset] = tableName.charCodeAt(0) & 0xff; + file[offset + 1] = tableName.charCodeAt(1) & 0xff; + file[offset + 2] = tableName.charCodeAt(2) & 0xff; + file[offset + 3] = tableName.charCodeAt(3) & 0xff; + let checksum = 0; + + for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { + const quad = (0, _core_utils.readUint32)(file, j); + checksum = checksum + quad >>> 0; + } + + writeInt32(file, offset + 4, checksum); + writeInt32(file, offset + 8, tableOffsets[i]); + writeInt32(file, offset + 12, tables[tableName].length); + offset += OTF_TABLE_ENTRY_SIZE; + } + + return file; + } + + addTable(tag, data) { + if (tag in this.tables) { + throw new Error("Table " + tag + " already exists"); + } + + this.tables[tag] = data; + } + +} + +exports.OpenTypeFileBuilder = OpenTypeFileBuilder; + +/***/ }), +/* 48 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Type1Font = void 0; + +var _cff_parser = __w_pdfjs_require__(35); + +var _fonts_utils = __w_pdfjs_require__(38); + +var _core_utils = __w_pdfjs_require__(6); + +var _stream = __w_pdfjs_require__(10); + +var _type1_parser = __w_pdfjs_require__(49); + +var _util = __w_pdfjs_require__(2); + +function findBlock(streamBytes, signature, startIndex) { + const streamBytesLength = streamBytes.length; + const signatureLength = signature.length; + const scanLength = streamBytesLength - signatureLength; + let i = startIndex, + found = false; + + while (i < scanLength) { + let j = 0; + + while (j < signatureLength && streamBytes[i + j] === signature[j]) { + j++; + } + + if (j >= signatureLength) { + i += j; + + while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) { + i++; + } + + found = true; + break; + } + + i++; + } + + return { + found, + length: i + }; +} + +function getHeaderBlock(stream, suggestedLength) { + const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; + const streamStartPos = stream.pos; + let headerBytes, headerBytesLength, block; + + try { + headerBytes = stream.getBytes(suggestedLength); + headerBytesLength = headerBytes.length; + } catch (ex) {} + + if (headerBytesLength === suggestedLength) { + block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); + + if (block.found && block.length === suggestedLength) { + return { + stream: new _stream.Stream(headerBytes), + length: suggestedLength + }; + } + } + + (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); + stream.pos = streamStartPos; + const SCAN_BLOCK_LENGTH = 2048; + let actualLength; + + while (true) { + const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); + block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); + + if (block.length === 0) { + break; + } + + stream.pos += block.length; + + if (block.found) { + actualLength = stream.pos - streamStartPos; + break; + } + } + + stream.pos = streamStartPos; + + if (actualLength) { + return { + stream: new _stream.Stream(stream.getBytes(actualLength)), + length: actualLength + }; + } + + (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); + return { + stream: new _stream.Stream(stream.getBytes(suggestedLength)), + length: suggestedLength + }; +} + +function getEexecBlock(stream, suggestedLength) { + const eexecBytes = stream.getBytes(); + return { + stream: new _stream.Stream(eexecBytes), + length: eexecBytes.length + }; +} + +class Type1Font { + constructor(name, file, properties) { + const PFB_HEADER_SIZE = 6; + let headerBlockLength = properties.length1; + let eexecBlockLength = properties.length2; + let pfbHeader = file.peekBytes(PFB_HEADER_SIZE); + const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; + + if (pfbHeaderPresent) { + file.skip(PFB_HEADER_SIZE); + headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; + } + + const headerBlock = getHeaderBlock(file, headerBlockLength); + const headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, _fonts_utils.SEAC_ANALYSIS_ENABLED); + headerBlockParser.extractFontHeader(properties); + + if (pfbHeaderPresent) { + pfbHeader = file.getBytes(PFB_HEADER_SIZE); + eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; + } + + const eexecBlock = getEexecBlock(file, eexecBlockLength); + const eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, _fonts_utils.SEAC_ANALYSIS_ENABLED); + const data = eexecBlockParser.extractFontProgram(properties); + + for (const key in data.properties) { + properties[key] = data.properties[key]; + } + + const charstrings = data.charstrings; + const type2Charstrings = this.getType2Charstrings(charstrings); + const subrs = this.getType2Subrs(data.subrs); + this.charstrings = charstrings; + this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); + this.seacs = this.getSeacs(data.charstrings); + } + + get numGlyphs() { + return this.charstrings.length + 1; + } + + getCharset() { + const charset = [".notdef"]; + + for (const { + glyphName + } of this.charstrings) { + charset.push(glyphName); + } + + return charset; + } + + getGlyphMapping(properties) { + const charstrings = this.charstrings; + + if (properties.composite) { + const charCodeToGlyphId = Object.create(null); + + for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) { + const charCode = properties.cMap.charCodeOf(glyphId); + charCodeToGlyphId[charCode] = glyphId + 1; + } + + return charCodeToGlyphId; + } + + const glyphNames = [".notdef"]; + let builtInEncoding, glyphId; + + for (glyphId = 0; glyphId < charstrings.length; glyphId++) { + glyphNames.push(charstrings[glyphId].glyphName); + } + + const encoding = properties.builtInEncoding; + + if (encoding) { + builtInEncoding = Object.create(null); + + for (const charCode in encoding) { + glyphId = glyphNames.indexOf(encoding[charCode]); + + if (glyphId >= 0) { + builtInEncoding[charCode] = glyphId; + } + } + } + + return (0, _fonts_utils.type1FontGlyphMapping)(properties, builtInEncoding, glyphNames); + } + + hasGlyphId(id) { + if (id < 0 || id >= this.numGlyphs) { + return false; + } + + if (id === 0) { + return true; + } + + const glyph = this.charstrings[id - 1]; + return glyph.charstring.length > 0; + } + + getSeacs(charstrings) { + const seacMap = []; + + for (let i = 0, ii = charstrings.length; i < ii; i++) { + const charstring = charstrings[i]; + + if (charstring.seac) { + seacMap[i + 1] = charstring.seac; + } + } + + return seacMap; + } + + getType2Charstrings(type1Charstrings) { + const type2Charstrings = []; + + for (let i = 0, ii = type1Charstrings.length; i < ii; i++) { + type2Charstrings.push(type1Charstrings[i].charstring); + } + + return type2Charstrings; + } + + getType2Subrs(type1Subrs) { + let bias = 0; + const count = type1Subrs.length; + + if (count < 1133) { + bias = 107; + } else if (count < 33769) { + bias = 1131; + } else { + bias = 32768; + } + + const type2Subrs = []; + let i; + + for (i = 0; i < bias; i++) { + type2Subrs.push([0x0b]); + } + + for (i = 0; i < count; i++) { + type2Subrs.push(type1Subrs[i]); + } + + return type2Subrs; + } + + wrap(name, glyphs, charstrings, subrs, properties) { + const cff = new _cff_parser.CFF(); + cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); + cff.names = [name]; + const topDict = new _cff_parser.CFFTopDict(); + topDict.setByName("version", 391); + topDict.setByName("Notice", 392); + topDict.setByName("FullName", 393); + topDict.setByName("FamilyName", 394); + topDict.setByName("Weight", 395); + topDict.setByName("Encoding", null); + topDict.setByName("FontMatrix", properties.fontMatrix); + topDict.setByName("FontBBox", properties.bbox); + topDict.setByName("charset", null); + topDict.setByName("CharStrings", null); + topDict.setByName("Private", null); + cff.topDict = topDict; + const strings = new _cff_parser.CFFStrings(); + strings.add("Version 0.11"); + strings.add("See original notice"); + strings.add(name); + strings.add(name); + strings.add("Medium"); + cff.strings = strings; + cff.globalSubrIndex = new _cff_parser.CFFIndex(); + const count = glyphs.length; + const charsetArray = [".notdef"]; + let i, ii; + + for (i = 0; i < count; i++) { + const glyphName = charstrings[i].glyphName; + + const index = _cff_parser.CFFStandardStrings.indexOf(glyphName); + + if (index === -1) { + strings.add(glyphName); + } + + charsetArray.push(glyphName); + } + + cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray); + const charStringsIndex = new _cff_parser.CFFIndex(); + charStringsIndex.add([0x8b, 0x0e]); + + for (i = 0; i < count; i++) { + charStringsIndex.add(glyphs[i]); + } + + cff.charStrings = charStringsIndex; + const privateDict = new _cff_parser.CFFPrivateDict(); + privateDict.setByName("Subrs", null); + const fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; + + for (i = 0, ii = fields.length; i < ii; i++) { + const field = fields[i]; + + if (!(field in properties.privateData)) { + continue; + } + + const value = properties.privateData[field]; + + if (Array.isArray(value)) { + for (let j = value.length - 1; j > 0; j--) { + value[j] -= value[j - 1]; + } + } + + privateDict.setByName(field, value); + } + + cff.topDict.privateDict = privateDict; + const subrIndex = new _cff_parser.CFFIndex(); + + for (i = 0, ii = subrs.length; i < ii; i++) { + subrIndex.add(subrs[i]); + } + + privateDict.subrsIndex = subrIndex; + const compiler = new _cff_parser.CFFCompiler(cff); + return compiler.compile(); + } + +} + +exports.Type1Font = Type1Font; + +/***/ }), +/* 49 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Type1Parser = void 0; + +var _encodings = __w_pdfjs_require__(37); + +var _core_utils = __w_pdfjs_require__(6); + +var _stream = __w_pdfjs_require__(10); + +var _util = __w_pdfjs_require__(2); + +const HINTING_ENABLED = false; +const COMMAND_MAP = { + hstem: [1], + vstem: [3], + vmoveto: [4], + rlineto: [5], + hlineto: [6], + vlineto: [7], + rrcurveto: [8], + callsubr: [10], + flex: [12, 35], + drop: [12, 18], + endchar: [14], + rmoveto: [21], + hmoveto: [22], + vhcurveto: [30], + hvcurveto: [31] +}; + +class Type1CharString { + constructor() { + this.width = 0; + this.lsb = 0; + this.flexing = false; + this.output = []; + this.stack = []; + } + + convert(encoded, subrs, seacAnalysisEnabled) { + const count = encoded.length; + let error = false; + let wx, sbx, subrNumber; + + for (let i = 0; i < count; i++) { + let value = encoded[i]; + + if (value < 32) { + if (value === 12) { + value = (value << 8) + encoded[++i]; + } + + switch (value) { + case 1: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + + error = this.executeCommand(2, COMMAND_MAP.hstem); + break; + + case 3: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + + error = this.executeCommand(2, COMMAND_MAP.vstem); + break; + + case 4: + if (this.flexing) { + if (this.stack.length < 1) { + error = true; + break; + } + + const dy = this.stack.pop(); + this.stack.push(0, dy); + break; + } + + error = this.executeCommand(1, COMMAND_MAP.vmoveto); + break; + + case 5: + error = this.executeCommand(2, COMMAND_MAP.rlineto); + break; + + case 6: + error = this.executeCommand(1, COMMAND_MAP.hlineto); + break; + + case 7: + error = this.executeCommand(1, COMMAND_MAP.vlineto); + break; + + case 8: + error = this.executeCommand(6, COMMAND_MAP.rrcurveto); + break; + + case 9: + this.stack = []; + break; + + case 10: + if (this.stack.length < 1) { + error = true; + break; + } + + subrNumber = this.stack.pop(); + + if (!subrs[subrNumber]) { + error = true; + break; + } + + error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); + break; + + case 11: + return error; + + case 13: + if (this.stack.length < 2) { + error = true; + break; + } + + wx = this.stack.pop(); + sbx = this.stack.pop(); + this.lsb = sbx; + this.width = wx; + this.stack.push(wx, sbx); + error = this.executeCommand(2, COMMAND_MAP.hmoveto); + break; + + case 14: + this.output.push(COMMAND_MAP.endchar[0]); + break; + + case 21: + if (this.flexing) { + break; + } + + error = this.executeCommand(2, COMMAND_MAP.rmoveto); + break; + + case 22: + if (this.flexing) { + this.stack.push(0); + break; + } + + error = this.executeCommand(1, COMMAND_MAP.hmoveto); + break; + + case 30: + error = this.executeCommand(4, COMMAND_MAP.vhcurveto); + break; + + case 31: + error = this.executeCommand(4, COMMAND_MAP.hvcurveto); + break; + + case (12 << 8) + 0: + this.stack = []; + break; + + case (12 << 8) + 1: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + + error = this.executeCommand(2, COMMAND_MAP.vstem); + break; + + case (12 << 8) + 2: + if (!HINTING_ENABLED) { + this.stack = []; + break; + } + + error = this.executeCommand(2, COMMAND_MAP.hstem); + break; + + case (12 << 8) + 6: + if (seacAnalysisEnabled) { + const asb = this.stack.at(-5); + this.seac = this.stack.splice(-4, 4); + this.seac[0] += this.lsb - asb; + error = this.executeCommand(0, COMMAND_MAP.endchar); + } else { + error = this.executeCommand(4, COMMAND_MAP.endchar); + } + + break; + + case (12 << 8) + 7: + if (this.stack.length < 4) { + error = true; + break; + } + + this.stack.pop(); + wx = this.stack.pop(); + const sby = this.stack.pop(); + sbx = this.stack.pop(); + this.lsb = sbx; + this.width = wx; + this.stack.push(wx, sbx, sby); + error = this.executeCommand(3, COMMAND_MAP.rmoveto); + break; + + case (12 << 8) + 12: + if (this.stack.length < 2) { + error = true; + break; + } + + const num2 = this.stack.pop(); + const num1 = this.stack.pop(); + this.stack.push(num1 / num2); + break; + + case (12 << 8) + 16: + if (this.stack.length < 2) { + error = true; + break; + } + + subrNumber = this.stack.pop(); + const numArgs = this.stack.pop(); + + if (subrNumber === 0 && numArgs === 3) { + const flexArgs = this.stack.splice(this.stack.length - 17, 17); + this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); + error = this.executeCommand(13, COMMAND_MAP.flex, true); + this.flexing = false; + this.stack.push(flexArgs[15], flexArgs[16]); + } else if (subrNumber === 1 && numArgs === 0) { + this.flexing = true; + } + + break; + + case (12 << 8) + 17: + break; + + case (12 << 8) + 33: + this.stack = []; + break; + + default: + (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); + break; + } + + if (error) { + break; + } + + continue; + } else if (value <= 246) { + value -= 139; + } else if (value <= 250) { + value = (value - 247) * 256 + encoded[++i] + 108; + } else if (value <= 254) { + value = -((value - 251) * 256) - encoded[++i] - 108; + } else { + value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; + } + + this.stack.push(value); + } + + return error; + } + + executeCommand(howManyArgs, command, keepStack) { + const stackLength = this.stack.length; + + if (howManyArgs > stackLength) { + return true; + } + + const start = stackLength - howManyArgs; + + for (let i = start; i < stackLength; i++) { + let value = this.stack[i]; + + if (Number.isInteger(value)) { + this.output.push(28, value >> 8 & 0xff, value & 0xff); + } else { + value = 65536 * value | 0; + this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); + } + } + + this.output.push(...command); + + if (keepStack) { + this.stack.splice(start, howManyArgs); + } else { + this.stack.length = 0; + } + + return false; + } + +} + +const EEXEC_ENCRYPT_KEY = 55665; +const CHAR_STRS_ENCRYPT_KEY = 4330; + +function isHexDigit(code) { + return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; +} + +function decrypt(data, key, discardNumber) { + if (discardNumber >= data.length) { + return new Uint8Array(0); + } + + const c1 = 52845, + c2 = 22719; + let r = key | 0, + i, + j; + + for (i = 0; i < discardNumber; i++) { + r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; + } + + const count = data.length - discardNumber; + const decrypted = new Uint8Array(count); + + for (i = discardNumber, j = 0; j < count; i++, j++) { + const value = data[i]; + decrypted[j] = value ^ r >> 8; + r = (value + r) * c1 + c2 & (1 << 16) - 1; + } + + return decrypted; +} + +function decryptAscii(data, key, discardNumber) { + const c1 = 52845, + c2 = 22719; + let r = key | 0; + const count = data.length, + maybeLength = count >>> 1; + const decrypted = new Uint8Array(maybeLength); + let i, j; + + for (i = 0, j = 0; i < count; i++) { + const digit1 = data[i]; + + if (!isHexDigit(digit1)) { + continue; + } + + i++; + let digit2; + + while (i < count && !isHexDigit(digit2 = data[i])) { + i++; + } + + if (i < count) { + const value = parseInt(String.fromCharCode(digit1, digit2), 16); + decrypted[j++] = value ^ r >> 8; + r = (value + r) * c1 + c2 & (1 << 16) - 1; + } + } + + return decrypted.slice(discardNumber, j); +} + +function isSpecial(c) { + return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29; +} + +class Type1Parser { + constructor(stream, encrypted, seacAnalysisEnabled) { + if (encrypted) { + const data = stream.getBytes(); + const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7])); + stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); + } + + this.seacAnalysisEnabled = !!seacAnalysisEnabled; + this.stream = stream; + this.nextChar(); + } + + readNumberArray() { + this.getToken(); + const array = []; + + while (true) { + const token = this.getToken(); + + if (token === null || token === "]" || token === "}") { + break; + } + + array.push(parseFloat(token || 0)); + } + + return array; + } + + readNumber() { + const token = this.getToken(); + return parseFloat(token || 0); + } + + readInt() { + const token = this.getToken(); + return parseInt(token || 0, 10) | 0; + } + + readBoolean() { + const token = this.getToken(); + return token === "true" ? 1 : 0; + } + + nextChar() { + return this.currentChar = this.stream.getByte(); + } + + prevChar() { + this.stream.skip(-2); + return this.currentChar = this.stream.getByte(); + } + + getToken() { + let comment = false; + let ch = this.currentChar; + + while (true) { + if (ch === -1) { + return null; + } + + if (comment) { + if (ch === 0x0a || ch === 0x0d) { + comment = false; + } + } else if (ch === 0x25) { + comment = true; + } else if (!(0, _core_utils.isWhiteSpace)(ch)) { + break; + } + + ch = this.nextChar(); + } + + if (isSpecial(ch)) { + this.nextChar(); + return String.fromCharCode(ch); + } + + let token = ""; + + do { + token += String.fromCharCode(ch); + ch = this.nextChar(); + } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch)); + + return token; + } + + readCharStrings(bytes, lenIV) { + if (lenIV === -1) { + return bytes; + } + + return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); + } + + extractFontProgram(properties) { + const stream = this.stream; + const subrs = [], + charstrings = []; + const privateData = Object.create(null); + privateData.lenIV = 4; + const program = { + subrs: [], + charstrings: [], + properties: { + privateData + } + }; + let token, length, data, lenIV; + + while ((token = this.getToken()) !== null) { + if (token !== "/") { + continue; + } + + token = this.getToken(); + + switch (token) { + case "CharStrings": + this.getToken(); + this.getToken(); + this.getToken(); + this.getToken(); + + while (true) { + token = this.getToken(); + + if (token === null || token === "end") { + break; + } + + if (token !== "/") { + continue; + } + + const glyph = this.getToken(); + length = this.readInt(); + this.getToken(); + data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); + lenIV = program.properties.privateData.lenIV; + const encoded = this.readCharStrings(data, lenIV); + this.nextChar(); + token = this.getToken(); + + if (token === "noaccess") { + this.getToken(); + } else if (token === "/") { + this.prevChar(); + } + + charstrings.push({ + glyph, + encoded + }); + } + + break; + + case "Subrs": + this.readInt(); + this.getToken(); + + while (this.getToken() === "dup") { + const index = this.readInt(); + length = this.readInt(); + this.getToken(); + data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); + lenIV = program.properties.privateData.lenIV; + const encoded = this.readCharStrings(data, lenIV); + this.nextChar(); + token = this.getToken(); + + if (token === "noaccess") { + this.getToken(); + } + + subrs[index] = encoded; + } + + break; + + case "BlueValues": + case "OtherBlues": + case "FamilyBlues": + case "FamilyOtherBlues": + const blueArray = this.readNumberArray(); + + if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { + program.properties.privateData[token] = blueArray; + } + + break; + + case "StemSnapH": + case "StemSnapV": + program.properties.privateData[token] = this.readNumberArray(); + break; + + case "StdHW": + case "StdVW": + program.properties.privateData[token] = this.readNumberArray()[0]; + break; + + case "BlueShift": + case "lenIV": + case "BlueFuzz": + case "BlueScale": + case "LanguageGroup": + case "ExpansionFactor": + program.properties.privateData[token] = this.readNumber(); + break; + + case "ForceBold": + program.properties.privateData[token] = this.readBoolean(); + break; + } + } + + for (const { + encoded, + glyph + } of charstrings) { + const charString = new Type1CharString(); + const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); + let output = charString.output; + + if (error) { + output = [14]; + } + + const charStringObject = { + glyphName: glyph, + charstring: output, + width: charString.width, + lsb: charString.lsb, + seac: charString.seac + }; + + if (glyph === ".notdef") { + program.charstrings.unshift(charStringObject); + } else { + program.charstrings.push(charStringObject); + } + + if (properties.builtInEncoding) { + const index = properties.builtInEncoding.indexOf(glyph); + + if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) { + properties.widths[index] = charString.width; + } + } + } + + return program; + } + + extractFontHeader(properties) { + let token; + + while ((token = this.getToken()) !== null) { + if (token !== "/") { + continue; + } + + token = this.getToken(); + + switch (token) { + case "FontMatrix": + const matrix = this.readNumberArray(); + properties.fontMatrix = matrix; + break; + + case "Encoding": + const encodingArg = this.getToken(); + let encoding; + + if (!/^\d+$/.test(encodingArg)) { + encoding = (0, _encodings.getEncoding)(encodingArg); + } else { + encoding = []; + const size = parseInt(encodingArg, 10) | 0; + this.getToken(); + + for (let j = 0; j < size; j++) { + token = this.getToken(); + + while (token !== "dup" && token !== "def") { + token = this.getToken(); + + if (token === null) { + return; + } + } + + if (token === "def") { + break; + } + + const index = this.readInt(); + this.getToken(); + const glyph = this.getToken(); + encoding[index] = glyph; + this.getToken(); + } + } + + properties.builtInEncoding = encoding; + break; + + case "FontBBox": + const fontBBox = this.readNumberArray(); + properties.ascent = Math.max(fontBBox[3], fontBBox[1]); + properties.descent = Math.min(fontBBox[1], fontBBox[3]); + properties.ascentScaled = true; + break; + } + } + } + +} + +exports.Type1Parser = Type1Parser; + +/***/ }), +/* 50 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Pattern = void 0; +exports.getTilingPatternIR = getTilingPatternIR; + +var _util = __w_pdfjs_require__(2); + +var _base_stream = __w_pdfjs_require__(7); + +var _colorspace = __w_pdfjs_require__(14); + +var _core_utils = __w_pdfjs_require__(6); + +const ShadingType = { + FUNCTION_BASED: 1, + AXIAL: 2, + RADIAL: 3, + FREE_FORM_MESH: 4, + LATTICE_FORM_MESH: 5, + COONS_PATCH_MESH: 6, + TENSOR_PATCH_MESH: 7 +}; + +class Pattern { + constructor() { + (0, _util.unreachable)("Cannot initialize Pattern."); + } + + static parseShading(shading, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) { + const dict = shading instanceof _base_stream.BaseStream ? shading.dict : shading; + const type = dict.get("ShadingType"); + + try { + switch (type) { + case ShadingType.AXIAL: + case ShadingType.RADIAL: + return new RadialAxialShading(dict, xref, res, pdfFunctionFactory, localColorSpaceCache); + + case ShadingType.FREE_FORM_MESH: + case ShadingType.LATTICE_FORM_MESH: + case ShadingType.COONS_PATCH_MESH: + case ShadingType.TENSOR_PATCH_MESH: + return new MeshShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache); + + default: + throw new _util.FormatError("Unsupported ShadingType: " + type); + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + handler.send("UnsupportedFeature", { + featureId: _util.UNSUPPORTED_FEATURES.shadingPattern + }); + (0, _util.warn)(ex); + return new DummyShading(); + } + } + +} + +exports.Pattern = Pattern; + +class BaseShading { + static get SMALL_NUMBER() { + return (0, _util.shadow)(this, "SMALL_NUMBER", 1e-6); + } + + constructor() { + if (this.constructor === BaseShading) { + (0, _util.unreachable)("Cannot initialize BaseShading."); + } + } + + getIR() { + (0, _util.unreachable)("Abstract method `getIR` called."); + } + +} + +class RadialAxialShading extends BaseShading { + constructor(dict, xref, resources, pdfFunctionFactory, localColorSpaceCache) { + super(); + this.coordsArr = dict.getArray("Coords"); + this.shadingType = dict.get("ShadingType"); + + const cs = _colorspace.ColorSpace.parse({ + cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), + xref, + resources, + pdfFunctionFactory, + localColorSpaceCache + }); + + const bbox = dict.getArray("BBox"); + + if (Array.isArray(bbox) && bbox.length === 4) { + this.bbox = _util.Util.normalizeRect(bbox); + } else { + this.bbox = null; + } + + let t0 = 0.0, + t1 = 1.0; + + if (dict.has("Domain")) { + const domainArr = dict.getArray("Domain"); + t0 = domainArr[0]; + t1 = domainArr[1]; + } + + let extendStart = false, + extendEnd = false; + + if (dict.has("Extend")) { + const extendArr = dict.getArray("Extend"); + extendStart = extendArr[0]; + extendEnd = extendArr[1]; + } + + if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { + const [x1, y1, r1, x2, y2, r2] = this.coordsArr; + const distance = Math.hypot(x1 - x2, y1 - y2); + + if (r1 <= r2 + distance && r2 <= r1 + distance) { + (0, _util.warn)("Unsupported radial gradient."); + } + } + + this.extendStart = extendStart; + this.extendEnd = extendEnd; + const fnObj = dict.getRaw("Function"); + const fn = pdfFunctionFactory.createFromArray(fnObj); + const NUMBER_OF_SAMPLES = 10; + const step = (t1 - t0) / NUMBER_OF_SAMPLES; + const colorStops = this.colorStops = []; + + if (t0 >= t1 || step <= 0) { + (0, _util.info)("Bad shading domain."); + return; + } + + const color = new Float32Array(cs.numComps), + ratio = new Float32Array(1); + let rgbColor; + + for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) { + ratio[0] = t0 + i * step; + fn(ratio, 0, color, 0); + rgbColor = cs.getRgb(color, 0); + + const cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); + + colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]); + } + + let background = "transparent"; + + if (dict.has("Background")) { + rgbColor = cs.getRgb(dict.get("Background"), 0); + background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); + } + + if (!extendStart) { + colorStops.unshift([0, background]); + colorStops[1][0] += BaseShading.SMALL_NUMBER; + } + + if (!extendEnd) { + colorStops.at(-1)[0] -= BaseShading.SMALL_NUMBER; + colorStops.push([1, background]); + } + + this.colorStops = colorStops; + } + + getIR() { + const coordsArr = this.coordsArr; + const shadingType = this.shadingType; + let type, p0, p1, r0, r1; + + if (shadingType === ShadingType.AXIAL) { + p0 = [coordsArr[0], coordsArr[1]]; + p1 = [coordsArr[2], coordsArr[3]]; + r0 = null; + r1 = null; + type = "axial"; + } else if (shadingType === ShadingType.RADIAL) { + p0 = [coordsArr[0], coordsArr[1]]; + p1 = [coordsArr[3], coordsArr[4]]; + r0 = coordsArr[2]; + r1 = coordsArr[5]; + type = "radial"; + } else { + (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`); + } + + return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1]; + } + +} + +class MeshStreamReader { + constructor(stream, context) { + this.stream = stream; + this.context = context; + this.buffer = 0; + this.bufferLength = 0; + const numComps = context.numComps; + this.tmpCompsBuf = new Float32Array(numComps); + const csNumComps = context.colorSpace.numComps; + this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; + } + + get hasData() { + if (this.stream.end) { + return this.stream.pos < this.stream.end; + } + + if (this.bufferLength > 0) { + return true; + } + + const nextByte = this.stream.getByte(); + + if (nextByte < 0) { + return false; + } + + this.buffer = nextByte; + this.bufferLength = 8; + return true; + } + + readBits(n) { + let buffer = this.buffer; + let bufferLength = this.bufferLength; + + if (n === 32) { + if (bufferLength === 0) { + return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; + } + + buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); + const nextByte = this.stream.getByte(); + this.buffer = nextByte & (1 << bufferLength) - 1; + return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0; + } + + if (n === 8 && bufferLength === 0) { + return this.stream.getByte(); + } + + while (bufferLength < n) { + buffer = buffer << 8 | this.stream.getByte(); + bufferLength += 8; + } + + bufferLength -= n; + this.bufferLength = bufferLength; + this.buffer = buffer & (1 << bufferLength) - 1; + return buffer >> bufferLength; + } + + align() { + this.buffer = 0; + this.bufferLength = 0; + } + + readFlag() { + return this.readBits(this.context.bitsPerFlag); + } + + readCoordinate() { + const bitsPerCoordinate = this.context.bitsPerCoordinate; + const xi = this.readBits(bitsPerCoordinate); + const yi = this.readBits(bitsPerCoordinate); + const decode = this.context.decode; + const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; + return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; + } + + readComponents() { + const numComps = this.context.numComps; + const bitsPerComponent = this.context.bitsPerComponent; + const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; + const decode = this.context.decode; + const components = this.tmpCompsBuf; + + for (let i = 0, j = 4; i < numComps; i++, j += 2) { + const ci = this.readBits(bitsPerComponent); + components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; + } + + const color = this.tmpCsCompsBuf; + + if (this.context.colorFn) { + this.context.colorFn(components, 0, color, 0); + } + + return this.context.colorSpace.getRgb(color, 0); + } + +} + +const getB = function getBClosure() { + function buildB(count) { + const lut = []; + + for (let i = 0; i <= count; i++) { + const t = i / count, + t_ = 1 - t; + lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t])); + } + + return lut; + } + + const cache = []; + return function (count) { + if (!cache[count]) { + cache[count] = buildB(count); + } + + return cache[count]; + }; +}(); + +class MeshShading extends BaseShading { + static get MIN_SPLIT_PATCH_CHUNKS_AMOUNT() { + return (0, _util.shadow)(this, "MIN_SPLIT_PATCH_CHUNKS_AMOUNT", 3); + } + + static get MAX_SPLIT_PATCH_CHUNKS_AMOUNT() { + return (0, _util.shadow)(this, "MAX_SPLIT_PATCH_CHUNKS_AMOUNT", 20); + } + + static get TRIANGLE_DENSITY() { + return (0, _util.shadow)(this, "TRIANGLE_DENSITY", 20); + } + + constructor(stream, xref, resources, pdfFunctionFactory, localColorSpaceCache) { + super(); + + if (!(stream instanceof _base_stream.BaseStream)) { + throw new _util.FormatError("Mesh data is not a stream"); + } + + const dict = stream.dict; + this.shadingType = dict.get("ShadingType"); + const bbox = dict.getArray("BBox"); + + if (Array.isArray(bbox) && bbox.length === 4) { + this.bbox = _util.Util.normalizeRect(bbox); + } else { + this.bbox = null; + } + + const cs = _colorspace.ColorSpace.parse({ + cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), + xref, + resources, + pdfFunctionFactory, + localColorSpaceCache + }); + + this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null; + const fnObj = dict.getRaw("Function"); + const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; + this.coords = []; + this.colors = []; + this.figures = []; + const decodeContext = { + bitsPerCoordinate: dict.get("BitsPerCoordinate"), + bitsPerComponent: dict.get("BitsPerComponent"), + bitsPerFlag: dict.get("BitsPerFlag"), + decode: dict.getArray("Decode"), + colorFn: fn, + colorSpace: cs, + numComps: fn ? 1 : cs.numComps + }; + const reader = new MeshStreamReader(stream, decodeContext); + let patchMesh = false; + + switch (this.shadingType) { + case ShadingType.FREE_FORM_MESH: + this._decodeType4Shading(reader); + + break; + + case ShadingType.LATTICE_FORM_MESH: + const verticesPerRow = dict.get("VerticesPerRow") | 0; + + if (verticesPerRow < 2) { + throw new _util.FormatError("Invalid VerticesPerRow"); + } + + this._decodeType5Shading(reader, verticesPerRow); + + break; + + case ShadingType.COONS_PATCH_MESH: + this._decodeType6Shading(reader); + + patchMesh = true; + break; + + case ShadingType.TENSOR_PATCH_MESH: + this._decodeType7Shading(reader); + + patchMesh = true; + break; + + default: + (0, _util.unreachable)("Unsupported mesh type."); + break; + } + + if (patchMesh) { + this._updateBounds(); + + for (let i = 0, ii = this.figures.length; i < ii; i++) { + this._buildFigureFromPatch(i); + } + } + + this._updateBounds(); + + this._packData(); + } + + _decodeType4Shading(reader) { + const coords = this.coords; + const colors = this.colors; + const operators = []; + const ps = []; + let verticesLeft = 0; + + while (reader.hasData) { + const f = reader.readFlag(); + const coord = reader.readCoordinate(); + const color = reader.readComponents(); + + if (verticesLeft === 0) { + if (!(0 <= f && f <= 2)) { + throw new _util.FormatError("Unknown type4 flag"); + } + + switch (f) { + case 0: + verticesLeft = 3; + break; + + case 1: + ps.push(ps.at(-2), ps.at(-1)); + verticesLeft = 1; + break; + + case 2: + ps.push(ps.at(-3), ps.at(-1)); + verticesLeft = 1; + break; + } + + operators.push(f); + } + + ps.push(coords.length); + coords.push(coord); + colors.push(color); + verticesLeft--; + reader.align(); + } + + this.figures.push({ + type: "triangles", + coords: new Int32Array(ps), + colors: new Int32Array(ps) + }); + } + + _decodeType5Shading(reader, verticesPerRow) { + const coords = this.coords; + const colors = this.colors; + const ps = []; + + while (reader.hasData) { + const coord = reader.readCoordinate(); + const color = reader.readComponents(); + ps.push(coords.length); + coords.push(coord); + colors.push(color); + } + + this.figures.push({ + type: "lattice", + coords: new Int32Array(ps), + colors: new Int32Array(ps), + verticesPerRow + }); + } + + _decodeType6Shading(reader) { + const coords = this.coords; + const colors = this.colors; + const ps = new Int32Array(16); + const cs = new Int32Array(4); + + while (reader.hasData) { + const f = reader.readFlag(); + + if (!(0 <= f && f <= 3)) { + throw new _util.FormatError("Unknown type6 flag"); + } + + const pi = coords.length; + + for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { + coords.push(reader.readCoordinate()); + } + + const ci = colors.length; + + for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { + colors.push(reader.readComponents()); + } + + let tmp1, tmp2, tmp3, tmp4; + + switch (f) { + case 0: + ps[12] = pi + 3; + ps[13] = pi + 4; + ps[14] = pi + 5; + ps[15] = pi + 6; + ps[8] = pi + 2; + ps[11] = pi + 7; + ps[4] = pi + 1; + ps[7] = pi + 8; + ps[0] = pi; + ps[1] = pi + 11; + ps[2] = pi + 10; + ps[3] = pi + 9; + cs[2] = ci + 1; + cs[3] = ci + 2; + cs[0] = ci; + cs[1] = ci + 3; + break; + + case 1: + tmp1 = ps[12]; + tmp2 = ps[13]; + tmp3 = ps[14]; + tmp4 = ps[15]; + ps[12] = tmp4; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = tmp3; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[2]; + tmp2 = cs[3]; + cs[2] = tmp2; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + + case 2: + tmp1 = ps[15]; + tmp2 = ps[11]; + ps[12] = ps[3]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[7]; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[3]; + cs[2] = cs[1]; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + + case 3: + ps[12] = ps[0]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[1]; + ps[11] = pi + 3; + ps[4] = ps[2]; + ps[7] = pi + 4; + ps[0] = ps[3]; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + cs[2] = cs[0]; + cs[3] = ci; + cs[0] = cs[1]; + cs[1] = ci + 1; + break; + } + + ps[5] = coords.length; + coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); + ps[6] = coords.length; + coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); + ps[9] = coords.length; + coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); + ps[10] = coords.length; + coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); + this.figures.push({ + type: "patch", + coords: new Int32Array(ps), + colors: new Int32Array(cs) + }); + } + } + + _decodeType7Shading(reader) { + const coords = this.coords; + const colors = this.colors; + const ps = new Int32Array(16); + const cs = new Int32Array(4); + + while (reader.hasData) { + const f = reader.readFlag(); + + if (!(0 <= f && f <= 3)) { + throw new _util.FormatError("Unknown type7 flag"); + } + + const pi = coords.length; + + for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { + coords.push(reader.readCoordinate()); + } + + const ci = colors.length; + + for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { + colors.push(reader.readComponents()); + } + + let tmp1, tmp2, tmp3, tmp4; + + switch (f) { + case 0: + ps[12] = pi + 3; + ps[13] = pi + 4; + ps[14] = pi + 5; + ps[15] = pi + 6; + ps[8] = pi + 2; + ps[9] = pi + 13; + ps[10] = pi + 14; + ps[11] = pi + 7; + ps[4] = pi + 1; + ps[5] = pi + 12; + ps[6] = pi + 15; + ps[7] = pi + 8; + ps[0] = pi; + ps[1] = pi + 11; + ps[2] = pi + 10; + ps[3] = pi + 9; + cs[2] = ci + 1; + cs[3] = ci + 2; + cs[0] = ci; + cs[1] = ci + 3; + break; + + case 1: + tmp1 = ps[12]; + tmp2 = ps[13]; + tmp3 = ps[14]; + tmp4 = ps[15]; + ps[12] = tmp4; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = tmp3; + ps[9] = pi + 9; + ps[10] = pi + 10; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[5] = pi + 8; + ps[6] = pi + 11; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[2]; + tmp2 = cs[3]; + cs[2] = tmp2; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + + case 2: + tmp1 = ps[15]; + tmp2 = ps[11]; + ps[12] = ps[3]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[7]; + ps[9] = pi + 9; + ps[10] = pi + 10; + ps[11] = pi + 3; + ps[4] = tmp2; + ps[5] = pi + 8; + ps[6] = pi + 11; + ps[7] = pi + 4; + ps[0] = tmp1; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + tmp1 = cs[3]; + cs[2] = cs[1]; + cs[3] = ci; + cs[0] = tmp1; + cs[1] = ci + 1; + break; + + case 3: + ps[12] = ps[0]; + ps[13] = pi + 0; + ps[14] = pi + 1; + ps[15] = pi + 2; + ps[8] = ps[1]; + ps[9] = pi + 9; + ps[10] = pi + 10; + ps[11] = pi + 3; + ps[4] = ps[2]; + ps[5] = pi + 8; + ps[6] = pi + 11; + ps[7] = pi + 4; + ps[0] = ps[3]; + ps[1] = pi + 7; + ps[2] = pi + 6; + ps[3] = pi + 5; + cs[2] = cs[0]; + cs[3] = ci; + cs[0] = cs[1]; + cs[1] = ci + 1; + break; + } + + this.figures.push({ + type: "patch", + coords: new Int32Array(ps), + colors: new Int32Array(cs) + }); + } + } + + _buildFigureFromPatch(index) { + const figure = this.figures[index]; + (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure"); + const coords = this.coords, + colors = this.colors; + const pi = figure.coords; + const ci = figure.colors; + const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); + const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); + const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); + const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); + let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0])); + splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); + let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1])); + splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); + const verticesPerRow = splitXBy + 1; + const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); + const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); + let k = 0; + const cl = new Uint8Array(3), + cr = new Uint8Array(3); + const c0 = colors[ci[0]], + c1 = colors[ci[1]], + c2 = colors[ci[2]], + c3 = colors[ci[3]]; + const bRow = getB(splitYBy), + bCol = getB(splitXBy); + + for (let row = 0; row <= splitYBy; row++) { + cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; + cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; + cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; + cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; + cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; + cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; + + for (let col = 0; col <= splitXBy; col++, k++) { + if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { + continue; + } + + let x = 0, + y = 0; + let q = 0; + + for (let i = 0; i <= 3; i++) { + for (let j = 0; j <= 3; j++, q++) { + const m = bRow[row][i] * bCol[col][j]; + x += coords[pi[q]][0] * m; + y += coords[pi[q]][1] * m; + } + } + + figureCoords[k] = coords.length; + coords.push([x, y]); + figureColors[k] = colors.length; + const newColor = new Uint8Array(3); + newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; + newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; + newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; + colors.push(newColor); + } + } + + figureCoords[0] = pi[0]; + figureColors[0] = ci[0]; + figureCoords[splitXBy] = pi[3]; + figureColors[splitXBy] = ci[1]; + figureCoords[verticesPerRow * splitYBy] = pi[12]; + figureColors[verticesPerRow * splitYBy] = ci[2]; + figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; + figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; + this.figures[index] = { + type: "lattice", + coords: figureCoords, + colors: figureColors, + verticesPerRow + }; + } + + _updateBounds() { + let minX = this.coords[0][0], + minY = this.coords[0][1], + maxX = minX, + maxY = minY; + + for (let i = 1, ii = this.coords.length; i < ii; i++) { + const x = this.coords[i][0], + y = this.coords[i][1]; + minX = minX > x ? x : minX; + minY = minY > y ? y : minY; + maxX = maxX < x ? x : maxX; + maxY = maxY < y ? y : maxY; + } + + this.bounds = [minX, minY, maxX, maxY]; + } + + _packData() { + let i, ii, j, jj; + const coords = this.coords; + const coordsPacked = new Float32Array(coords.length * 2); + + for (i = 0, j = 0, ii = coords.length; i < ii; i++) { + const xy = coords[i]; + coordsPacked[j++] = xy[0]; + coordsPacked[j++] = xy[1]; + } + + this.coords = coordsPacked; + const colors = this.colors; + const colorsPacked = new Uint8Array(colors.length * 3); + + for (i = 0, j = 0, ii = colors.length; i < ii; i++) { + const c = colors[i]; + colorsPacked[j++] = c[0]; + colorsPacked[j++] = c[1]; + colorsPacked[j++] = c[2]; + } + + this.colors = colorsPacked; + const figures = this.figures; + + for (i = 0, ii = figures.length; i < ii; i++) { + const figure = figures[i], + ps = figure.coords, + cs = figure.colors; + + for (j = 0, jj = ps.length; j < jj; j++) { + ps[j] *= 2; + cs[j] *= 3; + } + } + } + + getIR() { + return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.bbox, this.background]; + } + +} + +class DummyShading extends BaseShading { + getIR() { + return ["Dummy"]; + } + +} + +function getTilingPatternIR(operatorList, dict, color) { + const matrix = dict.getArray("Matrix"); + + const bbox = _util.Util.normalizeRect(dict.getArray("BBox")); + + const xstep = dict.get("XStep"); + const ystep = dict.get("YStep"); + const paintType = dict.get("PaintType"); + const tilingType = dict.get("TilingType"); + + if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { + throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`); + } + + return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; +} + +/***/ }), +/* 51 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getXfaFontDict = getXfaFontDict; +exports.getXfaFontName = getXfaFontName; + +var _calibri_factors = __w_pdfjs_require__(52); + +var _primitives = __w_pdfjs_require__(5); + +var _helvetica_factors = __w_pdfjs_require__(53); + +var _liberationsans_widths = __w_pdfjs_require__(54); + +var _myriadpro_factors = __w_pdfjs_require__(55); + +var _segoeui_factors = __w_pdfjs_require__(56); + +var _core_utils = __w_pdfjs_require__(6); + +var _fonts_utils = __w_pdfjs_require__(38); + +const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { + t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = { + name: "LiberationSans-Regular", + factors: _myriadpro_factors.MyriadProRegularFactors, + baseWidths: _liberationsans_widths.LiberationSansRegularWidths, + baseMapping: _liberationsans_widths.LiberationSansRegularMapping, + metrics: _myriadpro_factors.MyriadProRegularMetrics + }; + t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = { + name: "LiberationSans-Bold", + factors: _myriadpro_factors.MyriadProBoldFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldMapping, + metrics: _myriadpro_factors.MyriadProBoldMetrics + }; + t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = { + name: "LiberationSans-Italic", + factors: _myriadpro_factors.MyriadProItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansItalicMapping, + metrics: _myriadpro_factors.MyriadProItalicMetrics + }; + t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: _myriadpro_factors.MyriadProBoldItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, + metrics: _myriadpro_factors.MyriadProBoldItalicMetrics + }; + t.ArialMT = t.Arial = t["Arial-Regular"] = { + name: "LiberationSans-Regular", + baseWidths: _liberationsans_widths.LiberationSansRegularWidths, + baseMapping: _liberationsans_widths.LiberationSansRegularMapping + }; + t["Arial-BoldMT"] = t["Arial-Bold"] = { + name: "LiberationSans-Bold", + baseWidths: _liberationsans_widths.LiberationSansBoldWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldMapping + }; + t["Arial-ItalicMT"] = t["Arial-Italic"] = { + name: "LiberationSans-Italic", + baseWidths: _liberationsans_widths.LiberationSansItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansItalicMapping + }; + t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping + }; + t["Calibri-Regular"] = { + name: "LiberationSans-Regular", + factors: _calibri_factors.CalibriRegularFactors, + baseWidths: _liberationsans_widths.LiberationSansRegularWidths, + baseMapping: _liberationsans_widths.LiberationSansRegularMapping, + metrics: _calibri_factors.CalibriRegularMetrics + }; + t["Calibri-Bold"] = { + name: "LiberationSans-Bold", + factors: _calibri_factors.CalibriBoldFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldMapping, + metrics: _calibri_factors.CalibriBoldMetrics + }; + t["Calibri-Italic"] = { + name: "LiberationSans-Italic", + factors: _calibri_factors.CalibriItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansItalicMapping, + metrics: _calibri_factors.CalibriItalicMetrics + }; + t["Calibri-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: _calibri_factors.CalibriBoldItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, + metrics: _calibri_factors.CalibriBoldItalicMetrics + }; + t["Segoeui-Regular"] = { + name: "LiberationSans-Regular", + factors: _segoeui_factors.SegoeuiRegularFactors, + baseWidths: _liberationsans_widths.LiberationSansRegularWidths, + baseMapping: _liberationsans_widths.LiberationSansRegularMapping, + metrics: _segoeui_factors.SegoeuiRegularMetrics + }; + t["Segoeui-Bold"] = { + name: "LiberationSans-Bold", + factors: _segoeui_factors.SegoeuiBoldFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldMapping, + metrics: _segoeui_factors.SegoeuiBoldMetrics + }; + t["Segoeui-Italic"] = { + name: "LiberationSans-Italic", + factors: _segoeui_factors.SegoeuiItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansItalicMapping, + metrics: _segoeui_factors.SegoeuiItalicMetrics + }; + t["Segoeui-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: _segoeui_factors.SegoeuiBoldItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, + metrics: _segoeui_factors.SegoeuiBoldItalicMetrics + }; + t["Helvetica-Regular"] = t.Helvetica = { + name: "LiberationSans-Regular", + factors: _helvetica_factors.HelveticaRegularFactors, + baseWidths: _liberationsans_widths.LiberationSansRegularWidths, + baseMapping: _liberationsans_widths.LiberationSansRegularMapping, + metrics: _helvetica_factors.HelveticaRegularMetrics + }; + t["Helvetica-Bold"] = { + name: "LiberationSans-Bold", + factors: _helvetica_factors.HelveticaBoldFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldMapping, + metrics: _helvetica_factors.HelveticaBoldMetrics + }; + t["Helvetica-Italic"] = { + name: "LiberationSans-Italic", + factors: _helvetica_factors.HelveticaItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansItalicMapping, + metrics: _helvetica_factors.HelveticaItalicMetrics + }; + t["Helvetica-BoldItalic"] = { + name: "LiberationSans-BoldItalic", + factors: _helvetica_factors.HelveticaBoldItalicFactors, + baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, + baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, + metrics: _helvetica_factors.HelveticaBoldItalicMetrics + }; +}); + +function getXfaFontName(name) { + const fontName = (0, _fonts_utils.normalizeFontName)(name); + const fontMap = getXFAFontMap(); + return fontMap[fontName]; +} + +function getXfaFontWidths(name) { + const info = getXfaFontName(name); + + if (!info) { + return null; + } + + const { + baseWidths, + baseMapping, + factors + } = info; + let rescaledBaseWidths; + + if (!factors) { + rescaledBaseWidths = baseWidths; + } else { + rescaledBaseWidths = baseWidths.map((w, i) => w * factors[i]); + } + + let currentCode = -2; + let currentArray; + const newWidths = []; + + for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) { + if (unicode === -1) { + continue; + } + + if (unicode === currentCode + 1) { + currentArray.push(rescaledBaseWidths[glyphIndex]); + currentCode += 1; + } else { + currentCode = unicode; + currentArray = [rescaledBaseWidths[glyphIndex]]; + newWidths.push(unicode, currentArray); + } + } + + return newWidths; +} + +function getXfaFontDict(name) { + const widths = getXfaFontWidths(name); + const dict = new _primitives.Dict(null); + dict.set("BaseFont", _primitives.Name.get(name)); + dict.set("Type", _primitives.Name.get("Font")); + dict.set("Subtype", _primitives.Name.get("CIDFontType2")); + dict.set("Encoding", _primitives.Name.get("Identity-H")); + dict.set("CIDToGIDMap", _primitives.Name.get("Identity")); + dict.set("W", widths); + dict.set("FirstChar", widths[0]); + dict.set("LastChar", widths.at(-2) + widths.at(-1).length - 1); + const descriptor = new _primitives.Dict(null); + dict.set("FontDescriptor", descriptor); + const systemInfo = new _primitives.Dict(null); + systemInfo.set("Ordering", "Identity"); + systemInfo.set("Registry", "Adobe"); + systemInfo.set("Supplement", 0); + dict.set("CIDSystemInfo", systemInfo); + return dict; +} + +/***/ }), +/* 52 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.CalibriRegularMetrics = exports.CalibriRegularFactors = exports.CalibriItalicMetrics = exports.CalibriItalicFactors = exports.CalibriBoldMetrics = exports.CalibriBoldItalicMetrics = exports.CalibriBoldItalicFactors = exports.CalibriBoldFactors = void 0; +const CalibriBoldFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.CalibriBoldFactors = CalibriBoldFactors; +const CalibriBoldMetrics = { + lineHeight: 1.2207, + lineGap: 0.2207 +}; +exports.CalibriBoldMetrics = CalibriBoldMetrics; +const CalibriBoldItalicFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.CalibriBoldItalicFactors = CalibriBoldItalicFactors; +const CalibriBoldItalicMetrics = { + lineHeight: 1.2207, + lineGap: 0.2207 +}; +exports.CalibriBoldItalicMetrics = CalibriBoldItalicMetrics; +const CalibriItalicFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.CalibriItalicFactors = CalibriItalicFactors; +const CalibriItalicMetrics = { + lineHeight: 1.2207, + lineGap: 0.2207 +}; +exports.CalibriItalicMetrics = CalibriItalicMetrics; +const CalibriRegularFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.CalibriRegularFactors = CalibriRegularFactors; +const CalibriRegularMetrics = { + lineHeight: 1.2207, + lineGap: 0.2207 +}; +exports.CalibriRegularMetrics = CalibriRegularMetrics; + +/***/ }), +/* 53 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.HelveticaRegularMetrics = exports.HelveticaRegularFactors = exports.HelveticaItalicMetrics = exports.HelveticaItalicFactors = exports.HelveticaBoldMetrics = exports.HelveticaBoldItalicMetrics = exports.HelveticaBoldItalicFactors = exports.HelveticaBoldFactors = void 0; +const HelveticaBoldFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.HelveticaBoldFactors = HelveticaBoldFactors; +const HelveticaBoldMetrics = { + lineHeight: 1.2, + lineGap: 0.2 +}; +exports.HelveticaBoldMetrics = HelveticaBoldMetrics; +const HelveticaBoldItalicFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.HelveticaBoldItalicFactors = HelveticaBoldItalicFactors; +const HelveticaBoldItalicMetrics = { + lineHeight: 1.35, + lineGap: 0.2 +}; +exports.HelveticaBoldItalicMetrics = HelveticaBoldItalicMetrics; +const HelveticaItalicFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.HelveticaItalicFactors = HelveticaItalicFactors; +const HelveticaItalicMetrics = { + lineHeight: 1.35, + lineGap: 0.2 +}; +exports.HelveticaItalicMetrics = HelveticaItalicMetrics; +const HelveticaRegularFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.HelveticaRegularFactors = HelveticaRegularFactors; +const HelveticaRegularMetrics = { + lineHeight: 1.2, + lineGap: 0.2 +}; +exports.HelveticaRegularMetrics = HelveticaRegularMetrics; + +/***/ }), +/* 54 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.LiberationSansRegularWidths = exports.LiberationSansRegularMapping = exports.LiberationSansItalicWidths = exports.LiberationSansItalicMapping = exports.LiberationSansBoldWidths = exports.LiberationSansBoldMapping = exports.LiberationSansBoldItalicWidths = exports.LiberationSansBoldItalicMapping = void 0; +const LiberationSansBoldWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; +exports.LiberationSansBoldWidths = LiberationSansBoldWidths; +const LiberationSansBoldMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; +exports.LiberationSansBoldMapping = LiberationSansBoldMapping; +const LiberationSansBoldItalicWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600, 834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; +exports.LiberationSansBoldItalicWidths = LiberationSansBoldItalicWidths; +const LiberationSansBoldItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; +exports.LiberationSansBoldItalicMapping = LiberationSansBoldItalicMapping; +const LiberationSansItalicWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; +exports.LiberationSansItalicWidths = LiberationSansItalicWidths; +const LiberationSansItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; +exports.LiberationSansItalicMapping = LiberationSansItalicMapping; +const LiberationSansRegularWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; +exports.LiberationSansRegularWidths = LiberationSansRegularWidths; +const LiberationSansRegularMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; +exports.LiberationSansRegularMapping = LiberationSansRegularMapping; + +/***/ }), +/* 55 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MyriadProRegularMetrics = exports.MyriadProRegularFactors = exports.MyriadProItalicMetrics = exports.MyriadProItalicFactors = exports.MyriadProBoldMetrics = exports.MyriadProBoldItalicMetrics = exports.MyriadProBoldItalicFactors = exports.MyriadProBoldFactors = void 0; +const MyriadProBoldFactors = [1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.MyriadProBoldFactors = MyriadProBoldFactors; +const MyriadProBoldMetrics = { + lineHeight: 1.2, + lineGap: 0.2 +}; +exports.MyriadProBoldMetrics = MyriadProBoldMetrics; +const MyriadProBoldItalicFactors = [1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.MyriadProBoldItalicFactors = MyriadProBoldItalicFactors; +const MyriadProBoldItalicMetrics = { + lineHeight: 1.2, + lineGap: 0.2 +}; +exports.MyriadProBoldItalicMetrics = MyriadProBoldItalicMetrics; +const MyriadProItalicFactors = [1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.MyriadProItalicFactors = MyriadProItalicFactors; +const MyriadProItalicMetrics = { + lineHeight: 1.2, + lineGap: 0.2 +}; +exports.MyriadProItalicMetrics = MyriadProItalicMetrics; +const MyriadProRegularFactors = [1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.MyriadProRegularFactors = MyriadProRegularFactors; +const MyriadProRegularMetrics = { + lineHeight: 1.2, + lineGap: 0.2 +}; +exports.MyriadProRegularMetrics = MyriadProRegularMetrics; + +/***/ }), +/* 56 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.SegoeuiRegularMetrics = exports.SegoeuiRegularFactors = exports.SegoeuiItalicMetrics = exports.SegoeuiItalicFactors = exports.SegoeuiBoldMetrics = exports.SegoeuiBoldItalicMetrics = exports.SegoeuiBoldItalicFactors = exports.SegoeuiBoldFactors = void 0; +const SegoeuiBoldFactors = [1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.SegoeuiBoldFactors = SegoeuiBoldFactors; +const SegoeuiBoldMetrics = { + lineHeight: 1.33008, + lineGap: 0 +}; +exports.SegoeuiBoldMetrics = SegoeuiBoldMetrics; +const SegoeuiBoldItalicFactors = [1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.SegoeuiBoldItalicFactors = SegoeuiBoldItalicFactors; +const SegoeuiBoldItalicMetrics = { + lineHeight: 1.33008, + lineGap: 0 +}; +exports.SegoeuiBoldItalicMetrics = SegoeuiBoldItalicMetrics; +const SegoeuiItalicFactors = [1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.SegoeuiItalicFactors = SegoeuiItalicFactors; +const SegoeuiItalicMetrics = { + lineHeight: 1.33008, + lineGap: 0 +}; +exports.SegoeuiItalicMetrics = SegoeuiItalicMetrics; +const SegoeuiRegularFactors = [1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; +exports.SegoeuiRegularFactors = SegoeuiRegularFactors; +const SegoeuiRegularMetrics = { + lineHeight: 1.33008, + lineGap: 0 +}; +exports.SegoeuiRegularMetrics = SegoeuiRegularMetrics; + +/***/ }), +/* 57 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0; +exports.isPDFFunction = isPDFFunction; + +var _primitives = __w_pdfjs_require__(5); + +var _util = __w_pdfjs_require__(2); + +var _ps_parser = __w_pdfjs_require__(58); + +var _base_stream = __w_pdfjs_require__(7); + +var _image_utils = __w_pdfjs_require__(59); + +class PDFFunctionFactory { + constructor({ + xref, + isEvalSupported = true + }) { + this.xref = xref; + this.isEvalSupported = isEvalSupported !== false; + } + + create(fn) { + const cachedFunction = this.getCached(fn); + + if (cachedFunction) { + return cachedFunction; + } + + const parsedFunction = PDFFunction.parse({ + xref: this.xref, + isEvalSupported: this.isEvalSupported, + fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn + }); + + this._cache(fn, parsedFunction); + + return parsedFunction; + } + + createFromArray(fnObj) { + const cachedFunction = this.getCached(fnObj); + + if (cachedFunction) { + return cachedFunction; + } + + const parsedFunction = PDFFunction.parseArray({ + xref: this.xref, + isEvalSupported: this.isEvalSupported, + fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj + }); + + this._cache(fnObj, parsedFunction); + + return parsedFunction; + } + + getCached(cacheKey) { + let fnRef; + + if (cacheKey instanceof _primitives.Ref) { + fnRef = cacheKey; + } else if (cacheKey instanceof _primitives.Dict) { + fnRef = cacheKey.objId; + } else if (cacheKey instanceof _base_stream.BaseStream) { + fnRef = cacheKey.dict && cacheKey.dict.objId; + } + + if (fnRef) { + const localFunction = this._localFunctionCache.getByRef(fnRef); + + if (localFunction) { + return localFunction; + } + } + + return null; + } + + _cache(cacheKey, parsedFunction) { + if (!parsedFunction) { + throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.'); + } + + let fnRef; + + if (cacheKey instanceof _primitives.Ref) { + fnRef = cacheKey; + } else if (cacheKey instanceof _primitives.Dict) { + fnRef = cacheKey.objId; + } else if (cacheKey instanceof _base_stream.BaseStream) { + fnRef = cacheKey.dict && cacheKey.dict.objId; + } + + if (fnRef) { + this._localFunctionCache.set(null, fnRef, parsedFunction); + } + } + + get _localFunctionCache() { + return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache()); + } + +} + +exports.PDFFunctionFactory = PDFFunctionFactory; + +function toNumberArray(arr) { + if (!Array.isArray(arr)) { + return null; + } + + const length = arr.length; + + for (let i = 0; i < length; i++) { + if (typeof arr[i] !== "number") { + const result = new Array(length); + + for (let j = 0; j < length; j++) { + result[j] = +arr[j]; + } + + return result; + } + } + + return arr; +} + +class PDFFunction { + static getSampleArray(size, outputSize, bps, stream) { + let i, ii; + let length = 1; + + for (i = 0, ii = size.length; i < ii; i++) { + length *= size[i]; + } + + length *= outputSize; + const array = new Array(length); + let codeSize = 0; + let codeBuf = 0; + const sampleMul = 1.0 / (2.0 ** bps - 1); + const strBytes = stream.getBytes((length * bps + 7) / 8); + let strIdx = 0; + + for (i = 0; i < length; i++) { + while (codeSize < bps) { + codeBuf <<= 8; + codeBuf |= strBytes[strIdx++]; + codeSize += 8; + } + + codeSize -= bps; + array[i] = (codeBuf >> codeSize) * sampleMul; + codeBuf &= (1 << codeSize) - 1; + } + + return array; + } + + static parse({ + xref, + isEvalSupported, + fn + }) { + const dict = fn.dict || fn; + const typeNum = dict.get("FunctionType"); + + switch (typeNum) { + case 0: + return this.constructSampled({ + xref, + isEvalSupported, + fn, + dict + }); + + case 1: + break; + + case 2: + return this.constructInterpolated({ + xref, + isEvalSupported, + dict + }); + + case 3: + return this.constructStiched({ + xref, + isEvalSupported, + dict + }); + + case 4: + return this.constructPostScript({ + xref, + isEvalSupported, + fn, + dict + }); + } + + throw new _util.FormatError("Unknown type of function"); + } + + static parseArray({ + xref, + isEvalSupported, + fnObj + }) { + if (!Array.isArray(fnObj)) { + return this.parse({ + xref, + isEvalSupported, + fn: fnObj + }); + } + + const fnArray = []; + + for (let j = 0, jj = fnObj.length; j < jj; j++) { + fnArray.push(this.parse({ + xref, + isEvalSupported, + fn: xref.fetchIfRef(fnObj[j]) + })); + } + + return function (src, srcOffset, dest, destOffset) { + for (let i = 0, ii = fnArray.length; i < ii; i++) { + fnArray[i](src, srcOffset, dest, destOffset + i); + } + }; + } + + static constructSampled({ + xref, + isEvalSupported, + fn, + dict + }) { + function toMultiArray(arr) { + const inputLength = arr.length; + const out = []; + let index = 0; + + for (let i = 0; i < inputLength; i += 2) { + out[index++] = [arr[i], arr[i + 1]]; + } + + return out; + } + + function interpolate(x, xmin, xmax, ymin, ymax) { + return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); + } + + let domain = toNumberArray(dict.getArray("Domain")); + let range = toNumberArray(dict.getArray("Range")); + + if (!domain || !range) { + throw new _util.FormatError("No domain or range"); + } + + const inputSize = domain.length / 2; + const outputSize = range.length / 2; + domain = toMultiArray(domain); + range = toMultiArray(range); + const size = toNumberArray(dict.getArray("Size")); + const bps = dict.get("BitsPerSample"); + const order = dict.get("Order") || 1; + + if (order !== 1) { + (0, _util.info)("No support for cubic spline interpolation: " + order); + } + + let encode = toNumberArray(dict.getArray("Encode")); + + if (!encode) { + encode = []; + + for (let i = 0; i < inputSize; ++i) { + encode.push([0, size[i] - 1]); + } + } else { + encode = toMultiArray(encode); + } + + let decode = toNumberArray(dict.getArray("Decode")); + + if (!decode) { + decode = range; + } else { + decode = toMultiArray(decode); + } + + const samples = this.getSampleArray(size, outputSize, bps, fn); + return function constructSampledFn(src, srcOffset, dest, destOffset) { + const cubeVertices = 1 << inputSize; + const cubeN = new Float64Array(cubeVertices); + const cubeVertex = new Uint32Array(cubeVertices); + let i, j; + + for (j = 0; j < cubeVertices; j++) { + cubeN[j] = 1; + } + + let k = outputSize, + pos = 1; + + for (i = 0; i < inputSize; ++i) { + const domain_2i = domain[i][0]; + const domain_2i_1 = domain[i][1]; + const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); + let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); + const size_i = size[i]; + e = Math.min(Math.max(e, 0), size_i - 1); + const e0 = e < size_i - 1 ? Math.floor(e) : e - 1; + const n0 = e0 + 1 - e; + const n1 = e - e0; + const offset0 = e0 * k; + const offset1 = offset0 + k; + + for (j = 0; j < cubeVertices; j++) { + if (j & pos) { + cubeN[j] *= n1; + cubeVertex[j] += offset1; + } else { + cubeN[j] *= n0; + cubeVertex[j] += offset0; + } + } + + k *= size_i; + pos <<= 1; + } + + for (j = 0; j < outputSize; ++j) { + let rj = 0; + + for (i = 0; i < cubeVertices; i++) { + rj += samples[cubeVertex[i] + j] * cubeN[i]; + } + + rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); + dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); + } + }; + } + + static constructInterpolated({ + xref, + isEvalSupported, + dict + }) { + const c0 = toNumberArray(dict.getArray("C0")) || [0]; + const c1 = toNumberArray(dict.getArray("C1")) || [1]; + const n = dict.get("N"); + const diff = []; + + for (let i = 0, ii = c0.length; i < ii; ++i) { + diff.push(c1[i] - c0[i]); + } + + const length = diff.length; + return function constructInterpolatedFn(src, srcOffset, dest, destOffset) { + const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n; + + for (let j = 0; j < length; ++j) { + dest[destOffset + j] = c0[j] + x * diff[j]; + } + }; + } + + static constructStiched({ + xref, + isEvalSupported, + dict + }) { + const domain = toNumberArray(dict.getArray("Domain")); + + if (!domain) { + throw new _util.FormatError("No domain"); + } + + const inputSize = domain.length / 2; + + if (inputSize !== 1) { + throw new _util.FormatError("Bad domain for stiched function"); + } + + const fnRefs = dict.get("Functions"); + const fns = []; + + for (let i = 0, ii = fnRefs.length; i < ii; ++i) { + fns.push(this.parse({ + xref, + isEvalSupported, + fn: xref.fetchIfRef(fnRefs[i]) + })); + } + + const bounds = toNumberArray(dict.getArray("Bounds")); + const encode = toNumberArray(dict.getArray("Encode")); + const tmpBuf = new Float32Array(1); + return function constructStichedFn(src, srcOffset, dest, destOffset) { + const clip = function constructStichedFromIRClip(v, min, max) { + if (v > max) { + v = max; + } else if (v < min) { + v = min; + } + + return v; + }; + + const v = clip(src[srcOffset], domain[0], domain[1]); + const length = bounds.length; + let i; + + for (i = 0; i < length; ++i) { + if (v < bounds[i]) { + break; + } + } + + let dmin = domain[0]; + + if (i > 0) { + dmin = bounds[i - 1]; + } + + let dmax = domain[1]; + + if (i < bounds.length) { + dmax = bounds[i]; + } + + const rmin = encode[2 * i]; + const rmax = encode[2 * i + 1]; + tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); + fns[i](tmpBuf, 0, dest, destOffset); + }; + } + + static constructPostScript({ + xref, + isEvalSupported, + fn, + dict + }) { + const domain = toNumberArray(dict.getArray("Domain")); + const range = toNumberArray(dict.getArray("Range")); + + if (!domain) { + throw new _util.FormatError("No domain."); + } + + if (!range) { + throw new _util.FormatError("No range."); + } + + const lexer = new _ps_parser.PostScriptLexer(fn); + const parser = new _ps_parser.PostScriptParser(lexer); + const code = parser.parse(); + + if (isEvalSupported && _util.FeatureTest.isEvalSupported) { + const compiled = new PostScriptCompiler().compile(code, domain, range); + + if (compiled) { + return new Function("src", "srcOffset", "dest", "destOffset", compiled); + } + } + + (0, _util.info)("Unable to compile PS function"); + const numOutputs = range.length >> 1; + const numInputs = domain.length >> 1; + const evaluator = new PostScriptEvaluator(code); + const cache = Object.create(null); + const MAX_CACHE_SIZE = 2048 * 4; + let cache_available = MAX_CACHE_SIZE; + const tmpBuf = new Float32Array(numInputs); + return function constructPostScriptFn(src, srcOffset, dest, destOffset) { + let i, value; + let key = ""; + const input = tmpBuf; + + for (i = 0; i < numInputs; i++) { + value = src[srcOffset + i]; + input[i] = value; + key += value + "_"; + } + + const cachedValue = cache[key]; + + if (cachedValue !== undefined) { + dest.set(cachedValue, destOffset); + return; + } + + const output = new Float32Array(numOutputs); + const stack = evaluator.execute(input); + const stackIndex = stack.length - numOutputs; + + for (i = 0; i < numOutputs; i++) { + value = stack[stackIndex + i]; + let bound = range[i * 2]; + + if (value < bound) { + value = bound; + } else { + bound = range[i * 2 + 1]; + + if (value > bound) { + value = bound; + } + } + + output[i] = value; + } + + if (cache_available > 0) { + cache_available--; + cache[key] = output; + } + + dest.set(output, destOffset); + }; + } + +} + +function isPDFFunction(v) { + let fnDict; + + if (typeof v !== "object") { + return false; + } else if (v instanceof _primitives.Dict) { + fnDict = v; + } else if (v instanceof _base_stream.BaseStream) { + fnDict = v.dict; + } else { + return false; + } + + return fnDict.has("FunctionType"); +} + +class PostScriptStack { + static get MAX_STACK_SIZE() { + return (0, _util.shadow)(this, "MAX_STACK_SIZE", 100); + } + + constructor(initialStack) { + this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); + } + + push(value) { + if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) { + throw new Error("PostScript function stack overflow."); + } + + this.stack.push(value); + } + + pop() { + if (this.stack.length <= 0) { + throw new Error("PostScript function stack underflow."); + } + + return this.stack.pop(); + } + + copy(n) { + if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) { + throw new Error("PostScript function stack overflow."); + } + + const stack = this.stack; + + for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) { + stack.push(stack[i]); + } + } + + index(n) { + this.push(this.stack[this.stack.length - n - 1]); + } + + roll(n, p) { + const stack = this.stack; + const l = stack.length - n; + const r = stack.length - 1; + const c = l + (p - Math.floor(p / n) * n); + + for (let i = l, j = r; i < j; i++, j--) { + const t = stack[i]; + stack[i] = stack[j]; + stack[j] = t; + } + + for (let i = l, j = c - 1; i < j; i++, j--) { + const t = stack[i]; + stack[i] = stack[j]; + stack[j] = t; + } + + for (let i = c, j = r; i < j; i++, j--) { + const t = stack[i]; + stack[i] = stack[j]; + stack[j] = t; + } + } + +} + +class PostScriptEvaluator { + constructor(operators) { + this.operators = operators; + } + + execute(initialStack) { + const stack = new PostScriptStack(initialStack); + let counter = 0; + const operators = this.operators; + const length = operators.length; + let operator, a, b; + + while (counter < length) { + operator = operators[counter++]; + + if (typeof operator === "number") { + stack.push(operator); + continue; + } + + switch (operator) { + case "jz": + b = stack.pop(); + a = stack.pop(); + + if (!a) { + counter = b; + } + + break; + + case "j": + a = stack.pop(); + counter = a; + break; + + case "abs": + a = stack.pop(); + stack.push(Math.abs(a)); + break; + + case "add": + b = stack.pop(); + a = stack.pop(); + stack.push(a + b); + break; + + case "and": + b = stack.pop(); + a = stack.pop(); + + if (typeof a === "boolean" && typeof b === "boolean") { + stack.push(a && b); + } else { + stack.push(a & b); + } + + break; + + case "atan": + a = stack.pop(); + stack.push(Math.atan(a)); + break; + + case "bitshift": + b = stack.pop(); + a = stack.pop(); + + if (a > 0) { + stack.push(a << b); + } else { + stack.push(a >> b); + } + + break; + + case "ceiling": + a = stack.pop(); + stack.push(Math.ceil(a)); + break; + + case "copy": + a = stack.pop(); + stack.copy(a); + break; + + case "cos": + a = stack.pop(); + stack.push(Math.cos(a)); + break; + + case "cvi": + a = stack.pop() | 0; + stack.push(a); + break; + + case "cvr": + break; + + case "div": + b = stack.pop(); + a = stack.pop(); + stack.push(a / b); + break; + + case "dup": + stack.copy(1); + break; + + case "eq": + b = stack.pop(); + a = stack.pop(); + stack.push(a === b); + break; + + case "exch": + stack.roll(2, 1); + break; + + case "exp": + b = stack.pop(); + a = stack.pop(); + stack.push(a ** b); + break; + + case "false": + stack.push(false); + break; + + case "floor": + a = stack.pop(); + stack.push(Math.floor(a)); + break; + + case "ge": + b = stack.pop(); + a = stack.pop(); + stack.push(a >= b); + break; + + case "gt": + b = stack.pop(); + a = stack.pop(); + stack.push(a > b); + break; + + case "idiv": + b = stack.pop(); + a = stack.pop(); + stack.push(a / b | 0); + break; + + case "index": + a = stack.pop(); + stack.index(a); + break; + + case "le": + b = stack.pop(); + a = stack.pop(); + stack.push(a <= b); + break; + + case "ln": + a = stack.pop(); + stack.push(Math.log(a)); + break; + + case "log": + a = stack.pop(); + stack.push(Math.log(a) / Math.LN10); + break; + + case "lt": + b = stack.pop(); + a = stack.pop(); + stack.push(a < b); + break; + + case "mod": + b = stack.pop(); + a = stack.pop(); + stack.push(a % b); + break; + + case "mul": + b = stack.pop(); + a = stack.pop(); + stack.push(a * b); + break; + + case "ne": + b = stack.pop(); + a = stack.pop(); + stack.push(a !== b); + break; + + case "neg": + a = stack.pop(); + stack.push(-a); + break; + + case "not": + a = stack.pop(); + + if (typeof a === "boolean") { + stack.push(!a); + } else { + stack.push(~a); + } + + break; + + case "or": + b = stack.pop(); + a = stack.pop(); + + if (typeof a === "boolean" && typeof b === "boolean") { + stack.push(a || b); + } else { + stack.push(a | b); + } + + break; + + case "pop": + stack.pop(); + break; + + case "roll": + b = stack.pop(); + a = stack.pop(); + stack.roll(a, b); + break; + + case "round": + a = stack.pop(); + stack.push(Math.round(a)); + break; + + case "sin": + a = stack.pop(); + stack.push(Math.sin(a)); + break; + + case "sqrt": + a = stack.pop(); + stack.push(Math.sqrt(a)); + break; + + case "sub": + b = stack.pop(); + a = stack.pop(); + stack.push(a - b); + break; + + case "true": + stack.push(true); + break; + + case "truncate": + a = stack.pop(); + a = a < 0 ? Math.ceil(a) : Math.floor(a); + stack.push(a); + break; + + case "xor": + b = stack.pop(); + a = stack.pop(); + + if (typeof a === "boolean" && typeof b === "boolean") { + stack.push(a !== b); + } else { + stack.push(a ^ b); + } + + break; + + default: + throw new _util.FormatError(`Unknown operator ${operator}`); + } + } + + return stack.stack; + } + +} + +exports.PostScriptEvaluator = PostScriptEvaluator; + +class AstNode { + constructor(type) { + this.type = type; + } + + visit(visitor) { + (0, _util.unreachable)("abstract method"); + } + +} + +class AstArgument extends AstNode { + constructor(index, min, max) { + super("args"); + this.index = index; + this.min = min; + this.max = max; + } + + visit(visitor) { + visitor.visitArgument(this); + } + +} + +class AstLiteral extends AstNode { + constructor(number) { + super("literal"); + this.number = number; + this.min = number; + this.max = number; + } + + visit(visitor) { + visitor.visitLiteral(this); + } + +} + +class AstBinaryOperation extends AstNode { + constructor(op, arg1, arg2, min, max) { + super("binary"); + this.op = op; + this.arg1 = arg1; + this.arg2 = arg2; + this.min = min; + this.max = max; + } + + visit(visitor) { + visitor.visitBinaryOperation(this); + } + +} + +class AstMin extends AstNode { + constructor(arg, max) { + super("max"); + this.arg = arg; + this.min = arg.min; + this.max = max; + } + + visit(visitor) { + visitor.visitMin(this); + } + +} + +class AstVariable extends AstNode { + constructor(index, min, max) { + super("var"); + this.index = index; + this.min = min; + this.max = max; + } + + visit(visitor) { + visitor.visitVariable(this); + } + +} + +class AstVariableDefinition extends AstNode { + constructor(variable, arg) { + super("definition"); + this.variable = variable; + this.arg = arg; + } + + visit(visitor) { + visitor.visitVariableDefinition(this); + } + +} + +class ExpressionBuilderVisitor { + constructor() { + this.parts = []; + } + + visitArgument(arg) { + this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))"); + } + + visitVariable(variable) { + this.parts.push("v", variable.index); + } + + visitLiteral(literal) { + this.parts.push(literal.number); + } + + visitBinaryOperation(operation) { + this.parts.push("("); + operation.arg1.visit(this); + this.parts.push(" ", operation.op, " "); + operation.arg2.visit(this); + this.parts.push(")"); + } + + visitVariableDefinition(definition) { + this.parts.push("var "); + definition.variable.visit(this); + this.parts.push(" = "); + definition.arg.visit(this); + this.parts.push(";"); + } + + visitMin(max) { + this.parts.push("Math.min("); + max.arg.visit(this); + this.parts.push(", ", max.max, ")"); + } + + toString() { + return this.parts.join(""); + } + +} + +function buildAddOperation(num1, num2) { + if (num2.type === "literal" && num2.number === 0) { + return num1; + } + + if (num1.type === "literal" && num1.number === 0) { + return num2; + } + + if (num2.type === "literal" && num1.type === "literal") { + return new AstLiteral(num1.number + num2.number); + } + + return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max); +} + +function buildMulOperation(num1, num2) { + if (num2.type === "literal") { + if (num2.number === 0) { + return new AstLiteral(0); + } else if (num2.number === 1) { + return num1; + } else if (num1.type === "literal") { + return new AstLiteral(num1.number * num2.number); + } + } + + if (num1.type === "literal") { + if (num1.number === 0) { + return new AstLiteral(0); + } else if (num1.number === 1) { + return num2; + } + } + + const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); + const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); + return new AstBinaryOperation("*", num1, num2, min, max); +} + +function buildSubOperation(num1, num2) { + if (num2.type === "literal") { + if (num2.number === 0) { + return num1; + } else if (num1.type === "literal") { + return new AstLiteral(num1.number - num2.number); + } + } + + if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) { + return num2.arg2; + } + + return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min); +} + +function buildMinOperation(num1, max) { + if (num1.min >= max) { + return new AstLiteral(max); + } else if (num1.max <= max) { + return num1; + } + + return new AstMin(num1, max); +} + +class PostScriptCompiler { + compile(code, domain, range) { + const stack = []; + const instructions = []; + const inputSize = domain.length >> 1, + outputSize = range.length >> 1; + let lastRegister = 0; + let n, j; + let num1, num2, ast1, ast2, tmpVar, item; + + for (let i = 0; i < inputSize; i++) { + stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); + } + + for (let i = 0, ii = code.length; i < ii; i++) { + item = code[i]; + + if (typeof item === "number") { + stack.push(new AstLiteral(item)); + continue; + } + + switch (item) { + case "add": + if (stack.length < 2) { + return null; + } + + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildAddOperation(num1, num2)); + break; + + case "cvr": + if (stack.length < 1) { + return null; + } + + break; + + case "mul": + if (stack.length < 2) { + return null; + } + + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildMulOperation(num1, num2)); + break; + + case "sub": + if (stack.length < 2) { + return null; + } + + num2 = stack.pop(); + num1 = stack.pop(); + stack.push(buildSubOperation(num1, num2)); + break; + + case "exch": + if (stack.length < 2) { + return null; + } + + ast1 = stack.pop(); + ast2 = stack.pop(); + stack.push(ast1, ast2); + break; + + case "pop": + if (stack.length < 1) { + return null; + } + + stack.pop(); + break; + + case "index": + if (stack.length < 1) { + return null; + } + + num1 = stack.pop(); + + if (num1.type !== "literal") { + return null; + } + + n = num1.number; + + if (n < 0 || !Number.isInteger(n) || stack.length < n) { + return null; + } + + ast1 = stack[stack.length - n - 1]; + + if (ast1.type === "literal" || ast1.type === "var") { + stack.push(ast1); + break; + } + + tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); + stack[stack.length - n - 1] = tmpVar; + stack.push(tmpVar); + instructions.push(new AstVariableDefinition(tmpVar, ast1)); + break; + + case "dup": + if (stack.length < 1) { + return null; + } + + if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) { + num1 = stack.pop(); + stack.push(buildMinOperation(num1, code[i + 1])); + i += 6; + break; + } + + ast1 = stack.at(-1); + + if (ast1.type === "literal" || ast1.type === "var") { + stack.push(ast1); + break; + } + + tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); + stack[stack.length - 1] = tmpVar; + stack.push(tmpVar); + instructions.push(new AstVariableDefinition(tmpVar, ast1)); + break; + + case "roll": + if (stack.length < 2) { + return null; + } + + num2 = stack.pop(); + num1 = stack.pop(); + + if (num2.type !== "literal" || num1.type !== "literal") { + return null; + } + + j = num2.number; + n = num1.number; + + if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { + return null; + } + + j = (j % n + n) % n; + + if (j === 0) { + break; + } + + Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); + break; + + default: + return null; + } + } + + if (stack.length !== outputSize) { + return null; + } + + const result = []; + + for (const instruction of instructions) { + const statementBuilder = new ExpressionBuilderVisitor(); + instruction.visit(statementBuilder); + result.push(statementBuilder.toString()); + } + + for (let i = 0, ii = stack.length; i < ii; i++) { + const expr = stack[i], + statementBuilder = new ExpressionBuilderVisitor(); + expr.visit(statementBuilder); + const min = range[i * 2], + max = range[i * 2 + 1]; + const out = [statementBuilder.toString()]; + + if (min > expr.min) { + out.unshift("Math.max(", min, ", "); + out.push(")"); + } + + if (max < expr.max) { + out.unshift("Math.min(", max, ", "); + out.push(")"); + } + + out.unshift("dest[destOffset + ", i, "] = "); + out.push(";"); + result.push(out.join("")); + } + + return result.join("\n"); + } + +} + +exports.PostScriptCompiler = PostScriptCompiler; + +/***/ }), +/* 58 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PostScriptParser = exports.PostScriptLexer = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _core_utils = __w_pdfjs_require__(6); + +class PostScriptParser { + constructor(lexer) { + this.lexer = lexer; + this.operators = []; + this.token = null; + this.prev = null; + } + + nextToken() { + this.prev = this.token; + this.token = this.lexer.getToken(); + } + + accept(type) { + if (this.token.type === type) { + this.nextToken(); + return true; + } + + return false; + } + + expect(type) { + if (this.accept(type)) { + return true; + } + + throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`); + } + + parse() { + this.nextToken(); + this.expect(PostScriptTokenTypes.LBRACE); + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + return this.operators; + } + + parseBlock() { + while (true) { + if (this.accept(PostScriptTokenTypes.NUMBER)) { + this.operators.push(this.prev.value); + } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { + this.operators.push(this.prev.value); + } else if (this.accept(PostScriptTokenTypes.LBRACE)) { + this.parseCondition(); + } else { + return; + } + } + } + + parseCondition() { + const conditionLocation = this.operators.length; + this.operators.push(null, null); + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + + if (this.accept(PostScriptTokenTypes.IF)) { + this.operators[conditionLocation] = this.operators.length; + this.operators[conditionLocation + 1] = "jz"; + } else if (this.accept(PostScriptTokenTypes.LBRACE)) { + const jumpLocation = this.operators.length; + this.operators.push(null, null); + const endOfTrue = this.operators.length; + this.parseBlock(); + this.expect(PostScriptTokenTypes.RBRACE); + this.expect(PostScriptTokenTypes.IFELSE); + this.operators[jumpLocation] = this.operators.length; + this.operators[jumpLocation + 1] = "j"; + this.operators[conditionLocation] = endOfTrue; + this.operators[conditionLocation + 1] = "jz"; + } else { + throw new _util.FormatError("PS Function: error parsing conditional."); + } + } + +} + +exports.PostScriptParser = PostScriptParser; +const PostScriptTokenTypes = { + LBRACE: 0, + RBRACE: 1, + NUMBER: 2, + OPERATOR: 3, + IF: 4, + IFELSE: 5 +}; + +class PostScriptToken { + static get opCache() { + return (0, _util.shadow)(this, "opCache", Object.create(null)); + } + + constructor(type, value) { + this.type = type; + this.value = value; + } + + static getOperator(op) { + const opValue = PostScriptToken.opCache[op]; + + if (opValue) { + return opValue; + } + + return PostScriptToken.opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); + } + + static get LBRACE() { + return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{")); + } + + static get RBRACE() { + return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}")); + } + + static get IF() { + return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF")); + } + + static get IFELSE() { + return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE")); + } + +} + +class PostScriptLexer { + constructor(stream) { + this.stream = stream; + this.nextChar(); + this.strBuf = []; + } + + nextChar() { + return this.currentChar = this.stream.getByte(); + } + + getToken() { + let comment = false; + let ch = this.currentChar; + + while (true) { + if (ch < 0) { + return _primitives.EOF; + } + + if (comment) { + if (ch === 0x0a || ch === 0x0d) { + comment = false; + } + } else if (ch === 0x25) { + comment = true; + } else if (!(0, _core_utils.isWhiteSpace)(ch)) { + break; + } + + ch = this.nextChar(); + } + + switch (ch | 0) { + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x2b: + case 0x2d: + case 0x2e: + return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); + + case 0x7b: + this.nextChar(); + return PostScriptToken.LBRACE; + + case 0x7d: + this.nextChar(); + return PostScriptToken.RBRACE; + } + + const strBuf = this.strBuf; + strBuf.length = 0; + strBuf[0] = String.fromCharCode(ch); + + while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) { + strBuf.push(String.fromCharCode(ch)); + } + + const str = strBuf.join(""); + + switch (str.toLowerCase()) { + case "if": + return PostScriptToken.IF; + + case "ifelse": + return PostScriptToken.IFELSE; + + default: + return PostScriptToken.getOperator(str); + } + } + + getNumber() { + let ch = this.currentChar; + const strBuf = this.strBuf; + strBuf.length = 0; + strBuf[0] = String.fromCharCode(ch); + + while ((ch = this.nextChar()) >= 0) { + if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) { + strBuf.push(String.fromCharCode(ch)); + } else { + break; + } + } + + const value = parseFloat(strBuf.join("")); + + if (isNaN(value)) { + throw new _util.FormatError(`Invalid floating point number: ${value}`); + } + + return value; + } + +} + +exports.PostScriptLexer = PostScriptLexer; + +/***/ }), +/* 59 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +class BaseLocalCache { + constructor(options) { + if (this.constructor === BaseLocalCache) { + (0, _util.unreachable)("Cannot initialize BaseLocalCache."); + } + + this._onlyRefs = (options && options.onlyRefs) === true; + + if (!this._onlyRefs) { + this._nameRefMap = new Map(); + this._imageMap = new Map(); + } + + this._imageCache = new _primitives.RefSetCache(); + } + + getByName(name) { + if (this._onlyRefs) { + (0, _util.unreachable)("Should not call `getByName` method."); + } + + const ref = this._nameRefMap.get(name); + + if (ref) { + return this.getByRef(ref); + } + + return this._imageMap.get(name) || null; + } + + getByRef(ref) { + return this._imageCache.get(ref) || null; + } + + set(name, ref, data) { + (0, _util.unreachable)("Abstract method `set` called."); + } + +} + +class LocalImageCache extends BaseLocalCache { + set(name, ref = null, data) { + if (typeof name !== "string") { + throw new Error('LocalImageCache.set - expected "name" argument.'); + } + + if (ref) { + if (this._imageCache.has(ref)) { + return; + } + + this._nameRefMap.set(name, ref); + + this._imageCache.put(ref, data); + + return; + } + + if (this._imageMap.has(name)) { + return; + } + + this._imageMap.set(name, data); + } + +} + +exports.LocalImageCache = LocalImageCache; + +class LocalColorSpaceCache extends BaseLocalCache { + set(name = null, ref = null, data) { + if (typeof name !== "string" && !ref) { + throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'); + } + + if (ref) { + if (this._imageCache.has(ref)) { + return; + } + + if (name !== null) { + this._nameRefMap.set(name, ref); + } + + this._imageCache.put(ref, data); + + return; + } + + if (this._imageMap.has(name)) { + return; + } + + this._imageMap.set(name, data); + } + +} + +exports.LocalColorSpaceCache = LocalColorSpaceCache; + +class LocalFunctionCache extends BaseLocalCache { + constructor(options) { + super({ + onlyRefs: true + }); + } + + set(name = null, ref, data) { + if (!ref) { + throw new Error('LocalFunctionCache.set - expected "ref" argument.'); + } + + if (this._imageCache.has(ref)) { + return; + } + + this._imageCache.put(ref, data); + } + +} + +exports.LocalFunctionCache = LocalFunctionCache; + +class LocalGStateCache extends BaseLocalCache { + set(name, ref = null, data) { + if (typeof name !== "string") { + throw new Error('LocalGStateCache.set - expected "name" argument.'); + } + + if (ref) { + if (this._imageCache.has(ref)) { + return; + } + + this._nameRefMap.set(name, ref); + + this._imageCache.put(ref, data); + + return; + } + + if (this._imageMap.has(name)) { + return; + } + + this._imageMap.set(name, data); + } + +} + +exports.LocalGStateCache = LocalGStateCache; + +class LocalTilingPatternCache extends BaseLocalCache { + constructor(options) { + super({ + onlyRefs: true + }); + } + + set(name = null, ref, data) { + if (!ref) { + throw new Error('LocalTilingPatternCache.set - expected "ref" argument.'); + } + + if (this._imageCache.has(ref)) { + return; + } + + this._imageCache.put(ref, data); + } + +} + +exports.LocalTilingPatternCache = LocalTilingPatternCache; + +class GlobalImageCache { + static get NUM_PAGES_THRESHOLD() { + return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2); + } + + static get MIN_IMAGES_TO_CACHE() { + return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10); + } + + static get MAX_BYTE_SIZE() { + return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6); + } + + constructor() { + this._refCache = new _primitives.RefSetCache(); + this._imageCache = new _primitives.RefSetCache(); + } + + get _byteSize() { + let byteSize = 0; + + for (const imageData of this._imageCache) { + byteSize += imageData.byteSize; + } + + return byteSize; + } + + get _cacheLimitReached() { + if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) { + return false; + } + + if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) { + return false; + } + + return true; + } + + shouldCache(ref, pageIndex) { + const pageIndexSet = this._refCache.get(ref); + + const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1; + + if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) { + return false; + } + + if (!this._imageCache.has(ref) && this._cacheLimitReached) { + return false; + } + + return true; + } + + addPageIndex(ref, pageIndex) { + let pageIndexSet = this._refCache.get(ref); + + if (!pageIndexSet) { + pageIndexSet = new Set(); + + this._refCache.put(ref, pageIndexSet); + } + + pageIndexSet.add(pageIndex); + } + + addByteSize(ref, byteSize) { + const imageData = this._imageCache.get(ref); + + if (!imageData) { + return; + } + + if (imageData.byteSize) { + return; + } + + imageData.byteSize = byteSize; + } + + getData(ref, pageIndex) { + const pageIndexSet = this._refCache.get(ref); + + if (!pageIndexSet) { + return null; + } + + if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { + return null; + } + + const imageData = this._imageCache.get(ref); + + if (!imageData) { + return null; + } + + pageIndexSet.add(pageIndex); + return imageData; + } + + setData(ref, data) { + if (!this._refCache.has(ref)) { + throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.'); + } + + if (this._imageCache.has(ref)) { + return; + } + + if (this._cacheLimitReached) { + (0, _util.warn)("GlobalImageCache.setData - cache limit reached."); + return; + } + + this._imageCache.put(ref, data); + } + + clear(onlyData = false) { + if (!onlyData) { + this._refCache.clear(); + } + + this._imageCache.clear(); + } + +} + +exports.GlobalImageCache = GlobalImageCache; + +/***/ }), +/* 60 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.bidi = bidi; + +var _util = __w_pdfjs_require__(2); + +const baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"]; +const arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; + +function isOdd(i) { + return (i & 1) !== 0; +} + +function isEven(i) { + return (i & 1) === 0; +} + +function findUnequal(arr, start, value) { + let j, jj; + + for (j = start, jj = arr.length; j < jj; ++j) { + if (arr[j] !== value) { + return j; + } + } + + return j; +} + +function setValues(arr, start, end, value) { + for (let j = start; j < end; ++j) { + arr[j] = value; + } +} + +function reverseValues(arr, start, end) { + for (let i = start, j = end - 1; i < j; ++i, --j) { + const temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } +} + +function createBidiText(str, isLTR, vertical = false) { + let dir = "ltr"; + + if (vertical) { + dir = "ttb"; + } else if (!isLTR) { + dir = "rtl"; + } + + return { + str, + dir + }; +} + +const chars = []; +const types = []; + +function bidi(str, startLevel = -1, vertical = false) { + let isLTR = true; + const strLength = str.length; + + if (strLength === 0 || vertical) { + return createBidiText(str, isLTR, vertical); + } + + chars.length = strLength; + types.length = strLength; + let numBidi = 0; + let i, ii; + + for (i = 0; i < strLength; ++i) { + chars[i] = str.charAt(i); + const charCode = str.charCodeAt(i); + let charType = "L"; + + if (charCode <= 0x00ff) { + charType = baseTypes[charCode]; + } else if (0x0590 <= charCode && charCode <= 0x05f4) { + charType = "R"; + } else if (0x0600 <= charCode && charCode <= 0x06ff) { + charType = arabicTypes[charCode & 0xff]; + + if (!charType) { + (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16)); + } + } else if (0x0700 <= charCode && charCode <= 0x08ac) { + charType = "AL"; + } + + if (charType === "R" || charType === "AL" || charType === "AN") { + numBidi++; + } + + types[i] = charType; + } + + if (numBidi === 0) { + isLTR = true; + return createBidiText(str, isLTR); + } + + if (startLevel === -1) { + if (numBidi / strLength < 0.3 && strLength > 4) { + isLTR = true; + startLevel = 0; + } else { + isLTR = false; + startLevel = 1; + } + } + + const levels = []; + + for (i = 0; i < strLength; ++i) { + levels[i] = startLevel; + } + + const e = isOdd(startLevel) ? "R" : "L"; + const sor = e; + const eor = sor; + let lastType = sor; + + for (i = 0; i < strLength; ++i) { + if (types[i] === "NSM") { + types[i] = lastType; + } else { + lastType = types[i]; + } + } + + lastType = sor; + let t; + + for (i = 0; i < strLength; ++i) { + t = types[i]; + + if (t === "EN") { + types[i] = lastType === "AL" ? "AN" : "EN"; + } else if (t === "R" || t === "L" || t === "AL") { + lastType = t; + } + } + + for (i = 0; i < strLength; ++i) { + t = types[i]; + + if (t === "AL") { + types[i] = "R"; + } + } + + for (i = 1; i < strLength - 1; ++i) { + if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") { + types[i] = "EN"; + } + + if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) { + types[i] = types[i - 1]; + } + } + + for (i = 0; i < strLength; ++i) { + if (types[i] === "EN") { + for (let j = i - 1; j >= 0; --j) { + if (types[j] !== "ET") { + break; + } + + types[j] = "EN"; + } + + for (let j = i + 1; j < strLength; ++j) { + if (types[j] !== "ET") { + break; + } + + types[j] = "EN"; + } + } + } + + for (i = 0; i < strLength; ++i) { + t = types[i]; + + if (t === "WS" || t === "ES" || t === "ET" || t === "CS") { + types[i] = "ON"; + } + } + + lastType = sor; + + for (i = 0; i < strLength; ++i) { + t = types[i]; + + if (t === "EN") { + types[i] = lastType === "L" ? "L" : "EN"; + } else if (t === "R" || t === "L") { + lastType = t; + } + } + + for (i = 0; i < strLength; ++i) { + if (types[i] === "ON") { + const end = findUnequal(types, i + 1, "ON"); + let before = sor; + + if (i > 0) { + before = types[i - 1]; + } + + let after = eor; + + if (end + 1 < strLength) { + after = types[end + 1]; + } + + if (before !== "L") { + before = "R"; + } + + if (after !== "L") { + after = "R"; + } + + if (before === after) { + setValues(types, i, end, before); + } + + i = end - 1; + } + } + + for (i = 0; i < strLength; ++i) { + if (types[i] === "ON") { + types[i] = e; + } + } + + for (i = 0; i < strLength; ++i) { + t = types[i]; + + if (isEven(levels[i])) { + if (t === "R") { + levels[i] += 1; + } else if (t === "AN" || t === "EN") { + levels[i] += 2; + } + } else { + if (t === "L" || t === "AN" || t === "EN") { + levels[i] += 1; + } + } + } + + let highestLevel = -1; + let lowestOddLevel = 99; + let level; + + for (i = 0, ii = levels.length; i < ii; ++i) { + level = levels[i]; + + if (highestLevel < level) { + highestLevel = level; + } + + if (lowestOddLevel > level && isOdd(level)) { + lowestOddLevel = level; + } + } + + for (level = highestLevel; level >= lowestOddLevel; --level) { + let start = -1; + + for (i = 0, ii = levels.length; i < ii; ++i) { + if (levels[i] < level) { + if (start >= 0) { + reverseValues(chars, start, i); + start = -1; + } + } else if (start < 0) { + start = i; + } + } + + if (start >= 0) { + reverseValues(chars, start, levels.length); + } + } + + for (i = 0, ii = chars.length; i < ii; ++i) { + const ch = chars[i]; + + if (ch === "<" || ch === ">") { + chars[i] = ""; + } + } + + return createBidiText(chars.join(""), isLTR); +} + +/***/ }), +/* 61 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MurmurHash3_64 = void 0; + +var _util = __w_pdfjs_require__(2); + +const SEED = 0xc3d2e1f0; +const MASK_HIGH = 0xffff0000; +const MASK_LOW = 0xffff; + +class MurmurHash3_64 { + constructor(seed) { + this.h1 = seed ? seed & 0xffffffff : SEED; + this.h2 = seed ? seed & 0xffffffff : SEED; + } + + update(input) { + let data, length; + + if (typeof input === "string") { + data = new Uint8Array(input.length * 2); + length = 0; + + for (let i = 0, ii = input.length; i < ii; i++) { + const code = input.charCodeAt(i); + + if (code <= 0xff) { + data[length++] = code; + } else { + data[length++] = code >>> 8; + data[length++] = code & 0xff; + } + } + } else if ((0, _util.isArrayBuffer)(input)) { + data = input.slice(); + length = data.byteLength; + } else { + throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); + } + + const blockCounts = length >> 2; + const tailLength = length - blockCounts * 4; + const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); + let k1 = 0, + k2 = 0; + let h1 = this.h1, + h2 = this.h2; + const C1 = 0xcc9e2d51, + C2 = 0x1b873593; + const C1_LOW = C1 & MASK_LOW, + C2_LOW = C2 & MASK_LOW; + + for (let i = 0; i < blockCounts; i++) { + if (i & 1) { + k1 = dataUint32[i]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; + h1 = h1 * 5 + 0xe6546b64; + } else { + k2 = dataUint32[i]; + k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; + k2 = k2 << 15 | k2 >>> 17; + k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; + h2 ^= k2; + h2 = h2 << 13 | h2 >>> 19; + h2 = h2 * 5 + 0xe6546b64; + } + } + + k1 = 0; + + switch (tailLength) { + case 3: + k1 ^= data[blockCounts * 4 + 2] << 16; + + case 2: + k1 ^= data[blockCounts * 4 + 1] << 8; + + case 1: + k1 ^= data[blockCounts * 4]; + k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; + k1 = k1 << 15 | k1 >>> 17; + k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; + + if (blockCounts & 1) { + h1 ^= k1; + } else { + h2 ^= k1; + } + + } + + this.h1 = h1; + this.h2 = h2; + } + + hexdigest() { + let h1 = this.h1, + h2 = this.h2; + h1 ^= h2 >>> 1; + h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; + h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; + h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; + h1 ^= h2 >>> 1; + const hex1 = (h1 >>> 0).toString(16), + hex2 = (h2 >>> 0).toString(16); + return hex1.padStart(8, "0") + hex2.padStart(8, "0"); + } + +} + +exports.MurmurHash3_64 = MurmurHash3_64; + +/***/ }), +/* 62 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.OperatorList = void 0; + +var _util = __w_pdfjs_require__(2); + +function addState(parentState, pattern, checkFn, iterateFn, processFn) { + let state = parentState; + + for (let i = 0, ii = pattern.length - 1; i < ii; i++) { + const item = pattern[i]; + state = state[item] || (state[item] = []); + } + + state[pattern.at(-1)] = { + checkFn, + iterateFn, + processFn + }; +} + +const InitialState = []; +addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { + const fnArray = context.fnArray; + const iFirstSave = context.iCurr - 3; + const pos = (i - iFirstSave) % 4; + + switch (pos) { + case 0: + return fnArray[i] === _util.OPS.save; + + case 1: + return fnArray[i] === _util.OPS.transform; + + case 2: + return fnArray[i] === _util.OPS.paintInlineImageXObject; + + case 3: + return fnArray[i] === _util.OPS.restore; + } + + throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`); +}, function foundInlineImageGroup(context, i) { + const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; + const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; + const MAX_WIDTH = 1000; + const IMAGE_PADDING = 1; + const fnArray = context.fnArray, + argsArray = context.argsArray; + const curr = context.iCurr; + const iFirstSave = curr - 3; + const iFirstTransform = curr - 2; + const iFirstPIIXO = curr - 1; + const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); + + if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { + return i - (i - iFirstSave) % 4; + } + + let maxX = 0; + const map = []; + let maxLineHeight = 0; + let currentX = IMAGE_PADDING, + currentY = IMAGE_PADDING; + + for (let q = 0; q < count; q++) { + const transform = argsArray[iFirstTransform + (q << 2)]; + const img = argsArray[iFirstPIIXO + (q << 2)][0]; + + if (currentX + img.width > MAX_WIDTH) { + maxX = Math.max(maxX, currentX); + currentY += maxLineHeight + 2 * IMAGE_PADDING; + currentX = 0; + maxLineHeight = 0; + } + + map.push({ + transform, + x: currentX, + y: currentY, + w: img.width, + h: img.height + }); + currentX += img.width + 2 * IMAGE_PADDING; + maxLineHeight = Math.max(maxLineHeight, img.height); + } + + const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; + const imgHeight = currentY + maxLineHeight + IMAGE_PADDING; + const imgData = new Uint8Array(imgWidth * imgHeight * 4); + const imgRowSize = imgWidth << 2; + + for (let q = 0; q < count; q++) { + const data = argsArray[iFirstPIIXO + (q << 2)][0].data; + const rowSize = map[q].w << 2; + let dataOffset = 0; + let offset = map[q].x + map[q].y * imgWidth << 2; + imgData.set(data.subarray(0, rowSize), offset - imgRowSize); + + for (let k = 0, kk = map[q].h; k < kk; k++) { + imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); + dataOffset += rowSize; + offset += imgRowSize; + } + + imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); + + while (offset >= 0) { + data[offset - 4] = data[offset]; + data[offset - 3] = data[offset + 1]; + data[offset - 2] = data[offset + 2]; + data[offset - 1] = data[offset + 3]; + data[offset + rowSize] = data[offset + rowSize - 4]; + data[offset + rowSize + 1] = data[offset + rowSize - 3]; + data[offset + rowSize + 2] = data[offset + rowSize - 2]; + data[offset + rowSize + 3] = data[offset + rowSize - 1]; + offset -= imgRowSize; + } + } + + fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); + argsArray.splice(iFirstSave, count * 4, [{ + width: imgWidth, + height: imgHeight, + kind: _util.ImageKind.RGBA_32BPP, + data: imgData + }, map]); + return iFirstSave + 1; +}); +addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { + const fnArray = context.fnArray; + const iFirstSave = context.iCurr - 3; + const pos = (i - iFirstSave) % 4; + + switch (pos) { + case 0: + return fnArray[i] === _util.OPS.save; + + case 1: + return fnArray[i] === _util.OPS.transform; + + case 2: + return fnArray[i] === _util.OPS.paintImageMaskXObject; + + case 3: + return fnArray[i] === _util.OPS.restore; + } + + throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`); +}, function foundImageMaskGroup(context, i) { + const MIN_IMAGES_IN_MASKS_BLOCK = 10; + const MAX_IMAGES_IN_MASKS_BLOCK = 100; + const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; + const fnArray = context.fnArray, + argsArray = context.argsArray; + const curr = context.iCurr; + const iFirstSave = curr - 3; + const iFirstTransform = curr - 2; + const iFirstPIMXO = curr - 1; + let count = Math.floor((i - iFirstSave) / 4); + + if (count < MIN_IMAGES_IN_MASKS_BLOCK) { + return i - (i - iFirstSave) % 4; + } + + let isSameImage = false; + let iTransform, transformArgs; + const firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; + const firstTransformArg0 = argsArray[iFirstTransform][0], + firstTransformArg1 = argsArray[iFirstTransform][1], + firstTransformArg2 = argsArray[iFirstTransform][2], + firstTransformArg3 = argsArray[iFirstTransform][3]; + + if (firstTransformArg1 === firstTransformArg2) { + isSameImage = true; + iTransform = iFirstTransform + 4; + let iPIMXO = iFirstPIMXO + 4; + + for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { + transformArgs = argsArray[iTransform]; + + if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) { + if (q < MIN_IMAGES_IN_MASKS_BLOCK) { + isSameImage = false; + } else { + count = q; + } + + break; + } + } + } + + if (isSameImage) { + count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); + const positions = new Float32Array(count * 2); + iTransform = iFirstTransform; + + for (let q = 0; q < count; q++, iTransform += 4) { + transformArgs = argsArray[iTransform]; + positions[q << 1] = transformArgs[4]; + positions[(q << 1) + 1] = transformArgs[5]; + } + + fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); + argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]); + } else { + count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); + const images = []; + + for (let q = 0; q < count; q++) { + transformArgs = argsArray[iFirstTransform + (q << 2)]; + const maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; + images.push({ + data: maskParams.data, + width: maskParams.width, + height: maskParams.height, + interpolate: maskParams.interpolate, + count: maskParams.count, + transform: transformArgs + }); + } + + fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); + argsArray.splice(iFirstSave, count * 4, [images]); + } + + return iFirstSave + 1; +}); +addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { + const argsArray = context.argsArray; + const iFirstTransform = context.iCurr - 2; + return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; +}, function iterateImageGroup(context, i) { + const fnArray = context.fnArray, + argsArray = context.argsArray; + const iFirstSave = context.iCurr - 3; + const pos = (i - iFirstSave) % 4; + + switch (pos) { + case 0: + return fnArray[i] === _util.OPS.save; + + case 1: + if (fnArray[i] !== _util.OPS.transform) { + return false; + } + + const iFirstTransform = context.iCurr - 2; + const firstTransformArg0 = argsArray[iFirstTransform][0]; + const firstTransformArg3 = argsArray[iFirstTransform][3]; + + if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { + return false; + } + + return true; + + case 2: + if (fnArray[i] !== _util.OPS.paintImageXObject) { + return false; + } + + const iFirstPIXO = context.iCurr - 1; + const firstPIXOArg0 = argsArray[iFirstPIXO][0]; + + if (argsArray[i][0] !== firstPIXOArg0) { + return false; + } + + return true; + + case 3: + return fnArray[i] === _util.OPS.restore; + } + + throw new Error(`iterateImageGroup - invalid pos: ${pos}`); +}, function (context, i) { + const MIN_IMAGES_IN_BLOCK = 3; + const MAX_IMAGES_IN_BLOCK = 1000; + const fnArray = context.fnArray, + argsArray = context.argsArray; + const curr = context.iCurr; + const iFirstSave = curr - 3; + const iFirstTransform = curr - 2; + const iFirstPIXO = curr - 1; + const firstPIXOArg0 = argsArray[iFirstPIXO][0]; + const firstTransformArg0 = argsArray[iFirstTransform][0]; + const firstTransformArg3 = argsArray[iFirstTransform][3]; + const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); + + if (count < MIN_IMAGES_IN_BLOCK) { + return i - (i - iFirstSave) % 4; + } + + const positions = new Float32Array(count * 2); + let iTransform = iFirstTransform; + + for (let q = 0; q < count; q++, iTransform += 4) { + const transformArgs = argsArray[iTransform]; + positions[q << 1] = transformArgs[4]; + positions[(q << 1) + 1] = transformArgs[5]; + } + + const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; + fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); + argsArray.splice(iFirstSave, count * 4, args); + return iFirstSave + 1; +}); +addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) { + const fnArray = context.fnArray, + argsArray = context.argsArray; + const iFirstSave = context.iCurr - 4; + const pos = (i - iFirstSave) % 5; + + switch (pos) { + case 0: + return fnArray[i] === _util.OPS.beginText; + + case 1: + return fnArray[i] === _util.OPS.setFont; + + case 2: + return fnArray[i] === _util.OPS.setTextMatrix; + + case 3: + if (fnArray[i] !== _util.OPS.showText) { + return false; + } + + const iFirstSetFont = context.iCurr - 3; + const firstSetFontArg0 = argsArray[iFirstSetFont][0]; + const firstSetFontArg1 = argsArray[iFirstSetFont][1]; + + if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { + return false; + } + + return true; + + case 4: + return fnArray[i] === _util.OPS.endText; + } + + throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`); +}, function (context, i) { + const MIN_CHARS_IN_BLOCK = 3; + const MAX_CHARS_IN_BLOCK = 1000; + const fnArray = context.fnArray, + argsArray = context.argsArray; + const curr = context.iCurr; + const iFirstBeginText = curr - 4; + const iFirstSetFont = curr - 3; + const iFirstSetTextMatrix = curr - 2; + const iFirstShowText = curr - 1; + const iFirstEndText = curr; + const firstSetFontArg0 = argsArray[iFirstSetFont][0]; + const firstSetFontArg1 = argsArray[iFirstSetFont][1]; + let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); + + if (count < MIN_CHARS_IN_BLOCK) { + return i - (i - iFirstBeginText) % 5; + } + + let iFirst = iFirstBeginText; + + if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { + count++; + iFirst -= 5; + } + + let iEndText = iFirst + 4; + + for (let q = 1; q < count; q++) { + fnArray.splice(iEndText, 3); + argsArray.splice(iEndText, 3); + iEndText += 2; + } + + return iEndText + 1; +}); + +class NullOptimizer { + constructor(queue) { + this.queue = queue; + } + + _optimize() {} + + push(fn, args) { + this.queue.fnArray.push(fn); + this.queue.argsArray.push(args); + + this._optimize(); + } + + flush() {} + + reset() {} + +} + +class QueueOptimizer extends NullOptimizer { + constructor(queue) { + super(queue); + this.state = null; + this.context = { + iCurr: 0, + fnArray: queue.fnArray, + argsArray: queue.argsArray + }; + this.match = null; + this.lastProcessed = 0; + } + + _optimize() { + const fnArray = this.queue.fnArray; + let i = this.lastProcessed, + ii = fnArray.length; + let state = this.state; + let match = this.match; + + if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { + this.lastProcessed = ii; + return; + } + + const context = this.context; + + while (i < ii) { + if (match) { + const iterate = (0, match.iterateFn)(context, i); + + if (iterate) { + i++; + continue; + } + + i = (0, match.processFn)(context, i + 1); + ii = fnArray.length; + match = null; + state = null; + + if (i >= ii) { + break; + } + } + + state = (state || InitialState)[fnArray[i]]; + + if (!state || Array.isArray(state)) { + i++; + continue; + } + + context.iCurr = i; + i++; + + if (state.checkFn && !(0, state.checkFn)(context)) { + state = null; + continue; + } + + match = state; + state = null; + } + + this.state = state; + this.match = match; + this.lastProcessed = i; + } + + flush() { + while (this.match) { + const length = this.queue.fnArray.length; + this.lastProcessed = (0, this.match.processFn)(this.context, length); + this.match = null; + this.state = null; + + this._optimize(); + } + } + + reset() { + this.state = null; + this.match = null; + this.lastProcessed = 0; + } + +} + +class OperatorList { + static get CHUNK_SIZE() { + return (0, _util.shadow)(this, "CHUNK_SIZE", 1000); + } + + static get CHUNK_SIZE_ABOUT() { + return (0, _util.shadow)(this, "CHUNK_SIZE_ABOUT", this.CHUNK_SIZE - 5); + } + + constructor(intent = 0, streamSink) { + this._streamSink = streamSink; + this.fnArray = []; + this.argsArray = []; + + if (streamSink && !(intent & _util.RenderingIntentFlag.OPLIST)) { + this.optimizer = new QueueOptimizer(this); + } else { + this.optimizer = new NullOptimizer(this); + } + + this.dependencies = new Set(); + this._totalLength = 0; + this.weight = 0; + this._resolved = streamSink ? null : Promise.resolve(); + } + + get length() { + return this.argsArray.length; + } + + get ready() { + return this._resolved || this._streamSink.ready; + } + + get totalLength() { + return this._totalLength + this.length; + } + + addOp(fn, args) { + this.optimizer.push(fn, args); + this.weight++; + + if (this._streamSink) { + if (this.weight >= OperatorList.CHUNK_SIZE) { + this.flush(); + } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { + this.flush(); + } + } + } + + addImageOps(fn, args, optionalContent) { + if (optionalContent !== undefined) { + this.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); + } + + this.addOp(fn, args); + + if (optionalContent !== undefined) { + this.addOp(_util.OPS.endMarkedContent, []); + } + } + + addDependency(dependency) { + if (this.dependencies.has(dependency)) { + return; + } + + this.dependencies.add(dependency); + this.addOp(_util.OPS.dependency, [dependency]); + } + + addDependencies(dependencies) { + for (const dependency of dependencies) { + this.addDependency(dependency); + } + } + + addOpList(opList) { + if (!(opList instanceof OperatorList)) { + (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.'); + return; + } + + for (const dependency of opList.dependencies) { + this.dependencies.add(dependency); + } + + for (let i = 0, ii = opList.length; i < ii; i++) { + this.addOp(opList.fnArray[i], opList.argsArray[i]); + } + } + + getIR() { + return { + fnArray: this.fnArray, + argsArray: this.argsArray, + length: this.length + }; + } + + get _transfers() { + const transfers = []; + const { + fnArray, + argsArray, + length + } = this; + + for (let i = 0; i < length; i++) { + switch (fnArray[i]) { + case _util.OPS.paintInlineImageXObject: + case _util.OPS.paintInlineImageXObjectGroup: + case _util.OPS.paintImageMaskXObject: + const arg = argsArray[i][0]; + + if (!arg.cached && arg.data && arg.data.buffer instanceof ArrayBuffer) { + transfers.push(arg.data.buffer); + } + + break; + } + } + + return transfers; + } + + flush(lastChunk = false, separateAnnots = null) { + this.optimizer.flush(); + const length = this.length; + this._totalLength += length; + + this._streamSink.enqueue({ + fnArray: this.fnArray, + argsArray: this.argsArray, + lastChunk, + separateAnnots, + length + }, 1, this._transfers); + + this.dependencies.clear(); + this.fnArray.length = 0; + this.argsArray.length = 0; + this.weight = 0; + this.optimizer.reset(); + } + +} + +exports.OperatorList = OperatorList; + +/***/ }), +/* 63 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFImage = void 0; + +var _util = __w_pdfjs_require__(2); + +var _image_utils = __w_pdfjs_require__(64); + +var _base_stream = __w_pdfjs_require__(7); + +var _colorspace = __w_pdfjs_require__(14); + +var _decode_stream = __w_pdfjs_require__(19); + +var _jpeg_stream = __w_pdfjs_require__(27); + +var _jpx = __w_pdfjs_require__(30); + +var _primitives = __w_pdfjs_require__(5); + +function decodeAndClamp(value, addend, coefficient, max) { + value = addend + value * coefficient; + + if (value < 0) { + value = 0; + } else if (value > max) { + value = max; + } + + return value; +} + +function resizeImageMask(src, bpc, w1, h1, w2, h2) { + const length = w2 * h2; + let dest; + + if (bpc <= 8) { + dest = new Uint8Array(length); + } else if (bpc <= 16) { + dest = new Uint16Array(length); + } else { + dest = new Uint32Array(length); + } + + const xRatio = w1 / w2; + const yRatio = h1 / h2; + let i, + j, + py, + newIndex = 0, + oldIndex; + const xScaled = new Uint16Array(w2); + const w1Scanline = w1; + + for (i = 0; i < w2; i++) { + xScaled[i] = Math.floor(i * xRatio); + } + + for (i = 0; i < h2; i++) { + py = Math.floor(i * yRatio) * w1Scanline; + + for (j = 0; j < w2; j++) { + oldIndex = py + xScaled[j]; + dest[newIndex++] = src[oldIndex]; + } + } + + return dest; +} + +class PDFImage { + constructor({ + xref, + res, + image, + isInline = false, + smask = null, + mask = null, + isMask = false, + pdfFunctionFactory, + localColorSpaceCache + }) { + this.image = image; + const dict = image.dict; + const filter = dict.get("F", "Filter"); + let filterName; + + if (filter instanceof _primitives.Name) { + filterName = filter.name; + } else if (Array.isArray(filter)) { + const filterZero = xref.fetchIfRef(filter[0]); + + if (filterZero instanceof _primitives.Name) { + filterName = filterZero.name; + } + } + + switch (filterName) { + case "JPXDecode": + const jpxImage = new _jpx.JpxImage(); + jpxImage.parseImageProperties(image.stream); + image.stream.reset(); + image.width = jpxImage.width; + image.height = jpxImage.height; + image.bitsPerComponent = jpxImage.bitsPerComponent; + image.numComps = jpxImage.componentsCount; + break; + + case "JBIG2Decode": + image.bitsPerComponent = 1; + image.numComps = 1; + break; + } + + let width = dict.get("W", "Width"); + let height = dict.get("H", "Height"); + + if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { + (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary."); + width = image.width; + height = image.height; + } + + if (width < 1 || height < 1) { + throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`); + } + + this.width = width; + this.height = height; + this.interpolate = dict.get("I", "Interpolate"); + this.imageMask = dict.get("IM", "ImageMask") || false; + this.matte = dict.get("Matte") || false; + let bitsPerComponent = image.bitsPerComponent; + + if (!bitsPerComponent) { + bitsPerComponent = dict.get("BPC", "BitsPerComponent"); + + if (!bitsPerComponent) { + if (this.imageMask) { + bitsPerComponent = 1; + } else { + throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`); + } + } + } + + this.bpc = bitsPerComponent; + + if (!this.imageMask) { + let colorSpace = dict.getRaw("CS") || dict.getRaw("ColorSpace"); + + if (!colorSpace) { + (0, _util.info)("JPX images (which do not require color spaces)"); + + switch (image.numComps) { + case 1: + colorSpace = _primitives.Name.get("DeviceGray"); + break; + + case 3: + colorSpace = _primitives.Name.get("DeviceRGB"); + break; + + case 4: + colorSpace = _primitives.Name.get("DeviceCMYK"); + break; + + default: + throw new Error(`JPX images with ${image.numComps} color components not supported.`); + } + } + + this.colorSpace = _colorspace.ColorSpace.parse({ + cs: colorSpace, + xref, + resources: isInline ? res : null, + pdfFunctionFactory, + localColorSpaceCache + }); + this.numComps = this.colorSpace.numComps; + } + + this.decode = dict.getArray("D", "Decode"); + this.needsDecode = false; + + if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { + this.needsDecode = true; + const max = (1 << bitsPerComponent) - 1; + this.decodeCoefficients = []; + this.decodeAddends = []; + const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed"; + + for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) { + const dmin = this.decode[i]; + const dmax = this.decode[i + 1]; + this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; + this.decodeAddends[j] = isIndexed ? dmin : max * dmin; + } + } + + if (smask) { + this.smask = new PDFImage({ + xref, + res, + image: smask, + isInline, + pdfFunctionFactory, + localColorSpaceCache + }); + } else if (mask) { + if (mask instanceof _base_stream.BaseStream) { + const maskDict = mask.dict, + imageMask = maskDict.get("IM", "ImageMask"); + + if (!imageMask) { + (0, _util.warn)("Ignoring /Mask in image without /ImageMask."); + } else { + this.mask = new PDFImage({ + xref, + res, + image: mask, + isInline, + isMask: true, + pdfFunctionFactory, + localColorSpaceCache + }); + } + } else { + this.mask = mask; + } + } + } + + static async buildImage({ + xref, + res, + image, + isInline = false, + pdfFunctionFactory, + localColorSpaceCache + }) { + const imageData = image; + let smaskData = null; + let maskData = null; + const smask = image.dict.get("SMask"); + const mask = image.dict.get("Mask"); + + if (smask) { + if (smask instanceof _base_stream.BaseStream) { + smaskData = smask; + } else { + (0, _util.warn)("Unsupported /SMask format."); + } + } else if (mask) { + if (mask instanceof _base_stream.BaseStream || Array.isArray(mask)) { + maskData = mask; + } else { + (0, _util.warn)("Unsupported /Mask format."); + } + } + + return new PDFImage({ + xref, + res, + image: imageData, + isInline, + smask: smaskData, + mask: maskData, + pdfFunctionFactory, + localColorSpaceCache + }); + } + + static createRawMask({ + imgArray, + width, + height, + imageIsFromDecodeStream, + inverseDecode, + interpolate + }) { + const computedLength = (width + 7 >> 3) * height; + const actualLength = imgArray.byteLength; + const haveFullData = computedLength === actualLength; + let data, i; + + if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { + data = imgArray; + } else if (!inverseDecode) { + data = new Uint8Array(imgArray); + } else { + data = new Uint8Array(computedLength); + data.set(imgArray); + data.fill(0xff, actualLength); + } + + if (inverseDecode) { + for (i = 0; i < actualLength; i++) { + data[i] ^= 0xff; + } + } + + return { + data, + width, + height, + interpolate + }; + } + + static createMask({ + imgArray, + width, + height, + imageIsFromDecodeStream, + inverseDecode, + interpolate + }) { + const isSingleOpaquePixel = width === 1 && height === 1 && inverseDecode === (imgArray.length === 0 || !!(imgArray[0] & 128)); + + if (isSingleOpaquePixel) { + return { + isSingleOpaquePixel + }; + } + + if (_util.FeatureTest.isOffscreenCanvasSupported) { + const canvas = new OffscreenCanvas(width, height); + const ctx = canvas.getContext("2d"); + const imgData = ctx.createImageData(width, height); + (0, _image_utils.applyMaskImageData)({ + src: imgArray, + dest: imgData.data, + width, + height, + inverseDecode + }); + ctx.putImageData(imgData, 0, 0); + const bitmap = canvas.transferToImageBitmap(); + return { + data: null, + width, + height, + interpolate, + bitmap + }; + } + + return this.createRawMask({ + imgArray, + width, + height, + inverseDecode, + imageIsFromDecodeStream, + interpolate + }); + } + + get drawWidth() { + return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); + } + + get drawHeight() { + return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); + } + + decodeBuffer(buffer) { + const bpc = this.bpc; + const numComps = this.numComps; + const decodeAddends = this.decodeAddends; + const decodeCoefficients = this.decodeCoefficients; + const max = (1 << bpc) - 1; + let i, ii; + + if (bpc === 1) { + for (i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] = +!buffer[i]; + } + + return; + } + + let index = 0; + + for (i = 0, ii = this.width * this.height; i < ii; i++) { + for (let j = 0; j < numComps; j++) { + buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); + index++; + } + } + } + + getComponents(buffer) { + const bpc = this.bpc; + + if (bpc === 8) { + return buffer; + } + + const width = this.width; + const height = this.height; + const numComps = this.numComps; + const length = width * height * numComps; + let bufferPos = 0; + let output; + + if (bpc <= 8) { + output = new Uint8Array(length); + } else if (bpc <= 16) { + output = new Uint16Array(length); + } else { + output = new Uint32Array(length); + } + + const rowComps = width * numComps; + const max = (1 << bpc) - 1; + let i = 0, + ii, + buf; + + if (bpc === 1) { + let mask, loop1End, loop2End; + + for (let j = 0; j < height; j++) { + loop1End = i + (rowComps & ~7); + loop2End = i + rowComps; + + while (i < loop1End) { + buf = buffer[bufferPos++]; + output[i] = buf >> 7 & 1; + output[i + 1] = buf >> 6 & 1; + output[i + 2] = buf >> 5 & 1; + output[i + 3] = buf >> 4 & 1; + output[i + 4] = buf >> 3 & 1; + output[i + 5] = buf >> 2 & 1; + output[i + 6] = buf >> 1 & 1; + output[i + 7] = buf & 1; + i += 8; + } + + if (i < loop2End) { + buf = buffer[bufferPos++]; + mask = 128; + + while (i < loop2End) { + output[i++] = +!!(buf & mask); + mask >>= 1; + } + } + } + } else { + let bits = 0; + buf = 0; + + for (i = 0, ii = length; i < ii; ++i) { + if (i % rowComps === 0) { + buf = 0; + bits = 0; + } + + while (bits < bpc) { + buf = buf << 8 | buffer[bufferPos++]; + bits += 8; + } + + const remainingBits = bits - bpc; + let value = buf >> remainingBits; + + if (value < 0) { + value = 0; + } else if (value > max) { + value = max; + } + + output[i] = value; + buf &= (1 << remainingBits) - 1; + bits = remainingBits; + } + } + + return output; + } + + fillOpacity(rgbaBuf, width, height, actualHeight, image) { + const smask = this.smask; + const mask = this.mask; + let alphaBuf, sw, sh, i, ii, j; + + if (smask) { + sw = smask.width; + sh = smask.height; + alphaBuf = new Uint8ClampedArray(sw * sh); + smask.fillGrayBuffer(alphaBuf); + + if (sw !== width || sh !== height) { + alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); + } + } else if (mask) { + if (mask instanceof PDFImage) { + sw = mask.width; + sh = mask.height; + alphaBuf = new Uint8ClampedArray(sw * sh); + mask.numComps = 1; + mask.fillGrayBuffer(alphaBuf); + + for (i = 0, ii = sw * sh; i < ii; ++i) { + alphaBuf[i] = 255 - alphaBuf[i]; + } + + if (sw !== width || sh !== height) { + alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); + } + } else if (Array.isArray(mask)) { + alphaBuf = new Uint8ClampedArray(width * height); + const numComps = this.numComps; + + for (i = 0, ii = width * height; i < ii; ++i) { + let opacity = 0; + const imageOffset = i * numComps; + + for (j = 0; j < numComps; ++j) { + const color = image[imageOffset + j]; + const maskOffset = j * 2; + + if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { + opacity = 255; + break; + } + } + + alphaBuf[i] = opacity; + } + } else { + throw new _util.FormatError("Unknown mask format."); + } + } + + if (alphaBuf) { + for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { + rgbaBuf[j] = alphaBuf[i]; + } + } else { + for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { + rgbaBuf[j] = 255; + } + } + } + + undoPreblend(buffer, width, height) { + const matte = this.smask && this.smask.matte; + + if (!matte) { + return; + } + + const matteRgb = this.colorSpace.getRgb(matte, 0); + const matteR = matteRgb[0]; + const matteG = matteRgb[1]; + const matteB = matteRgb[2]; + const length = width * height * 4; + + for (let i = 0; i < length; i += 4) { + const alpha = buffer[i + 3]; + + if (alpha === 0) { + buffer[i] = 255; + buffer[i + 1] = 255; + buffer[i + 2] = 255; + continue; + } + + const k = 255 / alpha; + buffer[i] = (buffer[i] - matteR) * k + matteR; + buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; + buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; + } + } + + createImageData(forceRGBA = false) { + const drawWidth = this.drawWidth; + const drawHeight = this.drawHeight; + const imgData = { + width: drawWidth, + height: drawHeight, + interpolate: this.interpolate, + kind: 0, + data: null + }; + const numComps = this.numComps; + const originalWidth = this.width; + const originalHeight = this.height; + const bpc = this.bpc; + const rowBytes = originalWidth * numComps * bpc + 7 >> 3; + + if (!forceRGBA) { + let kind; + + if (this.colorSpace.name === "DeviceGray" && bpc === 1) { + kind = _util.ImageKind.GRAYSCALE_1BPP; + } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) { + kind = _util.ImageKind.RGB_24BPP; + } + + if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { + imgData.kind = kind; + imgData.data = this.getImageBytes(originalHeight * rowBytes, {}); + + if (this.needsDecode) { + (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); + const buffer = imgData.data; + + for (let i = 0, ii = buffer.length; i < ii; i++) { + buffer[i] ^= 0xff; + } + } + + return imgData; + } + + if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { + let imageLength = originalHeight * rowBytes; + + switch (this.colorSpace.name) { + case "DeviceGray": + imageLength *= 3; + + case "DeviceRGB": + case "DeviceCMYK": + imgData.kind = _util.ImageKind.RGB_24BPP; + imgData.data = this.getImageBytes(imageLength, { + drawWidth, + drawHeight, + forceRGB: true + }); + return imgData; + } + } + } + + const imgArray = this.getImageBytes(originalHeight * rowBytes, { + internal: true + }); + const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; + const comps = this.getComponents(imgArray); + let alpha01, maybeUndoPreblend; + + if (!forceRGBA && !this.smask && !this.mask) { + imgData.kind = _util.ImageKind.RGB_24BPP; + imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3); + alpha01 = 0; + maybeUndoPreblend = false; + } else { + imgData.kind = _util.ImageKind.RGBA_32BPP; + imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4); + alpha01 = 1; + maybeUndoPreblend = true; + this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); + } + + if (this.needsDecode) { + this.decodeBuffer(comps); + } + + this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); + + if (maybeUndoPreblend) { + this.undoPreblend(imgData.data, drawWidth, actualHeight); + } + + return imgData; + } + + fillGrayBuffer(buffer) { + const numComps = this.numComps; + + if (numComps !== 1) { + throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`); + } + + const width = this.width; + const height = this.height; + const bpc = this.bpc; + const rowBytes = width * numComps * bpc + 7 >> 3; + const imgArray = this.getImageBytes(height * rowBytes, { + internal: true + }); + const comps = this.getComponents(imgArray); + let i, length; + + if (bpc === 1) { + length = width * height; + + if (this.needsDecode) { + for (i = 0; i < length; ++i) { + buffer[i] = comps[i] - 1 & 255; + } + } else { + for (i = 0; i < length; ++i) { + buffer[i] = -comps[i] & 255; + } + } + + return; + } + + if (this.needsDecode) { + this.decodeBuffer(comps); + } + + length = width * height; + const scale = 255 / ((1 << bpc) - 1); + + for (i = 0; i < length; ++i) { + buffer[i] = scale * comps[i]; + } + } + + getImageBytes(length, { + drawWidth, + drawHeight, + forceRGB = false, + internal = false + }) { + this.image.reset(); + this.image.drawWidth = drawWidth || this.width; + this.image.drawHeight = drawHeight || this.height; + this.image.forceRGB = !!forceRGB; + const imageBytes = this.image.getBytes(length); + + if (internal || this.image instanceof _decode_stream.DecodeStream) { + return imageBytes; + } + + (0, _util.assert)(imageBytes instanceof Uint8Array, 'PDFImage.getImageBytes: Unsupported "imageBytes" type.'); + return new Uint8Array(imageBytes); + } + +} + +exports.PDFImage = PDFImage; + +/***/ }), +/* 64 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.applyMaskImageData = applyMaskImageData; + +var _util = __w_pdfjs_require__(2); + +function applyMaskImageData({ + src, + srcPos = 0, + dest, + destPos = 0, + width, + height, + inverseDecode = false +}) { + const opaque = _util.FeatureTest.isLittleEndian ? 0xff000000 : 0x000000ff; + const [zeroMapping, oneMapping] = !inverseDecode ? [opaque, 0] : [0, opaque]; + const widthInSource = width >> 3; + const widthRemainder = width & 7; + const srcLength = src.length; + dest = new Uint32Array(dest.buffer); + + for (let i = 0; i < height; i++) { + for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { + const elem = srcPos < srcLength ? src[srcPos] : 255; + dest[destPos++] = elem & 0b10000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1000 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b100 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b10 ? oneMapping : zeroMapping; + dest[destPos++] = elem & 0b1 ? oneMapping : zeroMapping; + } + + if (widthRemainder === 0) { + continue; + } + + const elem = srcPos < srcLength ? src[srcPos++] : 255; + + for (let j = 0; j < widthRemainder; j++) { + dest[destPos++] = elem & 1 << 7 - j ? oneMapping : zeroMapping; + } + } + + return { + srcPos, + destPos + }; +} + +/***/ }), +/* 65 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.incrementalUpdate = incrementalUpdate; +exports.writeDict = writeDict; +exports.writeObject = writeObject; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _core_utils = __w_pdfjs_require__(6); + +var _xml_parser = __w_pdfjs_require__(66); + +var _base_stream = __w_pdfjs_require__(7); + +var _crypto = __w_pdfjs_require__(67); + +function writeObject(ref, obj, buffer, transform) { + buffer.push(`${ref.num} ${ref.gen} obj\n`); + + if (obj instanceof _primitives.Dict) { + writeDict(obj, buffer, transform); + } else if (obj instanceof _base_stream.BaseStream) { + writeStream(obj, buffer, transform); + } + + buffer.push("\nendobj\n"); +} + +function writeDict(dict, buffer, transform) { + buffer.push("<<"); + + for (const key of dict.getKeys()) { + buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `); + writeValue(dict.getRaw(key), buffer, transform); + } + + buffer.push(">>"); +} + +function writeStream(stream, buffer, transform) { + writeDict(stream.dict, buffer, transform); + buffer.push(" stream\n"); + let string = stream.getString(); + + if (transform !== null) { + string = transform.encryptString(string); + } + + buffer.push(string, "\nendstream\n"); +} + +function writeArray(array, buffer, transform) { + buffer.push("["); + let first = true; + + for (const val of array) { + if (!first) { + buffer.push(" "); + } else { + first = false; + } + + writeValue(val, buffer, transform); + } + + buffer.push("]"); +} + +function writeValue(value, buffer, transform) { + if (value instanceof _primitives.Name) { + buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`); + } else if (value instanceof _primitives.Ref) { + buffer.push(`${value.num} ${value.gen} R`); + } else if (Array.isArray(value)) { + writeArray(value, buffer, transform); + } else if (typeof value === "string") { + if (transform !== null) { + value = transform.encryptString(value); + } + + buffer.push(`(${(0, _util.escapeString)(value)})`); + } else if (typeof value === "number") { + buffer.push((0, _core_utils.numberToString)(value)); + } else if (typeof value === "boolean") { + buffer.push(value.toString()); + } else if (value instanceof _primitives.Dict) { + writeDict(value, buffer, transform); + } else if (value instanceof _base_stream.BaseStream) { + writeStream(value, buffer, transform); + } else if (value === null) { + buffer.push("null"); + } else { + (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`); + } +} + +function writeInt(number, size, offset, buffer) { + for (let i = size + offset - 1; i > offset - 1; i--) { + buffer[i] = number & 0xff; + number >>= 8; + } + + return offset + size; +} + +function writeString(string, offset, buffer) { + for (let i = 0, len = string.length; i < len; i++) { + buffer[offset + i] = string.charCodeAt(i) & 0xff; + } +} + +function computeMD5(filesize, xrefInfo) { + const time = Math.floor(Date.now() / 1000); + const filename = xrefInfo.filename || ""; + const md5Buffer = [time.toString(), filename, filesize.toString()]; + let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0); + + for (const value of Object.values(xrefInfo.info)) { + md5Buffer.push(value); + md5BufferLen += value.length; + } + + const array = new Uint8Array(md5BufferLen); + let offset = 0; + + for (const str of md5Buffer) { + writeString(str, offset, array); + offset += str.length; + } + + return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); +} + +function writeXFADataForAcroform(str, newRefs) { + const xml = new _xml_parser.SimpleXMLParser({ + hasAttributes: true + }).parseFromString(str); + + for (const { + xfa + } of newRefs) { + if (!xfa) { + continue; + } + + const { + path, + value + } = xfa; + + if (!path) { + continue; + } + + const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0); + + if (node) { + if (Array.isArray(value)) { + node.childNodes = value.map(val => new _xml_parser.SimpleDOMNode("value", val)); + } else { + node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)]; + } + } else { + (0, _util.warn)(`Node not found for path: ${path}`); + } + } + + const buffer = []; + xml.documentElement.dump(buffer); + return buffer.join(""); +} + +function updateXFA({ + xfaData, + xfaDatasetsRef, + hasXfaDatasetsEntry, + acroFormRef, + acroForm, + newRefs, + xref, + xrefInfo +}) { + if (xref === null) { + return; + } + + if (!hasXfaDatasetsEntry) { + if (!acroFormRef) { + (0, _util.warn)("XFA - Cannot save it"); + return; + } + + const oldXfa = acroForm.get("XFA"); + const newXfa = oldXfa.slice(); + newXfa.splice(2, 0, "datasets"); + newXfa.splice(3, 0, xfaDatasetsRef); + acroForm.set("XFA", newXfa); + const encrypt = xref.encrypt; + let transform = null; + + if (encrypt) { + transform = encrypt.createCipherTransform(acroFormRef.num, acroFormRef.gen); + } + + const buffer = [`${acroFormRef.num} ${acroFormRef.gen} obj\n`]; + writeDict(acroForm, buffer, transform); + buffer.push("\n"); + acroForm.set("XFA", oldXfa); + newRefs.push({ + ref: acroFormRef, + data: buffer.join("") + }); + } + + if (xfaData === null) { + const datasets = xref.fetchIfRef(xfaDatasetsRef); + xfaData = writeXFADataForAcroform(datasets.getString(), newRefs); + } + + const encrypt = xref.encrypt; + + if (encrypt) { + const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen); + xfaData = transform.encryptString(xfaData); + } + + const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n"; + newRefs.push({ + ref: xfaDatasetsRef, + data + }); +} + +function incrementalUpdate({ + originalData, + xrefInfo, + newRefs, + xref = null, + hasXfa = false, + xfaDatasetsRef = null, + hasXfaDatasetsEntry = false, + acroFormRef = null, + acroForm = null, + xfaData = null +}) { + if (hasXfa) { + updateXFA({ + xfaData, + xfaDatasetsRef, + hasXfaDatasetsEntry, + acroFormRef, + acroForm, + newRefs, + xref, + xrefInfo + }); + } + + const newXref = new _primitives.Dict(null); + const refForXrefTable = xrefInfo.newRef; + let buffer, baseOffset; + const lastByte = originalData.at(-1); + + if (lastByte === 0x0a || lastByte === 0x0d) { + buffer = []; + baseOffset = originalData.length; + } else { + buffer = ["\n"]; + baseOffset = originalData.length + 1; + } + + newXref.set("Size", refForXrefTable.num + 1); + newXref.set("Prev", xrefInfo.startXRef); + newXref.set("Type", _primitives.Name.get("XRef")); + + if (xrefInfo.rootRef !== null) { + newXref.set("Root", xrefInfo.rootRef); + } + + if (xrefInfo.infoRef !== null) { + newXref.set("Info", xrefInfo.infoRef); + } + + if (xrefInfo.encryptRef !== null) { + newXref.set("Encrypt", xrefInfo.encryptRef); + } + + newRefs.push({ + ref: refForXrefTable, + data: "" + }); + newRefs = newRefs.sort((a, b) => { + return a.ref.num - b.ref.num; + }); + const xrefTableData = [[0, 1, 0xffff]]; + const indexes = [0, 1]; + let maxOffset = 0; + + for (const { + ref, + data + } of newRefs) { + maxOffset = Math.max(maxOffset, baseOffset); + xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); + baseOffset += data.length; + indexes.push(ref.num, 1); + buffer.push(data); + } + + newXref.set("Index", indexes); + + if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) { + const md5 = computeMD5(baseOffset, xrefInfo); + newXref.set("ID", [xrefInfo.fileIds[0], md5]); + } + + const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); + const sizes = [1, offsetSize, 2]; + const structSize = sizes[0] + sizes[1] + sizes[2]; + const tableLength = structSize * xrefTableData.length; + newXref.set("W", sizes); + newXref.set("Length", tableLength); + buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); + writeDict(newXref, buffer, null); + buffer.push(" stream\n"); + const bufferLen = buffer.reduce((a, str) => a + str.length, 0); + const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; + const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); + array.set(originalData); + let offset = originalData.length; + + for (const str of buffer) { + writeString(str, offset, array); + offset += str.length; + } + + for (const [type, objOffset, gen] of xrefTableData) { + offset = writeInt(type, sizes[0], offset, array); + offset = writeInt(objOffset, sizes[1], offset, array); + offset = writeInt(gen, sizes[2], offset, array); + } + + writeString(footer, offset, array); + return array; +} + +/***/ }), +/* 66 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; + +var _core_utils = __w_pdfjs_require__(6); + +const XMLParserErrorCode = { + NoError: 0, + EndOfDocument: -1, + UnterminatedCdat: -2, + UnterminatedXmlDeclaration: -3, + UnterminatedDoctypeDeclaration: -4, + UnterminatedComment: -5, + MalformedElement: -6, + OutOfMemory: -7, + UnterminatedAttributeValue: -8, + UnterminatedElement: -9, + ElementNeverBegun: -10 +}; +exports.XMLParserErrorCode = XMLParserErrorCode; + +function isWhitespace(s, index) { + const ch = s[index]; + return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; +} + +function isWhitespaceString(s) { + for (let i = 0, ii = s.length; i < ii; i++) { + if (!isWhitespace(s, i)) { + return false; + } + } + + return true; +} + +class XMLParserBase { + _resolveEntities(s) { + return s.replace(/&([^;]+);/g, (all, entity) => { + if (entity.substring(0, 2) === "#x") { + return String.fromCodePoint(parseInt(entity.substring(2), 16)); + } else if (entity.substring(0, 1) === "#") { + return String.fromCodePoint(parseInt(entity.substring(1), 10)); + } + + switch (entity) { + case "lt": + return "<"; + + case "gt": + return ">"; + + case "amp": + return "&"; + + case "quot": + return '"'; + + case "apos": + return "'"; + } + + return this.onResolveEntity(entity); + }); + } + + _parseContent(s, start) { + const attributes = []; + let pos = start; + + function skipWs() { + while (pos < s.length && isWhitespace(s, pos)) { + ++pos; + } + } + + while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { + ++pos; + } + + const name = s.substring(start, pos); + skipWs(); + + while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { + skipWs(); + let attrName = "", + attrValue = ""; + + while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { + attrName += s[pos]; + ++pos; + } + + skipWs(); + + if (s[pos] !== "=") { + return null; + } + + ++pos; + skipWs(); + const attrEndChar = s[pos]; + + if (attrEndChar !== '"' && attrEndChar !== "'") { + return null; + } + + const attrEndIndex = s.indexOf(attrEndChar, ++pos); + + if (attrEndIndex < 0) { + return null; + } + + attrValue = s.substring(pos, attrEndIndex); + attributes.push({ + name: attrName, + value: this._resolveEntities(attrValue) + }); + pos = attrEndIndex + 1; + skipWs(); + } + + return { + name, + attributes, + parsed: pos - start + }; + } + + _parseProcessingInstruction(s, start) { + let pos = start; + + function skipWs() { + while (pos < s.length && isWhitespace(s, pos)) { + ++pos; + } + } + + while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") { + ++pos; + } + + const name = s.substring(start, pos); + skipWs(); + const attrStart = pos; + + while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { + ++pos; + } + + const value = s.substring(attrStart, pos); + return { + name, + value, + parsed: pos - start + }; + } + + parseXml(s) { + let i = 0; + + while (i < s.length) { + const ch = s[i]; + let j = i; + + if (ch === "<") { + ++j; + const ch2 = s[j]; + let q; + + switch (ch2) { + case "/": + ++j; + q = s.indexOf(">", j); + + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedElement); + return; + } + + this.onEndElement(s.substring(j, q)); + j = q + 1; + break; + + case "?": + ++j; + + const pi = this._parseProcessingInstruction(s, j); + + if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { + this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); + return; + } + + this.onPi(pi.name, pi.value); + j += pi.parsed + 2; + break; + + case "!": + if (s.substring(j + 1, j + 3) === "--") { + q = s.indexOf("-->", j + 3); + + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedComment); + return; + } + + this.onComment(s.substring(j + 3, q)); + j = q + 3; + } else if (s.substring(j + 1, j + 8) === "[CDATA[") { + q = s.indexOf("]]>", j + 8); + + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedCdat); + return; + } + + this.onCdata(s.substring(j + 8, q)); + j = q + 3; + } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { + const q2 = s.indexOf("[", j + 8); + let complexDoctype = false; + q = s.indexOf(">", j + 8); + + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); + return; + } + + if (q2 > 0 && q > q2) { + q = s.indexOf("]>", j + 8); + + if (q < 0) { + this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); + return; + } + + complexDoctype = true; + } + + const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); + this.onDoctype(doctypeContent); + j = q + (complexDoctype ? 2 : 1); + } else { + this.onError(XMLParserErrorCode.MalformedElement); + return; + } + + break; + + default: + const content = this._parseContent(s, j); + + if (content === null) { + this.onError(XMLParserErrorCode.MalformedElement); + return; + } + + let isClosed = false; + + if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { + isClosed = true; + } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { + this.onError(XMLParserErrorCode.UnterminatedElement); + return; + } + + this.onBeginElement(content.name, content.attributes, isClosed); + j += content.parsed + (isClosed ? 2 : 1); + break; + } + } else { + while (j < s.length && s[j] !== "<") { + j++; + } + + const text = s.substring(i, j); + this.onText(this._resolveEntities(text)); + } + + i = j; + } + } + + onResolveEntity(name) { + return `&${name};`; + } + + onPi(name, value) {} + + onComment(text) {} + + onCdata(text) {} + + onDoctype(doctypeContent) {} + + onText(text) {} + + onBeginElement(name, attributes, isEmpty) {} + + onEndElement(name) {} + + onError(code) {} + +} + +exports.XMLParserBase = XMLParserBase; + +class SimpleDOMNode { + constructor(nodeName, nodeValue) { + this.nodeName = nodeName; + this.nodeValue = nodeValue; + Object.defineProperty(this, "parentNode", { + value: null, + writable: true + }); + } + + get firstChild() { + return this.childNodes && this.childNodes[0]; + } + + get nextSibling() { + const childNodes = this.parentNode.childNodes; + + if (!childNodes) { + return undefined; + } + + const index = childNodes.indexOf(this); + + if (index === -1) { + return undefined; + } + + return childNodes[index + 1]; + } + + get textContent() { + if (!this.childNodes) { + return this.nodeValue || ""; + } + + return this.childNodes.map(function (child) { + return child.textContent; + }).join(""); + } + + get children() { + return this.childNodes || []; + } + + hasChildNodes() { + return this.childNodes && this.childNodes.length > 0; + } + + searchNode(paths, pos) { + if (pos >= paths.length) { + return this; + } + + const component = paths[pos]; + const stack = []; + let node = this; + + while (true) { + if (component.name === node.nodeName) { + if (component.pos === 0) { + const res = node.searchNode(paths, pos + 1); + + if (res !== null) { + return res; + } + } else if (stack.length === 0) { + return null; + } else { + const [parent] = stack.pop(); + let siblingPos = 0; + + for (const child of parent.childNodes) { + if (component.name === child.nodeName) { + if (siblingPos === component.pos) { + return child.searchNode(paths, pos + 1); + } + + siblingPos++; + } + } + + return node.searchNode(paths, pos + 1); + } + } + + if (node.childNodes && node.childNodes.length !== 0) { + stack.push([node, 0]); + node = node.childNodes[0]; + } else if (stack.length === 0) { + return null; + } else { + while (stack.length !== 0) { + const [parent, currentPos] = stack.pop(); + const newPos = currentPos + 1; + + if (newPos < parent.childNodes.length) { + stack.push([parent, newPos]); + node = parent.childNodes[newPos]; + break; + } + } + + if (stack.length === 0) { + return null; + } + } + } + } + + dump(buffer) { + if (this.nodeName === "#text") { + buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue)); + return; + } + + buffer.push(`<${this.nodeName}`); + + if (this.attributes) { + for (const attribute of this.attributes) { + buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`); + } + } + + if (this.hasChildNodes()) { + buffer.push(">"); + + for (const child of this.childNodes) { + child.dump(buffer); + } + + buffer.push(``); + } else if (this.nodeValue) { + buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}`); + } else { + buffer.push("/>"); + } + } + +} + +exports.SimpleDOMNode = SimpleDOMNode; + +class SimpleXMLParser extends XMLParserBase { + constructor({ + hasAttributes = false, + lowerCaseName = false + }) { + super(); + this._currentFragment = null; + this._stack = null; + this._errorCode = XMLParserErrorCode.NoError; + this._hasAttributes = hasAttributes; + this._lowerCaseName = lowerCaseName; + } + + parseFromString(data) { + this._currentFragment = []; + this._stack = []; + this._errorCode = XMLParserErrorCode.NoError; + this.parseXml(data); + + if (this._errorCode !== XMLParserErrorCode.NoError) { + return undefined; + } + + const [documentElement] = this._currentFragment; + + if (!documentElement) { + return undefined; + } + + return { + documentElement + }; + } + + onText(text) { + if (isWhitespaceString(text)) { + return; + } + + const node = new SimpleDOMNode("#text", text); + + this._currentFragment.push(node); + } + + onCdata(text) { + const node = new SimpleDOMNode("#text", text); + + this._currentFragment.push(node); + } + + onBeginElement(name, attributes, isEmpty) { + if (this._lowerCaseName) { + name = name.toLowerCase(); + } + + const node = new SimpleDOMNode(name); + node.childNodes = []; + + if (this._hasAttributes) { + node.attributes = attributes; + } + + this._currentFragment.push(node); + + if (isEmpty) { + return; + } + + this._stack.push(this._currentFragment); + + this._currentFragment = node.childNodes; + } + + onEndElement(name) { + this._currentFragment = this._stack.pop() || []; + + const lastElement = this._currentFragment.at(-1); + + if (!lastElement) { + return null; + } + + for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) { + lastElement.childNodes[i].parentNode = lastElement; + } + + return lastElement; + } + + onError(code) { + this._errorCode = code; + } + +} + +exports.SimpleXMLParser = SimpleXMLParser; + +/***/ }), +/* 67 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; +exports.calculateSHA384 = calculateSHA384; +exports.calculateSHA512 = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _decrypt_stream = __w_pdfjs_require__(68); + +class ARCFourCipher { + constructor(key) { + this.a = 0; + this.b = 0; + const s = new Uint8Array(256); + const keyLength = key.length; + + for (let i = 0; i < 256; ++i) { + s[i] = i; + } + + for (let i = 0, j = 0; i < 256; ++i) { + const tmp = s[i]; + j = j + tmp + key[i % keyLength] & 0xff; + s[i] = s[j]; + s[j] = tmp; + } + + this.s = s; + } + + encryptBlock(data) { + let a = this.a, + b = this.b; + const s = this.s; + const n = data.length; + const output = new Uint8Array(n); + + for (let i = 0; i < n; ++i) { + a = a + 1 & 0xff; + const tmp = s[a]; + b = b + tmp & 0xff; + const tmp2 = s[b]; + s[a] = tmp2; + s[b] = tmp; + output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; + } + + this.a = a; + this.b = b; + return output; + } + + decryptBlock(data) { + return this.encryptBlock(data); + } + + encrypt(data) { + return this.encryptBlock(data); + } + +} + +exports.ARCFourCipher = ARCFourCipher; + +const calculateMD5 = function calculateMD5Closure() { + const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); + const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); + + function hash(data, offset, length) { + let h0 = 1732584193, + h1 = -271733879, + h2 = -1732584194, + h3 = 271733878; + const paddedLength = length + 72 & ~63; + const padded = new Uint8Array(paddedLength); + let i, j; + + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + + padded[i++] = 0x80; + const n = paddedLength - 8; + + while (i < n) { + padded[i++] = 0; + } + + padded[i++] = length << 3 & 0xff; + padded[i++] = length >> 5 & 0xff; + padded[i++] = length >> 13 & 0xff; + padded[i++] = length >> 21 & 0xff; + padded[i++] = length >>> 29 & 0xff; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + const w = new Int32Array(16); + + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j, i += 4) { + w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; + } + + let a = h0, + b = h1, + c = h2, + d = h3, + f, + g; + + for (j = 0; j < 64; ++j) { + if (j < 16) { + f = b & c | ~b & d; + g = j; + } else if (j < 32) { + f = d & b | ~d & c; + g = 5 * j + 1 & 15; + } else if (j < 48) { + f = b ^ c ^ d; + g = 3 * j + 5 & 15; + } else { + f = c ^ (b | ~d); + g = 7 * j & 15; + } + + const tmp = d, + rotateArg = a + f + k[j] + w[g] | 0, + rotate = r[j]; + d = c; + c = b; + b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; + a = tmp; + } + + h0 = h0 + a | 0; + h1 = h1 + b | 0; + h2 = h2 + c | 0; + h3 = h3 + d | 0; + } + + return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); + } + + return hash; +}(); + +exports.calculateMD5 = calculateMD5; + +class Word64 { + constructor(highInteger, lowInteger) { + this.high = highInteger | 0; + this.low = lowInteger | 0; + } + + and(word) { + this.high &= word.high; + this.low &= word.low; + } + + xor(word) { + this.high ^= word.high; + this.low ^= word.low; + } + + or(word) { + this.high |= word.high; + this.low |= word.low; + } + + shiftRight(places) { + if (places >= 32) { + this.low = this.high >>> places - 32 | 0; + this.high = 0; + } else { + this.low = this.low >>> places | this.high << 32 - places; + this.high = this.high >>> places | 0; + } + } + + shiftLeft(places) { + if (places >= 32) { + this.high = this.low << places - 32; + this.low = 0; + } else { + this.high = this.high << places | this.low >>> 32 - places; + this.low <<= places; + } + } + + rotateRight(places) { + let low, high; + + if (places & 32) { + high = this.low; + low = this.high; + } else { + low = this.low; + high = this.high; + } + + places &= 31; + this.low = low >>> places | high << 32 - places; + this.high = high >>> places | low << 32 - places; + } + + not() { + this.high = ~this.high; + this.low = ~this.low; + } + + add(word) { + const lowAdd = (this.low >>> 0) + (word.low >>> 0); + let highAdd = (this.high >>> 0) + (word.high >>> 0); + + if (lowAdd > 0xffffffff) { + highAdd += 1; + } + + this.low = lowAdd | 0; + this.high = highAdd | 0; + } + + copyTo(bytes, offset) { + bytes[offset] = this.high >>> 24 & 0xff; + bytes[offset + 1] = this.high >> 16 & 0xff; + bytes[offset + 2] = this.high >> 8 & 0xff; + bytes[offset + 3] = this.high & 0xff; + bytes[offset + 4] = this.low >>> 24 & 0xff; + bytes[offset + 5] = this.low >> 16 & 0xff; + bytes[offset + 6] = this.low >> 8 & 0xff; + bytes[offset + 7] = this.low & 0xff; + } + + assign(word) { + this.high = word.high; + this.low = word.low; + } + +} + +const calculateSHA256 = function calculateSHA256Closure() { + function rotr(x, n) { + return x >>> n | x << 32 - n; + } + + function ch(x, y, z) { + return x & y ^ ~x & z; + } + + function maj(x, y, z) { + return x & y ^ x & z ^ y & z; + } + + function sigma(x) { + return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); + } + + function sigmaPrime(x) { + return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); + } + + function littleSigma(x) { + return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; + } + + function littleSigmaPrime(x) { + return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; + } + + const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; + + function hash(data, offset, length) { + let h0 = 0x6a09e667, + h1 = 0xbb67ae85, + h2 = 0x3c6ef372, + h3 = 0xa54ff53a, + h4 = 0x510e527f, + h5 = 0x9b05688c, + h6 = 0x1f83d9ab, + h7 = 0x5be0cd19; + const paddedLength = Math.ceil((length + 9) / 64) * 64; + const padded = new Uint8Array(paddedLength); + let i, j; + + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + + padded[i++] = 0x80; + const n = paddedLength - 8; + + while (i < n) { + padded[i++] = 0; + } + + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = length >>> 29 & 0xff; + padded[i++] = length >> 21 & 0xff; + padded[i++] = length >> 13 & 0xff; + padded[i++] = length >> 5 & 0xff; + padded[i++] = length << 3 & 0xff; + const w = new Uint32Array(64); + + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; + i += 4; + } + + for (j = 16; j < 64; ++j) { + w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; + } + + let a = h0, + b = h1, + c = h2, + d = h3, + e = h4, + f = h5, + g = h6, + h = h7, + t1, + t2; + + for (j = 0; j < 64; ++j) { + t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; + t2 = sigma(a) + maj(a, b, c); + h = g; + g = f; + f = e; + e = d + t1 | 0; + d = c; + c = b; + b = a; + a = t1 + t2 | 0; + } + + h0 = h0 + a | 0; + h1 = h1 + b | 0; + h2 = h2 + c | 0; + h3 = h3 + d | 0; + h4 = h4 + e | 0; + h5 = h5 + f | 0; + h6 = h6 + g | 0; + h7 = h7 + h | 0; + } + + return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); + } + + return hash; +}(); + +exports.calculateSHA256 = calculateSHA256; + +const calculateSHA512 = function calculateSHA512Closure() { + function ch(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.not(); + tmp.and(z); + result.xor(tmp); + } + + function maj(result, x, y, z, tmp) { + result.assign(x); + result.and(y); + tmp.assign(x); + tmp.and(z); + result.xor(tmp); + tmp.assign(y); + tmp.and(z); + result.xor(tmp); + } + + function sigma(result, x, tmp) { + result.assign(x); + result.rotateRight(28); + tmp.assign(x); + tmp.rotateRight(34); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(39); + result.xor(tmp); + } + + function sigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(14); + tmp.assign(x); + tmp.rotateRight(18); + result.xor(tmp); + tmp.assign(x); + tmp.rotateRight(41); + result.xor(tmp); + } + + function littleSigma(result, x, tmp) { + result.assign(x); + result.rotateRight(1); + tmp.assign(x); + tmp.rotateRight(8); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(7); + result.xor(tmp); + } + + function littleSigmaPrime(result, x, tmp) { + result.assign(x); + result.rotateRight(19); + tmp.assign(x); + tmp.rotateRight(61); + result.xor(tmp); + tmp.assign(x); + tmp.shiftRight(6); + result.xor(tmp); + } + + const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; + + function hash(data, offset, length, mode384 = false) { + let h0, h1, h2, h3, h4, h5, h6, h7; + + if (!mode384) { + h0 = new Word64(0x6a09e667, 0xf3bcc908); + h1 = new Word64(0xbb67ae85, 0x84caa73b); + h2 = new Word64(0x3c6ef372, 0xfe94f82b); + h3 = new Word64(0xa54ff53a, 0x5f1d36f1); + h4 = new Word64(0x510e527f, 0xade682d1); + h5 = new Word64(0x9b05688c, 0x2b3e6c1f); + h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); + h7 = new Word64(0x5be0cd19, 0x137e2179); + } else { + h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); + h1 = new Word64(0x629a292a, 0x367cd507); + h2 = new Word64(0x9159015a, 0x3070dd17); + h3 = new Word64(0x152fecd8, 0xf70e5939); + h4 = new Word64(0x67332667, 0xffc00b31); + h5 = new Word64(0x8eb44a87, 0x68581511); + h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); + h7 = new Word64(0x47b5481d, 0xbefa4fa4); + } + + const paddedLength = Math.ceil((length + 17) / 128) * 128; + const padded = new Uint8Array(paddedLength); + let i, j; + + for (i = 0; i < length; ++i) { + padded[i] = data[offset++]; + } + + padded[i++] = 0x80; + const n = paddedLength - 16; + + while (i < n) { + padded[i++] = 0; + } + + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = 0; + padded[i++] = length >>> 29 & 0xff; + padded[i++] = length >> 21 & 0xff; + padded[i++] = length >> 13 & 0xff; + padded[i++] = length >> 5 & 0xff; + padded[i++] = length << 3 & 0xff; + const w = new Array(80); + + for (i = 0; i < 80; i++) { + w[i] = new Word64(0, 0); + } + + let a = new Word64(0, 0), + b = new Word64(0, 0), + c = new Word64(0, 0); + let d = new Word64(0, 0), + e = new Word64(0, 0), + f = new Word64(0, 0); + let g = new Word64(0, 0), + h = new Word64(0, 0); + const t1 = new Word64(0, 0), + t2 = new Word64(0, 0); + const tmp1 = new Word64(0, 0), + tmp2 = new Word64(0, 0); + let tmp3; + + for (i = 0; i < paddedLength;) { + for (j = 0; j < 16; ++j) { + w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; + w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; + i += 8; + } + + for (j = 16; j < 80; ++j) { + tmp3 = w[j]; + littleSigmaPrime(tmp3, w[j - 2], tmp2); + tmp3.add(w[j - 7]); + littleSigma(tmp1, w[j - 15], tmp2); + tmp3.add(tmp1); + tmp3.add(w[j - 16]); + } + + a.assign(h0); + b.assign(h1); + c.assign(h2); + d.assign(h3); + e.assign(h4); + f.assign(h5); + g.assign(h6); + h.assign(h7); + + for (j = 0; j < 80; ++j) { + t1.assign(h); + sigmaPrime(tmp1, e, tmp2); + t1.add(tmp1); + ch(tmp1, e, f, g, tmp2); + t1.add(tmp1); + t1.add(k[j]); + t1.add(w[j]); + sigma(t2, a, tmp2); + maj(tmp1, a, b, c, tmp2); + t2.add(tmp1); + tmp3 = h; + h = g; + g = f; + f = e; + d.add(t1); + e = d; + d = c; + c = b; + b = a; + tmp3.assign(t1); + tmp3.add(t2); + a = tmp3; + } + + h0.add(a); + h1.add(b); + h2.add(c); + h3.add(d); + h4.add(e); + h5.add(f); + h6.add(g); + h7.add(h); + } + + let result; + + if (!mode384) { + result = new Uint8Array(64); + h0.copyTo(result, 0); + h1.copyTo(result, 8); + h2.copyTo(result, 16); + h3.copyTo(result, 24); + h4.copyTo(result, 32); + h5.copyTo(result, 40); + h6.copyTo(result, 48); + h7.copyTo(result, 56); + } else { + result = new Uint8Array(48); + h0.copyTo(result, 0); + h1.copyTo(result, 8); + h2.copyTo(result, 16); + h3.copyTo(result, 24); + h4.copyTo(result, 32); + h5.copyTo(result, 40); + } + + return result; + } + + return hash; +}(); + +exports.calculateSHA512 = calculateSHA512; + +function calculateSHA384(data, offset, length) { + return calculateSHA512(data, offset, length, true); +} + +class NullCipher { + decryptBlock(data) { + return data; + } + + encrypt(data) { + return data; + } + +} + +class AESBaseCipher { + constructor() { + if (this.constructor === AESBaseCipher) { + (0, _util.unreachable)("Cannot initialize AESBaseCipher."); + } + + this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); + this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); + this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); + this._mixCol = new Uint8Array(256); + + for (let i = 0; i < 256; i++) { + if (i < 128) { + this._mixCol[i] = i << 1; + } else { + this._mixCol[i] = i << 1 ^ 0x1b; + } + } + + this.buffer = new Uint8Array(16); + this.bufferPosition = 0; + } + + _expandKey(cipherKey) { + (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); + } + + _decrypt(input, key) { + let t, u, v; + const state = new Uint8Array(16); + state.set(input); + + for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + + for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + + for (let j = 0; j < 16; ++j) { + state[j] = this._inv_s[state[j]]; + } + + for (let j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + + for (let j = 0; j < 16; j += 4) { + const s0 = this._mix[state[j]]; + const s1 = this._mix[state[j + 1]]; + const s2 = this._mix[state[j + 2]]; + const s3 = this._mix[state[j + 3]]; + t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; + state[j] = t >>> 24 & 0xff; + state[j + 1] = t >> 16 & 0xff; + state[j + 2] = t >> 8 & 0xff; + state[j + 3] = t & 0xff; + } + } + + t = state[13]; + state[13] = state[9]; + state[9] = state[5]; + state[5] = state[1]; + state[1] = t; + t = state[14]; + u = state[10]; + state[14] = state[6]; + state[10] = state[2]; + state[6] = t; + state[2] = u; + t = state[15]; + u = state[11]; + v = state[7]; + state[15] = state[3]; + state[11] = t; + state[7] = u; + state[3] = v; + + for (let j = 0; j < 16; ++j) { + state[j] = this._inv_s[state[j]]; + state[j] ^= key[j]; + } + + return state; + } + + _encrypt(input, key) { + const s = this._s; + let t, u, v; + const state = new Uint8Array(16); + state.set(input); + + for (let j = 0; j < 16; ++j) { + state[j] ^= key[j]; + } + + for (let i = 1; i < this._cyclesOfRepetition; i++) { + for (let j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + + for (let j = 0; j < 16; j += 4) { + const s0 = state[j + 0]; + const s1 = state[j + 1]; + const s2 = state[j + 2]; + const s3 = state[j + 3]; + t = s0 ^ s1 ^ s2 ^ s3; + state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; + state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; + state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; + state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; + } + + for (let j = 0, k = i * 16; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + } + + for (let j = 0; j < 16; ++j) { + state[j] = s[state[j]]; + } + + v = state[1]; + state[1] = state[5]; + state[5] = state[9]; + state[9] = state[13]; + state[13] = v; + v = state[2]; + u = state[6]; + state[2] = state[10]; + state[6] = state[14]; + state[10] = v; + state[14] = u; + v = state[3]; + u = state[7]; + t = state[11]; + state[3] = state[15]; + state[7] = v; + state[11] = u; + state[15] = t; + + for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { + state[j] ^= key[k]; + } + + return state; + } + + _decryptBlock2(data, finalize) { + const sourceLength = data.length; + let buffer = this.buffer, + bufferLength = this.bufferPosition; + const result = []; + let iv = this.iv; + + for (let i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + + if (bufferLength < 16) { + continue; + } + + const plain = this._decrypt(buffer, this._key); + + for (let j = 0; j < 16; ++j) { + plain[j] ^= iv[j]; + } + + iv = buffer; + result.push(plain); + buffer = new Uint8Array(16); + bufferLength = 0; + } + + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + + if (result.length === 0) { + return new Uint8Array(0); + } + + let outputLength = 16 * result.length; + + if (finalize) { + const lastBlock = result.at(-1); + let psLen = lastBlock[15]; + + if (psLen <= 16) { + for (let i = 15, ii = 16 - psLen; i >= ii; --i) { + if (lastBlock[i] !== psLen) { + psLen = 0; + break; + } + } + + outputLength -= psLen; + result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); + } + } + + const output = new Uint8Array(outputLength); + + for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + + return output; + } + + decryptBlock(data, finalize, iv = null) { + const sourceLength = data.length; + const buffer = this.buffer; + let bufferLength = this.bufferPosition; + + if (iv) { + this.iv = iv; + } else { + for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { + buffer[bufferLength] = data[i]; + } + + if (bufferLength < 16) { + this.bufferLength = bufferLength; + return new Uint8Array(0); + } + + this.iv = buffer; + data = data.subarray(16); + } + + this.buffer = new Uint8Array(16); + this.bufferLength = 0; + this.decryptBlock = this._decryptBlock2; + return this.decryptBlock(data, finalize); + } + + encrypt(data, iv) { + const sourceLength = data.length; + let buffer = this.buffer, + bufferLength = this.bufferPosition; + const result = []; + + if (!iv) { + iv = new Uint8Array(16); + } + + for (let i = 0; i < sourceLength; ++i) { + buffer[bufferLength] = data[i]; + ++bufferLength; + + if (bufferLength < 16) { + continue; + } + + for (let j = 0; j < 16; ++j) { + buffer[j] ^= iv[j]; + } + + const cipher = this._encrypt(buffer, this._key); + + iv = cipher; + result.push(cipher); + buffer = new Uint8Array(16); + bufferLength = 0; + } + + this.buffer = buffer; + this.bufferLength = bufferLength; + this.iv = iv; + + if (result.length === 0) { + return new Uint8Array(0); + } + + const outputLength = 16 * result.length; + const output = new Uint8Array(outputLength); + + for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { + output.set(result[i], j); + } + + return output; + } + +} + +class AES128Cipher extends AESBaseCipher { + constructor(key) { + super(); + this._cyclesOfRepetition = 10; + this._keySize = 160; + this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); + this._key = this._expandKey(key); + } + + _expandKey(cipherKey) { + const b = 176; + const s = this._s; + const rcon = this._rcon; + const result = new Uint8Array(b); + result.set(cipherKey); + + for (let j = 16, i = 1; j < b; ++i) { + let t1 = result[j - 3]; + let t2 = result[j - 2]; + let t3 = result[j - 1]; + let t4 = result[j - 4]; + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + t1 ^= rcon[i]; + + for (let n = 0; n < 4; ++n) { + result[j] = t1 ^= result[j - 16]; + j++; + result[j] = t2 ^= result[j - 16]; + j++; + result[j] = t3 ^= result[j - 16]; + j++; + result[j] = t4 ^= result[j - 16]; + j++; + } + } + + return result; + } + +} + +exports.AES128Cipher = AES128Cipher; + +class AES256Cipher extends AESBaseCipher { + constructor(key) { + super(); + this._cyclesOfRepetition = 14; + this._keySize = 224; + this._key = this._expandKey(key); + } + + _expandKey(cipherKey) { + const b = 240; + const s = this._s; + const result = new Uint8Array(b); + result.set(cipherKey); + let r = 1; + let t1, t2, t3, t4; + + for (let j = 32, i = 1; j < b; ++i) { + if (j % 32 === 16) { + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + } else if (j % 32 === 0) { + t1 = result[j - 3]; + t2 = result[j - 2]; + t3 = result[j - 1]; + t4 = result[j - 4]; + t1 = s[t1]; + t2 = s[t2]; + t3 = s[t3]; + t4 = s[t4]; + t1 ^= r; + + if ((r <<= 1) >= 256) { + r = (r ^ 0x1b) & 0xff; + } + } + + for (let n = 0; n < 4; ++n) { + result[j] = t1 ^= result[j - 32]; + j++; + result[j] = t2 ^= result[j - 32]; + j++; + result[j] = t3 ^= result[j - 32]; + j++; + result[j] = t4 ^= result[j - 32]; + j++; + } + } + + return result; + } + +} + +exports.AES256Cipher = AES256Cipher; + +class PDF17 { + checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + const result = calculateSHA256(hashData, 0, hashData.length); + return (0, _util.isArrayEqual)(result, ownerPassword); + } + + checkUserPassword(password, userValidationSalt, userPassword) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + const result = calculateSHA256(hashData, 0, hashData.length); + return (0, _util.isArrayEqual)(result, userPassword); + } + + getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + const key = calculateSHA256(hashData, 0, hashData.length); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); + } + + getUserKey(password, userKeySalt, userEncryption) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + const key = calculateSHA256(hashData, 0, hashData.length); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); + } + +} + +exports.PDF17 = PDF17; + +const PDF20 = function PDF20Closure() { + function calculatePDF20Hash(password, input, userBytes) { + let k = calculateSHA256(input, 0, input.length).subarray(0, 32); + let e = [0]; + let i = 0; + + while (i < 64 || e.at(-1) > i - 32) { + const combinedLength = password.length + k.length + userBytes.length, + combinedArray = new Uint8Array(combinedLength); + let writeOffset = 0; + combinedArray.set(password, writeOffset); + writeOffset += password.length; + combinedArray.set(k, writeOffset); + writeOffset += k.length; + combinedArray.set(userBytes, writeOffset); + const k1 = new Uint8Array(combinedLength * 64); + + for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) { + k1.set(combinedArray, pos); + } + + const cipher = new AES128Cipher(k.subarray(0, 16)); + e = cipher.encrypt(k1, k.subarray(16, 32)); + let remainder = 0; + + for (let z = 0; z < 16; z++) { + remainder *= 256 % 3; + remainder %= 3; + remainder += (e[z] >>> 0) % 3; + remainder %= 3; + } + + if (remainder === 0) { + k = calculateSHA256(e, 0, e.length); + } else if (remainder === 1) { + k = calculateSHA384(e, 0, e.length); + } else if (remainder === 2) { + k = calculateSHA512(e, 0, e.length); + } + + i++; + } + + return k.subarray(0, 32); + } + + class PDF20 { + hash(password, concatBytes, userBytes) { + return calculatePDF20Hash(password, concatBytes, userBytes); + } + + checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerValidationSalt, password.length); + hashData.set(userBytes, password.length + ownerValidationSalt.length); + const result = calculatePDF20Hash(password, hashData, userBytes); + return (0, _util.isArrayEqual)(result, ownerPassword); + } + + checkUserPassword(password, userValidationSalt, userPassword) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userValidationSalt, password.length); + const result = calculatePDF20Hash(password, hashData, []); + return (0, _util.isArrayEqual)(result, userPassword); + } + + getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { + const hashData = new Uint8Array(password.length + 56); + hashData.set(password, 0); + hashData.set(ownerKeySalt, password.length); + hashData.set(userBytes, password.length + ownerKeySalt.length); + const key = calculatePDF20Hash(password, hashData, userBytes); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); + } + + getUserKey(password, userKeySalt, userEncryption) { + const hashData = new Uint8Array(password.length + 8); + hashData.set(password, 0); + hashData.set(userKeySalt, password.length); + const key = calculatePDF20Hash(password, hashData, []); + const cipher = new AES256Cipher(key); + return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); + } + + } + + return PDF20; +}(); + +exports.PDF20 = PDF20; + +class CipherTransform { + constructor(stringCipherConstructor, streamCipherConstructor) { + this.StringCipherConstructor = stringCipherConstructor; + this.StreamCipherConstructor = streamCipherConstructor; + } + + createStream(stream, length) { + const cipher = new this.StreamCipherConstructor(); + return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { + return cipher.decryptBlock(data, finalize); + }); + } + + decryptString(s) { + const cipher = new this.StringCipherConstructor(); + let data = (0, _util.stringToBytes)(s); + data = cipher.decryptBlock(data, true); + return (0, _util.bytesToString)(data); + } + + encryptString(s) { + const cipher = new this.StringCipherConstructor(); + + if (cipher instanceof AESBaseCipher) { + const strLen = s.length; + const pad = 16 - strLen % 16; + s += String.fromCharCode(pad).repeat(pad); + const iv = new Uint8Array(16); + + if (typeof crypto !== "undefined") { + crypto.getRandomValues(iv); + } else { + for (let i = 0; i < 16; i++) { + iv[i] = Math.floor(256 * Math.random()); + } + } + + let data = (0, _util.stringToBytes)(s); + data = cipher.encrypt(data, iv); + const buf = new Uint8Array(16 + data.length); + buf.set(iv); + buf.set(data, 16); + return (0, _util.bytesToString)(buf); + } + + let data = (0, _util.stringToBytes)(s); + data = cipher.encrypt(data); + return (0, _util.bytesToString)(data); + } + +} + +const CipherTransformFactory = function CipherTransformFactoryClosure() { + const defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]); + + function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { + if (password) { + const passwordLength = Math.min(127, password.length); + password = password.subarray(0, passwordLength); + } else { + password = []; + } + + let pdfAlgorithm; + + if (revision === 6) { + pdfAlgorithm = new PDF20(); + } else { + pdfAlgorithm = new PDF17(); + } + + if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { + return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); + } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { + return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); + } + + return null; + } + + function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { + const hashDataSize = 40 + ownerPassword.length + fileId.length; + const hashData = new Uint8Array(hashDataSize); + let i = 0, + j, + n; + + if (password) { + n = Math.min(32, password.length); + + for (; i < n; ++i) { + hashData[i] = password[i]; + } + } + + j = 0; + + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + } + + for (j = 0, n = ownerPassword.length; j < n; ++j) { + hashData[i++] = ownerPassword[j]; + } + + hashData[i++] = flags & 0xff; + hashData[i++] = flags >> 8 & 0xff; + hashData[i++] = flags >> 16 & 0xff; + hashData[i++] = flags >>> 24 & 0xff; + + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + } + + if (revision >= 4 && !encryptMetadata) { + hashData[i++] = 0xff; + hashData[i++] = 0xff; + hashData[i++] = 0xff; + hashData[i++] = 0xff; + } + + let hash = calculateMD5(hashData, 0, i); + const keyLengthInBytes = keyLength >> 3; + + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, keyLengthInBytes); + } + } + + const encryptionKey = hash.subarray(0, keyLengthInBytes); + let cipher, checkData; + + if (revision >= 3) { + for (i = 0; i < 32; ++i) { + hashData[i] = defaultPasswordBytes[i]; + } + + for (j = 0, n = fileId.length; j < n; ++j) { + hashData[i++] = fileId[j]; + } + + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); + n = encryptionKey.length; + const derivedKey = new Uint8Array(n); + + for (j = 1; j <= 19; ++j) { + for (let k = 0; k < n; ++k) { + derivedKey[k] = encryptionKey[k] ^ j; + } + + cipher = new ARCFourCipher(derivedKey); + checkData = cipher.encryptBlock(checkData); + } + + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } else { + cipher = new ARCFourCipher(encryptionKey); + checkData = cipher.encryptBlock(defaultPasswordBytes); + + for (j = 0, n = checkData.length; j < n; ++j) { + if (userPassword[j] !== checkData[j]) { + return null; + } + } + } + + return encryptionKey; + } + + function decodeUserPassword(password, ownerPassword, revision, keyLength) { + const hashData = new Uint8Array(32); + let i = 0; + const n = Math.min(32, password.length); + + for (; i < n; ++i) { + hashData[i] = password[i]; + } + + let j = 0; + + while (i < 32) { + hashData[i++] = defaultPasswordBytes[j++]; + } + + let hash = calculateMD5(hashData, 0, i); + const keyLengthInBytes = keyLength >> 3; + + if (revision >= 3) { + for (j = 0; j < 50; ++j) { + hash = calculateMD5(hash, 0, hash.length); + } + } + + let cipher, userPassword; + + if (revision >= 3) { + userPassword = ownerPassword; + const derivedKey = new Uint8Array(keyLengthInBytes); + + for (j = 19; j >= 0; j--) { + for (let k = 0; k < keyLengthInBytes; ++k) { + derivedKey[k] = hash[k] ^ j; + } + + cipher = new ARCFourCipher(derivedKey); + userPassword = cipher.encryptBlock(userPassword); + } + } else { + cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); + userPassword = cipher.encryptBlock(ownerPassword); + } + + return userPassword; + } + + const identityName = _primitives.Name.get("Identity"); + + function buildObjectKey(num, gen, encryptionKey, isAes = false) { + const key = new Uint8Array(encryptionKey.length + 9); + const n = encryptionKey.length; + let i; + + for (i = 0; i < n; ++i) { + key[i] = encryptionKey[i]; + } + + key[i++] = num & 0xff; + key[i++] = num >> 8 & 0xff; + key[i++] = num >> 16 & 0xff; + key[i++] = gen & 0xff; + key[i++] = gen >> 8 & 0xff; + + if (isAes) { + key[i++] = 0x73; + key[i++] = 0x41; + key[i++] = 0x6c; + key[i++] = 0x54; + } + + const hash = calculateMD5(key, 0, i); + return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); + } + + function buildCipherConstructor(cf, name, num, gen, key) { + if (!(name instanceof _primitives.Name)) { + throw new _util.FormatError("Invalid crypt filter name."); + } + + const cryptFilter = cf.get(name.name); + let cfm; + + if (cryptFilter !== null && cryptFilter !== undefined) { + cfm = cryptFilter.get("CFM"); + } + + if (!cfm || cfm.name === "None") { + return function cipherTransformFactoryBuildCipherConstructorNone() { + return new NullCipher(); + }; + } + + if (cfm.name === "V2") { + return function cipherTransformFactoryBuildCipherConstructorV2() { + return new ARCFourCipher(buildObjectKey(num, gen, key, false)); + }; + } + + if (cfm.name === "AESV2") { + return function cipherTransformFactoryBuildCipherConstructorAESV2() { + return new AES128Cipher(buildObjectKey(num, gen, key, true)); + }; + } + + if (cfm.name === "AESV3") { + return function cipherTransformFactoryBuildCipherConstructorAESV3() { + return new AES256Cipher(key); + }; + } + + throw new _util.FormatError("Unknown crypto method"); + } + + class CipherTransformFactory { + constructor(dict, fileId, password) { + const filter = dict.get("Filter"); + + if (!(0, _primitives.isName)(filter, "Standard")) { + throw new _util.FormatError("unknown encryption method"); + } + + this.filterName = filter.name; + this.dict = dict; + const algorithm = dict.get("V"); + + if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { + throw new _util.FormatError("unsupported encryption algorithm"); + } + + this.algorithm = algorithm; + let keyLength = dict.get("Length"); + + if (!keyLength) { + if (algorithm <= 3) { + keyLength = 40; + } else { + const cfDict = dict.get("CF"); + const streamCryptoName = dict.get("StmF"); + + if (cfDict instanceof _primitives.Dict && streamCryptoName instanceof _primitives.Name) { + cfDict.suppressEncryption = true; + const handlerDict = cfDict.get(streamCryptoName.name); + keyLength = handlerDict && handlerDict.get("Length") || 128; + + if (keyLength < 40) { + keyLength <<= 3; + } + } + } + } + + if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { + throw new _util.FormatError("invalid key length"); + } + + const ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); + const userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); + const flags = dict.get("P"); + const revision = dict.get("R"); + const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; + this.encryptMetadata = encryptMetadata; + const fileIdBytes = (0, _util.stringToBytes)(fileId); + let passwordBytes; + + if (password) { + if (revision === 6) { + try { + password = (0, _util.utf8StringToString)(password); + } catch (ex) { + (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); + } + } + + passwordBytes = (0, _util.stringToBytes)(password); + } + + let encryptionKey; + + if (algorithm !== 5) { + encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); + } else { + const ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); + const ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); + const uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); + const userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); + const userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); + const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); + const userEncryption = (0, _util.stringToBytes)(dict.get("UE")); + const perms = (0, _util.stringToBytes)(dict.get("Perms")); + encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms); + } + + if (!encryptionKey && !password) { + throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); + } else if (!encryptionKey && password) { + const decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); + encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); + } + + if (!encryptionKey) { + throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); + } + + this.encryptionKey = encryptionKey; + + if (algorithm >= 4) { + const cf = dict.get("CF"); + + if (cf instanceof _primitives.Dict) { + cf.suppressEncryption = true; + } + + this.cf = cf; + this.stmf = dict.get("StmF") || identityName; + this.strf = dict.get("StrF") || identityName; + this.eff = dict.get("EFF") || this.stmf; + } + } + + createCipherTransform(num, gen) { + if (this.algorithm === 4 || this.algorithm === 5) { + return new CipherTransform(buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey)); + } + + const key = buildObjectKey(num, gen, this.encryptionKey, false); + + const cipherConstructor = function buildCipherCipherConstructor() { + return new ARCFourCipher(key); + }; + + return new CipherTransform(cipherConstructor, cipherConstructor); + } + + } + + return CipherTransformFactory; +}(); + +exports.CipherTransformFactory = CipherTransformFactory; + +/***/ }), +/* 68 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.DecryptStream = void 0; + +var _decode_stream = __w_pdfjs_require__(19); + +const chunkSize = 512; + +class DecryptStream extends _decode_stream.DecodeStream { + constructor(str, maybeLength, decrypt) { + super(maybeLength); + this.str = str; + this.dict = str.dict; + this.decrypt = decrypt; + this.nextChunk = null; + this.initialized = false; + } + + readBlock() { + let chunk; + + if (this.initialized) { + chunk = this.nextChunk; + } else { + chunk = this.str.getBytes(chunkSize); + this.initialized = true; + } + + if (!chunk || chunk.length === 0) { + this.eof = true; + return; + } + + this.nextChunk = this.str.getBytes(chunkSize); + const hasMoreData = this.nextChunk && this.nextChunk.length > 0; + const decrypt = this.decrypt; + chunk = decrypt(chunk, !hasMoreData); + let bufferLength = this.bufferLength; + const n = chunk.length, + buffer = this.ensureBuffer(bufferLength + n); + + for (let i = 0; i < n; i++) { + buffer[bufferLength++] = chunk[i]; + } + + this.bufferLength = bufferLength; + } + +} + +exports.DecryptStream = DecryptStream; + +/***/ }), +/* 69 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Catalog = void 0; + +var _core_utils = __w_pdfjs_require__(6); + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _name_number_tree = __w_pdfjs_require__(70); + +var _base_stream = __w_pdfjs_require__(7); + +var _cleanup_helper = __w_pdfjs_require__(71); + +var _colorspace = __w_pdfjs_require__(14); + +var _file_spec = __w_pdfjs_require__(72); + +var _image_utils = __w_pdfjs_require__(59); + +var _metadata_parser = __w_pdfjs_require__(73); + +var _struct_tree = __w_pdfjs_require__(74); + +function fetchDestination(dest) { + if (dest instanceof _primitives.Dict) { + dest = dest.get("D"); + } + + return Array.isArray(dest) ? dest : null; +} + +class Catalog { + constructor(pdfManager, xref) { + this.pdfManager = pdfManager; + this.xref = xref; + this._catDict = xref.getCatalogObj(); + + if (!(this._catDict instanceof _primitives.Dict)) { + throw new _util.FormatError("Catalog object is not a dictionary."); + } + + this.toplevelPagesDict; + this._actualNumPages = null; + this.fontCache = new _primitives.RefSetCache(); + this.builtInCMapCache = new Map(); + this.standardFontDataCache = new Map(); + this.globalImageCache = new _image_utils.GlobalImageCache(); + this.pageKidsCountCache = new _primitives.RefSetCache(); + this.pageIndexCache = new _primitives.RefSetCache(); + this.nonBlendModesSet = new _primitives.RefSet(); + } + + get version() { + const version = this._catDict.get("Version"); + + return (0, _util.shadow)(this, "version", version instanceof _primitives.Name ? version.name : null); + } + + get lang() { + const lang = this._catDict.get("Lang"); + + return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null); + } + + get needsRendering() { + const needsRendering = this._catDict.get("NeedsRendering"); + + return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false); + } + + get collection() { + let collection = null; + + try { + const obj = this._catDict.get("Collection"); + + if (obj instanceof _primitives.Dict && obj.size > 0) { + collection = obj; + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); + } + + return (0, _util.shadow)(this, "collection", collection); + } + + get acroForm() { + let acroForm = null; + + try { + const obj = this._catDict.get("AcroForm"); + + if (obj instanceof _primitives.Dict && obj.size > 0) { + acroForm = obj; + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); + } + + return (0, _util.shadow)(this, "acroForm", acroForm); + } + + get acroFormRef() { + const value = this._catDict.getRaw("AcroForm"); + + return (0, _util.shadow)(this, "acroFormRef", value instanceof _primitives.Ref ? value : null); + } + + get metadata() { + const streamRef = this._catDict.getRaw("Metadata"); + + if (!(streamRef instanceof _primitives.Ref)) { + return (0, _util.shadow)(this, "metadata", null); + } + + let metadata = null; + + try { + const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); + const stream = this.xref.fetch(streamRef, suppressEncryption); + + if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) { + const type = stream.dict.get("Type"); + const subtype = stream.dict.get("Subtype"); + + if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { + const data = (0, _util.stringToUTF8String)(stream.getString()); + + if (data) { + metadata = new _metadata_parser.MetadataParser(data).serializable; + } + } + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.info)(`Skipping invalid Metadata: "${ex}".`); + } + + return (0, _util.shadow)(this, "metadata", metadata); + } + + get markInfo() { + let markInfo = null; + + try { + markInfo = this._readMarkInfo(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)("Unable to read mark info."); + } + + return (0, _util.shadow)(this, "markInfo", markInfo); + } + + _readMarkInfo() { + const obj = this._catDict.get("MarkInfo"); + + if (!(obj instanceof _primitives.Dict)) { + return null; + } + + const markInfo = { + Marked: false, + UserProperties: false, + Suspects: false + }; + + for (const key in markInfo) { + const value = obj.get(key); + + if (typeof value === "boolean") { + markInfo[key] = value; + } + } + + return markInfo; + } + + get structTreeRoot() { + let structTree = null; + + try { + structTree = this._readStructTreeRoot(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)("Unable read to structTreeRoot info."); + } + + return (0, _util.shadow)(this, "structTreeRoot", structTree); + } + + _readStructTreeRoot() { + const obj = this._catDict.get("StructTreeRoot"); + + if (!(obj instanceof _primitives.Dict)) { + return null; + } + + const root = new _struct_tree.StructTreeRoot(obj); + root.init(); + return root; + } + + get toplevelPagesDict() { + const pagesObj = this._catDict.get("Pages"); + + if (!(pagesObj instanceof _primitives.Dict)) { + throw new _util.FormatError("Invalid top-level pages dictionary."); + } + + return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); + } + + get documentOutline() { + let obj = null; + + try { + obj = this._readDocumentOutline(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)("Unable to read document outline."); + } + + return (0, _util.shadow)(this, "documentOutline", obj); + } + + _readDocumentOutline() { + let obj = this._catDict.get("Outlines"); + + if (!(obj instanceof _primitives.Dict)) { + return null; + } + + obj = obj.getRaw("First"); + + if (!(obj instanceof _primitives.Ref)) { + return null; + } + + const root = { + items: [] + }; + const queue = [{ + obj, + parent: root + }]; + const processed = new _primitives.RefSet(); + processed.put(obj); + const xref = this.xref, + blackColor = new Uint8ClampedArray(3); + + while (queue.length > 0) { + const i = queue.shift(); + const outlineDict = xref.fetchIfRef(i.obj); + + if (outlineDict === null) { + continue; + } + + if (!outlineDict.has("Title")) { + throw new _util.FormatError("Invalid outline item encountered."); + } + + const data = { + url: null, + dest: null + }; + Catalog.parseDestDictionary({ + destDict: outlineDict, + resultObj: data, + docBaseUrl: this.pdfManager.docBaseUrl + }); + const title = outlineDict.get("Title"); + const flags = outlineDict.get("F") || 0; + const color = outlineDict.getArray("C"); + const count = outlineDict.get("Count"); + let rgbColor = blackColor; + + if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { + rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); + } + + const outlineItem = { + dest: data.dest, + url: data.url, + unsafeUrl: data.unsafeUrl, + newWindow: data.newWindow, + title: (0, _util.stringToPDFString)(title), + color: rgbColor, + count: Number.isInteger(count) ? count : undefined, + bold: !!(flags & 2), + italic: !!(flags & 1), + items: [] + }; + i.parent.items.push(outlineItem); + obj = outlineDict.getRaw("First"); + + if (obj instanceof _primitives.Ref && !processed.has(obj)) { + queue.push({ + obj, + parent: outlineItem + }); + processed.put(obj); + } + + obj = outlineDict.getRaw("Next"); + + if (obj instanceof _primitives.Ref && !processed.has(obj)) { + queue.push({ + obj, + parent: i.parent + }); + processed.put(obj); + } + } + + return root.items.length > 0 ? root.items : null; + } + + get permissions() { + let permissions = null; + + try { + permissions = this._readPermissions(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)("Unable to read permissions."); + } + + return (0, _util.shadow)(this, "permissions", permissions); + } + + _readPermissions() { + const encrypt = this.xref.trailer.get("Encrypt"); + + if (!(encrypt instanceof _primitives.Dict)) { + return null; + } + + let flags = encrypt.get("P"); + + if (typeof flags !== "number") { + return null; + } + + flags += 2 ** 32; + const permissions = []; + + for (const key in _util.PermissionFlag) { + const value = _util.PermissionFlag[key]; + + if (flags & value) { + permissions.push(value); + } + } + + return permissions; + } + + get optionalContentConfig() { + let config = null; + + try { + const properties = this._catDict.get("OCProperties"); + + if (!properties) { + return (0, _util.shadow)(this, "optionalContentConfig", null); + } + + const defaultConfig = properties.get("D"); + + if (!defaultConfig) { + return (0, _util.shadow)(this, "optionalContentConfig", null); + } + + const groupsData = properties.get("OCGs"); + + if (!Array.isArray(groupsData)) { + return (0, _util.shadow)(this, "optionalContentConfig", null); + } + + const groups = []; + const groupRefs = []; + + for (const groupRef of groupsData) { + if (!(groupRef instanceof _primitives.Ref)) { + continue; + } + + groupRefs.push(groupRef); + const group = this.xref.fetchIfRef(groupRef); + groups.push({ + id: groupRef.toString(), + name: typeof group.get("Name") === "string" ? (0, _util.stringToPDFString)(group.get("Name")) : null, + intent: typeof group.get("Intent") === "string" ? (0, _util.stringToPDFString)(group.get("Intent")) : null + }); + } + + config = this._readOptionalContentConfig(defaultConfig, groupRefs); + config.groups = groups; + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`Unable to read optional content config: ${ex}`); + } + + return (0, _util.shadow)(this, "optionalContentConfig", config); + } + + _readOptionalContentConfig(config, contentGroupRefs) { + function parseOnOff(refs) { + const onParsed = []; + + if (Array.isArray(refs)) { + for (const value of refs) { + if (!(value instanceof _primitives.Ref)) { + continue; + } + + if (contentGroupRefs.includes(value)) { + onParsed.push(value.toString()); + } + } + } + + return onParsed; + } + + function parseOrder(refs, nestedLevels = 0) { + if (!Array.isArray(refs)) { + return null; + } + + const order = []; + + for (const value of refs) { + if (value instanceof _primitives.Ref && contentGroupRefs.includes(value)) { + parsedOrderRefs.put(value); + order.push(value.toString()); + continue; + } + + const nestedOrder = parseNestedOrder(value, nestedLevels); + + if (nestedOrder) { + order.push(nestedOrder); + } + } + + if (nestedLevels > 0) { + return order; + } + + const hiddenGroups = []; + + for (const groupRef of contentGroupRefs) { + if (parsedOrderRefs.has(groupRef)) { + continue; + } + + hiddenGroups.push(groupRef.toString()); + } + + if (hiddenGroups.length) { + order.push({ + name: null, + order: hiddenGroups + }); + } + + return order; + } + + function parseNestedOrder(ref, nestedLevels) { + if (++nestedLevels > MAX_NESTED_LEVELS) { + (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); + return null; + } + + const value = xref.fetchIfRef(ref); + + if (!Array.isArray(value)) { + return null; + } + + const nestedName = xref.fetchIfRef(value[0]); + + if (typeof nestedName !== "string") { + return null; + } + + const nestedOrder = parseOrder(value.slice(1), nestedLevels); + + if (!nestedOrder || !nestedOrder.length) { + return null; + } + + return { + name: (0, _util.stringToPDFString)(nestedName), + order: nestedOrder + }; + } + + const xref = this.xref, + parsedOrderRefs = new _primitives.RefSet(), + MAX_NESTED_LEVELS = 10; + return { + name: typeof config.get("Name") === "string" ? (0, _util.stringToPDFString)(config.get("Name")) : null, + creator: typeof config.get("Creator") === "string" ? (0, _util.stringToPDFString)(config.get("Creator")) : null, + baseState: config.get("BaseState") instanceof _primitives.Name ? config.get("BaseState").name : null, + on: parseOnOff(config.get("ON")), + off: parseOnOff(config.get("OFF")), + order: parseOrder(config.get("Order")), + groups: null + }; + } + + setActualNumPages(num = null) { + this._actualNumPages = num; + } + + get hasActualNumPages() { + return this._actualNumPages !== null; + } + + get _pagesCount() { + const obj = this.toplevelPagesDict.get("Count"); + + if (!Number.isInteger(obj)) { + throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); + } + + return (0, _util.shadow)(this, "_pagesCount", obj); + } + + get numPages() { + return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; + } + + get destinations() { + const obj = this._readDests(), + dests = Object.create(null); + + if (obj instanceof _name_number_tree.NameTree) { + for (const [key, value] of obj.getAll()) { + const dest = fetchDestination(value); + + if (dest) { + dests[(0, _util.stringToPDFString)(key)] = dest; + } + } + } else if (obj instanceof _primitives.Dict) { + obj.forEach(function (key, value) { + const dest = fetchDestination(value); + + if (dest) { + dests[key] = dest; + } + }); + } + + return (0, _util.shadow)(this, "destinations", dests); + } + + getDestination(id) { + const obj = this._readDests(); + + if (obj instanceof _name_number_tree.NameTree) { + const dest = fetchDestination(obj.get(id)); + + if (dest) { + return dest; + } + + const allDest = this.destinations[id]; + + if (allDest) { + (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`); + return allDest; + } + } else if (obj instanceof _primitives.Dict) { + const dest = fetchDestination(obj.get(id)); + + if (dest) { + return dest; + } + } + + return null; + } + + _readDests() { + const obj = this._catDict.get("Names"); + + if (obj && obj.has("Dests")) { + return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref); + } else if (this._catDict.has("Dests")) { + return this._catDict.get("Dests"); + } + + return undefined; + } + + get pageLabels() { + let obj = null; + + try { + obj = this._readPageLabels(); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)("Unable to read page labels."); + } + + return (0, _util.shadow)(this, "pageLabels", obj); + } + + _readPageLabels() { + const obj = this._catDict.getRaw("PageLabels"); + + if (!obj) { + return null; + } + + const pageLabels = new Array(this.numPages); + let style = null, + prefix = ""; + const numberTree = new _name_number_tree.NumberTree(obj, this.xref); + const nums = numberTree.getAll(); + let currentLabel = "", + currentIndex = 1; + + for (let i = 0, ii = this.numPages; i < ii; i++) { + const labelDict = nums.get(i); + + if (labelDict !== undefined) { + if (!(labelDict instanceof _primitives.Dict)) { + throw new _util.FormatError("PageLabel is not a dictionary."); + } + + if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { + throw new _util.FormatError("Invalid type in PageLabel dictionary."); + } + + if (labelDict.has("S")) { + const s = labelDict.get("S"); + + if (!(s instanceof _primitives.Name)) { + throw new _util.FormatError("Invalid style in PageLabel dictionary."); + } + + style = s.name; + } else { + style = null; + } + + if (labelDict.has("P")) { + const p = labelDict.get("P"); + + if (typeof p !== "string") { + throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); + } + + prefix = (0, _util.stringToPDFString)(p); + } else { + prefix = ""; + } + + if (labelDict.has("St")) { + const st = labelDict.get("St"); + + if (!(Number.isInteger(st) && st >= 1)) { + throw new _util.FormatError("Invalid start in PageLabel dictionary."); + } + + currentIndex = st; + } else { + currentIndex = 1; + } + } + + switch (style) { + case "D": + currentLabel = currentIndex; + break; + + case "R": + case "r": + currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); + break; + + case "A": + case "a": + const LIMIT = 26; + const A_UPPER_CASE = 0x41, + A_LOWER_CASE = 0x61; + const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; + const letterIndex = currentIndex - 1; + const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); + currentLabel = character.repeat(Math.floor(letterIndex / LIMIT) + 1); + break; + + default: + if (style) { + throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); + } + + currentLabel = ""; + } + + pageLabels[i] = prefix + currentLabel; + currentIndex++; + } + + return pageLabels; + } + + get pageLayout() { + const obj = this._catDict.get("PageLayout"); + + let pageLayout = ""; + + if (obj instanceof _primitives.Name) { + switch (obj.name) { + case "SinglePage": + case "OneColumn": + case "TwoColumnLeft": + case "TwoColumnRight": + case "TwoPageLeft": + case "TwoPageRight": + pageLayout = obj.name; + } + } + + return (0, _util.shadow)(this, "pageLayout", pageLayout); + } + + get pageMode() { + const obj = this._catDict.get("PageMode"); + + let pageMode = "UseNone"; + + if (obj instanceof _primitives.Name) { + switch (obj.name) { + case "UseNone": + case "UseOutlines": + case "UseThumbs": + case "FullScreen": + case "UseOC": + case "UseAttachments": + pageMode = obj.name; + } + } + + return (0, _util.shadow)(this, "pageMode", pageMode); + } + + get viewerPreferences() { + const obj = this._catDict.get("ViewerPreferences"); + + if (!(obj instanceof _primitives.Dict)) { + return (0, _util.shadow)(this, "viewerPreferences", null); + } + + let prefs = null; + + for (const key of obj.getKeys()) { + const value = obj.get(key); + let prefValue; + + switch (key) { + case "HideToolbar": + case "HideMenubar": + case "HideWindowUI": + case "FitWindow": + case "CenterWindow": + case "DisplayDocTitle": + case "PickTrayByPDFSize": + if (typeof value === "boolean") { + prefValue = value; + } + + break; + + case "NonFullScreenPageMode": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "UseNone": + case "UseOutlines": + case "UseThumbs": + case "UseOC": + prefValue = value.name; + break; + + default: + prefValue = "UseNone"; + } + } + + break; + + case "Direction": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "L2R": + case "R2L": + prefValue = value.name; + break; + + default: + prefValue = "L2R"; + } + } + + break; + + case "ViewArea": + case "ViewClip": + case "PrintArea": + case "PrintClip": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "MediaBox": + case "CropBox": + case "BleedBox": + case "TrimBox": + case "ArtBox": + prefValue = value.name; + break; + + default: + prefValue = "CropBox"; + } + } + + break; + + case "PrintScaling": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "None": + case "AppDefault": + prefValue = value.name; + break; + + default: + prefValue = "AppDefault"; + } + } + + break; + + case "Duplex": + if (value instanceof _primitives.Name) { + switch (value.name) { + case "Simplex": + case "DuplexFlipShortEdge": + case "DuplexFlipLongEdge": + prefValue = value.name; + break; + + default: + prefValue = "None"; + } + } + + break; + + case "PrintPageRange": + if (Array.isArray(value) && value.length % 2 === 0) { + const isValid = value.every((page, i, arr) => { + return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; + }); + + if (isValid) { + prefValue = value; + } + } + + break; + + case "NumCopies": + if (Number.isInteger(value) && value > 0) { + prefValue = value; + } + + break; + + default: + (0, _util.warn)(`Ignoring non-standard key in ViewerPreferences: ${key}.`); + continue; + } + + if (prefValue === undefined) { + (0, _util.warn)(`Bad value, for key "${key}", in ViewerPreferences: ${value}.`); + continue; + } + + if (!prefs) { + prefs = Object.create(null); + } + + prefs[key] = prefValue; + } + + return (0, _util.shadow)(this, "viewerPreferences", prefs); + } + + get openAction() { + const obj = this._catDict.get("OpenAction"); + + const openAction = Object.create(null); + + if (obj instanceof _primitives.Dict) { + const destDict = new _primitives.Dict(this.xref); + destDict.set("A", obj); + const resultObj = { + url: null, + dest: null, + action: null + }; + Catalog.parseDestDictionary({ + destDict, + resultObj + }); + + if (Array.isArray(resultObj.dest)) { + openAction.dest = resultObj.dest; + } else if (resultObj.action) { + openAction.action = resultObj.action; + } + } else if (Array.isArray(obj)) { + openAction.dest = obj; + } + + return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); + } + + get attachments() { + const obj = this._catDict.get("Names"); + + let attachments = null; + + if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) { + const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref); + + for (const [key, value] of nameTree.getAll()) { + const fs = new _file_spec.FileSpec(value, this.xref); + + if (!attachments) { + attachments = Object.create(null); + } + + attachments[(0, _util.stringToPDFString)(key)] = fs.serializable; + } + } + + return (0, _util.shadow)(this, "attachments", attachments); + } + + get xfaImages() { + const obj = this._catDict.get("Names"); + + let xfaImages = null; + + if (obj instanceof _primitives.Dict && obj.has("XFAImages")) { + const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref); + + for (const [key, value] of nameTree.getAll()) { + if (!xfaImages) { + xfaImages = new _primitives.Dict(this.xref); + } + + xfaImages.set((0, _util.stringToPDFString)(key), value); + } + } + + return (0, _util.shadow)(this, "xfaImages", xfaImages); + } + + _collectJavaScript() { + const obj = this._catDict.get("Names"); + + let javaScript = null; + + function appendIfJavaScriptDict(name, jsDict) { + if (!(jsDict instanceof _primitives.Dict)) { + return; + } + + if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) { + return; + } + + let js = jsDict.get("JS"); + + if (js instanceof _base_stream.BaseStream) { + js = js.getString(); + } else if (typeof js !== "string") { + return; + } + + if (javaScript === null) { + javaScript = new Map(); + } + + js = (0, _util.stringToPDFString)(js).replace(/\u0000/g, ""); + javaScript.set(name, js); + } + + if (obj instanceof _primitives.Dict && obj.has("JavaScript")) { + const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref); + + for (const [key, value] of nameTree.getAll()) { + appendIfJavaScriptDict((0, _util.stringToPDFString)(key), value); + } + } + + const openAction = this._catDict.get("OpenAction"); + + if (openAction) { + appendIfJavaScriptDict("OpenAction", openAction); + } + + return javaScript; + } + + get javaScript() { + const javaScript = this._collectJavaScript(); + + return (0, _util.shadow)(this, "javaScript", javaScript ? [...javaScript.values()] : null); + } + + get jsActions() { + const javaScript = this._collectJavaScript(); + + let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType); + + if (javaScript) { + if (!actions) { + actions = Object.create(null); + } + + for (const [key, val] of javaScript) { + if (key in actions) { + actions[key].push(val); + } else { + actions[key] = [val]; + } + } + } + + return (0, _util.shadow)(this, "jsActions", actions); + } + + async fontFallback(id, handler) { + const translatedFonts = await Promise.all(this.fontCache); + + for (const translatedFont of translatedFonts) { + if (translatedFont.loadedName === id) { + translatedFont.fallback(handler); + return; + } + } + } + + async cleanup(manuallyTriggered = false) { + (0, _cleanup_helper.clearGlobalCaches)(); + this.globalImageCache.clear(manuallyTriggered); + this.pageKidsCountCache.clear(); + this.pageIndexCache.clear(); + this.nonBlendModesSet.clear(); + const translatedFonts = await Promise.all(this.fontCache); + + for (const { + dict + } of translatedFonts) { + delete dict.cacheKey; + } + + this.fontCache.clear(); + this.builtInCMapCache.clear(); + this.standardFontDataCache.clear(); + } + + async getPageDict(pageIndex) { + const nodesToVisit = [this.toplevelPagesDict]; + const visitedNodes = new _primitives.RefSet(); + + const pagesRef = this._catDict.getRaw("Pages"); + + if (pagesRef instanceof _primitives.Ref) { + visitedNodes.put(pagesRef); + } + + const xref = this.xref, + pageKidsCountCache = this.pageKidsCountCache, + pageIndexCache = this.pageIndexCache; + let currentPageIndex = 0; + + while (nodesToVisit.length) { + const currentNode = nodesToVisit.pop(); + + if (currentNode instanceof _primitives.Ref) { + const count = pageKidsCountCache.get(currentNode); + + if (count >= 0 && currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + } + + if (visitedNodes.has(currentNode)) { + throw new _util.FormatError("Pages tree contains circular reference."); + } + + visitedNodes.put(currentNode); + const obj = await xref.fetchAsync(currentNode); + + if (obj instanceof _primitives.Dict) { + let type = obj.getRaw("Type"); + + if (type instanceof _primitives.Ref) { + type = await xref.fetchAsync(type); + } + + if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { + if (!pageKidsCountCache.has(currentNode)) { + pageKidsCountCache.put(currentNode, 1); + } + + if (!pageIndexCache.has(currentNode)) { + pageIndexCache.put(currentNode, currentPageIndex); + } + + if (currentPageIndex === pageIndex) { + return [obj, currentNode]; + } + + currentPageIndex++; + continue; + } + } + + nodesToVisit.push(obj); + continue; + } + + if (!(currentNode instanceof _primitives.Dict)) { + throw new _util.FormatError("Page dictionary kid reference points to wrong type of object."); + } + + const { + objId + } = currentNode; + let count = currentNode.getRaw("Count"); + + if (count instanceof _primitives.Ref) { + count = await xref.fetchAsync(count); + } + + if (Number.isInteger(count) && count >= 0) { + if (objId && !pageKidsCountCache.has(objId)) { + pageKidsCountCache.put(objId, count); + } + + if (currentPageIndex + count <= pageIndex) { + currentPageIndex += count; + continue; + } + } + + let kids = currentNode.getRaw("Kids"); + + if (kids instanceof _primitives.Ref) { + kids = await xref.fetchAsync(kids); + } + + if (!Array.isArray(kids)) { + let type = currentNode.getRaw("Type"); + + if (type instanceof _primitives.Ref) { + type = await xref.fetchAsync(type); + } + + if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Kids")) { + if (currentPageIndex === pageIndex) { + return [currentNode, null]; + } + + currentPageIndex++; + continue; + } + + throw new _util.FormatError("Page dictionary kids object is not an array."); + } + + for (let last = kids.length - 1; last >= 0; last--) { + nodesToVisit.push(kids[last]); + } + } + + throw new Error(`Page index ${pageIndex} not found.`); + } + + async getAllPageDicts(recoveryMode = false) { + const queue = [{ + currentNode: this.toplevelPagesDict, + posInKids: 0 + }]; + const visitedNodes = new _primitives.RefSet(); + + const pagesRef = this._catDict.getRaw("Pages"); + + if (pagesRef instanceof _primitives.Ref) { + visitedNodes.put(pagesRef); + } + + const map = new Map(), + xref = this.xref, + pageIndexCache = this.pageIndexCache; + let pageIndex = 0; + + function addPageDict(pageDict, pageRef) { + if (pageRef && !pageIndexCache.has(pageRef)) { + pageIndexCache.put(pageRef, pageIndex); + } + + map.set(pageIndex++, [pageDict, pageRef]); + } + + function addPageError(error) { + if (error instanceof _core_utils.XRefEntryException && !recoveryMode) { + throw error; + } + + map.set(pageIndex++, [error, null]); + } + + while (queue.length > 0) { + const queueItem = queue.at(-1); + const { + currentNode, + posInKids + } = queueItem; + let kids = currentNode.getRaw("Kids"); + + if (kids instanceof _primitives.Ref) { + try { + kids = await xref.fetchAsync(kids); + } catch (ex) { + addPageError(ex); + break; + } + } + + if (!Array.isArray(kids)) { + addPageError(new _util.FormatError("Page dictionary kids object is not an array.")); + break; + } + + if (posInKids >= kids.length) { + queue.pop(); + continue; + } + + const kidObj = kids[posInKids]; + let obj; + + if (kidObj instanceof _primitives.Ref) { + if (visitedNodes.has(kidObj)) { + addPageError(new _util.FormatError("Pages tree contains circular reference.")); + break; + } + + visitedNodes.put(kidObj); + + try { + obj = await xref.fetchAsync(kidObj); + } catch (ex) { + addPageError(ex); + break; + } + } else { + obj = kidObj; + } + + if (!(obj instanceof _primitives.Dict)) { + addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); + break; + } + + let type = obj.getRaw("Type"); + + if (type instanceof _primitives.Ref) { + try { + type = await xref.fetchAsync(type); + } catch (ex) { + addPageError(ex); + break; + } + } + + if ((0, _primitives.isName)(type, "Page") || !obj.has("Kids")) { + addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null); + } else { + queue.push({ + currentNode: obj, + posInKids: 0 + }); + } + + queueItem.posInKids++; + } + + return map; + } + + getPageIndex(pageRef) { + const cachedPageIndex = this.pageIndexCache.get(pageRef); + + if (cachedPageIndex !== undefined) { + return Promise.resolve(cachedPageIndex); + } + + const xref = this.xref; + + function pagesBeforeRef(kidRef) { + let total = 0, + parentRef; + return xref.fetchAsync(kidRef).then(function (node) { + if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !(node instanceof _primitives.Dict && !node.has("Type") && node.has("Contents"))) { + throw new _util.FormatError("The reference does not point to a /Page dictionary."); + } + + if (!node) { + return null; + } + + if (!(node instanceof _primitives.Dict)) { + throw new _util.FormatError("Node must be a dictionary."); + } + + parentRef = node.getRaw("Parent"); + return node.getAsync("Parent"); + }).then(function (parent) { + if (!parent) { + return null; + } + + if (!(parent instanceof _primitives.Dict)) { + throw new _util.FormatError("Parent must be a dictionary."); + } + + return parent.getAsync("Kids"); + }).then(function (kids) { + if (!kids) { + return null; + } + + const kidPromises = []; + let found = false; + + for (let i = 0, ii = kids.length; i < ii; i++) { + const kid = kids[i]; + + if (!(kid instanceof _primitives.Ref)) { + throw new _util.FormatError("Kid must be a reference."); + } + + if ((0, _primitives.isRefsEqual)(kid, kidRef)) { + found = true; + break; + } + + kidPromises.push(xref.fetchAsync(kid).then(function (obj) { + if (!(obj instanceof _primitives.Dict)) { + throw new _util.FormatError("Kid node must be a dictionary."); + } + + if (obj.has("Count")) { + total += obj.get("Count"); + } else { + total++; + } + })); + } + + if (!found) { + throw new _util.FormatError("Kid reference not found in parent's kids."); + } + + return Promise.all(kidPromises).then(function () { + return [total, parentRef]; + }); + }); + } + + let total = 0; + + const next = ref => pagesBeforeRef(ref).then(args => { + if (!args) { + this.pageIndexCache.put(pageRef, total); + return total; + } + + const [count, parentRef] = args; + total += count; + return next(parentRef); + }); + + return next(pageRef); + } + + get baseUrl() { + const uri = this._catDict.get("URI"); + + if (uri instanceof _primitives.Dict) { + const base = uri.get("Base"); + + if (typeof base === "string") { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(base, null, { + tryConvertEncoding: true + }); + + if (absoluteUrl) { + return (0, _util.shadow)(this, "baseUrl", absoluteUrl.href); + } + } + } + + return (0, _util.shadow)(this, "baseUrl", null); + } + + static parseDestDictionary(params) { + const destDict = params.destDict; + + if (!(destDict instanceof _primitives.Dict)) { + (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); + return; + } + + const resultObj = params.resultObj; + + if (typeof resultObj !== "object") { + (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); + return; + } + + const docBaseUrl = params.docBaseUrl || null; + let action = destDict.get("A"), + url, + dest; + + if (!(action instanceof _primitives.Dict)) { + if (destDict.has("Dest")) { + action = destDict.get("Dest"); + } else { + action = destDict.get("AA"); + + if (action instanceof _primitives.Dict) { + if (action.has("D")) { + action = action.get("D"); + } else if (action.has("U")) { + action = action.get("U"); + } + } + } + } + + if (action instanceof _primitives.Dict) { + const actionType = action.get("S"); + + if (!(actionType instanceof _primitives.Name)) { + (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); + return; + } + + const actionName = actionType.name; + + switch (actionName) { + case "ResetForm": + const flags = action.get("Flags"); + const include = ((typeof flags === "number" ? flags : 0) & 1) === 0; + const fields = []; + const refs = []; + + for (const obj of action.get("Fields") || []) { + if (obj instanceof _primitives.Ref) { + refs.push(obj.toString()); + } else if (typeof obj === "string") { + fields.push((0, _util.stringToPDFString)(obj)); + } + } + + resultObj.resetForm = { + fields, + refs, + include + }; + break; + + case "URI": + url = action.get("URI"); + + if (url instanceof _primitives.Name) { + url = "/" + url.name; + } + + break; + + case "GoTo": + dest = action.get("D"); + break; + + case "Launch": + case "GoToR": + const urlDict = action.get("F"); + + if (urlDict instanceof _primitives.Dict) { + url = urlDict.get("F") || null; + } else if (typeof urlDict === "string") { + url = urlDict; + } + + let remoteDest = action.get("D"); + + if (remoteDest) { + if (remoteDest instanceof _primitives.Name) { + remoteDest = remoteDest.name; + } + + if (typeof url === "string") { + const baseUrl = url.split("#")[0]; + + if (typeof remoteDest === "string") { + url = baseUrl + "#" + remoteDest; + } else if (Array.isArray(remoteDest)) { + url = baseUrl + "#" + JSON.stringify(remoteDest); + } + } + } + + const newWindow = action.get("NewWindow"); + + if (typeof newWindow === "boolean") { + resultObj.newWindow = newWindow; + } + + break; + + case "Named": + const namedAction = action.get("N"); + + if (namedAction instanceof _primitives.Name) { + resultObj.action = namedAction.name; + } + + break; + + case "JavaScript": + const jsAction = action.get("JS"); + let js; + + if (jsAction instanceof _base_stream.BaseStream) { + js = jsAction.getString(); + } else if (typeof jsAction === "string") { + js = jsAction; + } + + const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js)); + + if (jsURL) { + url = jsURL.url; + resultObj.newWindow = jsURL.newWindow; + break; + } + + default: + if (actionName === "JavaScript" || actionName === "SubmitForm") { + break; + } + + (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`); + break; + } + } else if (destDict.has("Dest")) { + dest = destDict.get("Dest"); + } + + if (typeof url === "string") { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, { + addDefaultProtocol: true, + tryConvertEncoding: true + }); + + if (absoluteUrl) { + resultObj.url = absoluteUrl.href; + } + + resultObj.unsafeUrl = url; + } + + if (dest) { + if (dest instanceof _primitives.Name) { + dest = dest.name; + } + + if (typeof dest === "string") { + resultObj.dest = (0, _util.stringToPDFString)(dest); + } else if (Array.isArray(dest)) { + resultObj.dest = dest; + } + } + } + +} + +exports.Catalog = Catalog; + +/***/ }), +/* 70 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NumberTree = exports.NameTree = void 0; + +var _primitives = __w_pdfjs_require__(5); + +var _util = __w_pdfjs_require__(2); + +class NameOrNumberTree { + constructor(root, xref, type) { + if (this.constructor === NameOrNumberTree) { + (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); + } + + this.root = root; + this.xref = xref; + this._type = type; + } + + getAll() { + const map = new Map(); + + if (!this.root) { + return map; + } + + const xref = this.xref; + const processed = new _primitives.RefSet(); + processed.put(this.root); + const queue = [this.root]; + + while (queue.length > 0) { + const obj = xref.fetchIfRef(queue.shift()); + + if (!(obj instanceof _primitives.Dict)) { + continue; + } + + if (obj.has("Kids")) { + const kids = obj.get("Kids"); + + if (!Array.isArray(kids)) { + continue; + } + + for (const kid of kids) { + if (processed.has(kid)) { + throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); + } + + queue.push(kid); + processed.put(kid); + } + + continue; + } + + const entries = obj.get(this._type); + + if (!Array.isArray(entries)) { + continue; + } + + for (let i = 0, ii = entries.length; i < ii; i += 2) { + map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1])); + } + } + + return map; + } + + get(key) { + if (!this.root) { + return null; + } + + const xref = this.xref; + let kidsOrEntries = xref.fetchIfRef(this.root); + let loopCount = 0; + const MAX_LEVELS = 10; + + while (kidsOrEntries.has("Kids")) { + if (++loopCount > MAX_LEVELS) { + (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); + return null; + } + + const kids = kidsOrEntries.get("Kids"); + + if (!Array.isArray(kids)) { + return null; + } + + let l = 0, + r = kids.length - 1; + + while (l <= r) { + const m = l + r >> 1; + const kid = xref.fetchIfRef(kids[m]); + const limits = kid.get("Limits"); + + if (key < xref.fetchIfRef(limits[0])) { + r = m - 1; + } else if (key > xref.fetchIfRef(limits[1])) { + l = m + 1; + } else { + kidsOrEntries = kid; + break; + } + } + + if (l > r) { + return null; + } + } + + const entries = kidsOrEntries.get(this._type); + + if (Array.isArray(entries)) { + let l = 0, + r = entries.length - 2; + + while (l <= r) { + const tmp = l + r >> 1, + m = tmp + (tmp & 1); + const currentKey = xref.fetchIfRef(entries[m]); + + if (key < currentKey) { + r = m - 2; + } else if (key > currentKey) { + l = m + 2; + } else { + return xref.fetchIfRef(entries[m + 1]); + } + } + } + + return null; + } + +} + +class NameTree extends NameOrNumberTree { + constructor(root, xref) { + super(root, xref, "Names"); + } + +} + +exports.NameTree = NameTree; + +class NumberTree extends NameOrNumberTree { + constructor(root, xref) { + super(root, xref, "Nums"); + } + +} + +exports.NumberTree = NumberTree; + +/***/ }), +/* 71 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.clearGlobalCaches = clearGlobalCaches; + +var _primitives = __w_pdfjs_require__(5); + +var _unicode = __w_pdfjs_require__(40); + +function clearGlobalCaches() { + (0, _primitives.clearPrimitiveCaches)(); + (0, _unicode.clearUnicodeCaches)(); +} + +/***/ }), +/* 72 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FileSpec = void 0; + +var _util = __w_pdfjs_require__(2); + +var _base_stream = __w_pdfjs_require__(7); + +var _primitives = __w_pdfjs_require__(5); + +function pickPlatformItem(dict) { + if (dict.has("UF")) { + return dict.get("UF"); + } else if (dict.has("F")) { + return dict.get("F"); + } else if (dict.has("Unix")) { + return dict.get("Unix"); + } else if (dict.has("Mac")) { + return dict.get("Mac"); + } else if (dict.has("DOS")) { + return dict.get("DOS"); + } + + return null; +} + +class FileSpec { + constructor(root, xref) { + if (!(root instanceof _primitives.Dict)) { + return; + } + + this.xref = xref; + this.root = root; + + if (root.has("FS")) { + this.fs = root.get("FS"); + } + + this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; + + if (root.has("RF")) { + (0, _util.warn)("Related file specifications are not supported"); + } + + this.contentAvailable = true; + + if (!root.has("EF")) { + this.contentAvailable = false; + (0, _util.warn)("Non-embedded file specifications are not supported"); + } + } + + get filename() { + if (!this._filename && this.root) { + const filename = pickPlatformItem(this.root) || "unnamed"; + this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/"); + } + + return this._filename; + } + + get content() { + if (!this.contentAvailable) { + return null; + } + + if (!this.contentRef && this.root) { + this.contentRef = pickPlatformItem(this.root.get("EF")); + } + + let content = null; + + if (this.contentRef) { + const fileObj = this.xref.fetchIfRef(this.contentRef); + + if (fileObj instanceof _base_stream.BaseStream) { + content = fileObj.getBytes(); + } else { + (0, _util.warn)("Embedded file specification points to non-existing/invalid content"); + } + } else { + (0, _util.warn)("Embedded file specification does not have a content"); + } + + return content; + } + + get serializable() { + return { + filename: this.filename, + content: this.content + }; + } + +} + +exports.FileSpec = FileSpec; + +/***/ }), +/* 73 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MetadataParser = void 0; + +var _xml_parser = __w_pdfjs_require__(66); + +class MetadataParser { + constructor(data) { + data = this._repair(data); + const parser = new _xml_parser.SimpleXMLParser({ + lowerCaseName: true + }); + const xmlDocument = parser.parseFromString(data); + this._metadataMap = new Map(); + this._data = data; + + if (xmlDocument) { + this._parse(xmlDocument); + } + } + + _repair(data) { + return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) { + const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { + return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); + }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { + switch (name) { + case "amp": + return "&"; + + case "apos": + return "'"; + + case "gt": + return ">"; + + case "lt": + return "<"; + + case "quot": + return '"'; + } + + throw new Error(`_repair: ${name} isn't defined.`); + }); + const charBuf = []; + + for (let i = 0, ii = bytes.length; i < ii; i += 2) { + const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); + + if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { + charBuf.push(String.fromCharCode(code)); + } else { + charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";"); + } + } + + return ">" + charBuf.join(""); + }); + } + + _getSequence(entry) { + const name = entry.nodeName; + + if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { + return null; + } + + return entry.childNodes.filter(node => node.nodeName === "rdf:li"); + } + + _parseArray(entry) { + if (!entry.hasChildNodes()) { + return; + } + + const [seqNode] = entry.childNodes; + const sequence = this._getSequence(seqNode) || []; + + this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim())); + } + + _parse(xmlDocument) { + let rdf = xmlDocument.documentElement; + + if (rdf.nodeName !== "rdf:rdf") { + rdf = rdf.firstChild; + + while (rdf && rdf.nodeName !== "rdf:rdf") { + rdf = rdf.nextSibling; + } + } + + if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { + return; + } + + for (const desc of rdf.childNodes) { + if (desc.nodeName !== "rdf:description") { + continue; + } + + for (const entry of desc.childNodes) { + const name = entry.nodeName; + + switch (name) { + case "#text": + continue; + + case "dc:creator": + case "dc:subject": + this._parseArray(entry); + + continue; + } + + this._metadataMap.set(name, entry.textContent.trim()); + } + } + } + + get serializable() { + return { + parsedData: this._metadataMap, + rawData: this._data + }; + } + +} + +exports.MetadataParser = MetadataParser; + +/***/ }), +/* 74 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StructTreeRoot = exports.StructTreePage = void 0; + +var _primitives = __w_pdfjs_require__(5); + +var _util = __w_pdfjs_require__(2); + +var _name_number_tree = __w_pdfjs_require__(70); + +const MAX_DEPTH = 40; +const StructElementType = { + PAGE_CONTENT: "PAGE_CONTENT", + STREAM_CONTENT: "STREAM_CONTENT", + OBJECT: "OBJECT", + ELEMENT: "ELEMENT" +}; + +class StructTreeRoot { + constructor(rootDict) { + this.dict = rootDict; + this.roleMap = new Map(); + } + + init() { + this.readRoleMap(); + } + + readRoleMap() { + const roleMapDict = this.dict.get("RoleMap"); + + if (!(roleMapDict instanceof _primitives.Dict)) { + return; + } + + roleMapDict.forEach((key, value) => { + if (!(value instanceof _primitives.Name)) { + return; + } + + this.roleMap.set(key, value.name); + }); + } + +} + +exports.StructTreeRoot = StructTreeRoot; + +class StructElementNode { + constructor(tree, dict) { + this.tree = tree; + this.dict = dict; + this.kids = []; + this.parseKids(); + } + + get role() { + const nameObj = this.dict.get("S"); + const name = nameObj instanceof _primitives.Name ? nameObj.name : ""; + const { + root + } = this.tree; + + if (root.roleMap.has(name)) { + return root.roleMap.get(name); + } + + return name; + } + + parseKids() { + let pageObjId = null; + const objRef = this.dict.getRaw("Pg"); + + if (objRef instanceof _primitives.Ref) { + pageObjId = objRef.toString(); + } + + const kids = this.dict.get("K"); + + if (Array.isArray(kids)) { + for (const kid of kids) { + const element = this.parseKid(pageObjId, kid); + + if (element) { + this.kids.push(element); + } + } + } else { + const element = this.parseKid(pageObjId, kids); + + if (element) { + this.kids.push(element); + } + } + } + + parseKid(pageObjId, kid) { + if (Number.isInteger(kid)) { + if (this.tree.pageDict.objId !== pageObjId) { + return null; + } + + return new StructElement({ + type: StructElementType.PAGE_CONTENT, + mcid: kid, + pageObjId + }); + } + + let kidDict = null; + + if (kid instanceof _primitives.Ref) { + kidDict = this.dict.xref.fetch(kid); + } else if (kid instanceof _primitives.Dict) { + kidDict = kid; + } + + if (!kidDict) { + return null; + } + + const pageRef = kidDict.getRaw("Pg"); + + if (pageRef instanceof _primitives.Ref) { + pageObjId = pageRef.toString(); + } + + const type = kidDict.get("Type") instanceof _primitives.Name ? kidDict.get("Type").name : null; + + if (type === "MCR") { + if (this.tree.pageDict.objId !== pageObjId) { + return null; + } + + return new StructElement({ + type: StructElementType.STREAM_CONTENT, + refObjId: kidDict.getRaw("Stm") instanceof _primitives.Ref ? kidDict.getRaw("Stm").toString() : null, + pageObjId, + mcid: kidDict.get("MCID") + }); + } + + if (type === "OBJR") { + if (this.tree.pageDict.objId !== pageObjId) { + return null; + } + + return new StructElement({ + type: StructElementType.OBJECT, + refObjId: kidDict.getRaw("Obj") instanceof _primitives.Ref ? kidDict.getRaw("Obj").toString() : null, + pageObjId + }); + } + + return new StructElement({ + type: StructElementType.ELEMENT, + dict: kidDict + }); + } + +} + +class StructElement { + constructor({ + type, + dict = null, + mcid = null, + pageObjId = null, + refObjId = null + }) { + this.type = type; + this.dict = dict; + this.mcid = mcid; + this.pageObjId = pageObjId; + this.refObjId = refObjId; + this.parentNode = null; + } + +} + +class StructTreePage { + constructor(structTreeRoot, pageDict) { + this.root = structTreeRoot; + this.rootDict = structTreeRoot ? structTreeRoot.dict : null; + this.pageDict = pageDict; + this.nodes = []; + } + + parse() { + if (!this.root || !this.rootDict) { + return; + } + + const parentTree = this.rootDict.get("ParentTree"); + + if (!parentTree) { + return; + } + + const id = this.pageDict.get("StructParents"); + + if (!Number.isInteger(id)) { + return; + } + + const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref); + const parentArray = numberTree.get(id); + + if (!Array.isArray(parentArray)) { + return; + } + + const map = new Map(); + + for (const ref of parentArray) { + if (ref instanceof _primitives.Ref) { + this.addNode(this.rootDict.xref.fetch(ref), map); + } + } + } + + addNode(dict, map, level = 0) { + if (level > MAX_DEPTH) { + (0, _util.warn)("StructTree MAX_DEPTH reached."); + return null; + } + + if (map.has(dict)) { + return map.get(dict); + } + + const element = new StructElementNode(this, dict); + map.set(dict, element); + const parent = dict.get("P"); + + if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) { + if (!this.addTopLevelNode(dict, element)) { + map.delete(dict); + } + + return element; + } + + const parentNode = this.addNode(parent, map, level + 1); + + if (!parentNode) { + return element; + } + + let save = false; + + for (const kid of parentNode.kids) { + if (kid.type === StructElementType.ELEMENT && kid.dict === dict) { + kid.parentNode = element; + save = true; + } + } + + if (!save) { + map.delete(dict); + } + + return element; + } + + addTopLevelNode(dict, element) { + const obj = this.rootDict.get("K"); + + if (!obj) { + return false; + } + + if (obj instanceof _primitives.Dict) { + if (obj.objId !== dict.objId) { + return false; + } + + this.nodes[0] = element; + return true; + } + + if (!Array.isArray(obj)) { + return true; + } + + let save = false; + + for (let i = 0; i < obj.length; i++) { + const kidRef = obj[i]; + + if (kidRef && kidRef.toString() === dict.objId) { + this.nodes[i] = element; + save = true; + } + } + + return save; + } + + get serializable() { + function nodeToSerializable(node, parent, level = 0) { + if (level > MAX_DEPTH) { + (0, _util.warn)("StructTree too deep to be fully serialized."); + return; + } + + const obj = Object.create(null); + obj.role = node.role; + obj.children = []; + parent.children.push(obj); + const alt = node.dict.get("Alt"); + + if (typeof alt === "string") { + obj.alt = (0, _util.stringToPDFString)(alt); + } + + const lang = node.dict.get("Lang"); + + if (typeof lang === "string") { + obj.lang = (0, _util.stringToPDFString)(lang); + } + + for (const kid of node.kids) { + const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null; + + if (kidElement) { + nodeToSerializable(kidElement, obj, level + 1); + continue; + } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) { + obj.children.push({ + type: "content", + id: `page${kid.pageObjId}_mcid${kid.mcid}` + }); + } else if (kid.type === StructElementType.OBJECT) { + obj.children.push({ + type: "object", + id: kid.refObjId + }); + } + } + } + + const root = Object.create(null); + root.children = []; + root.role = "Root"; + + for (const child of this.nodes) { + if (!child) { + continue; + } + + nodeToSerializable(child, root); + } + + return root; + } + +} + +exports.StructTreePage = StructTreePage; + +/***/ }), +/* 75 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ObjectLoader = void 0; + +var _primitives = __w_pdfjs_require__(5); + +var _base_stream = __w_pdfjs_require__(7); + +var _core_utils = __w_pdfjs_require__(6); + +var _util = __w_pdfjs_require__(2); + +function mayHaveChildren(value) { + return value instanceof _primitives.Ref || value instanceof _primitives.Dict || value instanceof _base_stream.BaseStream || Array.isArray(value); +} + +function addChildren(node, nodesToVisit) { + if (node instanceof _primitives.Dict) { + node = node.getRawValues(); + } else if (node instanceof _base_stream.BaseStream) { + node = node.dict.getRawValues(); + } else if (!Array.isArray(node)) { + return; + } + + for (const rawValue of node) { + if (mayHaveChildren(rawValue)) { + nodesToVisit.push(rawValue); + } + } +} + +class ObjectLoader { + constructor(dict, keys, xref) { + this.dict = dict; + this.keys = keys; + this.xref = xref; + this.refSet = null; + } + + async load() { + if (this.xref.stream.isDataLoaded) { + return undefined; + } + + const { + keys, + dict + } = this; + this.refSet = new _primitives.RefSet(); + const nodesToVisit = []; + + for (let i = 0, ii = keys.length; i < ii; i++) { + const rawValue = dict.getRaw(keys[i]); + + if (rawValue !== undefined) { + nodesToVisit.push(rawValue); + } + } + + return this._walk(nodesToVisit); + } + + async _walk(nodesToVisit) { + const nodesToRevisit = []; + const pendingRequests = []; + + while (nodesToVisit.length) { + let currentNode = nodesToVisit.pop(); + + if (currentNode instanceof _primitives.Ref) { + if (this.refSet.has(currentNode)) { + continue; + } + + try { + this.refSet.put(currentNode); + currentNode = this.xref.fetch(currentNode); + } catch (ex) { + if (!(ex instanceof _core_utils.MissingDataException)) { + (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`); + this.refSet = null; + const { + manager + } = this.xref.stream; + return manager.requestAllChunks(); + } + + nodesToRevisit.push(currentNode); + pendingRequests.push({ + begin: ex.begin, + end: ex.end + }); + } + } + + if (currentNode instanceof _base_stream.BaseStream) { + const baseStreams = currentNode.getBaseStreams(); + + if (baseStreams) { + let foundMissingData = false; + + for (const stream of baseStreams) { + if (stream.isDataLoaded) { + continue; + } + + foundMissingData = true; + pendingRequests.push({ + begin: stream.start, + end: stream.end + }); + } + + if (foundMissingData) { + nodesToRevisit.push(currentNode); + } + } + } + + addChildren(currentNode, nodesToVisit); + } + + if (pendingRequests.length) { + await this.xref.stream.manager.requestRanges(pendingRequests); + + for (const node of nodesToRevisit) { + if (node instanceof _primitives.Ref) { + this.refSet.remove(node); + } + } + + return this._walk(nodesToRevisit); + } + + this.refSet = null; + return undefined; + } + +} + +exports.ObjectLoader = ObjectLoader; + +/***/ }), +/* 76 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XFAFactory = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +var _bind = __w_pdfjs_require__(81); + +var _data = __w_pdfjs_require__(87); + +var _fonts = __w_pdfjs_require__(85); + +var _utils = __w_pdfjs_require__(78); + +var _util = __w_pdfjs_require__(2); + +var _parser = __w_pdfjs_require__(88); + +var _xhtml = __w_pdfjs_require__(98); + +class XFAFactory { + constructor(data) { + try { + this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data)); + const binder = new _bind.Binder(this.root); + this.form = binder.bind(); + this.dataHandler = new _data.DataHandler(this.root, binder.getData()); + this.form[_xfa_object.$globalData].template = this.form; + } catch (e) { + (0, _util.warn)(`XFA - an error occurred during parsing and binding: ${e}`); + } + } + + isValid() { + return this.root && this.form; + } + + _createPagesHelper() { + const iterator = this.form[_xfa_object.$toPages](); + + return new Promise((resolve, reject) => { + const nextIteration = () => { + try { + const value = iterator.next(); + + if (value.done) { + resolve(value.value); + } else { + setTimeout(nextIteration, 0); + } + } catch (e) { + reject(e); + } + }; + + setTimeout(nextIteration, 0); + }); + } + + async _createPages() { + try { + this.pages = await this._createPagesHelper(); + this.dims = this.pages.children.map(c => { + const { + width, + height + } = c.attributes.style; + return [0, 0, parseInt(width), parseInt(height)]; + }); + } catch (e) { + (0, _util.warn)(`XFA - an error occurred during layout: ${e}`); + } + } + + getBoundingBox(pageIndex) { + return this.dims[pageIndex]; + } + + async getNumPages() { + if (!this.pages) { + await this._createPages(); + } + + return this.dims.length; + } + + setImages(images) { + this.form[_xfa_object.$globalData].images = images; + } + + setFonts(fonts) { + this.form[_xfa_object.$globalData].fontFinder = new _fonts.FontFinder(fonts); + const missingFonts = []; + + for (let typeface of this.form[_xfa_object.$globalData].usedTypefaces) { + typeface = (0, _utils.stripQuotes)(typeface); + + const font = this.form[_xfa_object.$globalData].fontFinder.find(typeface); + + if (!font) { + missingFonts.push(typeface); + } + } + + if (missingFonts.length > 0) { + return missingFonts; + } + + return null; + } + + appendFonts(fonts, reallyMissingFonts) { + this.form[_xfa_object.$globalData].fontFinder.add(fonts, reallyMissingFonts); + } + + async getPages() { + if (!this.pages) { + await this._createPages(); + } + + const pages = this.pages; + this.pages = null; + return pages; + } + + serializeData(storage) { + return this.dataHandler.serialize(storage); + } + + static _createDocument(data) { + if (!data["/xdp:xdp"]) { + return data["xdp:xdp"]; + } + + return Object.values(data).join(""); + } + + static getRichTextAsHtml(rc) { + if (!rc || typeof rc !== "string") { + return null; + } + + try { + let root = new _parser.XFAParser(_xhtml.XhtmlNamespace, true).parse(rc); + + if (!["body", "xhtml"].includes(root[_xfa_object.$nodeName])) { + const newRoot = _xhtml.XhtmlNamespace.body({}); + + newRoot[_xfa_object.$appendChild](root); + + root = newRoot; + } + + const result = root[_xfa_object.$toHTML](); + + if (!result.success) { + return null; + } + + const { + html + } = result; + const { + attributes + } = html; + + if (attributes) { + if (attributes.class) { + attributes.class = attributes.class.filter(attr => !attr.startsWith("xfa")); + } + + attributes.dir = "auto"; + } + + return { + html, + str: root[_xfa_object.$text]() + }; + } catch (e) { + (0, _util.warn)(`XFA - an error occurred during parsing of rich text: ${e}`); + } + + return null; + } + +} + +exports.XFAFactory = XFAFactory; + +/***/ }), +/* 77 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = exports.$uid = exports.$toStyle = exports.$toString = exports.$toPages = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushPara = exports.$pushGlyphs = exports.$popPara = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0; + +var _utils = __w_pdfjs_require__(78); + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _namespaces = __w_pdfjs_require__(79); + +var _som = __w_pdfjs_require__(80); + +const $acceptWhitespace = Symbol(); +exports.$acceptWhitespace = $acceptWhitespace; +const $addHTML = Symbol(); +exports.$addHTML = $addHTML; +const $appendChild = Symbol(); +exports.$appendChild = $appendChild; +const $childrenToHTML = Symbol(); +exports.$childrenToHTML = $childrenToHTML; +const $clean = Symbol(); +exports.$clean = $clean; +const $cleanPage = Symbol(); +exports.$cleanPage = $cleanPage; +const $cleanup = Symbol(); +exports.$cleanup = $cleanup; +const $clone = Symbol(); +exports.$clone = $clone; +const $consumed = Symbol(); +exports.$consumed = $consumed; +const $content = Symbol("content"); +exports.$content = $content; +const $data = Symbol("data"); +exports.$data = $data; +const $dump = Symbol(); +exports.$dump = $dump; +const $extra = Symbol("extra"); +exports.$extra = $extra; +const $finalize = Symbol(); +exports.$finalize = $finalize; +const $flushHTML = Symbol(); +exports.$flushHTML = $flushHTML; +const $getAttributeIt = Symbol(); +exports.$getAttributeIt = $getAttributeIt; +const $getAttributes = Symbol(); +exports.$getAttributes = $getAttributes; +const $getAvailableSpace = Symbol(); +exports.$getAvailableSpace = $getAvailableSpace; +const $getChildrenByClass = Symbol(); +exports.$getChildrenByClass = $getChildrenByClass; +const $getChildrenByName = Symbol(); +exports.$getChildrenByName = $getChildrenByName; +const $getChildrenByNameIt = Symbol(); +exports.$getChildrenByNameIt = $getChildrenByNameIt; +const $getDataValue = Symbol(); +exports.$getDataValue = $getDataValue; +const $getExtra = Symbol(); +exports.$getExtra = $getExtra; +const $getRealChildrenByNameIt = Symbol(); +exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt; +const $getChildren = Symbol(); +exports.$getChildren = $getChildren; +const $getContainedChildren = Symbol(); +exports.$getContainedChildren = $getContainedChildren; +const $getNextPage = Symbol(); +exports.$getNextPage = $getNextPage; +const $getSubformParent = Symbol(); +exports.$getSubformParent = $getSubformParent; +const $getParent = Symbol(); +exports.$getParent = $getParent; +const $getTemplateRoot = Symbol(); +exports.$getTemplateRoot = $getTemplateRoot; +const $globalData = Symbol(); +exports.$globalData = $globalData; +const $hasSettableValue = Symbol(); +exports.$hasSettableValue = $hasSettableValue; +const $ids = Symbol(); +exports.$ids = $ids; +const $indexOf = Symbol(); +exports.$indexOf = $indexOf; +const $insertAt = Symbol(); +exports.$insertAt = $insertAt; +const $isCDATAXml = Symbol(); +exports.$isCDATAXml = $isCDATAXml; +const $isBindable = Symbol(); +exports.$isBindable = $isBindable; +const $isDataValue = Symbol(); +exports.$isDataValue = $isDataValue; +const $isDescendent = Symbol(); +exports.$isDescendent = $isDescendent; +const $isNsAgnostic = Symbol(); +exports.$isNsAgnostic = $isNsAgnostic; +const $isSplittable = Symbol(); +exports.$isSplittable = $isSplittable; +const $isThereMoreWidth = Symbol(); +exports.$isThereMoreWidth = $isThereMoreWidth; +const $isTransparent = Symbol(); +exports.$isTransparent = $isTransparent; +const $isUsable = Symbol(); +exports.$isUsable = $isUsable; +const $lastAttribute = Symbol(); +const $namespaceId = Symbol("namespaceId"); +exports.$namespaceId = $namespaceId; +const $nodeName = Symbol("nodeName"); +exports.$nodeName = $nodeName; +const $nsAttributes = Symbol(); +exports.$nsAttributes = $nsAttributes; +const $onChild = Symbol(); +exports.$onChild = $onChild; +const $onChildCheck = Symbol(); +exports.$onChildCheck = $onChildCheck; +const $onText = Symbol(); +exports.$onText = $onText; +const $pushGlyphs = Symbol(); +exports.$pushGlyphs = $pushGlyphs; +const $popPara = Symbol(); +exports.$popPara = $popPara; +const $pushPara = Symbol(); +exports.$pushPara = $pushPara; +const $removeChild = Symbol(); +exports.$removeChild = $removeChild; +const $root = Symbol("root"); +exports.$root = $root; +const $resolvePrototypes = Symbol(); +exports.$resolvePrototypes = $resolvePrototypes; +const $searchNode = Symbol(); +exports.$searchNode = $searchNode; +const $setId = Symbol(); +exports.$setId = $setId; +const $setSetAttributes = Symbol(); +exports.$setSetAttributes = $setSetAttributes; +const $setValue = Symbol(); +exports.$setValue = $setValue; +const $tabIndex = Symbol(); +exports.$tabIndex = $tabIndex; +const $text = Symbol(); +exports.$text = $text; +const $toPages = Symbol(); +exports.$toPages = $toPages; +const $toHTML = Symbol(); +exports.$toHTML = $toHTML; +const $toString = Symbol(); +exports.$toString = $toString; +const $toStyle = Symbol(); +exports.$toStyle = $toStyle; +const $uid = Symbol("uid"); +exports.$uid = $uid; + +const _applyPrototype = Symbol(); + +const _attributes = Symbol(); + +const _attributeNames = Symbol(); + +const _children = Symbol("_children"); + +const _cloneAttribute = Symbol(); + +const _dataValue = Symbol(); + +const _defaultValue = Symbol(); + +const _filteredChildrenGenerator = Symbol(); + +const _getPrototype = Symbol(); + +const _getUnsetAttributes = Symbol(); + +const _hasChildren = Symbol(); + +const _max = Symbol(); + +const _options = Symbol(); + +const _parent = Symbol("parent"); + +const _resolvePrototypesHelper = Symbol(); + +const _setAttributes = Symbol(); + +const _validator = Symbol(); + +let uid = 0; +const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; + +class XFAObject { + constructor(nsId, name, hasChildren = false) { + this[$namespaceId] = nsId; + this[$nodeName] = name; + this[_hasChildren] = hasChildren; + this[_parent] = null; + this[_children] = []; + this[$uid] = `${name}${uid++}`; + this[$globalData] = null; + } + + [$onChild](child) { + if (!this[_hasChildren] || !this[$onChildCheck](child)) { + return false; + } + + const name = child[$nodeName]; + const node = this[name]; + + if (node instanceof XFAObjectArray) { + if (node.push(child)) { + this[$appendChild](child); + return true; + } + } else { + if (node !== null) { + this[$removeChild](node); + } + + this[name] = child; + this[$appendChild](child); + return true; + } + + let id = ""; + + if (this.id) { + id = ` (id: ${this.id})`; + } else if (this.name) { + id = ` (name: ${this.name} ${this.h.value})`; + } + + (0, _util.warn)(`XFA - node "${this[$nodeName]}"${id} has already enough "${name}"!`); + return false; + } + + [$onChildCheck](child) { + return this.hasOwnProperty(child[$nodeName]) && child[$namespaceId] === this[$namespaceId]; + } + + [$isNsAgnostic]() { + return false; + } + + [$acceptWhitespace]() { + return false; + } + + [$isCDATAXml]() { + return false; + } + + [$isBindable]() { + return false; + } + + [$popPara]() { + if (this.para) { + this[$getTemplateRoot]()[$extra].paraStack.pop(); + } + } + + [$pushPara]() { + this[$getTemplateRoot]()[$extra].paraStack.push(this.para); + } + + [$setId](ids) { + if (this.id && this[$namespaceId] === _namespaces.NamespaceIds.template.id) { + ids.set(this.id, this); + } + } + + [$getTemplateRoot]() { + return this[$globalData].template; + } + + [$isSplittable]() { + return false; + } + + [$isThereMoreWidth]() { + return false; + } + + [$appendChild](child) { + child[_parent] = this; + + this[_children].push(child); + + if (!child[$globalData] && this[$globalData]) { + child[$globalData] = this[$globalData]; + } + } + + [$removeChild](child) { + const i = this[_children].indexOf(child); + + this[_children].splice(i, 1); + } + + [$hasSettableValue]() { + return this.hasOwnProperty("value"); + } + + [$setValue](_) {} + + [$onText](_) {} + + [$finalize]() {} + + [$clean](builder) { + delete this[_hasChildren]; + + if (this[$cleanup]) { + builder.clean(this[$cleanup]); + delete this[$cleanup]; + } + } + + [$indexOf](child) { + return this[_children].indexOf(child); + } + + [$insertAt](i, child) { + child[_parent] = this; + + this[_children].splice(i, 0, child); + + if (!child[$globalData] && this[$globalData]) { + child[$globalData] = this[$globalData]; + } + } + + [$isTransparent]() { + return !this.name; + } + + [$lastAttribute]() { + return ""; + } + + [$text]() { + if (this[_children].length === 0) { + return this[$content]; + } + + return this[_children].map(c => c[$text]()).join(""); + } + + get [_attributeNames]() { + const proto = Object.getPrototypeOf(this); + + if (!proto._attributes) { + const attributes = proto._attributes = new Set(); + + for (const name of Object.getOwnPropertyNames(this)) { + if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) { + break; + } + + attributes.add(name); + } + } + + return (0, _util.shadow)(this, _attributeNames, proto._attributes); + } + + [$isDescendent](parent) { + let node = this; + + while (node) { + if (node === parent) { + return true; + } + + node = node[$getParent](); + } + + return false; + } + + [$getParent]() { + return this[_parent]; + } + + [$getSubformParent]() { + return this[$getParent](); + } + + [$getChildren](name = null) { + if (!name) { + return this[_children]; + } + + return this[name]; + } + + [$dump]() { + const dumped = Object.create(null); + + if (this[$content]) { + dumped.$content = this[$content]; + } + + for (const name of Object.getOwnPropertyNames(this)) { + const value = this[name]; + + if (value === null) { + continue; + } + + if (value instanceof XFAObject) { + dumped[name] = value[$dump](); + } else if (value instanceof XFAObjectArray) { + if (!value.isEmpty()) { + dumped[name] = value.dump(); + } + } else { + dumped[name] = value; + } + } + + return dumped; + } + + [$toStyle]() { + return null; + } + + [$toHTML]() { + return _utils.HTMLResult.EMPTY; + } + + *[$getContainedChildren]() { + for (const node of this[$getChildren]()) { + yield node; + } + } + + *[_filteredChildrenGenerator](filter, include) { + for (const node of this[$getContainedChildren]()) { + if (!filter || include === filter.has(node[$nodeName])) { + const availableSpace = this[$getAvailableSpace](); + const res = node[$toHTML](availableSpace); + + if (!res.success) { + this[$extra].failingNode = node; + } + + yield res; + } + } + } + + [$flushHTML]() { + return null; + } + + [$addHTML](html, bbox) { + this[$extra].children.push(html); + } + + [$getAvailableSpace]() {} + + [$childrenToHTML]({ + filter = null, + include = true + }) { + if (!this[$extra].generator) { + this[$extra].generator = this[_filteredChildrenGenerator](filter, include); + } else { + const availableSpace = this[$getAvailableSpace](); + const res = this[$extra].failingNode[$toHTML](availableSpace); + + if (!res.success) { + return res; + } + + if (res.html) { + this[$addHTML](res.html, res.bbox); + } + + delete this[$extra].failingNode; + } + + while (true) { + const gen = this[$extra].generator.next(); + + if (gen.done) { + break; + } + + const res = gen.value; + + if (!res.success) { + return res; + } + + if (res.html) { + this[$addHTML](res.html, res.bbox); + } + } + + this[$extra].generator = null; + return _utils.HTMLResult.EMPTY; + } + + [$setSetAttributes](attributes) { + this[_setAttributes] = new Set(Object.keys(attributes)); + } + + [_getUnsetAttributes](protoAttributes) { + const allAttr = this[_attributeNames]; + const setAttr = this[_setAttributes]; + return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x)); + } + + [$resolvePrototypes](ids, ancestors = new Set()) { + for (const child of this[_children]) { + child[_resolvePrototypesHelper](ids, ancestors); + } + } + + [_resolvePrototypesHelper](ids, ancestors) { + const proto = this[_getPrototype](ids, ancestors); + + if (proto) { + this[_applyPrototype](proto, ids, ancestors); + } else { + this[$resolvePrototypes](ids, ancestors); + } + } + + [_getPrototype](ids, ancestors) { + const { + use, + usehref + } = this; + + if (!use && !usehref) { + return null; + } + + let proto = null; + let somExpression = null; + let id = null; + let ref = use; + + if (usehref) { + ref = usehref; + + if (usehref.startsWith("#som(") && usehref.endsWith(")")) { + somExpression = usehref.slice("#som(".length, usehref.length - 1); + } else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) { + somExpression = usehref.slice(".#som(".length, usehref.length - 1); + } else if (usehref.startsWith("#")) { + id = usehref.slice(1); + } else if (usehref.startsWith(".#")) { + id = usehref.slice(2); + } + } else if (use.startsWith("#")) { + id = use.slice(1); + } else { + somExpression = use; + } + + this.use = this.usehref = ""; + + if (id) { + proto = ids.get(id); + } else { + proto = (0, _som.searchNode)(ids.get($root), this, somExpression, true, false); + + if (proto) { + proto = proto[0]; + } + } + + if (!proto) { + (0, _util.warn)(`XFA - Invalid prototype reference: ${ref}.`); + return null; + } + + if (proto[$nodeName] !== this[$nodeName]) { + (0, _util.warn)(`XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`); + return null; + } + + if (ancestors.has(proto)) { + (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); + return null; + } + + ancestors.add(proto); + + const protoProto = proto[_getPrototype](ids, ancestors); + + if (protoProto) { + proto[_applyPrototype](protoProto, ids, ancestors); + } + + proto[$resolvePrototypes](ids, ancestors); + ancestors.delete(proto); + return proto; + } + + [_applyPrototype](proto, ids, ancestors) { + if (ancestors.has(proto)) { + (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); + return; + } + + if (!this[$content] && proto[$content]) { + this[$content] = proto[$content]; + } + + const newAncestors = new Set(ancestors); + newAncestors.add(proto); + + for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) { + this[unsetAttrName] = proto[unsetAttrName]; + + if (this[_setAttributes]) { + this[_setAttributes].add(unsetAttrName); + } + } + + for (const name of Object.getOwnPropertyNames(this)) { + if (this[_attributeNames].has(name)) { + continue; + } + + const value = this[name]; + const protoValue = proto[name]; + + if (value instanceof XFAObjectArray) { + for (const child of value[_children]) { + child[_resolvePrototypesHelper](ids, ancestors); + } + + for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) { + const child = proto[_children][i][$clone](); + + if (value.push(child)) { + child[_parent] = this; + + this[_children].push(child); + + child[_resolvePrototypesHelper](ids, ancestors); + } else { + break; + } + } + + continue; + } + + if (value !== null) { + value[$resolvePrototypes](ids, ancestors); + + if (protoValue) { + value[_applyPrototype](protoValue, ids, ancestors); + } + + continue; + } + + if (protoValue !== null) { + const child = protoValue[$clone](); + child[_parent] = this; + this[name] = child; + + this[_children].push(child); + + child[_resolvePrototypesHelper](ids, ancestors); + } + } + } + + static [_cloneAttribute](obj) { + if (Array.isArray(obj)) { + return obj.map(x => XFAObject[_cloneAttribute](x)); + } + + if (typeof obj === "object" && obj !== null) { + return Object.assign({}, obj); + } + + return obj; + } + + [$clone]() { + const clone = Object.create(Object.getPrototypeOf(this)); + + for (const $symbol of Object.getOwnPropertySymbols(this)) { + try { + clone[$symbol] = this[$symbol]; + } catch (_) { + (0, _util.shadow)(clone, $symbol, this[$symbol]); + } + } + + clone[$uid] = `${clone[$nodeName]}${uid++}`; + clone[_children] = []; + + for (const name of Object.getOwnPropertyNames(this)) { + if (this[_attributeNames].has(name)) { + clone[name] = XFAObject[_cloneAttribute](this[name]); + continue; + } + + const value = this[name]; + + if (value instanceof XFAObjectArray) { + clone[name] = new XFAObjectArray(value[_max]); + } else { + clone[name] = null; + } + } + + for (const child of this[_children]) { + const name = child[$nodeName]; + const clonedChild = child[$clone](); + + clone[_children].push(clonedChild); + + clonedChild[_parent] = clone; + + if (clone[name] === null) { + clone[name] = clonedChild; + } else { + clone[name][_children].push(clonedChild); + } + } + + return clone; + } + + [$getChildren](name = null) { + if (!name) { + return this[_children]; + } + + return this[_children].filter(c => c[$nodeName] === name); + } + + [$getChildrenByClass](name) { + return this[name]; + } + + [$getChildrenByName](name, allTransparent, first = true) { + return Array.from(this[$getChildrenByNameIt](name, allTransparent, first)); + } + + *[$getChildrenByNameIt](name, allTransparent, first = true) { + if (name === "parent") { + yield this[_parent]; + return; + } + + for (const child of this[_children]) { + if (child[$nodeName] === name) { + yield child; + } + + if (child.name === name) { + yield child; + } + + if (allTransparent || child[$isTransparent]()) { + yield* child[$getChildrenByNameIt](name, allTransparent, false); + } + } + + if (first && this[_attributeNames].has(name)) { + yield new XFAAttribute(this, name, this[name]); + } + } + +} + +exports.XFAObject = XFAObject; + +class XFAObjectArray { + constructor(max = Infinity) { + this[_max] = max; + this[_children] = []; + } + + push(child) { + const len = this[_children].length; + + if (len <= this[_max]) { + this[_children].push(child); + + return true; + } + + (0, _util.warn)(`XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children`); + return false; + } + + isEmpty() { + return this[_children].length === 0; + } + + dump() { + return this[_children].length === 1 ? this[_children][0][$dump]() : this[_children].map(x => x[$dump]()); + } + + [$clone]() { + const clone = new XFAObjectArray(this[_max]); + clone[_children] = this[_children].map(c => c[$clone]()); + return clone; + } + + get children() { + return this[_children]; + } + + clear() { + this[_children].length = 0; + } + +} + +exports.XFAObjectArray = XFAObjectArray; + +class XFAAttribute { + constructor(node, name, value) { + this[_parent] = node; + this[$nodeName] = name; + this[$content] = value; + this[$consumed] = false; + this[$uid] = `attribute${uid++}`; + } + + [$getParent]() { + return this[_parent]; + } + + [$isDataValue]() { + return true; + } + + [$getDataValue]() { + return this[$content].trim(); + } + + [$setValue](value) { + value = value.value || ""; + this[$content] = value.toString(); + } + + [$text]() { + return this[$content]; + } + + [$isDescendent](parent) { + return this[_parent] === parent || this[_parent][$isDescendent](parent); + } + +} + +exports.XFAAttribute = XFAAttribute; + +class XmlObject extends XFAObject { + constructor(nsId, name, attributes = {}) { + super(nsId, name); + this[$content] = ""; + this[_dataValue] = null; + + if (name !== "#text") { + const map = new Map(); + this[_attributes] = map; + + for (const [attrName, value] of Object.entries(attributes)) { + map.set(attrName, new XFAAttribute(this, attrName, value)); + } + + if (attributes.hasOwnProperty($nsAttributes)) { + const dataNode = attributes[$nsAttributes].xfa.dataNode; + + if (dataNode !== undefined) { + if (dataNode === "dataGroup") { + this[_dataValue] = false; + } else if (dataNode === "dataValue") { + this[_dataValue] = true; + } + } + } + } + + this[$consumed] = false; + } + + [$toString](buf) { + const tagName = this[$nodeName]; + + if (tagName === "#text") { + buf.push((0, _core_utils.encodeToXmlString)(this[$content])); + return; + } + + const utf8TagName = (0, _util.utf8StringToString)(tagName); + const prefix = this[$namespaceId] === NS_DATASETS ? "xfa:" : ""; + buf.push(`<${prefix}${utf8TagName}`); + + for (const [name, value] of this[_attributes].entries()) { + const utf8Name = (0, _util.utf8StringToString)(name); + buf.push(` ${utf8Name}="${(0, _core_utils.encodeToXmlString)(value[$content])}"`); + } + + if (this[_dataValue] !== null) { + if (this[_dataValue]) { + buf.push(` xfa:dataNode="dataValue"`); + } else { + buf.push(` xfa:dataNode="dataGroup"`); + } + } + + if (!this[$content] && this[_children].length === 0) { + buf.push("/>"); + return; + } + + buf.push(">"); + + if (this[$content]) { + if (typeof this[$content] === "string") { + buf.push((0, _core_utils.encodeToXmlString)(this[$content])); + } else { + this[$content][$toString](buf); + } + } else { + for (const child of this[_children]) { + child[$toString](buf); + } + } + + buf.push(``); + } + + [$onChild](child) { + if (this[$content]) { + const node = new XmlObject(this[$namespaceId], "#text"); + this[$appendChild](node); + node[$content] = this[$content]; + this[$content] = ""; + } + + this[$appendChild](child); + return true; + } + + [$onText](str) { + this[$content] += str; + } + + [$finalize]() { + if (this[$content] && this[_children].length > 0) { + const node = new XmlObject(this[$namespaceId], "#text"); + this[$appendChild](node); + node[$content] = this[$content]; + delete this[$content]; + } + } + + [$toHTML]() { + if (this[$nodeName] === "#text") { + return _utils.HTMLResult.success({ + name: "#text", + value: this[$content] + }); + } + + return _utils.HTMLResult.EMPTY; + } + + [$getChildren](name = null) { + if (!name) { + return this[_children]; + } + + return this[_children].filter(c => c[$nodeName] === name); + } + + [$getAttributes]() { + return this[_attributes]; + } + + [$getChildrenByClass](name) { + const value = this[_attributes].get(name); + + if (value !== undefined) { + return value; + } + + return this[$getChildren](name); + } + + *[$getChildrenByNameIt](name, allTransparent) { + const value = this[_attributes].get(name); + + if (value) { + yield value; + } + + for (const child of this[_children]) { + if (child[$nodeName] === name) { + yield child; + } + + if (allTransparent) { + yield* child[$getChildrenByNameIt](name, allTransparent); + } + } + } + + *[$getAttributeIt](name, skipConsumed) { + const value = this[_attributes].get(name); + + if (value && (!skipConsumed || !value[$consumed])) { + yield value; + } + + for (const child of this[_children]) { + yield* child[$getAttributeIt](name, skipConsumed); + } + } + + *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) { + for (const child of this[_children]) { + if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) { + yield child; + } + + if (allTransparent) { + yield* child[$getRealChildrenByNameIt](name, allTransparent, skipConsumed); + } + } + } + + [$isDataValue]() { + if (this[_dataValue] === null) { + return this[_children].length === 0 || this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id; + } + + return this[_dataValue]; + } + + [$getDataValue]() { + if (this[_dataValue] === null) { + if (this[_children].length === 0) { + return this[$content].trim(); + } + + if (this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { + return this[_children][0][$text]().trim(); + } + + return null; + } + + return this[$content].trim(); + } + + [$setValue](value) { + value = value.value || ""; + this[$content] = value.toString(); + } + + [$dump](hasNS = false) { + const dumped = Object.create(null); + + if (hasNS) { + dumped.$ns = this[$namespaceId]; + } + + if (this[$content]) { + dumped.$content = this[$content]; + } + + dumped.$name = this[$nodeName]; + dumped.children = []; + + for (const child of this[_children]) { + dumped.children.push(child[$dump](hasNS)); + } + + dumped.attributes = Object.create(null); + + for (const [name, value] of this[_attributes]) { + dumped.attributes[name] = value[$content]; + } + + return dumped; + } + +} + +exports.XmlObject = XmlObject; + +class ContentObject extends XFAObject { + constructor(nsId, name) { + super(nsId, name); + this[$content] = ""; + } + + [$onText](text) { + this[$content] += text; + } + + [$finalize]() {} + +} + +exports.ContentObject = ContentObject; + +class OptionObject extends ContentObject { + constructor(nsId, name, options) { + super(nsId, name); + this[_options] = options; + } + + [$finalize]() { + this[$content] = (0, _utils.getKeyword)({ + data: this[$content], + defaultValue: this[_options][0], + validate: k => this[_options].includes(k) + }); + } + + [$clean](builder) { + super[$clean](builder); + delete this[_options]; + } + +} + +exports.OptionObject = OptionObject; + +class StringObject extends ContentObject { + [$finalize]() { + this[$content] = this[$content].trim(); + } + +} + +exports.StringObject = StringObject; + +class IntegerObject extends ContentObject { + constructor(nsId, name, defaultValue, validator) { + super(nsId, name); + this[_defaultValue] = defaultValue; + this[_validator] = validator; + } + + [$finalize]() { + this[$content] = (0, _utils.getInteger)({ + data: this[$content], + defaultValue: this[_defaultValue], + validate: this[_validator] + }); + } + + [$clean](builder) { + super[$clean](builder); + delete this[_defaultValue]; + delete this[_validator]; + } + +} + +exports.IntegerObject = IntegerObject; + +class Option01 extends IntegerObject { + constructor(nsId, name) { + super(nsId, name, 0, n => n === 1); + } + +} + +exports.Option01 = Option01; + +class Option10 extends IntegerObject { + constructor(nsId, name) { + super(nsId, name, 1, n => n === 0); + } + +} + +exports.Option10 = Option10; + +/***/ }), +/* 78 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.HTMLResult = void 0; +exports.getBBox = getBBox; +exports.getColor = getColor; +exports.getFloat = getFloat; +exports.getInteger = getInteger; +exports.getKeyword = getKeyword; +exports.getMeasurement = getMeasurement; +exports.getRatio = getRatio; +exports.getRelevant = getRelevant; +exports.getStringOption = getStringOption; +exports.stripQuotes = stripQuotes; + +var _util = __w_pdfjs_require__(2); + +const dimConverters = { + pt: x => x, + cm: x => x / 2.54 * 72, + mm: x => x / (10 * 2.54) * 72, + in: x => x * 72, + px: x => x +}; +const measurementPattern = /([+-]?\d+\.?\d*)(.*)/; + +function stripQuotes(str) { + if (str.startsWith("'") || str.startsWith('"')) { + return str.slice(1, str.length - 1); + } + + return str; +} + +function getInteger({ + data, + defaultValue, + validate +}) { + if (!data) { + return defaultValue; + } + + data = data.trim(); + const n = parseInt(data, 10); + + if (!isNaN(n) && validate(n)) { + return n; + } + + return defaultValue; +} + +function getFloat({ + data, + defaultValue, + validate +}) { + if (!data) { + return defaultValue; + } + + data = data.trim(); + const n = parseFloat(data); + + if (!isNaN(n) && validate(n)) { + return n; + } + + return defaultValue; +} + +function getKeyword({ + data, + defaultValue, + validate +}) { + if (!data) { + return defaultValue; + } + + data = data.trim(); + + if (validate(data)) { + return data; + } + + return defaultValue; +} + +function getStringOption(data, options) { + return getKeyword({ + data, + defaultValue: options[0], + validate: k => options.includes(k) + }); +} + +function getMeasurement(str, def = "0") { + def = def || "0"; + + if (!str) { + return getMeasurement(def); + } + + const match = str.trim().match(measurementPattern); + + if (!match) { + return getMeasurement(def); + } + + const [, valueStr, unit] = match; + const value = parseFloat(valueStr); + + if (isNaN(value)) { + return getMeasurement(def); + } + + if (value === 0) { + return 0; + } + + const conv = dimConverters[unit]; + + if (conv) { + return conv(value); + } + + return value; +} + +function getRatio(data) { + if (!data) { + return { + num: 1, + den: 1 + }; + } + + const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x)); + + if (ratio.length === 1) { + ratio.push(1); + } + + if (ratio.length === 0) { + return { + num: 1, + den: 1 + }; + } + + const [num, den] = ratio; + return { + num, + den + }; +} + +function getRelevant(data) { + if (!data) { + return []; + } + + return data.trim().split(/\s+/).map(e => { + return { + excluded: e[0] === "-", + viewname: e.substring(1) + }; + }); +} + +function getColor(data, def = [0, 0, 0]) { + let [r, g, b] = def; + + if (!data) { + return { + r, + g, + b + }; + } + + const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c); + + if (color.length < 3) { + return { + r, + g, + b + }; + } + + [r, g, b] = color; + return { + r, + g, + b + }; +} + +function getBBox(data) { + const def = -1; + + if (!data) { + return { + x: def, + y: def, + width: def, + height: def + }; + } + + const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1")); + + if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) { + return { + x: def, + y: def, + width: def, + height: def + }; + } + + const [x, y, width, height] = bbox; + return { + x, + y, + width, + height + }; +} + +class HTMLResult { + static get FAILURE() { + return (0, _util.shadow)(this, "FAILURE", new HTMLResult(false, null, null, null)); + } + + static get EMPTY() { + return (0, _util.shadow)(this, "EMPTY", new HTMLResult(true, null, null, null)); + } + + constructor(success, html, bbox, breakNode) { + this.success = success; + this.html = html; + this.bbox = bbox; + this.breakNode = breakNode; + } + + isBreak() { + return !!this.breakNode; + } + + static breakNode(node) { + return new HTMLResult(false, null, null, node); + } + + static success(html, bbox = null) { + return new HTMLResult(true, html, bbox, null); + } + +} + +exports.HTMLResult = HTMLResult; + +/***/ }), +/* 79 */ +/***/ ((__unused_webpack_module, exports) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NamespaceIds = exports.$buildXFAObject = void 0; +const $buildXFAObject = Symbol(); +exports.$buildXFAObject = $buildXFAObject; +const NamespaceIds = { + config: { + id: 0, + check: ns => ns.startsWith("http://www.xfa.org/schema/xci/") + }, + connectionSet: { + id: 1, + check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/") + }, + datasets: { + id: 2, + check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/") + }, + form: { + id: 3, + check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/") + }, + localeSet: { + id: 4, + check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/") + }, + pdf: { + id: 5, + check: ns => ns === "http://ns.adobe.com/xdp/pdf/" + }, + signature: { + id: 6, + check: ns => ns === "http://www.w3.org/2000/09/xmldsig#" + }, + sourceSet: { + id: 7, + check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/") + }, + stylesheet: { + id: 8, + check: ns => ns === "http://www.w3.org/1999/XSL/Transform" + }, + template: { + id: 9, + check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/") + }, + xdc: { + id: 10, + check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/") + }, + xdp: { + id: 11, + check: ns => ns === "http://ns.adobe.com/xdp/" + }, + xfdf: { + id: 12, + check: ns => ns === "http://ns.adobe.com/xfdf/" + }, + xhtml: { + id: 13, + check: ns => ns === "http://www.w3.org/1999/xhtml" + }, + xmpmeta: { + id: 14, + check: ns => ns === "http://ns.adobe.com/xmpmeta/" + } +}; +exports.NamespaceIds = NamespaceIds; + +/***/ }), +/* 80 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.createDataNode = createDataNode; +exports.searchNode = searchNode; + +var _xfa_object = __w_pdfjs_require__(77); + +var _namespaces = __w_pdfjs_require__(79); + +var _util = __w_pdfjs_require__(2); + +const namePattern = /^[^.[]+/; +const indexPattern = /^[^\]]+/; +const operators = { + dot: 0, + dotDot: 1, + dotHash: 2, + dotBracket: 3, + dotParen: 4 +}; +const shortcuts = new Map([["$data", (root, current) => root.datasets ? root.datasets.data : root], ["$record", (root, current) => (root.datasets ? root.datasets.data : root)[_xfa_object.$getChildren]()[0]], ["$template", (root, current) => root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], ["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, current) => current]]); +const somCache = new WeakMap(); +const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; + +function parseIndex(index) { + index = index.trim(); + + if (index === "*") { + return Infinity; + } + + return parseInt(index, 10) || 0; +} + +function parseExpression(expr, dotDotAllowed, noExpr = true) { + let match = expr.match(namePattern); + + if (!match) { + return null; + } + + let [name] = match; + const parsed = [{ + name, + cacheName: "." + name, + index: 0, + js: null, + formCalc: null, + operator: operators.dot + }]; + let pos = name.length; + + while (pos < expr.length) { + const spos = pos; + const char = expr.charAt(pos++); + + if (char === "[") { + match = expr.slice(pos).match(indexPattern); + + if (!match) { + (0, _util.warn)("XFA - Invalid index in SOM expression"); + return null; + } + + parsed.at(-1).index = parseIndex(match[0]); + pos += match[0].length + 1; + continue; + } + + let operator; + + switch (expr.charAt(pos)) { + case ".": + if (!dotDotAllowed) { + return null; + } + + pos++; + operator = operators.dotDot; + break; + + case "#": + pos++; + operator = operators.dotHash; + break; + + case "[": + if (noExpr) { + (0, _util.warn)("XFA - SOM expression contains a FormCalc subexpression which is not supported for now."); + return null; + } + + operator = operators.dotBracket; + break; + + case "(": + if (noExpr) { + (0, _util.warn)("XFA - SOM expression contains a JavaScript subexpression which is not supported for now."); + return null; + } + + operator = operators.dotParen; + break; + + default: + operator = operators.dot; + break; + } + + match = expr.slice(pos).match(namePattern); + + if (!match) { + break; + } + + [name] = match; + pos += name.length; + parsed.push({ + name, + cacheName: expr.slice(spos, pos), + operator, + index: 0, + js: null, + formCalc: null + }); + } + + return parsed; +} + +function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) { + const parsed = parseExpression(expr, dotDotAllowed); + + if (!parsed) { + return null; + } + + const fn = shortcuts.get(parsed[0].name); + let i = 0; + let isQualified; + + if (fn) { + isQualified = true; + root = [fn(root, container)]; + i = 1; + } else { + isQualified = container === null; + root = [container || root]; + } + + for (let ii = parsed.length; i < ii; i++) { + const { + name, + cacheName, + operator, + index + } = parsed[i]; + const nodes = []; + + for (const node of root) { + if (!(node instanceof _xfa_object.XFAObject)) { + continue; + } + + let children, cached; + + if (useCache) { + cached = somCache.get(node); + + if (!cached) { + cached = new Map(); + somCache.set(node, cached); + } + + children = cached.get(cacheName); + } + + if (!children) { + switch (operator) { + case operators.dot: + children = node[_xfa_object.$getChildrenByName](name, false); + break; + + case operators.dotDot: + children = node[_xfa_object.$getChildrenByName](name, true); + break; + + case operators.dotHash: + children = node[_xfa_object.$getChildrenByClass](name); + + if (children instanceof _xfa_object.XFAObjectArray) { + children = children.children; + } else { + children = [children]; + } + + break; + + default: + break; + } + + if (useCache) { + cached.set(cacheName, children); + } + } + + if (children.length > 0) { + nodes.push(children); + } + } + + if (nodes.length === 0 && !isQualified && i === 0) { + const parent = container[_xfa_object.$getParent](); + + container = parent; + + if (!container) { + return null; + } + + i = -1; + root = [container]; + continue; + } + + if (isFinite(index)) { + root = nodes.filter(node => index < node.length).map(node => node[index]); + } else { + root = nodes.flat(); + } + } + + if (root.length === 0) { + return null; + } + + return root; +} + +function createNodes(root, path) { + let node = null; + + for (const { + name, + index + } of path) { + for (let i = 0, ii = !isFinite(index) ? 0 : index; i <= ii; i++) { + const nsId = root[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : root[_xfa_object.$namespaceId]; + node = new _xfa_object.XmlObject(nsId, name); + + root[_xfa_object.$appendChild](node); + } + + root = node; + } + + return node; +} + +function createDataNode(root, container, expr) { + const parsed = parseExpression(expr); + + if (!parsed) { + return null; + } + + if (parsed.some(x => x.operator === operators.dotDot)) { + return null; + } + + const fn = shortcuts.get(parsed[0].name); + let i = 0; + + if (fn) { + root = fn(root, container); + i = 1; + } else { + root = container || root; + } + + for (let ii = parsed.length; i < ii; i++) { + const { + name, + operator, + index + } = parsed[i]; + + if (!isFinite(index)) { + parsed[i].index = 0; + return createNodes(root, parsed.slice(i)); + } + + let children; + + switch (operator) { + case operators.dot: + children = root[_xfa_object.$getChildrenByName](name, false); + break; + + case operators.dotDot: + children = root[_xfa_object.$getChildrenByName](name, true); + break; + + case operators.dotHash: + children = root[_xfa_object.$getChildrenByClass](name); + + if (children instanceof _xfa_object.XFAObjectArray) { + children = children.children; + } else { + children = [children]; + } + + break; + + default: + break; + } + + if (children.length === 0) { + return createNodes(root, parsed.slice(i)); + } + + if (index < children.length) { + const child = children[index]; + + if (!(child instanceof _xfa_object.XFAObject)) { + (0, _util.warn)(`XFA - Cannot create a node.`); + return null; + } + + root = child; + } else { + parsed[i].index = index - children.length; + return createNodes(root, parsed.slice(i)); + } + } + + return null; +} + +/***/ }), +/* 81 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Binder = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +var _template = __w_pdfjs_require__(82); + +var _som = __w_pdfjs_require__(80); + +var _namespaces = __w_pdfjs_require__(79); + +var _util = __w_pdfjs_require__(2); + +const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; + +function createText(content) { + const node = new _template.Text({}); + node[_xfa_object.$content] = content; + return node; +} + +class Binder { + constructor(root) { + this.root = root; + this.datasets = root.datasets; + + if (root.datasets && root.datasets.data) { + this.data = root.datasets.data; + } else { + this.data = new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data"); + } + + this.emptyMerge = this.data[_xfa_object.$getChildren]().length === 0; + this.root.form = this.form = root.template[_xfa_object.$clone](); + } + + _isConsumeData() { + return !this.emptyMerge && this._mergeMode; + } + + _isMatchTemplate() { + return !this._isConsumeData(); + } + + bind() { + this._bindElement(this.form, this.data); + + return this.form; + } + + getData() { + return this.data; + } + + _bindValue(formNode, data, picture) { + formNode[_xfa_object.$data] = data; + + if (formNode[_xfa_object.$hasSettableValue]()) { + if (data[_xfa_object.$isDataValue]()) { + const value = data[_xfa_object.$getDataValue](); + + formNode[_xfa_object.$setValue](createText(value)); + } else if (formNode instanceof _template.Field && formNode.ui && formNode.ui.choiceList && formNode.ui.choiceList.open === "multiSelect") { + const value = data[_xfa_object.$getChildren]().map(child => child[_xfa_object.$content].trim()).join("\n"); + + formNode[_xfa_object.$setValue](createText(value)); + } else if (this._isConsumeData()) { + (0, _util.warn)(`XFA - Nodes haven't the same type.`); + } + } else if (!data[_xfa_object.$isDataValue]() || this._isMatchTemplate()) { + this._bindElement(formNode, data); + } else { + (0, _util.warn)(`XFA - Nodes haven't the same type.`); + } + } + + _findDataByNameToConsume(name, isValue, dataNode, global) { + if (!name) { + return null; + } + + let generator, match; + + for (let i = 0; i < 3; i++) { + generator = dataNode[_xfa_object.$getRealChildrenByNameIt](name, false, true); + + while (true) { + match = generator.next().value; + + if (!match) { + break; + } + + if (isValue === match[_xfa_object.$isDataValue]()) { + return match; + } + } + + if (dataNode[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.datasets.id && dataNode[_xfa_object.$nodeName] === "data") { + break; + } + + dataNode = dataNode[_xfa_object.$getParent](); + } + + if (!global) { + return null; + } + + generator = this.data[_xfa_object.$getRealChildrenByNameIt](name, true, false); + match = generator.next().value; + + if (match) { + return match; + } + + generator = this.data[_xfa_object.$getAttributeIt](name, true); + match = generator.next().value; + + if (match && match[_xfa_object.$isDataValue]()) { + return match; + } + + return null; + } + + _setProperties(formNode, dataNode) { + if (!formNode.hasOwnProperty("setProperty")) { + return; + } + + for (const { + ref, + target, + connection + } of formNode.setProperty.children) { + if (connection) { + continue; + } + + if (!ref) { + continue; + } + + const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); + + if (!nodes) { + (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); + continue; + } + + const [node] = nodes; + + if (!node[_xfa_object.$isDescendent](this.data)) { + (0, _util.warn)(`XFA - Invalid node: must be a data node.`); + continue; + } + + const targetNodes = (0, _som.searchNode)(this.root, formNode, target, false, false); + + if (!targetNodes) { + (0, _util.warn)(`XFA - Invalid target: ${target}.`); + continue; + } + + const [targetNode] = targetNodes; + + if (!targetNode[_xfa_object.$isDescendent](formNode)) { + (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`); + continue; + } + + const targetParent = targetNode[_xfa_object.$getParent](); + + if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) { + (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`); + continue; + } + + if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) { + (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`); + continue; + } + + const content = node[_xfa_object.$text](); + + const name = targetNode[_xfa_object.$nodeName]; + + if (targetNode instanceof _xfa_object.XFAAttribute) { + const attrs = Object.create(null); + attrs[name] = content; + const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]); + targetParent[name] = obj[name]; + continue; + } + + if (!targetNode.hasOwnProperty(_xfa_object.$content)) { + (0, _util.warn)(`XFA - Invalid node to use in setProperty`); + continue; + } + + targetNode[_xfa_object.$data] = node; + targetNode[_xfa_object.$content] = content; + + targetNode[_xfa_object.$finalize](); + } + } + + _bindItems(formNode, dataNode) { + if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || formNode.bindItems.isEmpty()) { + return; + } + + for (const item of formNode.items.children) { + formNode[_xfa_object.$removeChild](item); + } + + formNode.items.clear(); + const labels = new _template.Items({}); + const values = new _template.Items({}); + + formNode[_xfa_object.$appendChild](labels); + + formNode.items.push(labels); + + formNode[_xfa_object.$appendChild](values); + + formNode.items.push(values); + + for (const { + ref, + labelRef, + valueRef, + connection + } of formNode.bindItems.children) { + if (connection) { + continue; + } + + if (!ref) { + continue; + } + + const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); + + if (!nodes) { + (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); + continue; + } + + for (const node of nodes) { + if (!node[_xfa_object.$isDescendent](this.datasets)) { + (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`); + continue; + } + + const labelNodes = (0, _som.searchNode)(this.root, node, labelRef, true, false); + + if (!labelNodes) { + (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`); + continue; + } + + const [labelNode] = labelNodes; + + if (!labelNode[_xfa_object.$isDescendent](this.datasets)) { + (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`); + continue; + } + + const valueNodes = (0, _som.searchNode)(this.root, node, valueRef, true, false); + + if (!valueNodes) { + (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`); + continue; + } + + const [valueNode] = valueNodes; + + if (!valueNode[_xfa_object.$isDescendent](this.datasets)) { + (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`); + continue; + } + + const label = createText(labelNode[_xfa_object.$text]()); + const value = createText(valueNode[_xfa_object.$text]()); + + labels[_xfa_object.$appendChild](label); + + labels.text.push(label); + + values[_xfa_object.$appendChild](value); + + values.text.push(value); + } + } + } + + _bindOccurrences(formNode, matches, picture) { + let baseClone; + + if (matches.length > 1) { + baseClone = formNode[_xfa_object.$clone](); + + baseClone[_xfa_object.$removeChild](baseClone.occur); + + baseClone.occur = null; + } + + this._bindValue(formNode, matches[0], picture); + + this._setProperties(formNode, matches[0]); + + this._bindItems(formNode, matches[0]); + + if (matches.length === 1) { + return; + } + + const parent = formNode[_xfa_object.$getParent](); + + const name = formNode[_xfa_object.$nodeName]; + + const pos = parent[_xfa_object.$indexOf](formNode); + + for (let i = 1, ii = matches.length; i < ii; i++) { + const match = matches[i]; + + const clone = baseClone[_xfa_object.$clone](); + + parent[name].push(clone); + + parent[_xfa_object.$insertAt](pos + i, clone); + + this._bindValue(clone, match, picture); + + this._setProperties(clone, match); + + this._bindItems(clone, match); + } + } + + _createOccurrences(formNode) { + if (!this.emptyMerge) { + return; + } + + const { + occur + } = formNode; + + if (!occur || occur.initial <= 1) { + return; + } + + const parent = formNode[_xfa_object.$getParent](); + + const name = formNode[_xfa_object.$nodeName]; + + if (!(parent[name] instanceof _xfa_object.XFAObjectArray)) { + return; + } + + let currentNumber; + + if (formNode.name) { + currentNumber = parent[name].children.filter(e => e.name === formNode.name).length; + } else { + currentNumber = parent[name].children.length; + } + + const pos = parent[_xfa_object.$indexOf](formNode) + 1; + const ii = occur.initial - currentNumber; + + if (ii) { + const nodeClone = formNode[_xfa_object.$clone](); + + nodeClone[_xfa_object.$removeChild](nodeClone.occur); + + nodeClone.occur = null; + parent[name].push(nodeClone); + + parent[_xfa_object.$insertAt](pos, nodeClone); + + for (let i = 1; i < ii; i++) { + const clone = nodeClone[_xfa_object.$clone](); + + parent[name].push(clone); + + parent[_xfa_object.$insertAt](pos + i, clone); + } + } + } + + _getOccurInfo(formNode) { + const { + name, + occur + } = formNode; + + if (!occur || !name) { + return [1, 1]; + } + + const max = occur.max === -1 ? Infinity : occur.max; + return [occur.min, max]; + } + + _setAndBind(formNode, dataNode) { + this._setProperties(formNode, dataNode); + + this._bindItems(formNode, dataNode); + + this._bindElement(formNode, dataNode); + } + + _bindElement(formNode, dataNode) { + const uselessNodes = []; + + this._createOccurrences(formNode); + + for (const child of formNode[_xfa_object.$getChildren]()) { + if (child[_xfa_object.$data]) { + continue; + } + + if (this._mergeMode === undefined && child[_xfa_object.$nodeName] === "subform") { + this._mergeMode = child.mergeMode === "consumeData"; + + const dataChildren = dataNode[_xfa_object.$getChildren](); + + if (dataChildren.length > 0) { + this._bindOccurrences(child, [dataChildren[0]], null); + } else if (this.emptyMerge) { + const nsId = dataNode[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : dataNode[_xfa_object.$namespaceId]; + const dataChild = child[_xfa_object.$data] = new _xfa_object.XmlObject(nsId, child.name || "root"); + + dataNode[_xfa_object.$appendChild](dataChild); + + this._bindElement(child, dataChild); + } + + continue; + } + + if (!child[_xfa_object.$isBindable]()) { + continue; + } + + let global = false; + let picture = null; + let ref = null; + let match = null; + + if (child.bind) { + switch (child.bind.match) { + case "none": + this._setAndBind(child, dataNode); + + continue; + + case "global": + global = true; + break; + + case "dataRef": + if (!child.bind.ref) { + (0, _util.warn)(`XFA - ref is empty in node ${child[_xfa_object.$nodeName]}.`); + + this._setAndBind(child, dataNode); + + continue; + } + + ref = child.bind.ref; + break; + + default: + break; + } + + if (child.bind.picture) { + picture = child.bind.picture[_xfa_object.$content]; + } + } + + const [min, max] = this._getOccurInfo(child); + + if (ref) { + match = (0, _som.searchNode)(this.root, dataNode, ref, true, false); + + if (match === null) { + match = (0, _som.createDataNode)(this.data, dataNode, ref); + + if (!match) { + continue; + } + + if (this._isConsumeData()) { + match[_xfa_object.$consumed] = true; + } + + this._setAndBind(child, match); + + continue; + } else { + if (this._isConsumeData()) { + match = match.filter(node => !node[_xfa_object.$consumed]); + } + + if (match.length > max) { + match = match.slice(0, max); + } else if (match.length === 0) { + match = null; + } + + if (match && this._isConsumeData()) { + match.forEach(node => { + node[_xfa_object.$consumed] = true; + }); + } + } + } else { + if (!child.name) { + this._setAndBind(child, dataNode); + + continue; + } + + if (this._isConsumeData()) { + const matches = []; + + while (matches.length < max) { + const found = this._findDataByNameToConsume(child.name, child[_xfa_object.$hasSettableValue](), dataNode, global); + + if (!found) { + break; + } + + found[_xfa_object.$consumed] = true; + matches.push(found); + } + + match = matches.length > 0 ? matches : null; + } else { + match = dataNode[_xfa_object.$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value; + + if (!match) { + if (min === 0) { + uselessNodes.push(child); + continue; + } + + const nsId = dataNode[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : dataNode[_xfa_object.$namespaceId]; + match = child[_xfa_object.$data] = new _xfa_object.XmlObject(nsId, child.name); + + if (this.emptyMerge) { + match[_xfa_object.$consumed] = true; + } + + dataNode[_xfa_object.$appendChild](match); + + this._setAndBind(child, match); + + continue; + } + + if (this.emptyMerge) { + match[_xfa_object.$consumed] = true; + } + + match = [match]; + } + } + + if (match) { + this._bindOccurrences(child, match, picture); + } else if (min > 0) { + this._setAndBind(child, dataNode); + } else { + uselessNodes.push(child); + } + } + + uselessNodes.forEach(node => node[_xfa_object.$getParent]()[_xfa_object.$removeChild](node)); + } + +} + +exports.Binder = Binder; + +/***/ }), +/* 82 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +var _namespaces = __w_pdfjs_require__(79); + +var _layout = __w_pdfjs_require__(83); + +var _html_utils = __w_pdfjs_require__(84); + +var _utils = __w_pdfjs_require__(78); + +var _util = __w_pdfjs_require__(2); + +var _fonts = __w_pdfjs_require__(85); + +var _core_utils = __w_pdfjs_require__(6); + +var _som = __w_pdfjs_require__(80); + +const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id; +const SVG_NS = "http://www.w3.org/2000/svg"; +const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2; +const MAX_EMPTY_PAGES = 3; +const DEFAULT_TAB_INDEX = 5000; +const HEADING_PATTERN = /^H(\d+)$/; +const MIMES = new Set(["image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/png", "image/apng", "image/x-png", "image/bmp", "image/x-ms-bmp", "image/tiff", "image/tif", "application/octet-stream"]); +const IMAGES_HEADERS = [[[0x42, 0x4d], "image/bmp"], [[0xff, 0xd8, 0xff], "image/jpeg"], [[0x49, 0x49, 0x2a, 0x00], "image/tiff"], [[0x4d, 0x4d, 0x00, 0x2a], "image/tiff"], [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], "image/gif"], [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], "image/png"]]; + +function getBorderDims(node) { + if (!node || !node.border) { + return { + w: 0, + h: 0 + }; + } + + const borderExtra = node.border[_xfa_object.$getExtra](); + + if (!borderExtra) { + return { + w: 0, + h: 0 + }; + } + + return { + w: borderExtra.widths[0] + borderExtra.widths[2] + borderExtra.insets[0] + borderExtra.insets[2], + h: borderExtra.widths[1] + borderExtra.widths[3] + borderExtra.insets[1] + borderExtra.insets[3] + }; +} + +function hasMargin(node) { + return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset); +} + +function _setValue(templateNode, value) { + if (!templateNode.value) { + const nodeValue = new Value({}); + + templateNode[_xfa_object.$appendChild](nodeValue); + + templateNode.value = nodeValue; + } + + templateNode.value[_xfa_object.$setValue](value); +} + +function* getContainedChildren(node) { + for (const child of node[_xfa_object.$getChildren]()) { + if (child instanceof SubformSet) { + yield* child[_xfa_object.$getContainedChildren](); + continue; + } + + yield child; + } +} + +function isRequired(node) { + return node.validate && node.validate.nullTest === "error"; +} + +function setTabIndex(node) { + while (node) { + if (!node.traversal) { + node[_xfa_object.$tabIndex] = node[_xfa_object.$getParent]()[_xfa_object.$tabIndex]; + return; + } + + if (node[_xfa_object.$tabIndex]) { + return; + } + + let next = null; + + for (const child of node.traversal[_xfa_object.$getChildren]()) { + if (child.operation === "next") { + next = child; + break; + } + } + + if (!next || !next.ref) { + node[_xfa_object.$tabIndex] = node[_xfa_object.$getParent]()[_xfa_object.$tabIndex]; + return; + } + + const root = node[_xfa_object.$getTemplateRoot](); + + node[_xfa_object.$tabIndex] = ++root[_xfa_object.$tabIndex]; + + const ref = root[_xfa_object.$searchNode](next.ref, node); + + if (!ref) { + return; + } + + node = ref[0]; + } +} + +function applyAssist(obj, attributes) { + const assist = obj.assist; + + if (assist) { + const assistTitle = assist[_xfa_object.$toHTML](); + + if (assistTitle) { + attributes.title = assistTitle; + } + + const role = assist.role; + const match = role.match(HEADING_PATTERN); + + if (match) { + const ariaRole = "heading"; + const ariaLevel = match[1]; + attributes.role = ariaRole; + attributes["aria-level"] = ariaLevel; + } + } + + if (obj.layout === "table") { + attributes.role = "table"; + } else if (obj.layout === "row") { + attributes.role = "row"; + } else { + const parent = obj[_xfa_object.$getParent](); + + if (parent.layout === "row") { + if (parent.assist && parent.assist.role === "TH") { + attributes.role = "columnheader"; + } else { + attributes.role = "cell"; + } + } + } +} + +function ariaLabel(obj) { + if (!obj.assist) { + return null; + } + + const assist = obj.assist; + + if (assist.speak && assist.speak[_xfa_object.$content] !== "") { + return assist.speak[_xfa_object.$content]; + } + + if (assist.toolTip) { + return assist.toolTip[_xfa_object.$content]; + } + + return null; +} + +function valueToHtml(value) { + return _utils.HTMLResult.success({ + name: "div", + attributes: { + class: ["xfaRich"], + style: Object.create(null) + }, + children: [{ + name: "span", + attributes: { + style: Object.create(null) + }, + value + }] + }); +} + +function setFirstUnsplittable(node) { + const root = node[_xfa_object.$getTemplateRoot](); + + if (root[_xfa_object.$extra].firstUnsplittable === null) { + root[_xfa_object.$extra].firstUnsplittable = node; + root[_xfa_object.$extra].noLayoutFailure = true; + } +} + +function unsetFirstUnsplittable(node) { + const root = node[_xfa_object.$getTemplateRoot](); + + if (root[_xfa_object.$extra].firstUnsplittable === node) { + root[_xfa_object.$extra].noLayoutFailure = false; + } +} + +function handleBreak(node) { + if (node[_xfa_object.$extra]) { + return false; + } + + node[_xfa_object.$extra] = Object.create(null); + + if (node.targetType === "auto") { + return false; + } + + const root = node[_xfa_object.$getTemplateRoot](); + + let target = null; + + if (node.target) { + target = root[_xfa_object.$searchNode](node.target, node[_xfa_object.$getParent]()); + + if (!target) { + return false; + } + + target = target[0]; + } + + const { + currentPageArea, + currentContentArea + } = root[_xfa_object.$extra]; + + if (node.targetType === "pageArea") { + if (!(target instanceof PageArea)) { + target = null; + } + + if (node.startNew) { + node[_xfa_object.$extra].target = target || currentPageArea; + return true; + } else if (target && target !== currentPageArea) { + node[_xfa_object.$extra].target = target; + return true; + } + + return false; + } + + if (!(target instanceof ContentArea)) { + target = null; + } + + const pageArea = target && target[_xfa_object.$getParent](); + + let index; + let nextPageArea = pageArea; + + if (node.startNew) { + if (target) { + const contentAreas = pageArea.contentArea.children; + const indexForCurrent = contentAreas.indexOf(currentContentArea); + const indexForTarget = contentAreas.indexOf(target); + + if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) { + nextPageArea = null; + } + + index = indexForTarget - 1; + } else { + index = currentPageArea.contentArea.children.indexOf(currentContentArea); + } + } else if (target && target !== currentContentArea) { + const contentAreas = pageArea.contentArea.children; + index = contentAreas.indexOf(target) - 1; + nextPageArea = pageArea === currentPageArea ? null : pageArea; + } else { + return false; + } + + node[_xfa_object.$extra].target = nextPageArea; + node[_xfa_object.$extra].index = index; + return true; +} + +function handleOverflow(node, extraNode, space) { + const root = node[_xfa_object.$getTemplateRoot](); + + const saved = root[_xfa_object.$extra].noLayoutFailure; + const savedMethod = extraNode[_xfa_object.$getSubformParent]; + + extraNode[_xfa_object.$getSubformParent] = () => node; + + root[_xfa_object.$extra].noLayoutFailure = true; + + const res = extraNode[_xfa_object.$toHTML](space); + + node[_xfa_object.$addHTML](res.html, res.bbox); + + root[_xfa_object.$extra].noLayoutFailure = saved; + extraNode[_xfa_object.$getSubformParent] = savedMethod; +} + +class AppearanceFilter extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "appearanceFilter"); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Arc extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "arc", true); + this.circular = (0, _utils.getInteger)({ + data: attributes.circular, + defaultValue: 0, + validate: x => x === 1 + }); + this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); + this.id = attributes.id || ""; + this.startAngle = (0, _utils.getFloat)({ + data: attributes.startAngle, + defaultValue: 0, + validate: x => true + }); + this.sweepAngle = (0, _utils.getFloat)({ + data: attributes.sweepAngle, + defaultValue: 360, + validate: x => true + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.edge = null; + this.fill = null; + } + + [_xfa_object.$toHTML]() { + const edge = this.edge || new Edge({}); + + const edgeStyle = edge[_xfa_object.$toStyle](); + + const style = Object.create(null); + + if (this.fill && this.fill.presence === "visible") { + Object.assign(style, this.fill[_xfa_object.$toStyle]()); + } else { + style.fill = "transparent"; + } + + style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); + style.stroke = edgeStyle.color; + let arc; + const attributes = { + xmlns: SVG_NS, + style: { + width: "100%", + height: "100%", + overflow: "visible" + } + }; + + if (this.sweepAngle === 360) { + arc = { + name: "ellipse", + attributes: { + xmlns: SVG_NS, + cx: "50%", + cy: "50%", + rx: "50%", + ry: "50%", + style + } + }; + } else { + const startAngle = this.startAngle * Math.PI / 180; + const sweepAngle = this.sweepAngle * Math.PI / 180; + const largeArc = this.sweepAngle > 180 ? 1 : 0; + const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(startAngle + sweepAngle)), 50 * (1 - Math.sin(startAngle + sweepAngle))]; + arc = { + name: "path", + attributes: { + xmlns: SVG_NS, + d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`, + vectorEffect: "non-scaling-stroke", + style + } + }; + Object.assign(attributes, { + viewBox: "0 0 100 100", + preserveAspectRatio: "none" + }); + } + + const svg = { + name: "svg", + children: [arc], + attributes + }; + + const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + if (hasMargin(parent)) { + return _utils.HTMLResult.success({ + name: "div", + attributes: { + style: { + display: "inline", + width: "100%", + height: "100%" + } + }, + children: [svg] + }); + } + + svg.attributes.style.position = "absolute"; + return _utils.HTMLResult.success(svg); + } + +} + +class Area extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "area", true); + this.colSpan = (0, _utils.getInteger)({ + data: attributes.colSpan, + defaultValue: 1, + validate: n => n >= 1 || n === -1 + }); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); + this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); + this.desc = null; + this.extras = null; + this.area = new _xfa_object.XFAObjectArray(); + this.draw = new _xfa_object.XFAObjectArray(); + this.exObject = new _xfa_object.XFAObjectArray(); + this.exclGroup = new _xfa_object.XFAObjectArray(); + this.field = new _xfa_object.XFAObjectArray(); + this.subform = new _xfa_object.XFAObjectArray(); + this.subformSet = new _xfa_object.XFAObjectArray(); + } + + *[_xfa_object.$getContainedChildren]() { + yield* getContainedChildren(this); + } + + [_xfa_object.$isTransparent]() { + return true; + } + + [_xfa_object.$isBindable]() { + return true; + } + + [_xfa_object.$addHTML](html, bbox) { + const [x, y, w, h] = bbox; + this[_xfa_object.$extra].width = Math.max(this[_xfa_object.$extra].width, x + w); + this[_xfa_object.$extra].height = Math.max(this[_xfa_object.$extra].height, y + h); + + this[_xfa_object.$extra].children.push(html); + } + + [_xfa_object.$getAvailableSpace]() { + return this[_xfa_object.$extra].availableSpace; + } + + [_xfa_object.$toHTML](availableSpace) { + const style = (0, _html_utils.toStyle)(this, "position"); + const attributes = { + style, + id: this[_xfa_object.$uid], + class: ["xfaArea"] + }; + + if ((0, _html_utils.isPrintOnly)(this)) { + attributes.class.push("xfaPrintOnly"); + } + + if (this.name) { + attributes.xfaName = this.name; + } + + const children = []; + this[_xfa_object.$extra] = { + children, + width: 0, + height: 0, + availableSpace + }; + + const result = this[_xfa_object.$childrenToHTML]({ + filter: new Set(["area", "draw", "field", "exclGroup", "subform", "subformSet"]), + include: true + }); + + if (!result.success) { + if (result.isBreak()) { + return result; + } + + delete this[_xfa_object.$extra]; + return _utils.HTMLResult.FAILURE; + } + + style.width = (0, _html_utils.measureToString)(this[_xfa_object.$extra].width); + style.height = (0, _html_utils.measureToString)(this[_xfa_object.$extra].height); + const html = { + name: "div", + attributes, + children + }; + const bbox = [this.x, this.y, this[_xfa_object.$extra].width, this[_xfa_object.$extra].height]; + delete this[_xfa_object.$extra]; + return _utils.HTMLResult.success(html, bbox); + } + +} + +class Assist extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "assist", true); + this.id = attributes.id || ""; + this.role = attributes.role || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.speak = null; + this.toolTip = null; + } + + [_xfa_object.$toHTML]() { + return this.toolTip && this.toolTip[_xfa_object.$content] ? this.toolTip[_xfa_object.$content] : null; + } + +} + +class Barcode extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "barcode", true); + this.charEncoding = (0, _utils.getKeyword)({ + data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "", + defaultValue: "", + validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) + }); + this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", "2mod10", "auto"]); + this.dataColumnCount = (0, _utils.getInteger)({ + data: attributes.dataColumnCount, + defaultValue: -1, + validate: x => x >= 0 + }); + this.dataLength = (0, _utils.getInteger)({ + data: attributes.dataLength, + defaultValue: -1, + validate: x => x >= 0 + }); + this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]); + this.dataRowCount = (0, _utils.getInteger)({ + data: attributes.dataRowCount, + defaultValue: -1, + validate: x => x >= 0 + }); + this.endChar = attributes.endChar || ""; + this.errorCorrectionLevel = (0, _utils.getInteger)({ + data: attributes.errorCorrectionLevel, + defaultValue: -1, + validate: x => x >= 0 && x <= 8 + }); + this.id = attributes.id || ""; + this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm"); + this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm"); + this.printCheckDigit = (0, _utils.getInteger)({ + data: attributes.printCheckDigit, + defaultValue: 0, + validate: x => x === 1 + }); + this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio); + this.startChar = attributes.startChar || ""; + this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", "aboveEmbedded", "belowEmbedded", "none"]); + this.truncate = (0, _utils.getInteger)({ + data: attributes.truncate, + defaultValue: 0, + validate: x => x === 1 + }); + this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", "codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", "code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", "code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", "fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", "postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", "postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", "rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", "upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]); + this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", "secureSymbol", "standardSymbol"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio); + this.encrypt = null; + this.extras = null; + } + +} + +class Bind extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "bind", true); + this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]); + this.ref = attributes.ref || ""; + this.picture = null; + } + +} + +class BindItems extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "bindItems"); + this.connection = attributes.connection || ""; + this.labelRef = attributes.labelRef || ""; + this.ref = attributes.ref || ""; + this.valueRef = attributes.valueRef || ""; + } + +} + +exports.BindItems = BindItems; + +class Bookend extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "bookend"); + this.id = attributes.id || ""; + this.leader = attributes.leader || ""; + this.trailer = attributes.trailer || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class BooleanElement extends _xfa_object.Option01 { + constructor(attributes) { + super(TEMPLATE_NS_ID, "boolean"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] === 1 ? "1" : "0"); + } + +} + +class Border extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "border", true); + this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]); + this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); + this.id = attributes.id || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.corner = new _xfa_object.XFAObjectArray(4); + this.edge = new _xfa_object.XFAObjectArray(4); + this.extras = null; + this.fill = null; + this.margin = null; + } + + [_xfa_object.$getExtra]() { + if (!this[_xfa_object.$extra]) { + const edges = this.edge.children.slice(); + + if (edges.length < 4) { + const defaultEdge = edges.at(-1) || new Edge({}); + + for (let i = edges.length; i < 4; i++) { + edges.push(defaultEdge); + } + } + + const widths = edges.map(edge => edge.thickness); + const insets = [0, 0, 0, 0]; + + if (this.margin) { + insets[0] = this.margin.topInset; + insets[1] = this.margin.rightInset; + insets[2] = this.margin.bottomInset; + insets[3] = this.margin.leftInset; + } + + this[_xfa_object.$extra] = { + widths, + insets, + edges + }; + } + + return this[_xfa_object.$extra]; + } + + [_xfa_object.$toStyle]() { + const { + edges + } = this[_xfa_object.$getExtra](); + + const edgeStyles = edges.map(node => { + const style = node[_xfa_object.$toStyle](); + + style.color = style.color || "#000000"; + return style; + }); + const style = Object.create(null); + + if (this.margin) { + Object.assign(style, this.margin[_xfa_object.$toStyle]()); + } + + if (this.fill && this.fill.presence === "visible") { + Object.assign(style, this.fill[_xfa_object.$toStyle]()); + } + + if (this.corner.children.some(node => node.radius !== 0)) { + const cornerStyles = this.corner.children.map(node => node[_xfa_object.$toStyle]()); + + if (cornerStyles.length === 2 || cornerStyles.length === 3) { + const last = cornerStyles.at(-1); + + for (let i = cornerStyles.length; i < 4; i++) { + cornerStyles.push(last); + } + } + + style.borderRadius = cornerStyles.map(s => s.radius).join(" "); + } + + switch (this.presence) { + case "invisible": + case "hidden": + style.borderStyle = ""; + break; + + case "inactive": + style.borderStyle = "none"; + break; + + default: + style.borderStyle = edgeStyles.map(s => s.style).join(" "); + break; + } + + style.borderWidth = edgeStyles.map(s => s.width).join(" "); + style.borderColor = edgeStyles.map(s => s.color).join(" "); + return style; + } + +} + +class Break extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "break", true); + this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); + this.afterTarget = attributes.afterTarget || ""; + this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); + this.beforeTarget = attributes.beforeTarget || ""; + this.bookendLeader = attributes.bookendLeader || ""; + this.bookendTrailer = attributes.bookendTrailer || ""; + this.id = attributes.id || ""; + this.overflowLeader = attributes.overflowLeader || ""; + this.overflowTarget = attributes.overflowTarget || ""; + this.overflowTrailer = attributes.overflowTrailer || ""; + this.startNew = (0, _utils.getInteger)({ + data: attributes.startNew, + defaultValue: 0, + validate: x => x === 1 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + +} + +class BreakAfter extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "breakAfter", true); + this.id = attributes.id || ""; + this.leader = attributes.leader || ""; + this.startNew = (0, _utils.getInteger)({ + data: attributes.startNew, + defaultValue: 0, + validate: x => x === 1 + }); + this.target = attributes.target || ""; + this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); + this.trailer = attributes.trailer || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.script = null; + } + +} + +class BreakBefore extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "breakBefore", true); + this.id = attributes.id || ""; + this.leader = attributes.leader || ""; + this.startNew = (0, _utils.getInteger)({ + data: attributes.startNew, + defaultValue: 0, + validate: x => x === 1 + }); + this.target = attributes.target || ""; + this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); + this.trailer = attributes.trailer || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.script = null; + } + + [_xfa_object.$toHTML](availableSpace) { + this[_xfa_object.$extra] = {}; + return _utils.HTMLResult.FAILURE; + } + +} + +class Button extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "button", true); + this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", "push"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const parent = this[_xfa_object.$getParent](); + + const grandpa = parent[_xfa_object.$getParent](); + + const htmlButton = { + name: "button", + attributes: { + id: this[_xfa_object.$uid], + class: ["xfaButton"], + style: {} + }, + children: [] + }; + + for (const event of grandpa.event.children) { + if (event.activity !== "click" || !event.script) { + continue; + } + + const jsURL = (0, _core_utils.recoverJsURL)(event.script[_xfa_object.$content]); + + if (!jsURL) { + continue; + } + + const href = (0, _html_utils.fixURL)(jsURL.url); + + if (!href) { + continue; + } + + htmlButton.children.push({ + name: "a", + attributes: { + id: "link" + this[_xfa_object.$uid], + href, + newWindow: jsURL.newWindow, + class: ["xfaLink"], + style: {} + }, + children: [] + }); + } + + return _utils.HTMLResult.success(htmlButton); + } + +} + +class Calculate extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "calculate", true); + this.id = attributes.id || ""; + this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", "warning"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.message = null; + this.script = null; + } + +} + +class Caption extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "caption", true); + this.id = attributes.id || ""; + this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", "top"]); + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.reserve = Math.ceil((0, _utils.getMeasurement)(attributes.reserve)); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.font = null; + this.margin = null; + this.para = null; + this.value = null; + } + + [_xfa_object.$setValue](value) { + _setValue(this, value); + } + + [_xfa_object.$getExtra](availableSpace) { + if (!this[_xfa_object.$extra]) { + let { + width, + height + } = availableSpace; + + switch (this.placement) { + case "left": + case "right": + case "inline": + width = this.reserve <= 0 ? width : this.reserve; + break; + + case "top": + case "bottom": + height = this.reserve <= 0 ? height : this.reserve; + break; + } + + this[_xfa_object.$extra] = (0, _html_utils.layoutNode)(this, { + width, + height + }); + } + + return this[_xfa_object.$extra]; + } + + [_xfa_object.$toHTML](availableSpace) { + if (!this.value) { + return _utils.HTMLResult.EMPTY; + } + + this[_xfa_object.$pushPara](); + + const value = this.value[_xfa_object.$toHTML](availableSpace).html; + + if (!value) { + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.EMPTY; + } + + const savedReserve = this.reserve; + + if (this.reserve <= 0) { + const { + w, + h + } = this[_xfa_object.$getExtra](availableSpace); + + switch (this.placement) { + case "left": + case "right": + case "inline": + this.reserve = w; + break; + + case "top": + case "bottom": + this.reserve = h; + break; + } + } + + const children = []; + + if (typeof value === "string") { + children.push({ + name: "#text", + value + }); + } else { + children.push(value); + } + + const style = (0, _html_utils.toStyle)(this, "font", "margin", "visibility"); + + switch (this.placement) { + case "left": + case "right": + if (this.reserve > 0) { + style.width = (0, _html_utils.measureToString)(this.reserve); + } + + break; + + case "top": + case "bottom": + if (this.reserve > 0) { + style.height = (0, _html_utils.measureToString)(this.reserve); + } + + break; + } + + (0, _html_utils.setPara)(this, null, value); + + this[_xfa_object.$popPara](); + + this.reserve = savedReserve; + return _utils.HTMLResult.success({ + name: "div", + attributes: { + style, + class: ["xfaCaption"] + }, + children + }); + } + +} + +class Certificate extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "certificate"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Certificates extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "certificates", true); + this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, ["optional", "required"]); + this.id = attributes.id || ""; + this.url = attributes.url || ""; + this.urlPolicy = attributes.urlPolicy || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.encryption = null; + this.issuers = null; + this.keyUsage = null; + this.oids = null; + this.signing = null; + this.subjectDNs = null; + } + +} + +class CheckButton extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "checkButton", true); + this.id = attributes.id || ""; + this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", "diamond", "square", "star"]); + this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]); + this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const style = (0, _html_utils.toStyle)("margin"); + const size = (0, _html_utils.measureToString)(this.size); + style.width = style.height = size; + let type; + let className; + let groupId; + + const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + const items = field.items.children.length && field.items.children[0][_xfa_object.$toHTML]().html || []; + const exportedValue = { + on: (items[0] !== undefined ? items[0] : "on").toString(), + off: (items[1] !== undefined ? items[1] : "off").toString() + }; + const value = field.value && field.value[_xfa_object.$text]() || "off"; + const checked = value === exportedValue.on || undefined; + + const container = field[_xfa_object.$getSubformParent](); + + const fieldId = field[_xfa_object.$uid]; + let dataId; + + if (container instanceof ExclGroup) { + groupId = container[_xfa_object.$uid]; + type = "radio"; + className = "xfaRadio"; + dataId = container[_xfa_object.$data] && container[_xfa_object.$data][_xfa_object.$uid] || container[_xfa_object.$uid]; + } else { + type = "checkbox"; + className = "xfaCheckbox"; + dataId = field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid]; + } + + const input = { + name: "input", + attributes: { + class: [className], + style, + fieldId, + dataId, + type, + checked, + xfaOn: exportedValue.on, + xfaOff: exportedValue.off, + "aria-label": ariaLabel(field), + "aria-required": false + } + }; + + if (groupId) { + input.attributes.name = groupId; + } + + if (isRequired(field)) { + input.attributes["aria-required"] = true; + input.attributes.required = true; + } + + return _utils.HTMLResult.success({ + name: "label", + attributes: { + class: ["xfaLabel"] + }, + children: [input] + }); + } + +} + +class ChoiceList extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "choiceList", true); + this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]); + this.id = attributes.id || ""; + this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", "onEntry"]); + this.textEntry = (0, _utils.getInteger)({ + data: attributes.textEntry, + defaultValue: 0, + validate: x => x === 1 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const style = (0, _html_utils.toStyle)(this, "border", "margin"); + + const ui = this[_xfa_object.$getParent](); + + const field = ui[_xfa_object.$getParent](); + + const fontSize = field.font && field.font.size || 10; + const optionStyle = { + fontSize: `calc(${fontSize}px * var(--scale-factor))` + }; + const children = []; + + if (field.items.children.length > 0) { + const items = field.items; + let displayedIndex = 0; + let saveIndex = 0; + + if (items.children.length === 2) { + displayedIndex = items.children[0].save; + saveIndex = 1 - displayedIndex; + } + + const displayed = items.children[displayedIndex][_xfa_object.$toHTML]().html; + + const values = items.children[saveIndex][_xfa_object.$toHTML]().html; + + let selected = false; + const value = field.value && field.value[_xfa_object.$text]() || ""; + + for (let i = 0, ii = displayed.length; i < ii; i++) { + const option = { + name: "option", + attributes: { + value: values[i] || displayed[i], + style: optionStyle + }, + value: displayed[i] + }; + + if (values[i] === value) { + option.attributes.selected = selected = true; + } + + children.push(option); + } + + if (!selected) { + children.splice(0, 0, { + name: "option", + attributes: { + hidden: true, + selected: true + }, + value: " " + }); + } + } + + const selectAttributes = { + class: ["xfaSelect"], + fieldId: field[_xfa_object.$uid], + dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], + style, + "aria-label": ariaLabel(field), + "aria-required": false + }; + + if (isRequired(field)) { + selectAttributes["aria-required"] = true; + selectAttributes.required = true; + } + + if (this.open === "multiSelect") { + selectAttributes.multiple = true; + } + + return _utils.HTMLResult.success({ + name: "label", + attributes: { + class: ["xfaLabel"] + }, + children: [{ + name: "select", + children, + attributes: selectAttributes + }] + }); + } + +} + +class Color extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "color", true); + this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.value = attributes.value ? (0, _utils.getColor)(attributes.value) : ""; + this.extras = null; + } + + [_xfa_object.$hasSettableValue]() { + return false; + } + + [_xfa_object.$toStyle]() { + return this.value ? _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null; + } + +} + +class Comb extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "comb"); + this.id = attributes.id || ""; + this.numberOfCells = (0, _utils.getInteger)({ + data: attributes.numberOfCells, + defaultValue: 0, + validate: x => x >= 0 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Connect extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "connect", true); + this.connection = attributes.connection || ""; + this.id = attributes.id || ""; + this.ref = attributes.ref || ""; + this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", "importOnly"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.picture = null; + } + +} + +class ContentArea extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "contentArea", true); + this.h = (0, _utils.getMeasurement)(attributes.h); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.w = (0, _utils.getMeasurement)(attributes.w); + this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); + this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); + this.desc = null; + this.extras = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const left = (0, _html_utils.measureToString)(this.x); + const top = (0, _html_utils.measureToString)(this.y); + const style = { + left, + top, + width: (0, _html_utils.measureToString)(this.w), + height: (0, _html_utils.measureToString)(this.h) + }; + const classNames = ["xfaContentarea"]; + + if ((0, _html_utils.isPrintOnly)(this)) { + classNames.push("xfaPrintOnly"); + } + + return _utils.HTMLResult.success({ + name: "div", + children: [], + attributes: { + style, + class: classNames, + id: this[_xfa_object.$uid] + } + }); + } + +} + +class Corner extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "corner", true); + this.id = attributes.id || ""; + this.inverted = (0, _utils.getInteger)({ + data: attributes.inverted, + defaultValue: 0, + validate: x => x === 1 + }); + this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]); + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.radius = (0, _utils.getMeasurement)(attributes.radius); + this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); + this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + } + + [_xfa_object.$toStyle]() { + const style = (0, _html_utils.toStyle)(this, "visibility"); + style.radius = (0, _html_utils.measureToString)(this.join === "square" ? 0 : this.radius); + return style; + } + +} + +class DateElement extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "date"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + const date = this[_xfa_object.$content].trim(); + + this[_xfa_object.$content] = date ? new Date(date) : null; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); + } + +} + +class DateTime extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "dateTime"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + const date = this[_xfa_object.$content].trim(); + + this[_xfa_object.$content] = date ? new Date(date) : null; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); + } + +} + +class DateTimeEdit extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "dateTimeEdit", true); + this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); + this.id = attributes.id || ""; + this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.comb = null; + this.extras = null; + this.margin = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); + + const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + const html = { + name: "input", + attributes: { + type: "text", + fieldId: field[_xfa_object.$uid], + dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], + class: ["xfaTextfield"], + style, + "aria-label": ariaLabel(field), + "aria-required": false + } + }; + + if (isRequired(field)) { + html.attributes["aria-required"] = true; + html.attributes.required = true; + } + + return _utils.HTMLResult.success({ + name: "label", + attributes: { + class: ["xfaLabel"] + }, + children: [html] + }); + } + +} + +class Decimal extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "decimal"); + this.fracDigits = (0, _utils.getInteger)({ + data: attributes.fracDigits, + defaultValue: 2, + validate: x => true + }); + this.id = attributes.id || ""; + this.leadDigits = (0, _utils.getInteger)({ + data: attributes.leadDigits, + defaultValue: -1, + validate: x => true + }); + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + const number = parseFloat(this[_xfa_object.$content].trim()); + this[_xfa_object.$content] = isNaN(number) ? null : number; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); + } + +} + +class DefaultUi extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "defaultUi", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + +} + +class Desc extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "desc", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.boolean = new _xfa_object.XFAObjectArray(); + this.date = new _xfa_object.XFAObjectArray(); + this.dateTime = new _xfa_object.XFAObjectArray(); + this.decimal = new _xfa_object.XFAObjectArray(); + this.exData = new _xfa_object.XFAObjectArray(); + this.float = new _xfa_object.XFAObjectArray(); + this.image = new _xfa_object.XFAObjectArray(); + this.integer = new _xfa_object.XFAObjectArray(); + this.text = new _xfa_object.XFAObjectArray(); + this.time = new _xfa_object.XFAObjectArray(); + } + +} + +class DigestMethod extends _xfa_object.OptionObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class DigestMethods extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "digestMethods", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.digestMethod = new _xfa_object.XFAObjectArray(); + } + +} + +class Draw extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "draw", true); + this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); + this.colSpan = (0, _utils.getInteger)({ + data: attributes.colSpan, + defaultValue: 1, + validate: n => n >= 1 || n === -1 + }); + this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; + this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); + this.id = attributes.id || ""; + this.locale = attributes.locale || ""; + this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); + this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); + this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); + this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); + this.name = attributes.name || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.rotate = (0, _utils.getInteger)({ + data: attributes.rotate, + defaultValue: 0, + validate: x => x % 90 === 0 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; + this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); + this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); + this.assist = null; + this.border = null; + this.caption = null; + this.desc = null; + this.extras = null; + this.font = null; + this.keep = null; + this.margin = null; + this.para = null; + this.traversal = null; + this.ui = null; + this.value = null; + this.setProperty = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$setValue](value) { + _setValue(this, value); + } + + [_xfa_object.$toHTML](availableSpace) { + setTabIndex(this); + + if (this.presence === "hidden" || this.presence === "inactive") { + return _utils.HTMLResult.EMPTY; + } + + (0, _html_utils.fixDimensions)(this); + + this[_xfa_object.$pushPara](); + + const savedW = this.w; + const savedH = this.h; + const { + w, + h, + isBroken + } = (0, _html_utils.layoutNode)(this, availableSpace); + + if (w && this.w === "") { + if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) { + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.FAILURE; + } + + this.w = w; + } + + if (h && this.h === "") { + this.h = h; + } + + setFirstUnsplittable(this); + + if (!(0, _layout.checkDimensions)(this, availableSpace)) { + this.w = savedW; + this.h = savedH; + + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.FAILURE; + } + + unsetFirstUnsplittable(this); + const style = (0, _html_utils.toStyle)(this, "font", "hAlign", "dimensions", "position", "presence", "rotate", "anchorType", "border", "margin"); + (0, _html_utils.setMinMaxDimensions)(this, style); + + if (style.margin) { + style.padding = style.margin; + delete style.margin; + } + + const classNames = ["xfaDraw"]; + + if (this.font) { + classNames.push("xfaFont"); + } + + if ((0, _html_utils.isPrintOnly)(this)) { + classNames.push("xfaPrintOnly"); + } + + const attributes = { + style, + id: this[_xfa_object.$uid], + class: classNames + }; + + if (this.name) { + attributes.xfaName = this.name; + } + + const html = { + name: "div", + attributes, + children: [] + }; + applyAssist(this, attributes); + const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); + const value = this.value ? this.value[_xfa_object.$toHTML](availableSpace).html : null; + + if (value === null) { + this.w = savedW; + this.h = savedH; + + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + } + + html.children.push(value); + (0, _html_utils.setPara)(this, style, value); + this.w = savedW; + this.h = savedH; + + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + } + +} + +class Edge extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "edge", true); + this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]); + this.id = attributes.id || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); + this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + } + + [_xfa_object.$toStyle]() { + const style = (0, _html_utils.toStyle)(this, "visibility"); + Object.assign(style, { + linecap: this.cap, + width: (0, _html_utils.measureToString)(this.thickness), + color: this.color ? this.color[_xfa_object.$toStyle]() : "#000000", + style: "" + }); + + if (this.presence !== "visible") { + style.style = "none"; + } else { + switch (this.stroke) { + case "solid": + style.style = "solid"; + break; + + case "dashDot": + style.style = "dashed"; + break; + + case "dashDotDot": + style.style = "dashed"; + break; + + case "dashed": + style.style = "dashed"; + break; + + case "dotted": + style.style = "dotted"; + break; + + case "embossed": + style.style = "ridge"; + break; + + case "etched": + style.style = "groove"; + break; + + case "lowered": + style.style = "inset"; + break; + + case "raised": + style.style = "outset"; + break; + } + } + + return style; + } + +} + +class Encoding extends _xfa_object.OptionObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Encodings extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encodings", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.encoding = new _xfa_object.XFAObjectArray(); + } + +} + +class Encrypt extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encrypt", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.certificate = null; + } + +} + +class EncryptData extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encryptData", true); + this.id = attributes.id || ""; + this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]); + this.target = attributes.target || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.filter = null; + this.manifest = null; + } + +} + +class Encryption extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encryption", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.certificate = new _xfa_object.XFAObjectArray(); + } + +} + +class EncryptionMethod extends _xfa_object.OptionObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", "AES192-CBC"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class EncryptionMethods extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "encryptionMethods", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.encryptionMethod = new _xfa_object.XFAObjectArray(); + } + +} + +class Event extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "event", true); + this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", "docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", "mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", "preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]); + this.id = attributes.id || ""; + this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]); + this.name = attributes.name || ""; + this.ref = attributes.ref || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.encryptData = null; + this.execute = null; + this.script = null; + this.signData = null; + this.submit = null; + } + +} + +class ExData extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "exData"); + this.contentType = attributes.contentType || ""; + this.href = attributes.href || ""; + this.id = attributes.id || ""; + this.maxLength = (0, _utils.getInteger)({ + data: attributes.maxLength, + defaultValue: -1, + validate: x => x >= -1 + }); + this.name = attributes.name || ""; + this.rid = attributes.rid || ""; + this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", "package"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$isCDATAXml]() { + return this.contentType === "text/html"; + } + + [_xfa_object.$onChild](child) { + if (this.contentType === "text/html" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { + this[_xfa_object.$content] = child; + return true; + } + + if (this.contentType === "text/xml") { + this[_xfa_object.$content] = child; + return true; + } + + return false; + } + + [_xfa_object.$toHTML](availableSpace) { + if (this.contentType !== "text/html" || !this[_xfa_object.$content]) { + return _utils.HTMLResult.EMPTY; + } + + return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace); + } + +} + +class ExObject extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "exObject", true); + this.archive = attributes.archive || ""; + this.classId = attributes.classId || ""; + this.codeBase = attributes.codeBase || ""; + this.codeType = attributes.codeType || ""; + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.boolean = new _xfa_object.XFAObjectArray(); + this.date = new _xfa_object.XFAObjectArray(); + this.dateTime = new _xfa_object.XFAObjectArray(); + this.decimal = new _xfa_object.XFAObjectArray(); + this.exData = new _xfa_object.XFAObjectArray(); + this.exObject = new _xfa_object.XFAObjectArray(); + this.float = new _xfa_object.XFAObjectArray(); + this.image = new _xfa_object.XFAObjectArray(); + this.integer = new _xfa_object.XFAObjectArray(); + this.text = new _xfa_object.XFAObjectArray(); + this.time = new _xfa_object.XFAObjectArray(); + } + +} + +class ExclGroup extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "exclGroup", true); + this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); + this.accessKey = attributes.accessKey || ""; + this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); + this.colSpan = (0, _utils.getInteger)({ + data: attributes.colSpan, + defaultValue: 1, + validate: n => n >= 1 || n === -1 + }); + this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; + this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); + this.id = attributes.id || ""; + this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); + this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); + this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); + this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); + this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); + this.name = attributes.name || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; + this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); + this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); + this.assist = null; + this.bind = null; + this.border = null; + this.calculate = null; + this.caption = null; + this.desc = null; + this.extras = null; + this.margin = null; + this.para = null; + this.traversal = null; + this.validate = null; + this.connect = new _xfa_object.XFAObjectArray(); + this.event = new _xfa_object.XFAObjectArray(); + this.field = new _xfa_object.XFAObjectArray(); + this.setProperty = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$isBindable]() { + return true; + } + + [_xfa_object.$hasSettableValue]() { + return true; + } + + [_xfa_object.$setValue](value) { + for (const field of this.field.children) { + if (!field.value) { + const nodeValue = new Value({}); + + field[_xfa_object.$appendChild](nodeValue); + + field.value = nodeValue; + } + + field.value[_xfa_object.$setValue](value); + } + } + + [_xfa_object.$isThereMoreWidth]() { + return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth](); + } + + [_xfa_object.$isSplittable]() { + const parent = this[_xfa_object.$getSubformParent](); + + if (!parent[_xfa_object.$isSplittable]()) { + return false; + } + + if (this[_xfa_object.$extra]._isSplittable !== undefined) { + return this[_xfa_object.$extra]._isSplittable; + } + + if (this.layout === "position" || this.layout.includes("row")) { + this[_xfa_object.$extra]._isSplittable = false; + return false; + } + + if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) { + return false; + } + + this[_xfa_object.$extra]._isSplittable = true; + return true; + } + + [_xfa_object.$flushHTML]() { + return (0, _layout.flushHTML)(this); + } + + [_xfa_object.$addHTML](html, bbox) { + (0, _layout.addHTML)(this, html, bbox); + } + + [_xfa_object.$getAvailableSpace]() { + return (0, _layout.getAvailableSpace)(this); + } + + [_xfa_object.$toHTML](availableSpace) { + setTabIndex(this); + + if (this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { + return _utils.HTMLResult.EMPTY; + } + + (0, _html_utils.fixDimensions)(this); + const children = []; + const attributes = { + id: this[_xfa_object.$uid], + class: [] + }; + (0, _html_utils.setAccess)(this, attributes.class); + + if (!this[_xfa_object.$extra]) { + this[_xfa_object.$extra] = Object.create(null); + } + + Object.assign(this[_xfa_object.$extra], { + children, + attributes, + attempt: 0, + line: null, + numberInLine: 0, + availableSpace: { + width: Math.min(this.w || Infinity, availableSpace.width), + height: Math.min(this.h || Infinity, availableSpace.height) + }, + width: 0, + height: 0, + prevHeight: 0, + currentWidth: 0 + }); + + const isSplittable = this[_xfa_object.$isSplittable](); + + if (!isSplittable) { + setFirstUnsplittable(this); + } + + if (!(0, _layout.checkDimensions)(this, availableSpace)) { + return _utils.HTMLResult.FAILURE; + } + + const filter = new Set(["field"]); + + if (this.layout.includes("row")) { + const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths; + + if (Array.isArray(columnWidths) && columnWidths.length > 0) { + this[_xfa_object.$extra].columnWidths = columnWidths; + this[_xfa_object.$extra].currentColumn = 0; + } + } + + const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); + const classNames = ["xfaExclgroup"]; + const cl = (0, _html_utils.layoutClass)(this); + + if (cl) { + classNames.push(cl); + } + + if ((0, _html_utils.isPrintOnly)(this)) { + classNames.push("xfaPrintOnly"); + } + + attributes.style = style; + attributes.class = classNames; + + if (this.name) { + attributes.xfaName = this.name; + } + + this[_xfa_object.$pushPara](); + + const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; + const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; + + for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) { + if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { + this[_xfa_object.$extra].numberInLine = 0; + } + + const result = this[_xfa_object.$childrenToHTML]({ + filter, + include: true + }); + + if (result.success) { + break; + } + + if (result.isBreak()) { + this[_xfa_object.$popPara](); + + return result; + } + + if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { + this[_xfa_object.$extra].attempt = maxRun; + break; + } + } + + this[_xfa_object.$popPara](); + + if (!isSplittable) { + unsetFirstUnsplittable(this); + } + + if (this[_xfa_object.$extra].attempt === maxRun) { + if (!isSplittable) { + delete this[_xfa_object.$extra]; + } + + return _utils.HTMLResult.FAILURE; + } + + let marginH = 0; + let marginV = 0; + + if (this.margin) { + marginH = this.margin.leftInset + this.margin.rightInset; + marginV = this.margin.topInset + this.margin.bottomInset; + } + + const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0); + const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0); + const bbox = [this.x, this.y, width, height]; + + if (this.w === "") { + style.width = (0, _html_utils.measureToString)(width); + } + + if (this.h === "") { + style.height = (0, _html_utils.measureToString)(height); + } + + const html = { + name: "div", + attributes, + children + }; + applyAssist(this, attributes); + delete this[_xfa_object.$extra]; + return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + } + +} + +class Execute extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "execute"); + this.connection = attributes.connection || ""; + this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]); + this.id = attributes.id || ""; + this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Extras extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "extras", true); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.boolean = new _xfa_object.XFAObjectArray(); + this.date = new _xfa_object.XFAObjectArray(); + this.dateTime = new _xfa_object.XFAObjectArray(); + this.decimal = new _xfa_object.XFAObjectArray(); + this.exData = new _xfa_object.XFAObjectArray(); + this.extras = new _xfa_object.XFAObjectArray(); + this.float = new _xfa_object.XFAObjectArray(); + this.image = new _xfa_object.XFAObjectArray(); + this.integer = new _xfa_object.XFAObjectArray(); + this.text = new _xfa_object.XFAObjectArray(); + this.time = new _xfa_object.XFAObjectArray(); + } + +} + +class Field extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "field", true); + this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); + this.accessKey = attributes.accessKey || ""; + this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); + this.colSpan = (0, _utils.getInteger)({ + data: attributes.colSpan, + defaultValue: 1, + validate: n => n >= 1 || n === -1 + }); + this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; + this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); + this.id = attributes.id || ""; + this.locale = attributes.locale || ""; + this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); + this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); + this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); + this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); + this.name = attributes.name || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.rotate = (0, _utils.getInteger)({ + data: attributes.rotate, + defaultValue: 0, + validate: x => x % 90 === 0 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; + this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); + this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); + this.assist = null; + this.bind = null; + this.border = null; + this.calculate = null; + this.caption = null; + this.desc = null; + this.extras = null; + this.font = null; + this.format = null; + this.items = new _xfa_object.XFAObjectArray(2); + this.keep = null; + this.margin = null; + this.para = null; + this.traversal = null; + this.ui = null; + this.validate = null; + this.value = null; + this.bindItems = new _xfa_object.XFAObjectArray(); + this.connect = new _xfa_object.XFAObjectArray(); + this.event = new _xfa_object.XFAObjectArray(); + this.setProperty = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$isBindable]() { + return true; + } + + [_xfa_object.$setValue](value) { + _setValue(this, value); + } + + [_xfa_object.$toHTML](availableSpace) { + setTabIndex(this); + + if (!this.ui) { + this.ui = new Ui({}); + this.ui[_xfa_object.$globalData] = this[_xfa_object.$globalData]; + + this[_xfa_object.$appendChild](this.ui); + + let node; + + switch (this.items.children.length) { + case 0: + node = new TextEdit({}); + this.ui.textEdit = node; + break; + + case 1: + node = new CheckButton({}); + this.ui.checkButton = node; + break; + + case 2: + node = new ChoiceList({}); + this.ui.choiceList = node; + break; + } + + this.ui[_xfa_object.$appendChild](node); + } + + if (!this.ui || this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { + return _utils.HTMLResult.EMPTY; + } + + if (this.caption) { + delete this.caption[_xfa_object.$extra]; + } + + this[_xfa_object.$pushPara](); + + const caption = this.caption ? this.caption[_xfa_object.$toHTML](availableSpace).html : null; + const savedW = this.w; + const savedH = this.h; + let marginH = 0; + let marginV = 0; + + if (this.margin) { + marginH = this.margin.leftInset + this.margin.rightInset; + marginV = this.margin.topInset + this.margin.bottomInset; + } + + let borderDims = null; + + if (this.w === "" || this.h === "") { + let width = null; + let height = null; + let uiW = 0; + let uiH = 0; + + if (this.ui.checkButton) { + uiW = uiH = this.ui.checkButton.size; + } else { + const { + w, + h + } = (0, _html_utils.layoutNode)(this, availableSpace); + + if (w !== null) { + uiW = w; + uiH = h; + } else { + uiH = (0, _fonts.getMetrics)(this.font, true).lineNoGap; + } + } + + borderDims = getBorderDims(this.ui[_xfa_object.$getExtra]()); + uiW += borderDims.w; + uiH += borderDims.h; + + if (this.caption) { + const { + w, + h, + isBroken + } = this.caption[_xfa_object.$getExtra](availableSpace); + + if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) { + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.FAILURE; + } + + width = w; + height = h; + + switch (this.caption.placement) { + case "left": + case "right": + case "inline": + width += uiW; + break; + + case "top": + case "bottom": + height += uiH; + break; + } + } else { + width = uiW; + height = uiH; + } + + if (width && this.w === "") { + width += marginH; + this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, this.minW + 1 < width ? width : this.minW); + } + + if (height && this.h === "") { + height += marginV; + this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, this.minH + 1 < height ? height : this.minH); + } + } + + this[_xfa_object.$popPara](); + + (0, _html_utils.fixDimensions)(this); + setFirstUnsplittable(this); + + if (!(0, _layout.checkDimensions)(this, availableSpace)) { + this.w = savedW; + this.h = savedH; + + this[_xfa_object.$popPara](); + + return _utils.HTMLResult.FAILURE; + } + + unsetFirstUnsplittable(this); + const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", "presence", "margin", "hAlign"); + (0, _html_utils.setMinMaxDimensions)(this, style); + const classNames = ["xfaField"]; + + if (this.font) { + classNames.push("xfaFont"); + } + + if ((0, _html_utils.isPrintOnly)(this)) { + classNames.push("xfaPrintOnly"); + } + + const attributes = { + style, + id: this[_xfa_object.$uid], + class: classNames + }; + + if (style.margin) { + style.padding = style.margin; + delete style.margin; + } + + (0, _html_utils.setAccess)(this, classNames); + + if (this.name) { + attributes.xfaName = this.name; + } + + const children = []; + const html = { + name: "div", + attributes, + children + }; + applyAssist(this, attributes); + const borderStyle = this.border ? this.border[_xfa_object.$toStyle]() : null; + const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); + + const ui = this.ui[_xfa_object.$toHTML]().html; + + if (!ui) { + Object.assign(style, borderStyle); + return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + } + + if (this[_xfa_object.$tabIndex]) { + if (ui.children && ui.children[0]) { + ui.children[0].attributes.tabindex = this[_xfa_object.$tabIndex]; + } else { + ui.attributes.tabindex = this[_xfa_object.$tabIndex]; + } + } + + if (!ui.attributes.style) { + ui.attributes.style = Object.create(null); + } + + let aElement = null; + + if (this.ui.button) { + if (ui.children.length === 1) { + [aElement] = ui.children.splice(0, 1); + } + + Object.assign(ui.attributes.style, borderStyle); + } else { + Object.assign(style, borderStyle); + } + + children.push(ui); + + if (this.value) { + if (this.ui.imageEdit) { + ui.children.push(this.value[_xfa_object.$toHTML]().html); + } else if (!this.ui.button) { + let value = ""; + + if (this.value.exData) { + value = this.value.exData[_xfa_object.$text](); + } else if (this.value.text) { + value = this.value.text[_xfa_object.$getExtra](); + } else { + const htmlValue = this.value[_xfa_object.$toHTML]().html; + + if (htmlValue !== null) { + value = htmlValue.children[0].value; + } + } + + if (this.ui.textEdit && this.value.text && this.value.text.maxChars) { + ui.children[0].attributes.maxLength = this.value.text.maxChars; + } + + if (value) { + if (this.ui.numericEdit) { + value = parseFloat(value); + value = isNaN(value) ? "" : value.toString(); + } + + if (ui.children[0].name === "textarea") { + ui.children[0].attributes.textContent = value; + } else { + ui.children[0].attributes.value = value; + } + } + } + } + + if (!this.ui.imageEdit && ui.children && ui.children[0] && this.h) { + borderDims = borderDims || getBorderDims(this.ui[_xfa_object.$getExtra]()); + let captionHeight = 0; + + if (this.caption && ["top", "bottom"].includes(this.caption.placement)) { + captionHeight = this.caption.reserve; + + if (captionHeight <= 0) { + captionHeight = this.caption[_xfa_object.$getExtra](availableSpace).h; + } + + const inputHeight = this.h - captionHeight - marginV - borderDims.h; + ui.children[0].attributes.style.height = (0, _html_utils.measureToString)(inputHeight); + } else { + ui.children[0].attributes.style.height = "100%"; + } + } + + if (aElement) { + ui.children.push(aElement); + } + + if (!caption) { + if (ui.attributes.class) { + ui.attributes.class.push("xfaLeft"); + } + + this.w = savedW; + this.h = savedH; + return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + } + + if (this.ui.button) { + if (style.padding) { + delete style.padding; + } + + if (caption.name === "div") { + caption.name = "span"; + } + + ui.children.push(caption); + return _utils.HTMLResult.success(html, bbox); + } else if (this.ui.checkButton) { + caption.attributes.class[0] = "xfaCaptionForCheckButton"; + } + + if (!ui.attributes.class) { + ui.attributes.class = []; + } + + ui.children.splice(0, 0, caption); + + switch (this.caption.placement) { + case "left": + ui.attributes.class.push("xfaLeft"); + break; + + case "right": + ui.attributes.class.push("xfaRight"); + break; + + case "top": + ui.attributes.class.push("xfaTop"); + break; + + case "bottom": + ui.attributes.class.push("xfaBottom"); + break; + + case "inline": + ui.attributes.class.push("xfaLeft"); + break; + } + + this.w = savedW; + this.h = savedH; + return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + } + +} + +exports.Field = Field; + +class Fill extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "fill", true); + this.id = attributes.id || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + this.linear = null; + this.pattern = null; + this.radial = null; + this.solid = null; + this.stipple = null; + } + + [_xfa_object.$toStyle]() { + const parent = this[_xfa_object.$getParent](); + + const grandpa = parent[_xfa_object.$getParent](); + + const ggrandpa = grandpa[_xfa_object.$getParent](); + + const style = Object.create(null); + let propName = "color"; + let altPropName = propName; + + if (parent instanceof Border) { + propName = "background-color"; + altPropName = "background"; + + if (ggrandpa instanceof Ui) { + style.backgroundColor = "white"; + } + } + + if (parent instanceof Rectangle || parent instanceof Arc) { + propName = altPropName = "fill"; + style.fill = "white"; + } + + for (const name of Object.getOwnPropertyNames(this)) { + if (name === "extras" || name === "color") { + continue; + } + + const obj = this[name]; + + if (!(obj instanceof _xfa_object.XFAObject)) { + continue; + } + + const color = obj[_xfa_object.$toStyle](this.color); + + if (color) { + style[color.startsWith("#") ? propName : altPropName] = color; + } + + return style; + } + + if (this.color && this.color.value) { + const color = this.color[_xfa_object.$toStyle](); + + style[color.startsWith("#") ? propName : altPropName] = color; + } + + return style; + } + +} + +class Filter extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "filter", true); + this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", "optional", "none"]); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.version = (0, _utils.getInteger)({ + data: this.version, + defaultValue: 5, + validate: x => x >= 1 && x <= 5 + }); + this.appearanceFilter = null; + this.certificates = null; + this.digestMethods = null; + this.encodings = null; + this.encryptionMethods = null; + this.handler = null; + this.lockDocument = null; + this.mdp = null; + this.reasons = null; + this.timeStamp = null; + } + +} + +class Float extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "float"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + const number = parseFloat(this[_xfa_object.$content].trim()); + this[_xfa_object.$content] = isNaN(number) ? null : number; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); + } + +} + +class Font extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "font", true); + this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift); + this.fontHorizontalScale = (0, _utils.getFloat)({ + data: attributes.fontHorizontalScale, + defaultValue: 100, + validate: x => x >= 0 + }); + this.fontVerticalScale = (0, _utils.getFloat)({ + data: attributes.fontVerticalScale, + defaultValue: 100, + validate: x => x >= 0 + }); + this.id = attributes.id || ""; + this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]); + this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0"); + this.lineThrough = (0, _utils.getInteger)({ + data: attributes.lineThrough, + defaultValue: 0, + validate: x => x === 1 || x === 2 + }); + this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]); + this.overline = (0, _utils.getInteger)({ + data: attributes.overline, + defaultValue: 0, + validate: x => x === 1 || x === 2 + }); + this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]); + this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]); + this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); + this.typeface = attributes.typeface || "Courier"; + this.underline = (0, _utils.getInteger)({ + data: attributes.underline, + defaultValue: 0, + validate: x => x === 1 || x === 2 + }); + this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]); + this.extras = null; + this.fill = null; + } + + [_xfa_object.$clean](builder) { + super[_xfa_object.$clean](builder); + + this[_xfa_object.$globalData].usedTypefaces.add(this.typeface); + } + + [_xfa_object.$toStyle]() { + const style = (0, _html_utils.toStyle)(this, "fill"); + const color = style.color; + + if (color) { + if (color === "#000000") { + delete style.color; + } else if (!color.startsWith("#")) { + style.background = color; + style.backgroundClip = "text"; + style.color = "transparent"; + } + } + + if (this.baselineShift) { + style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift); + } + + style.fontKerning = this.kerningMode === "none" ? "none" : "normal"; + style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing); + + if (this.lineThrough !== 0) { + style.textDecoration = "line-through"; + + if (this.lineThrough === 2) { + style.textDecorationStyle = "double"; + } + } + + if (this.overline !== 0) { + style.textDecoration = "overline"; + + if (this.overline === 2) { + style.textDecorationStyle = "double"; + } + } + + style.fontStyle = this.posture; + style.fontSize = (0, _html_utils.measureToString)(0.99 * this.size); + (0, _html_utils.setFontFamily)(this, this, this[_xfa_object.$globalData].fontFinder, style); + + if (this.underline !== 0) { + style.textDecoration = "underline"; + + if (this.underline === 2) { + style.textDecorationStyle = "double"; + } + } + + style.fontWeight = this.weight; + return style; + } + +} + +class Format extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "format", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.picture = null; + } + +} + +class Handler extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "handler"); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Hyphenation extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "hyphenation"); + this.excludeAllCaps = (0, _utils.getInteger)({ + data: attributes.excludeAllCaps, + defaultValue: 0, + validate: x => x === 1 + }); + this.excludeInitialCap = (0, _utils.getInteger)({ + data: attributes.excludeInitialCap, + defaultValue: 0, + validate: x => x === 1 + }); + this.hyphenate = (0, _utils.getInteger)({ + data: attributes.hyphenate, + defaultValue: 0, + validate: x => x === 1 + }); + this.id = attributes.id || ""; + this.pushCharacterCount = (0, _utils.getInteger)({ + data: attributes.pushCharacterCount, + defaultValue: 3, + validate: x => x >= 0 + }); + this.remainCharacterCount = (0, _utils.getInteger)({ + data: attributes.remainCharacterCount, + defaultValue: 3, + validate: x => x >= 0 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.wordCharacterCount = (0, _utils.getInteger)({ + data: attributes.wordCharacterCount, + defaultValue: 7, + validate: x => x >= 0 + }); + } + +} + +class Image extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "image"); + this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", "width"]); + this.contentType = attributes.contentType || ""; + this.href = attributes.href || ""; + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", "package"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$toHTML]() { + if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) { + return _utils.HTMLResult.EMPTY; + } + + let buffer = this[_xfa_object.$globalData].images && this[_xfa_object.$globalData].images.get(this.href); + + if (!buffer && (this.href || !this[_xfa_object.$content])) { + return _utils.HTMLResult.EMPTY; + } + + if (!buffer && this.transferEncoding === "base64") { + buffer = (0, _util.stringToBytes)(atob(this[_xfa_object.$content])); + } + + if (!buffer) { + return _utils.HTMLResult.EMPTY; + } + + if (!this.contentType) { + for (const [header, type] of IMAGES_HEADERS) { + if (buffer.length > header.length && header.every((x, i) => x === buffer[i])) { + this.contentType = type; + break; + } + } + + if (!this.contentType) { + return _utils.HTMLResult.EMPTY; + } + } + + const blob = new Blob([buffer], { + type: this.contentType + }); + let style; + + switch (this.aspect) { + case "fit": + case "actual": + break; + + case "height": + style = { + height: "100%", + objectFit: "fill" + }; + break; + + case "none": + style = { + width: "100%", + height: "100%", + objectFit: "fill" + }; + break; + + case "width": + style = { + width: "100%", + objectFit: "fill" + }; + break; + } + + const parent = this[_xfa_object.$getParent](); + + return _utils.HTMLResult.success({ + name: "img", + attributes: { + class: ["xfaImage"], + style, + src: URL.createObjectURL(blob), + alt: parent ? ariaLabel(parent[_xfa_object.$getParent]()) : null + } + }); + } + +} + +class ImageEdit extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "imageEdit", true); + this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + + [_xfa_object.$toHTML](availableSpace) { + if (this.data === "embed") { + return _utils.HTMLResult.success({ + name: "div", + children: [], + attributes: {} + }); + } + + return _utils.HTMLResult.EMPTY; + } + +} + +class Integer extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "integer"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + const number = parseInt(this[_xfa_object.$content].trim(), 10); + this[_xfa_object.$content] = isNaN(number) ? null : number; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); + } + +} + +class Issuers extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "issuers", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.certificate = new _xfa_object.XFAObjectArray(); + } + +} + +class Items extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "items", true); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.ref = attributes.ref || ""; + this.save = (0, _utils.getInteger)({ + data: attributes.save, + defaultValue: 0, + validate: x => x === 1 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.boolean = new _xfa_object.XFAObjectArray(); + this.date = new _xfa_object.XFAObjectArray(); + this.dateTime = new _xfa_object.XFAObjectArray(); + this.decimal = new _xfa_object.XFAObjectArray(); + this.exData = new _xfa_object.XFAObjectArray(); + this.float = new _xfa_object.XFAObjectArray(); + this.image = new _xfa_object.XFAObjectArray(); + this.integer = new _xfa_object.XFAObjectArray(); + this.text = new _xfa_object.XFAObjectArray(); + this.time = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$toHTML]() { + const output = []; + + for (const child of this[_xfa_object.$getChildren]()) { + output.push(child[_xfa_object.$text]()); + } + + return _utils.HTMLResult.success(output); + } + +} + +exports.Items = Items; + +class Keep extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "keep", true); + this.id = attributes.id || ""; + const options = ["none", "contentArea", "pageArea"]; + this.intact = (0, _utils.getStringOption)(attributes.intact, options); + this.next = (0, _utils.getStringOption)(attributes.next, options); + this.previous = (0, _utils.getStringOption)(attributes.previous, options); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + +} + +class KeyUsage extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "keyUsage"); + const options = ["", "yes", "no"]; + this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options); + this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options); + this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options); + this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options); + this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options); + this.id = attributes.id || ""; + this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options); + this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options); + this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options); + this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options); + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Line extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "line", true); + this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); + this.id = attributes.id || ""; + this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.edge = null; + } + + [_xfa_object.$toHTML]() { + const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + const edge = this.edge || new Edge({}); + + const edgeStyle = edge[_xfa_object.$toStyle](); + + const style = Object.create(null); + const thickness = edge.presence === "visible" ? edge.thickness : 0; + style.strokeWidth = (0, _html_utils.measureToString)(thickness); + style.stroke = edgeStyle.color; + let x1, y1, x2, y2; + let width = "100%"; + let height = "100%"; + + if (parent.w <= thickness) { + [x1, y1, x2, y2] = ["50%", 0, "50%", "100%"]; + width = style.strokeWidth; + } else if (parent.h <= thickness) { + [x1, y1, x2, y2] = [0, "50%", "100%", "50%"]; + height = style.strokeWidth; + } else { + if (this.slope === "\\") { + [x1, y1, x2, y2] = [0, 0, "100%", "100%"]; + } else { + [x1, y1, x2, y2] = [0, "100%", "100%", 0]; + } + } + + const line = { + name: "line", + attributes: { + xmlns: SVG_NS, + x1, + y1, + x2, + y2, + style + } + }; + const svg = { + name: "svg", + children: [line], + attributes: { + xmlns: SVG_NS, + width, + height, + style: { + overflow: "visible" + } + } + }; + + if (hasMargin(parent)) { + return _utils.HTMLResult.success({ + name: "div", + attributes: { + style: { + display: "inline", + width: "100%", + height: "100%" + } + }, + children: [svg] + }); + } + + svg.attributes.style.position = "absolute"; + return _utils.HTMLResult.success(svg); + } + +} + +class Linear extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "linear", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + } + + [_xfa_object.$toStyle](startColor) { + startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; + const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase(); + const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; + return `linear-gradient(${transf}, ${startColor}, ${endColor})`; + } + +} + +class LockDocument extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "lockDocument"); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = (0, _utils.getStringOption)(this[_xfa_object.$content], ["auto", "0", "1"]); + } + +} + +class Manifest extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "manifest", true); + this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.ref = new _xfa_object.XFAObjectArray(); + } + +} + +class Margin extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "margin", true); + this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0"); + this.id = attributes.id || ""; + this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0"); + this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0"); + this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0"); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + + [_xfa_object.$toStyle]() { + return { + margin: (0, _html_utils.measureToString)(this.topInset) + " " + (0, _html_utils.measureToString)(this.rightInset) + " " + (0, _html_utils.measureToString)(this.bottomInset) + " " + (0, _html_utils.measureToString)(this.leftInset) + }; + } + +} + +class Mdp extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "mdp"); + this.id = attributes.id || ""; + this.permissions = (0, _utils.getInteger)({ + data: attributes.permissions, + defaultValue: 2, + validate: x => x === 1 || x === 3 + }); + this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Medium extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "medium"); + this.id = attributes.id || ""; + this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox); + this.long = (0, _utils.getMeasurement)(attributes.long); + this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]); + this.short = (0, _utils.getMeasurement)(attributes.short); + this.stock = attributes.stock || ""; + this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]); + this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Message extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "message", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.text = new _xfa_object.XFAObjectArray(); + } + +} + +class NumericEdit extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "numericEdit", true); + this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.comb = null; + this.extras = null; + this.margin = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); + + const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + const html = { + name: "input", + attributes: { + type: "text", + fieldId: field[_xfa_object.$uid], + dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], + class: ["xfaTextfield"], + style, + "aria-label": ariaLabel(field), + "aria-required": false + } + }; + + if (isRequired(field)) { + html.attributes["aria-required"] = true; + html.attributes.required = true; + } + + return _utils.HTMLResult.success({ + name: "label", + attributes: { + class: ["xfaLabel"] + }, + children: [html] + }); + } + +} + +class Occur extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "occur", true); + this.id = attributes.id || ""; + this.initial = attributes.initial !== "" ? (0, _utils.getInteger)({ + data: attributes.initial, + defaultValue: "", + validate: x => true + }) : ""; + this.max = attributes.max !== "" ? (0, _utils.getInteger)({ + data: attributes.max, + defaultValue: 1, + validate: x => true + }) : ""; + this.min = attributes.min !== "" ? (0, _utils.getInteger)({ + data: attributes.min, + defaultValue: 1, + validate: x => true + }) : ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + + [_xfa_object.$clean]() { + const parent = this[_xfa_object.$getParent](); + + const originalMin = this.min; + + if (this.min === "") { + this.min = parent instanceof PageArea || parent instanceof PageSet ? 0 : 1; + } + + if (this.max === "") { + if (originalMin === "") { + this.max = parent instanceof PageArea || parent instanceof PageSet ? -1 : 1; + } else { + this.max = this.min; + } + } + + if (this.max !== -1 && this.max < this.min) { + this.max = this.min; + } + + if (this.initial === "") { + this.initial = parent instanceof Template ? 1 : this.min; + } + } + +} + +class Oid extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "oid"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Oids extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "oids", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.oid = new _xfa_object.XFAObjectArray(); + } + +} + +class Overflow extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "overflow"); + this.id = attributes.id || ""; + this.leader = attributes.leader || ""; + this.target = attributes.target || ""; + this.trailer = attributes.trailer || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$getExtra]() { + if (!this[_xfa_object.$extra]) { + const parent = this[_xfa_object.$getParent](); + + const root = this[_xfa_object.$getTemplateRoot](); + + const target = root[_xfa_object.$searchNode](this.target, parent); + + const leader = root[_xfa_object.$searchNode](this.leader, parent); + + const trailer = root[_xfa_object.$searchNode](this.trailer, parent); + + this[_xfa_object.$extra] = { + target: target && target[0] || null, + leader: leader && leader[0] || null, + trailer: trailer && trailer[0] || null, + addLeader: false, + addTrailer: false + }; + } + + return this[_xfa_object.$extra]; + } + +} + +class PageArea extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "pageArea", true); + this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", "notBlank"]); + this.id = attributes.id || ""; + this.initialNumber = (0, _utils.getInteger)({ + data: attributes.initialNumber, + defaultValue: 1, + validate: x => true + }); + this.name = attributes.name || ""; + this.numbered = (0, _utils.getInteger)({ + data: attributes.numbered, + defaultValue: 1, + validate: x => true + }); + this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]); + this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", "only", "rest"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.desc = null; + this.extras = null; + this.medium = null; + this.occur = null; + this.area = new _xfa_object.XFAObjectArray(); + this.contentArea = new _xfa_object.XFAObjectArray(); + this.draw = new _xfa_object.XFAObjectArray(); + this.exclGroup = new _xfa_object.XFAObjectArray(); + this.field = new _xfa_object.XFAObjectArray(); + this.subform = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$isUsable]() { + if (!this[_xfa_object.$extra]) { + this[_xfa_object.$extra] = { + numberOfUse: 0 + }; + return true; + } + + return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max; + } + + [_xfa_object.$cleanPage]() { + delete this[_xfa_object.$extra]; + } + + [_xfa_object.$getNextPage]() { + if (!this[_xfa_object.$extra]) { + this[_xfa_object.$extra] = { + numberOfUse: 0 + }; + } + + const parent = this[_xfa_object.$getParent](); + + if (parent.relation === "orderedOccurrence") { + if (this[_xfa_object.$isUsable]()) { + this[_xfa_object.$extra].numberOfUse += 1; + return this; + } + } + + return parent[_xfa_object.$getNextPage](); + } + + [_xfa_object.$getAvailableSpace]() { + return this[_xfa_object.$extra].space || { + width: 0, + height: 0 + }; + } + + [_xfa_object.$toHTML]() { + if (!this[_xfa_object.$extra]) { + this[_xfa_object.$extra] = { + numberOfUse: 1 + }; + } + + const children = []; + this[_xfa_object.$extra].children = children; + const style = Object.create(null); + + if (this.medium && this.medium.short && this.medium.long) { + style.width = (0, _html_utils.measureToString)(this.medium.short); + style.height = (0, _html_utils.measureToString)(this.medium.long); + this[_xfa_object.$extra].space = { + width: this.medium.short, + height: this.medium.long + }; + + if (this.medium.orientation === "landscape") { + const x = style.width; + style.width = style.height; + style.height = x; + this[_xfa_object.$extra].space = { + width: this.medium.long, + height: this.medium.short + }; + } + } else { + (0, _util.warn)("XFA - No medium specified in pageArea: please file a bug."); + } + + this[_xfa_object.$childrenToHTML]({ + filter: new Set(["area", "draw", "field", "subform"]), + include: true + }); + + this[_xfa_object.$childrenToHTML]({ + filter: new Set(["contentArea"]), + include: true + }); + + return _utils.HTMLResult.success({ + name: "div", + children, + attributes: { + class: ["xfaPage"], + id: this[_xfa_object.$uid], + style, + xfaName: this.name + } + }); + } + +} + +class PageSet extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "pageSet", true); + this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", "shortEdge"]); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", "duplexPaginated", "simplexPaginated"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.occur = null; + this.pageArea = new _xfa_object.XFAObjectArray(); + this.pageSet = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$cleanPage]() { + for (const page of this.pageArea.children) { + page[_xfa_object.$cleanPage](); + } + + for (const page of this.pageSet.children) { + page[_xfa_object.$cleanPage](); + } + } + + [_xfa_object.$isUsable]() { + return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max; + } + + [_xfa_object.$getNextPage]() { + if (!this[_xfa_object.$extra]) { + this[_xfa_object.$extra] = { + numberOfUse: 1, + pageIndex: -1, + pageSetIndex: -1 + }; + } + + if (this.relation === "orderedOccurrence") { + if (this[_xfa_object.$extra].pageIndex + 1 < this.pageArea.children.length) { + this[_xfa_object.$extra].pageIndex += 1; + const pageArea = this.pageArea.children[this[_xfa_object.$extra].pageIndex]; + return pageArea[_xfa_object.$getNextPage](); + } + + if (this[_xfa_object.$extra].pageSetIndex + 1 < this.pageSet.children.length) { + this[_xfa_object.$extra].pageSetIndex += 1; + return this.pageSet.children[this[_xfa_object.$extra].pageSetIndex][_xfa_object.$getNextPage](); + } + + if (this[_xfa_object.$isUsable]()) { + this[_xfa_object.$extra].numberOfUse += 1; + this[_xfa_object.$extra].pageIndex = -1; + this[_xfa_object.$extra].pageSetIndex = -1; + return this[_xfa_object.$getNextPage](); + } + + const parent = this[_xfa_object.$getParent](); + + if (parent instanceof PageSet) { + return parent[_xfa_object.$getNextPage](); + } + + this[_xfa_object.$cleanPage](); + + return this[_xfa_object.$getNextPage](); + } + + const pageNumber = this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].pageNumber; + + const parity = pageNumber % 2 === 0 ? "even" : "odd"; + const position = pageNumber === 0 ? "first" : "rest"; + let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position); + + if (page) { + return page; + } + + page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === position); + + if (page) { + return page; + } + + page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === "any"); + + if (page) { + return page; + } + + return this.pageArea.children[0]; + } + +} + +class Para extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "para", true); + this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); + this.id = attributes.id || ""; + this.lineHeight = attributes.lineHeight ? (0, _utils.getMeasurement)(attributes.lineHeight, "0pt") : ""; + this.marginLeft = attributes.marginLeft ? (0, _utils.getMeasurement)(attributes.marginLeft, "0pt") : ""; + this.marginRight = attributes.marginRight ? (0, _utils.getMeasurement)(attributes.marginRight, "0pt") : ""; + this.orphans = (0, _utils.getInteger)({ + data: attributes.orphans, + defaultValue: 0, + validate: x => x >= 0 + }); + this.preserve = attributes.preserve || ""; + this.radixOffset = attributes.radixOffset ? (0, _utils.getMeasurement)(attributes.radixOffset, "0pt") : ""; + this.spaceAbove = attributes.spaceAbove ? (0, _utils.getMeasurement)(attributes.spaceAbove, "0pt") : ""; + this.spaceBelow = attributes.spaceBelow ? (0, _utils.getMeasurement)(attributes.spaceBelow, "0pt") : ""; + this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : ""; + this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, _utils.getMeasurement)(x) : x); + this.textIndent = attributes.textIndent ? (0, _utils.getMeasurement)(attributes.textIndent, "0pt") : ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]); + this.widows = (0, _utils.getInteger)({ + data: attributes.widows, + defaultValue: 0, + validate: x => x >= 0 + }); + this.hyphenation = null; + } + + [_xfa_object.$toStyle]() { + const style = (0, _html_utils.toStyle)(this, "hAlign"); + + if (this.marginLeft !== "") { + style.paddingLeft = (0, _html_utils.measureToString)(this.marginLeft); + } + + if (this.marginRight !== "") { + style.paddingight = (0, _html_utils.measureToString)(this.marginRight); + } + + if (this.spaceAbove !== "") { + style.paddingTop = (0, _html_utils.measureToString)(this.spaceAbove); + } + + if (this.spaceBelow !== "") { + style.paddingBottom = (0, _html_utils.measureToString)(this.spaceBelow); + } + + if (this.textIndent !== "") { + style.textIndent = (0, _html_utils.measureToString)(this.textIndent); + (0, _html_utils.fixTextIndent)(style); + } + + if (this.lineHeight > 0) { + style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight); + } + + if (this.tabDefault !== "") { + style.tabSize = (0, _html_utils.measureToString)(this.tabDefault); + } + + if (this.tabStops.length > 0) {} + + if (this.hyphenatation) { + Object.assign(style, this.hyphenatation[_xfa_object.$toStyle]()); + } + + return style; + } + +} + +class PasswordEdit extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "passwordEdit", true); + this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); + this.id = attributes.id || ""; + this.passwordChar = attributes.passwordChar || "*"; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.extras = null; + this.margin = null; + } + +} + +class Pattern extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "pattern", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", "diagonalRight", "horizontal", "vertical"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + } + + [_xfa_object.$toStyle](startColor) { + startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; + const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; + const width = 5; + const cmd = "repeating-linear-gradient"; + const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`; + + switch (this.type) { + case "crossHatch": + return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`; + + case "crossDiagonal": + return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`; + + case "diagonalLeft": + return `${cmd}(45deg,${colors})`; + + case "diagonalRight": + return `${cmd}(-45deg,${colors})`; + + case "horizontal": + return `${cmd}(to top,${colors})`; + + case "vertical": + return `${cmd}(to right,${colors})`; + } + + return ""; + } + +} + +class Picture extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "picture"); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Proto extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "proto", true); + this.appearanceFilter = new _xfa_object.XFAObjectArray(); + this.arc = new _xfa_object.XFAObjectArray(); + this.area = new _xfa_object.XFAObjectArray(); + this.assist = new _xfa_object.XFAObjectArray(); + this.barcode = new _xfa_object.XFAObjectArray(); + this.bindItems = new _xfa_object.XFAObjectArray(); + this.bookend = new _xfa_object.XFAObjectArray(); + this.boolean = new _xfa_object.XFAObjectArray(); + this.border = new _xfa_object.XFAObjectArray(); + this.break = new _xfa_object.XFAObjectArray(); + this.breakAfter = new _xfa_object.XFAObjectArray(); + this.breakBefore = new _xfa_object.XFAObjectArray(); + this.button = new _xfa_object.XFAObjectArray(); + this.calculate = new _xfa_object.XFAObjectArray(); + this.caption = new _xfa_object.XFAObjectArray(); + this.certificate = new _xfa_object.XFAObjectArray(); + this.certificates = new _xfa_object.XFAObjectArray(); + this.checkButton = new _xfa_object.XFAObjectArray(); + this.choiceList = new _xfa_object.XFAObjectArray(); + this.color = new _xfa_object.XFAObjectArray(); + this.comb = new _xfa_object.XFAObjectArray(); + this.connect = new _xfa_object.XFAObjectArray(); + this.contentArea = new _xfa_object.XFAObjectArray(); + this.corner = new _xfa_object.XFAObjectArray(); + this.date = new _xfa_object.XFAObjectArray(); + this.dateTime = new _xfa_object.XFAObjectArray(); + this.dateTimeEdit = new _xfa_object.XFAObjectArray(); + this.decimal = new _xfa_object.XFAObjectArray(); + this.defaultUi = new _xfa_object.XFAObjectArray(); + this.desc = new _xfa_object.XFAObjectArray(); + this.digestMethod = new _xfa_object.XFAObjectArray(); + this.digestMethods = new _xfa_object.XFAObjectArray(); + this.draw = new _xfa_object.XFAObjectArray(); + this.edge = new _xfa_object.XFAObjectArray(); + this.encoding = new _xfa_object.XFAObjectArray(); + this.encodings = new _xfa_object.XFAObjectArray(); + this.encrypt = new _xfa_object.XFAObjectArray(); + this.encryptData = new _xfa_object.XFAObjectArray(); + this.encryption = new _xfa_object.XFAObjectArray(); + this.encryptionMethod = new _xfa_object.XFAObjectArray(); + this.encryptionMethods = new _xfa_object.XFAObjectArray(); + this.event = new _xfa_object.XFAObjectArray(); + this.exData = new _xfa_object.XFAObjectArray(); + this.exObject = new _xfa_object.XFAObjectArray(); + this.exclGroup = new _xfa_object.XFAObjectArray(); + this.execute = new _xfa_object.XFAObjectArray(); + this.extras = new _xfa_object.XFAObjectArray(); + this.field = new _xfa_object.XFAObjectArray(); + this.fill = new _xfa_object.XFAObjectArray(); + this.filter = new _xfa_object.XFAObjectArray(); + this.float = new _xfa_object.XFAObjectArray(); + this.font = new _xfa_object.XFAObjectArray(); + this.format = new _xfa_object.XFAObjectArray(); + this.handler = new _xfa_object.XFAObjectArray(); + this.hyphenation = new _xfa_object.XFAObjectArray(); + this.image = new _xfa_object.XFAObjectArray(); + this.imageEdit = new _xfa_object.XFAObjectArray(); + this.integer = new _xfa_object.XFAObjectArray(); + this.issuers = new _xfa_object.XFAObjectArray(); + this.items = new _xfa_object.XFAObjectArray(); + this.keep = new _xfa_object.XFAObjectArray(); + this.keyUsage = new _xfa_object.XFAObjectArray(); + this.line = new _xfa_object.XFAObjectArray(); + this.linear = new _xfa_object.XFAObjectArray(); + this.lockDocument = new _xfa_object.XFAObjectArray(); + this.manifest = new _xfa_object.XFAObjectArray(); + this.margin = new _xfa_object.XFAObjectArray(); + this.mdp = new _xfa_object.XFAObjectArray(); + this.medium = new _xfa_object.XFAObjectArray(); + this.message = new _xfa_object.XFAObjectArray(); + this.numericEdit = new _xfa_object.XFAObjectArray(); + this.occur = new _xfa_object.XFAObjectArray(); + this.oid = new _xfa_object.XFAObjectArray(); + this.oids = new _xfa_object.XFAObjectArray(); + this.overflow = new _xfa_object.XFAObjectArray(); + this.pageArea = new _xfa_object.XFAObjectArray(); + this.pageSet = new _xfa_object.XFAObjectArray(); + this.para = new _xfa_object.XFAObjectArray(); + this.passwordEdit = new _xfa_object.XFAObjectArray(); + this.pattern = new _xfa_object.XFAObjectArray(); + this.picture = new _xfa_object.XFAObjectArray(); + this.radial = new _xfa_object.XFAObjectArray(); + this.reason = new _xfa_object.XFAObjectArray(); + this.reasons = new _xfa_object.XFAObjectArray(); + this.rectangle = new _xfa_object.XFAObjectArray(); + this.ref = new _xfa_object.XFAObjectArray(); + this.script = new _xfa_object.XFAObjectArray(); + this.setProperty = new _xfa_object.XFAObjectArray(); + this.signData = new _xfa_object.XFAObjectArray(); + this.signature = new _xfa_object.XFAObjectArray(); + this.signing = new _xfa_object.XFAObjectArray(); + this.solid = new _xfa_object.XFAObjectArray(); + this.speak = new _xfa_object.XFAObjectArray(); + this.stipple = new _xfa_object.XFAObjectArray(); + this.subform = new _xfa_object.XFAObjectArray(); + this.subformSet = new _xfa_object.XFAObjectArray(); + this.subjectDN = new _xfa_object.XFAObjectArray(); + this.subjectDNs = new _xfa_object.XFAObjectArray(); + this.submit = new _xfa_object.XFAObjectArray(); + this.text = new _xfa_object.XFAObjectArray(); + this.textEdit = new _xfa_object.XFAObjectArray(); + this.time = new _xfa_object.XFAObjectArray(); + this.timeStamp = new _xfa_object.XFAObjectArray(); + this.toolTip = new _xfa_object.XFAObjectArray(); + this.traversal = new _xfa_object.XFAObjectArray(); + this.traverse = new _xfa_object.XFAObjectArray(); + this.ui = new _xfa_object.XFAObjectArray(); + this.validate = new _xfa_object.XFAObjectArray(); + this.value = new _xfa_object.XFAObjectArray(); + this.variables = new _xfa_object.XFAObjectArray(); + } + +} + +class Radial extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "radial", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + } + + [_xfa_object.$toStyle](startColor) { + startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; + const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; + const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`; + return `radial-gradient(circle at center, ${colors})`; + } + +} + +class Reason extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "reason"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Reasons extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "reasons", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.reason = new _xfa_object.XFAObjectArray(); + } + +} + +class Rectangle extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "rectangle", true); + this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.corner = new _xfa_object.XFAObjectArray(4); + this.edge = new _xfa_object.XFAObjectArray(4); + this.fill = null; + } + + [_xfa_object.$toHTML]() { + const edge = this.edge.children.length ? this.edge.children[0] : new Edge({}); + + const edgeStyle = edge[_xfa_object.$toStyle](); + + const style = Object.create(null); + + if (this.fill && this.fill.presence === "visible") { + Object.assign(style, this.fill[_xfa_object.$toStyle]()); + } else { + style.fill = "transparent"; + } + + style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); + style.stroke = edgeStyle.color; + const corner = this.corner.children.length ? this.corner.children[0] : new Corner({}); + + const cornerStyle = corner[_xfa_object.$toStyle](); + + const rect = { + name: "rect", + attributes: { + xmlns: SVG_NS, + width: "100%", + height: "100%", + x: 0, + y: 0, + rx: cornerStyle.radius, + ry: cornerStyle.radius, + style + } + }; + const svg = { + name: "svg", + children: [rect], + attributes: { + xmlns: SVG_NS, + style: { + overflow: "visible" + }, + width: "100%", + height: "100%" + } + }; + + const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + if (hasMargin(parent)) { + return _utils.HTMLResult.success({ + name: "div", + attributes: { + style: { + display: "inline", + width: "100%", + height: "100%" + } + }, + children: [svg] + }); + } + + svg.attributes.style.position = "absolute"; + return _utils.HTMLResult.success(svg); + } + +} + +class RefElement extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "ref"); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Script extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "script"); + this.binding = attributes.binding || ""; + this.contentType = attributes.contentType || ""; + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class SetProperty extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "setProperty"); + this.connection = attributes.connection || ""; + this.ref = attributes.ref || ""; + this.target = attributes.target || ""; + } + +} + +exports.SetProperty = SetProperty; + +class SignData extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "signData", true); + this.id = attributes.id || ""; + this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]); + this.ref = attributes.ref || ""; + this.target = attributes.target || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.filter = null; + this.manifest = null; + } + +} + +class Signature extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "signature", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.border = null; + this.extras = null; + this.filter = null; + this.manifest = null; + this.margin = null; + } + +} + +class Signing extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "signing", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.certificate = new _xfa_object.XFAObjectArray(); + } + +} + +class Solid extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "solid", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + } + + [_xfa_object.$toStyle](startColor) { + return startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; + } + +} + +class Speak extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "speak"); + this.disable = (0, _utils.getInteger)({ + data: attributes.disable, + defaultValue: 0, + validate: x => x === 1 + }); + this.id = attributes.id || ""; + this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", "toolTip"]); + this.rid = attributes.rid || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Stipple extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "stipple", true); + this.id = attributes.id || ""; + this.rate = (0, _utils.getInteger)({ + data: attributes.rate, + defaultValue: 50, + validate: x => x >= 0 && x <= 100 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.color = null; + this.extras = null; + } + + [_xfa_object.$toStyle](bgColor) { + const alpha = this.rate / 100; + return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha)); + } + +} + +class Subform extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "subform", true); + this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); + this.allowMacro = (0, _utils.getInteger)({ + data: attributes.allowMacro, + defaultValue: 0, + validate: x => x === 1 + }); + this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); + this.colSpan = (0, _utils.getInteger)({ + data: attributes.colSpan, + defaultValue: 1, + validate: n => n >= 1 || n === -1 + }); + this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, _utils.getMeasurement)(x)); + this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; + this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); + this.id = attributes.id || ""; + this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); + this.locale = attributes.locale || ""; + this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); + this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); + this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]); + this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); + this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); + this.name = attributes.name || ""; + this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]); + this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; + this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); + this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); + this.assist = null; + this.bind = null; + this.bookend = null; + this.border = null; + this.break = null; + this.calculate = null; + this.desc = null; + this.extras = null; + this.keep = null; + this.margin = null; + this.occur = null; + this.overflow = null; + this.pageSet = null; + this.para = null; + this.traversal = null; + this.validate = null; + this.variables = null; + this.area = new _xfa_object.XFAObjectArray(); + this.breakAfter = new _xfa_object.XFAObjectArray(); + this.breakBefore = new _xfa_object.XFAObjectArray(); + this.connect = new _xfa_object.XFAObjectArray(); + this.draw = new _xfa_object.XFAObjectArray(); + this.event = new _xfa_object.XFAObjectArray(); + this.exObject = new _xfa_object.XFAObjectArray(); + this.exclGroup = new _xfa_object.XFAObjectArray(); + this.field = new _xfa_object.XFAObjectArray(); + this.proto = new _xfa_object.XFAObjectArray(); + this.setProperty = new _xfa_object.XFAObjectArray(); + this.subform = new _xfa_object.XFAObjectArray(); + this.subformSet = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$getSubformParent]() { + const parent = this[_xfa_object.$getParent](); + + if (parent instanceof SubformSet) { + return parent[_xfa_object.$getSubformParent](); + } + + return parent; + } + + [_xfa_object.$isBindable]() { + return true; + } + + [_xfa_object.$isThereMoreWidth]() { + return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth](); + } + + *[_xfa_object.$getContainedChildren]() { + yield* getContainedChildren(this); + } + + [_xfa_object.$flushHTML]() { + return (0, _layout.flushHTML)(this); + } + + [_xfa_object.$addHTML](html, bbox) { + (0, _layout.addHTML)(this, html, bbox); + } + + [_xfa_object.$getAvailableSpace]() { + return (0, _layout.getAvailableSpace)(this); + } + + [_xfa_object.$isSplittable]() { + const parent = this[_xfa_object.$getSubformParent](); + + if (!parent[_xfa_object.$isSplittable]()) { + return false; + } + + if (this[_xfa_object.$extra]._isSplittable !== undefined) { + return this[_xfa_object.$extra]._isSplittable; + } + + if (this.layout === "position" || this.layout.includes("row")) { + this[_xfa_object.$extra]._isSplittable = false; + return false; + } + + if (this.keep && this.keep.intact !== "none") { + this[_xfa_object.$extra]._isSplittable = false; + return false; + } + + if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) { + return false; + } + + this[_xfa_object.$extra]._isSplittable = true; + return true; + } + + [_xfa_object.$toHTML](availableSpace) { + setTabIndex(this); + + if (this.break) { + if (this.break.after !== "auto" || this.break.afterTarget !== "") { + const node = new BreakAfter({ + targetType: this.break.after, + target: this.break.afterTarget, + startNew: this.break.startNew.toString() + }); + node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; + + this[_xfa_object.$appendChild](node); + + this.breakAfter.push(node); + } + + if (this.break.before !== "auto" || this.break.beforeTarget !== "") { + const node = new BreakBefore({ + targetType: this.break.before, + target: this.break.beforeTarget, + startNew: this.break.startNew.toString() + }); + node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; + + this[_xfa_object.$appendChild](node); + + this.breakBefore.push(node); + } + + if (this.break.overflowTarget !== "") { + const node = new Overflow({ + target: this.break.overflowTarget, + leader: this.break.overflowLeader, + trailer: this.break.overflowTrailer + }); + node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; + + this[_xfa_object.$appendChild](node); + + this.overflow.push(node); + } + + this[_xfa_object.$removeChild](this.break); + + this.break = null; + } + + if (this.presence === "hidden" || this.presence === "inactive") { + return _utils.HTMLResult.EMPTY; + } + + if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) { + (0, _util.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."); + } + + if (this.breakBefore.children.length >= 1) { + const breakBefore = this.breakBefore.children[0]; + + if (handleBreak(breakBefore)) { + return _utils.HTMLResult.breakNode(breakBefore); + } + } + + if (this[_xfa_object.$extra] && this[_xfa_object.$extra].afterBreakAfter) { + return _utils.HTMLResult.EMPTY; + } + + (0, _html_utils.fixDimensions)(this); + const children = []; + const attributes = { + id: this[_xfa_object.$uid], + class: [] + }; + (0, _html_utils.setAccess)(this, attributes.class); + + if (!this[_xfa_object.$extra]) { + this[_xfa_object.$extra] = Object.create(null); + } + + Object.assign(this[_xfa_object.$extra], { + children, + line: null, + attributes, + attempt: 0, + numberInLine: 0, + availableSpace: { + width: Math.min(this.w || Infinity, availableSpace.width), + height: Math.min(this.h || Infinity, availableSpace.height) + }, + width: 0, + height: 0, + prevHeight: 0, + currentWidth: 0 + }); + + const root = this[_xfa_object.$getTemplateRoot](); + + const savedNoLayoutFailure = root[_xfa_object.$extra].noLayoutFailure; + + const isSplittable = this[_xfa_object.$isSplittable](); + + if (!isSplittable) { + setFirstUnsplittable(this); + } + + if (!(0, _layout.checkDimensions)(this, availableSpace)) { + return _utils.HTMLResult.FAILURE; + } + + const filter = new Set(["area", "draw", "exclGroup", "field", "subform", "subformSet"]); + + if (this.layout.includes("row")) { + const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths; + + if (Array.isArray(columnWidths) && columnWidths.length > 0) { + this[_xfa_object.$extra].columnWidths = columnWidths; + this[_xfa_object.$extra].currentColumn = 0; + } + } + + const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); + const classNames = ["xfaSubform"]; + const cl = (0, _html_utils.layoutClass)(this); + + if (cl) { + classNames.push(cl); + } + + attributes.style = style; + attributes.class = classNames; + + if (this.name) { + attributes.xfaName = this.name; + } + + if (this.overflow) { + const overflowExtra = this.overflow[_xfa_object.$getExtra](); + + if (overflowExtra.addLeader) { + overflowExtra.addLeader = false; + handleOverflow(this, overflowExtra.leader, availableSpace); + } + } + + this[_xfa_object.$pushPara](); + + const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; + const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; + + for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) { + if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { + this[_xfa_object.$extra].numberInLine = 0; + } + + const result = this[_xfa_object.$childrenToHTML]({ + filter, + include: true + }); + + if (result.success) { + break; + } + + if (result.isBreak()) { + this[_xfa_object.$popPara](); + + return result; + } + + if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !root[_xfa_object.$extra].noLayoutFailure) { + this[_xfa_object.$extra].attempt = maxRun; + break; + } + } + + this[_xfa_object.$popPara](); + + if (!isSplittable) { + unsetFirstUnsplittable(this); + } + + root[_xfa_object.$extra].noLayoutFailure = savedNoLayoutFailure; + + if (this[_xfa_object.$extra].attempt === maxRun) { + if (this.overflow) { + this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].overflowNode = this.overflow; + } + + if (!isSplittable) { + delete this[_xfa_object.$extra]; + } + + return _utils.HTMLResult.FAILURE; + } + + if (this.overflow) { + const overflowExtra = this.overflow[_xfa_object.$getExtra](); + + if (overflowExtra.addTrailer) { + overflowExtra.addTrailer = false; + handleOverflow(this, overflowExtra.trailer, availableSpace); + } + } + + let marginH = 0; + let marginV = 0; + + if (this.margin) { + marginH = this.margin.leftInset + this.margin.rightInset; + marginV = this.margin.topInset + this.margin.bottomInset; + } + + const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0); + const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0); + const bbox = [this.x, this.y, width, height]; + + if (this.w === "") { + style.width = (0, _html_utils.measureToString)(width); + } + + if (this.h === "") { + style.height = (0, _html_utils.measureToString)(height); + } + + if ((style.width === "0px" || style.height === "0px") && children.length === 0) { + return _utils.HTMLResult.EMPTY; + } + + const html = { + name: "div", + attributes, + children + }; + applyAssist(this, attributes); + + const result = _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); + + if (this.breakAfter.children.length >= 1) { + const breakAfter = this.breakAfter.children[0]; + + if (handleBreak(breakAfter)) { + this[_xfa_object.$extra].afterBreakAfter = result; + return _utils.HTMLResult.breakNode(breakAfter); + } + } + + delete this[_xfa_object.$extra]; + return result; + } + +} + +class SubformSet extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "subformSet", true); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.bookend = null; + this.break = null; + this.desc = null; + this.extras = null; + this.occur = null; + this.overflow = null; + this.breakAfter = new _xfa_object.XFAObjectArray(); + this.breakBefore = new _xfa_object.XFAObjectArray(); + this.subform = new _xfa_object.XFAObjectArray(); + this.subformSet = new _xfa_object.XFAObjectArray(); + } + + *[_xfa_object.$getContainedChildren]() { + yield* getContainedChildren(this); + } + + [_xfa_object.$getSubformParent]() { + let parent = this[_xfa_object.$getParent](); + + while (!(parent instanceof Subform)) { + parent = parent[_xfa_object.$getParent](); + } + + return parent; + } + + [_xfa_object.$isBindable]() { + return true; + } + +} + +class SubjectDN extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "subjectDN"); + this.delimiter = attributes.delimiter || ","; + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = new Map(this[_xfa_object.$content].split(this.delimiter).map(kv => { + kv = kv.split("=", 2); + kv[0] = kv[0].trim(); + return kv; + })); + } + +} + +class SubjectDNs extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "subjectDNs", true); + this.id = attributes.id || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.subjectDN = new _xfa_object.XFAObjectArray(); + } + +} + +class Submit extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "submit", true); + this.embedPDF = (0, _utils.getInteger)({ + data: attributes.embedPDF, + defaultValue: 0, + validate: x => x === 1 + }); + this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", "xfd", "xml"]); + this.id = attributes.id || ""; + this.target = attributes.target || ""; + this.textEncoding = (0, _utils.getKeyword)({ + data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "", + defaultValue: "", + validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.xdpContent = attributes.xdpContent || ""; + this.encrypt = null; + this.encryptData = new _xfa_object.XFAObjectArray(); + this.signData = new _xfa_object.XFAObjectArray(); + } + +} + +class Template extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "template", true); + this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]); + this.extras = null; + this.subform = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$finalize]() { + if (this.subform.children.length === 0) { + (0, _util.warn)("XFA - No subforms in template node."); + } + + if (this.subform.children.length >= 2) { + (0, _util.warn)("XFA - Several subforms in template node: please file a bug."); + } + + this[_xfa_object.$tabIndex] = DEFAULT_TAB_INDEX; + } + + [_xfa_object.$isSplittable]() { + return true; + } + + [_xfa_object.$searchNode](expr, container) { + if (expr.startsWith("#")) { + return [this[_xfa_object.$ids].get(expr.slice(1))]; + } + + return (0, _som.searchNode)(this, container, expr, true, true); + } + + *[_xfa_object.$toPages]() { + if (!this.subform.children.length) { + return _utils.HTMLResult.success({ + name: "div", + children: [] + }); + } + + this[_xfa_object.$extra] = { + overflowNode: null, + firstUnsplittable: null, + currentContentArea: null, + currentPageArea: null, + noLayoutFailure: false, + pageNumber: 1, + pagePosition: "first", + oddOrEven: "odd", + blankOrNotBlank: "nonBlank", + paraStack: [] + }; + const root = this.subform.children[0]; + + root.pageSet[_xfa_object.$cleanPage](); + + const pageAreas = root.pageSet.pageArea.children; + const mainHtml = { + name: "div", + children: [] + }; + let pageArea = null; + let breakBefore = null; + let breakBeforeTarget = null; + + if (root.breakBefore.children.length >= 1) { + breakBefore = root.breakBefore.children[0]; + breakBeforeTarget = breakBefore.target; + } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) { + breakBefore = root.subform.children[0].breakBefore.children[0]; + breakBeforeTarget = breakBefore.target; + } else if (root.break && root.break.beforeTarget) { + breakBefore = root.break; + breakBeforeTarget = breakBefore.beforeTarget; + } else if (root.subform.children.length >= 1 && root.subform.children[0].break && root.subform.children[0].break.beforeTarget) { + breakBefore = root.subform.children[0].break; + breakBeforeTarget = breakBefore.beforeTarget; + } + + if (breakBefore) { + const target = this[_xfa_object.$searchNode](breakBeforeTarget, breakBefore[_xfa_object.$getParent]()); + + if (target instanceof PageArea) { + pageArea = target; + breakBefore[_xfa_object.$extra] = {}; + } + } + + if (!pageArea) { + pageArea = pageAreas[0]; + } + + pageArea[_xfa_object.$extra] = { + numberOfUse: 1 + }; + + const pageAreaParent = pageArea[_xfa_object.$getParent](); + + pageAreaParent[_xfa_object.$extra] = { + numberOfUse: 1, + pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea), + pageSetIndex: 0 + }; + let targetPageArea; + let leader = null; + let trailer = null; + let hasSomething = true; + let hasSomethingCounter = 0; + let startIndex = 0; + + while (true) { + if (!hasSomething) { + mainHtml.children.pop(); + + if (++hasSomethingCounter === MAX_EMPTY_PAGES) { + (0, _util.warn)("XFA - Something goes wrong: please file a bug."); + return mainHtml; + } + } else { + hasSomethingCounter = 0; + } + + targetPageArea = null; + this[_xfa_object.$extra].currentPageArea = pageArea; + + const page = pageArea[_xfa_object.$toHTML]().html; + + mainHtml.children.push(page); + + if (leader) { + this[_xfa_object.$extra].noLayoutFailure = true; + page.children.push(leader[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html); + leader = null; + } + + if (trailer) { + this[_xfa_object.$extra].noLayoutFailure = true; + page.children.push(trailer[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html); + trailer = null; + } + + const contentAreas = pageArea.contentArea.children; + const htmlContentAreas = page.children.filter(node => node.attributes.class.includes("xfaContentarea")); + hasSomething = false; + this[_xfa_object.$extra].firstUnsplittable = null; + this[_xfa_object.$extra].noLayoutFailure = false; + + const flush = index => { + const html = root[_xfa_object.$flushHTML](); + + if (html) { + hasSomething = hasSomething || html.children && html.children.length !== 0; + htmlContentAreas[index].children.push(html); + } + }; + + for (let i = startIndex, ii = contentAreas.length; i < ii; i++) { + const contentArea = this[_xfa_object.$extra].currentContentArea = contentAreas[i]; + const space = { + width: contentArea.w, + height: contentArea.h + }; + startIndex = 0; + + if (leader) { + htmlContentAreas[i].children.push(leader[_xfa_object.$toHTML](space).html); + leader = null; + } + + if (trailer) { + htmlContentAreas[i].children.push(trailer[_xfa_object.$toHTML](space).html); + trailer = null; + } + + const html = root[_xfa_object.$toHTML](space); + + if (html.success) { + if (html.html) { + hasSomething = hasSomething || html.html.children && html.html.children.length !== 0; + htmlContentAreas[i].children.push(html.html); + } else if (!hasSomething && mainHtml.children.length > 1) { + mainHtml.children.pop(); + } + + return mainHtml; + } + + if (html.isBreak()) { + const node = html.breakNode; + flush(i); + + if (node.targetType === "auto") { + continue; + } + + if (node.leader) { + leader = this[_xfa_object.$searchNode](node.leader, node[_xfa_object.$getParent]()); + leader = leader ? leader[0] : null; + } + + if (node.trailer) { + trailer = this[_xfa_object.$searchNode](node.trailer, node[_xfa_object.$getParent]()); + trailer = trailer ? trailer[0] : null; + } + + if (node.targetType === "pageArea") { + targetPageArea = node[_xfa_object.$extra].target; + i = Infinity; + } else if (!node[_xfa_object.$extra].target) { + i = node[_xfa_object.$extra].index; + } else { + targetPageArea = node[_xfa_object.$extra].target; + startIndex = node[_xfa_object.$extra].index + 1; + i = Infinity; + } + + continue; + } + + if (this[_xfa_object.$extra].overflowNode) { + const node = this[_xfa_object.$extra].overflowNode; + this[_xfa_object.$extra].overflowNode = null; + + const overflowExtra = node[_xfa_object.$getExtra](); + + const target = overflowExtra.target; + overflowExtra.addLeader = overflowExtra.leader !== null; + overflowExtra.addTrailer = overflowExtra.trailer !== null; + flush(i); + const currentIndex = i; + i = Infinity; + + if (target instanceof PageArea) { + targetPageArea = target; + } else if (target instanceof ContentArea) { + const index = contentAreas.indexOf(target); + + if (index !== -1) { + if (index > currentIndex) { + i = index - 1; + } else { + startIndex = index; + } + } else { + targetPageArea = target[_xfa_object.$getParent](); + startIndex = targetPageArea.contentArea.children.indexOf(target); + } + } + + continue; + } + + flush(i); + } + + this[_xfa_object.$extra].pageNumber += 1; + + if (targetPageArea) { + if (targetPageArea[_xfa_object.$isUsable]()) { + targetPageArea[_xfa_object.$extra].numberOfUse += 1; + } else { + targetPageArea = null; + } + } + + pageArea = targetPageArea || pageArea[_xfa_object.$getNextPage](); + yield null; + } + } + +} + +exports.Template = Template; + +class Text extends _xfa_object.ContentObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "text"); + this.id = attributes.id || ""; + this.maxChars = (0, _utils.getInteger)({ + data: attributes.maxChars, + defaultValue: 0, + validate: x => x >= 0 + }); + this.name = attributes.name || ""; + this.rid = attributes.rid || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$acceptWhitespace]() { + return true; + } + + [_xfa_object.$onChild](child) { + if (child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { + this[_xfa_object.$content] = child; + return true; + } + + (0, _util.warn)(`XFA - Invalid content in Text: ${child[_xfa_object.$nodeName]}.`); + return false; + } + + [_xfa_object.$onText](str) { + if (this[_xfa_object.$content] instanceof _xfa_object.XFAObject) { + return; + } + + super[_xfa_object.$onText](str); + } + + [_xfa_object.$finalize]() { + if (typeof this[_xfa_object.$content] === "string") { + this[_xfa_object.$content] = this[_xfa_object.$content].replace(/\r\n/g, "\n"); + } + } + + [_xfa_object.$getExtra]() { + if (typeof this[_xfa_object.$content] === "string") { + return this[_xfa_object.$content].split(/[\u2029\u2028\n]/).reduce((acc, line) => { + if (line) { + acc.push(line); + } + + return acc; + }, []).join("\n"); + } + + return this[_xfa_object.$content][_xfa_object.$text](); + } + + [_xfa_object.$toHTML](availableSpace) { + if (typeof this[_xfa_object.$content] === "string") { + const html = valueToHtml(this[_xfa_object.$content]).html; + + if (this[_xfa_object.$content].includes("\u2029")) { + html.name = "div"; + html.children = []; + + this[_xfa_object.$content].split("\u2029").map(para => para.split(/[\u2028\n]/).reduce((acc, line) => { + acc.push({ + name: "span", + value: line + }, { + name: "br" + }); + return acc; + }, [])).forEach(lines => { + html.children.push({ + name: "p", + children: lines + }); + }); + } else if (/[\u2028\n]/.test(this[_xfa_object.$content])) { + html.name = "div"; + html.children = []; + + this[_xfa_object.$content].split(/[\u2028\n]/).forEach(line => { + html.children.push({ + name: "span", + value: line + }, { + name: "br" + }); + }); + } + + return _utils.HTMLResult.success(html); + } + + return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace); + } + +} + +exports.Text = Text; + +class TextEdit extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "textEdit", true); + this.allowRichText = (0, _utils.getInteger)({ + data: attributes.allowRichText, + defaultValue: 0, + validate: x => x === 1 + }); + this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); + this.id = attributes.id || ""; + this.multiLine = (0, _utils.getInteger)({ + data: attributes.multiLine, + defaultValue: "", + validate: x => x === 0 || x === 1 + }); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]); + this.border = null; + this.comb = null; + this.extras = null; + this.margin = null; + } + + [_xfa_object.$toHTML](availableSpace) { + const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); + let html; + + const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); + + if (this.multiLine === "") { + this.multiLine = field instanceof Draw ? 1 : 0; + } + + if (this.multiLine === 1) { + html = { + name: "textarea", + attributes: { + dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], + fieldId: field[_xfa_object.$uid], + class: ["xfaTextfield"], + style, + "aria-label": ariaLabel(field), + "aria-required": false + } + }; + } else { + html = { + name: "input", + attributes: { + type: "text", + dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], + fieldId: field[_xfa_object.$uid], + class: ["xfaTextfield"], + style, + "aria-label": ariaLabel(field), + "aria-required": false + } + }; + } + + if (isRequired(field)) { + html.attributes["aria-required"] = true; + html.attributes.required = true; + } + + return _utils.HTMLResult.success({ + name: "label", + attributes: { + class: ["xfaLabel"] + }, + children: [html] + }); + } + +} + +class Time extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "time"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + + [_xfa_object.$finalize]() { + const date = this[_xfa_object.$content].trim(); + + this[_xfa_object.$content] = date ? new Date(date) : null; + } + + [_xfa_object.$toHTML](availableSpace) { + return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); + } + +} + +class TimeStamp extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "timeStamp"); + this.id = attributes.id || ""; + this.server = attributes.server || ""; + this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class ToolTip extends _xfa_object.StringObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "toolTip"); + this.id = attributes.id || ""; + this.rid = attributes.rid || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Traversal extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "traversal", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.traverse = new _xfa_object.XFAObjectArray(); + } + +} + +class Traverse extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "traverse", true); + this.id = attributes.id || ""; + this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", "left", "right", "up"]); + this.ref = attributes.ref || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.script = null; + } + + get name() { + return this.operation; + } + + [_xfa_object.$isTransparent]() { + return false; + } + +} + +class Ui extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "ui", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.picture = null; + this.barcode = null; + this.button = null; + this.checkButton = null; + this.choiceList = null; + this.dateTimeEdit = null; + this.defaultUi = null; + this.imageEdit = null; + this.numericEdit = null; + this.passwordEdit = null; + this.signature = null; + this.textEdit = null; + } + + [_xfa_object.$getExtra]() { + if (this[_xfa_object.$extra] === undefined) { + for (const name of Object.getOwnPropertyNames(this)) { + if (name === "extras" || name === "picture") { + continue; + } + + const obj = this[name]; + + if (!(obj instanceof _xfa_object.XFAObject)) { + continue; + } + + this[_xfa_object.$extra] = obj; + return obj; + } + + this[_xfa_object.$extra] = null; + } + + return this[_xfa_object.$extra]; + } + + [_xfa_object.$toHTML](availableSpace) { + const obj = this[_xfa_object.$getExtra](); + + if (obj) { + return obj[_xfa_object.$toHTML](availableSpace); + } + + return _utils.HTMLResult.EMPTY; + } + +} + +class Validate extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "validate", true); + this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]); + this.id = attributes.id || ""; + this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]); + this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.extras = null; + this.message = null; + this.picture = null; + this.script = null; + } + +} + +class Value extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "value", true); + this.id = attributes.id || ""; + this.override = (0, _utils.getInteger)({ + data: attributes.override, + defaultValue: 0, + validate: x => x === 1 + }); + this.relevant = (0, _utils.getRelevant)(attributes.relevant); + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.arc = null; + this.boolean = null; + this.date = null; + this.dateTime = null; + this.decimal = null; + this.exData = null; + this.float = null; + this.image = null; + this.integer = null; + this.line = null; + this.rectangle = null; + this.text = null; + this.time = null; + } + + [_xfa_object.$setValue](value) { + const parent = this[_xfa_object.$getParent](); + + if (parent instanceof Field) { + if (parent.ui && parent.ui.imageEdit) { + if (!this.image) { + this.image = new Image({}); + + this[_xfa_object.$appendChild](this.image); + } + + this.image[_xfa_object.$content] = value[_xfa_object.$content]; + return; + } + } + + const valueName = value[_xfa_object.$nodeName]; + + if (this[valueName] !== null) { + this[valueName][_xfa_object.$content] = value[_xfa_object.$content]; + return; + } + + for (const name of Object.getOwnPropertyNames(this)) { + const obj = this[name]; + + if (obj instanceof _xfa_object.XFAObject) { + this[name] = null; + + this[_xfa_object.$removeChild](obj); + } + } + + this[value[_xfa_object.$nodeName]] = value; + + this[_xfa_object.$appendChild](value); + } + + [_xfa_object.$text]() { + if (this.exData) { + if (typeof this.exData[_xfa_object.$content] === "string") { + return this.exData[_xfa_object.$content].trim(); + } + + return this.exData[_xfa_object.$content][_xfa_object.$text]().trim(); + } + + for (const name of Object.getOwnPropertyNames(this)) { + if (name === "image") { + continue; + } + + const obj = this[name]; + + if (obj instanceof _xfa_object.XFAObject) { + return (obj[_xfa_object.$content] || "").toString().trim(); + } + } + + return null; + } + + [_xfa_object.$toHTML](availableSpace) { + for (const name of Object.getOwnPropertyNames(this)) { + const obj = this[name]; + + if (!(obj instanceof _xfa_object.XFAObject)) { + continue; + } + + return obj[_xfa_object.$toHTML](availableSpace); + } + + return _utils.HTMLResult.EMPTY; + } + +} + +exports.Value = Value; + +class Variables extends _xfa_object.XFAObject { + constructor(attributes) { + super(TEMPLATE_NS_ID, "variables", true); + this.id = attributes.id || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + this.boolean = new _xfa_object.XFAObjectArray(); + this.date = new _xfa_object.XFAObjectArray(); + this.dateTime = new _xfa_object.XFAObjectArray(); + this.decimal = new _xfa_object.XFAObjectArray(); + this.exData = new _xfa_object.XFAObjectArray(); + this.float = new _xfa_object.XFAObjectArray(); + this.image = new _xfa_object.XFAObjectArray(); + this.integer = new _xfa_object.XFAObjectArray(); + this.manifest = new _xfa_object.XFAObjectArray(); + this.script = new _xfa_object.XFAObjectArray(); + this.text = new _xfa_object.XFAObjectArray(); + this.time = new _xfa_object.XFAObjectArray(); + } + + [_xfa_object.$isTransparent]() { + return true; + } + +} + +class TemplateNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (TemplateNamespace.hasOwnProperty(name)) { + const node = TemplateNamespace[name](attributes); + + node[_xfa_object.$setSetAttributes](attributes); + + return node; + } + + return undefined; + } + + static appearanceFilter(attrs) { + return new AppearanceFilter(attrs); + } + + static arc(attrs) { + return new Arc(attrs); + } + + static area(attrs) { + return new Area(attrs); + } + + static assist(attrs) { + return new Assist(attrs); + } + + static barcode(attrs) { + return new Barcode(attrs); + } + + static bind(attrs) { + return new Bind(attrs); + } + + static bindItems(attrs) { + return new BindItems(attrs); + } + + static bookend(attrs) { + return new Bookend(attrs); + } + + static boolean(attrs) { + return new BooleanElement(attrs); + } + + static border(attrs) { + return new Border(attrs); + } + + static break(attrs) { + return new Break(attrs); + } + + static breakAfter(attrs) { + return new BreakAfter(attrs); + } + + static breakBefore(attrs) { + return new BreakBefore(attrs); + } + + static button(attrs) { + return new Button(attrs); + } + + static calculate(attrs) { + return new Calculate(attrs); + } + + static caption(attrs) { + return new Caption(attrs); + } + + static certificate(attrs) { + return new Certificate(attrs); + } + + static certificates(attrs) { + return new Certificates(attrs); + } + + static checkButton(attrs) { + return new CheckButton(attrs); + } + + static choiceList(attrs) { + return new ChoiceList(attrs); + } + + static color(attrs) { + return new Color(attrs); + } + + static comb(attrs) { + return new Comb(attrs); + } + + static connect(attrs) { + return new Connect(attrs); + } + + static contentArea(attrs) { + return new ContentArea(attrs); + } + + static corner(attrs) { + return new Corner(attrs); + } + + static date(attrs) { + return new DateElement(attrs); + } + + static dateTime(attrs) { + return new DateTime(attrs); + } + + static dateTimeEdit(attrs) { + return new DateTimeEdit(attrs); + } + + static decimal(attrs) { + return new Decimal(attrs); + } + + static defaultUi(attrs) { + return new DefaultUi(attrs); + } + + static desc(attrs) { + return new Desc(attrs); + } + + static digestMethod(attrs) { + return new DigestMethod(attrs); + } + + static digestMethods(attrs) { + return new DigestMethods(attrs); + } + + static draw(attrs) { + return new Draw(attrs); + } + + static edge(attrs) { + return new Edge(attrs); + } + + static encoding(attrs) { + return new Encoding(attrs); + } + + static encodings(attrs) { + return new Encodings(attrs); + } + + static encrypt(attrs) { + return new Encrypt(attrs); + } + + static encryptData(attrs) { + return new EncryptData(attrs); + } + + static encryption(attrs) { + return new Encryption(attrs); + } + + static encryptionMethod(attrs) { + return new EncryptionMethod(attrs); + } + + static encryptionMethods(attrs) { + return new EncryptionMethods(attrs); + } + + static event(attrs) { + return new Event(attrs); + } + + static exData(attrs) { + return new ExData(attrs); + } + + static exObject(attrs) { + return new ExObject(attrs); + } + + static exclGroup(attrs) { + return new ExclGroup(attrs); + } + + static execute(attrs) { + return new Execute(attrs); + } + + static extras(attrs) { + return new Extras(attrs); + } + + static field(attrs) { + return new Field(attrs); + } + + static fill(attrs) { + return new Fill(attrs); + } + + static filter(attrs) { + return new Filter(attrs); + } + + static float(attrs) { + return new Float(attrs); + } + + static font(attrs) { + return new Font(attrs); + } + + static format(attrs) { + return new Format(attrs); + } + + static handler(attrs) { + return new Handler(attrs); + } + + static hyphenation(attrs) { + return new Hyphenation(attrs); + } + + static image(attrs) { + return new Image(attrs); + } + + static imageEdit(attrs) { + return new ImageEdit(attrs); + } + + static integer(attrs) { + return new Integer(attrs); + } + + static issuers(attrs) { + return new Issuers(attrs); + } + + static items(attrs) { + return new Items(attrs); + } + + static keep(attrs) { + return new Keep(attrs); + } + + static keyUsage(attrs) { + return new KeyUsage(attrs); + } + + static line(attrs) { + return new Line(attrs); + } + + static linear(attrs) { + return new Linear(attrs); + } + + static lockDocument(attrs) { + return new LockDocument(attrs); + } + + static manifest(attrs) { + return new Manifest(attrs); + } + + static margin(attrs) { + return new Margin(attrs); + } + + static mdp(attrs) { + return new Mdp(attrs); + } + + static medium(attrs) { + return new Medium(attrs); + } + + static message(attrs) { + return new Message(attrs); + } + + static numericEdit(attrs) { + return new NumericEdit(attrs); + } + + static occur(attrs) { + return new Occur(attrs); + } + + static oid(attrs) { + return new Oid(attrs); + } + + static oids(attrs) { + return new Oids(attrs); + } + + static overflow(attrs) { + return new Overflow(attrs); + } + + static pageArea(attrs) { + return new PageArea(attrs); + } + + static pageSet(attrs) { + return new PageSet(attrs); + } + + static para(attrs) { + return new Para(attrs); + } + + static passwordEdit(attrs) { + return new PasswordEdit(attrs); + } + + static pattern(attrs) { + return new Pattern(attrs); + } + + static picture(attrs) { + return new Picture(attrs); + } + + static proto(attrs) { + return new Proto(attrs); + } + + static radial(attrs) { + return new Radial(attrs); + } + + static reason(attrs) { + return new Reason(attrs); + } + + static reasons(attrs) { + return new Reasons(attrs); + } + + static rectangle(attrs) { + return new Rectangle(attrs); + } + + static ref(attrs) { + return new RefElement(attrs); + } + + static script(attrs) { + return new Script(attrs); + } + + static setProperty(attrs) { + return new SetProperty(attrs); + } + + static signData(attrs) { + return new SignData(attrs); + } + + static signature(attrs) { + return new Signature(attrs); + } + + static signing(attrs) { + return new Signing(attrs); + } + + static solid(attrs) { + return new Solid(attrs); + } + + static speak(attrs) { + return new Speak(attrs); + } + + static stipple(attrs) { + return new Stipple(attrs); + } + + static subform(attrs) { + return new Subform(attrs); + } + + static subformSet(attrs) { + return new SubformSet(attrs); + } + + static subjectDN(attrs) { + return new SubjectDN(attrs); + } + + static subjectDNs(attrs) { + return new SubjectDNs(attrs); + } + + static submit(attrs) { + return new Submit(attrs); + } + + static template(attrs) { + return new Template(attrs); + } + + static text(attrs) { + return new Text(attrs); + } + + static textEdit(attrs) { + return new TextEdit(attrs); + } + + static time(attrs) { + return new Time(attrs); + } + + static timeStamp(attrs) { + return new TimeStamp(attrs); + } + + static toolTip(attrs) { + return new ToolTip(attrs); + } + + static traversal(attrs) { + return new Traversal(attrs); + } + + static traverse(attrs) { + return new Traverse(attrs); + } + + static ui(attrs) { + return new Ui(attrs); + } + + static validate(attrs) { + return new Validate(attrs); + } + + static value(attrs) { + return new Value(attrs); + } + + static variables(attrs) { + return new Variables(attrs); + } + +} + +exports.TemplateNamespace = TemplateNamespace; + +/***/ }), +/* 83 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.addHTML = addHTML; +exports.checkDimensions = checkDimensions; +exports.flushHTML = flushHTML; +exports.getAvailableSpace = getAvailableSpace; + +var _xfa_object = __w_pdfjs_require__(77); + +var _html_utils = __w_pdfjs_require__(84); + +function createLine(node, children) { + return { + name: "div", + attributes: { + class: [node.layout === "lr-tb" ? "xfaLr" : "xfaRl"] + }, + children + }; +} + +function flushHTML(node) { + if (!node[_xfa_object.$extra]) { + return null; + } + + const attributes = node[_xfa_object.$extra].attributes; + const html = { + name: "div", + attributes, + children: node[_xfa_object.$extra].children + }; + + if (node[_xfa_object.$extra].failingNode) { + const htmlFromFailing = node[_xfa_object.$extra].failingNode[_xfa_object.$flushHTML](); + + if (htmlFromFailing) { + if (node.layout.endsWith("-tb")) { + html.children.push(createLine(node, [htmlFromFailing])); + } else { + html.children.push(htmlFromFailing); + } + } + } + + if (html.children.length === 0) { + return null; + } + + return html; +} + +function addHTML(node, html, bbox) { + const extra = node[_xfa_object.$extra]; + const availableSpace = extra.availableSpace; + const [x, y, w, h] = bbox; + + switch (node.layout) { + case "position": + { + extra.width = Math.max(extra.width, x + w); + extra.height = Math.max(extra.height, y + h); + extra.children.push(html); + break; + } + + case "lr-tb": + case "rl-tb": + if (!extra.line || extra.attempt === 1) { + extra.line = createLine(node, []); + extra.children.push(extra.line); + extra.numberInLine = 0; + } + + extra.numberInLine += 1; + extra.line.children.push(html); + + if (extra.attempt === 0) { + extra.currentWidth += w; + extra.height = Math.max(extra.height, extra.prevHeight + h); + } else { + extra.currentWidth = w; + extra.prevHeight = extra.height; + extra.height += h; + extra.attempt = 0; + } + + extra.width = Math.max(extra.width, extra.currentWidth); + break; + + case "rl-row": + case "row": + { + extra.children.push(html); + extra.width += w; + extra.height = Math.max(extra.height, h); + const height = (0, _html_utils.measureToString)(extra.height); + + for (const child of extra.children) { + child.attributes.style.height = height; + } + + break; + } + + case "table": + { + extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); + extra.height += h; + extra.children.push(html); + break; + } + + case "tb": + { + extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); + extra.height += h; + extra.children.push(html); + break; + } + } +} + +function getAvailableSpace(node) { + const availableSpace = node[_xfa_object.$extra].availableSpace; + const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0; + const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0; + + switch (node.layout) { + case "lr-tb": + case "rl-tb": + if (node[_xfa_object.$extra].attempt === 0) { + return { + width: availableSpace.width - marginH - node[_xfa_object.$extra].currentWidth, + height: availableSpace.height - marginV - node[_xfa_object.$extra].prevHeight + }; + } + + return { + width: availableSpace.width - marginH, + height: availableSpace.height - marginV - node[_xfa_object.$extra].height + }; + + case "rl-row": + case "row": + const width = node[_xfa_object.$extra].columnWidths.slice(node[_xfa_object.$extra].currentColumn).reduce((a, x) => a + x); + + return { + width, + height: availableSpace.height - marginH + }; + + case "table": + case "tb": + return { + width: availableSpace.width - marginH, + height: availableSpace.height - marginV - node[_xfa_object.$extra].height + }; + + case "position": + default: + return availableSpace; + } +} + +function getTransformedBBox(node) { + let w = node.w === "" ? NaN : node.w; + let h = node.h === "" ? NaN : node.h; + let [centerX, centerY] = [0, 0]; + + switch (node.anchorType || "") { + case "bottomCenter": + [centerX, centerY] = [w / 2, h]; + break; + + case "bottomLeft": + [centerX, centerY] = [0, h]; + break; + + case "bottomRight": + [centerX, centerY] = [w, h]; + break; + + case "middleCenter": + [centerX, centerY] = [w / 2, h / 2]; + break; + + case "middleLeft": + [centerX, centerY] = [0, h / 2]; + break; + + case "middleRight": + [centerX, centerY] = [w, h / 2]; + break; + + case "topCenter": + [centerX, centerY] = [w / 2, 0]; + break; + + case "topRight": + [centerX, centerY] = [w, 0]; + break; + } + + let x, y; + + switch (node.rotate || 0) { + case 0: + [x, y] = [-centerX, -centerY]; + break; + + case 90: + [x, y] = [-centerY, centerX]; + [w, h] = [h, -w]; + break; + + case 180: + [x, y] = [centerX, centerY]; + [w, h] = [-w, -h]; + break; + + case 270: + [x, y] = [centerY, -centerX]; + [w, h] = [-h, w]; + break; + } + + return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)]; +} + +function checkDimensions(node, space) { + if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].firstUnsplittable === null) { + return true; + } + + if (node.w === 0 || node.h === 0) { + return true; + } + + const ERROR = 2; + + const parent = node[_xfa_object.$getSubformParent](); + + const attempt = parent[_xfa_object.$extra] && parent[_xfa_object.$extra].attempt || 0; + const [, y, w, h] = getTransformedBBox(node); + + switch (parent.layout) { + case "lr-tb": + case "rl-tb": + if (attempt === 0) { + if (!node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { + if (node.h !== "" && Math.round(h - space.height) > ERROR) { + return false; + } + + if (node.w !== "") { + if (Math.round(w - space.width) <= ERROR) { + return true; + } + + if (parent[_xfa_object.$extra].numberInLine === 0) { + return space.height > ERROR; + } + + return false; + } + + return space.width > ERROR; + } + + if (node.w !== "") { + return Math.round(w - space.width) <= ERROR; + } + + return space.width > ERROR; + } + + if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { + return true; + } + + if (node.h !== "" && Math.round(h - space.height) > ERROR) { + return false; + } + + if (node.w === "" || Math.round(w - space.width) <= ERROR) { + return space.height > ERROR; + } + + if (parent[_xfa_object.$isThereMoreWidth]()) { + return false; + } + + return space.height > ERROR; + + case "table": + case "tb": + if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { + return true; + } + + if (node.h !== "" && !node[_xfa_object.$isSplittable]()) { + return Math.round(h - space.height) <= ERROR; + } + + if (node.w === "" || Math.round(w - space.width) <= ERROR) { + return space.height > ERROR; + } + + if (parent[_xfa_object.$isThereMoreWidth]()) { + return false; + } + + return space.height > ERROR; + + case "position": + if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { + return true; + } + + if (node.h === "" || Math.round(h + y - space.height) <= ERROR) { + return true; + } + + const area = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].currentContentArea; + + return h + y > area.h; + + case "rl-row": + case "row": + if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { + return true; + } + + if (node.h !== "") { + return Math.round(h - space.height) <= ERROR; + } + + return true; + + default: + return true; + } +} + +/***/ }), +/* 84 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.computeBbox = computeBbox; +exports.createWrapper = createWrapper; +exports.fixDimensions = fixDimensions; +exports.fixTextIndent = fixTextIndent; +exports.fixURL = fixURL; +exports.isPrintOnly = isPrintOnly; +exports.layoutClass = layoutClass; +exports.layoutNode = layoutNode; +exports.measureToString = measureToString; +exports.setAccess = setAccess; +exports.setFontFamily = setFontFamily; +exports.setMinMaxDimensions = setMinMaxDimensions; +exports.setPara = setPara; +exports.toStyle = toStyle; + +var _xfa_object = __w_pdfjs_require__(77); + +var _util = __w_pdfjs_require__(2); + +var _utils = __w_pdfjs_require__(78); + +var _fonts = __w_pdfjs_require__(85); + +var _text = __w_pdfjs_require__(86); + +function measureToString(m) { + if (typeof m === "string") { + return "0px"; + } + + return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`; +} + +const converters = { + anchorType(node, style) { + const parent = node[_xfa_object.$getSubformParent](); + + if (!parent || parent.layout && parent.layout !== "position") { + return; + } + + if (!("transform" in style)) { + style.transform = ""; + } + + switch (node.anchorType) { + case "bottomCenter": + style.transform += "translate(-50%, -100%)"; + break; + + case "bottomLeft": + style.transform += "translate(0,-100%)"; + break; + + case "bottomRight": + style.transform += "translate(-100%,-100%)"; + break; + + case "middleCenter": + style.transform += "translate(-50%,-50%)"; + break; + + case "middleLeft": + style.transform += "translate(0,-50%)"; + break; + + case "middleRight": + style.transform += "translate(-100%,-50%)"; + break; + + case "topCenter": + style.transform += "translate(-50%,0)"; + break; + + case "topRight": + style.transform += "translate(-100%,0)"; + break; + } + }, + + dimensions(node, style) { + const parent = node[_xfa_object.$getSubformParent](); + + let width = node.w; + const height = node.h; + + if (parent.layout && parent.layout.includes("row")) { + const extra = parent[_xfa_object.$extra]; + const colSpan = node.colSpan; + let w; + + if (colSpan === -1) { + w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0); + extra.currentColumn = 0; + } else { + w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0); + extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length; + } + + if (!isNaN(w)) { + width = node.w = w; + } + } + + if (width !== "") { + style.width = measureToString(width); + } else { + style.width = "auto"; + } + + if (height !== "") { + style.height = measureToString(height); + } else { + style.height = "auto"; + } + }, + + position(node, style) { + const parent = node[_xfa_object.$getSubformParent](); + + if (parent && parent.layout && parent.layout !== "position") { + return; + } + + style.position = "absolute"; + style.left = measureToString(node.x); + style.top = measureToString(node.y); + }, + + rotate(node, style) { + if (node.rotate) { + if (!("transform" in style)) { + style.transform = ""; + } + + style.transform += `rotate(-${node.rotate}deg)`; + style.transformOrigin = "top left"; + } + }, + + presence(node, style) { + switch (node.presence) { + case "invisible": + style.visibility = "hidden"; + break; + + case "hidden": + case "inactive": + style.display = "none"; + break; + } + }, + + hAlign(node, style) { + if (node[_xfa_object.$nodeName] === "para") { + switch (node.hAlign) { + case "justifyAll": + style.textAlign = "justify-all"; + break; + + case "radix": + style.textAlign = "left"; + break; + + default: + style.textAlign = node.hAlign; + } + } else { + switch (node.hAlign) { + case "left": + style.alignSelf = "start"; + break; + + case "center": + style.alignSelf = "center"; + break; + + case "right": + style.alignSelf = "end"; + break; + } + } + }, + + margin(node, style) { + if (node.margin) { + style.margin = node.margin[_xfa_object.$toStyle]().margin; + } + } + +}; + +function setMinMaxDimensions(node, style) { + const parent = node[_xfa_object.$getSubformParent](); + + if (parent.layout === "position") { + if (node.minW > 0) { + style.minWidth = measureToString(node.minW); + } + + if (node.maxW > 0) { + style.maxWidth = measureToString(node.maxW); + } + + if (node.minH > 0) { + style.minHeight = measureToString(node.minH); + } + + if (node.maxH > 0) { + style.maxHeight = measureToString(node.maxH); + } + } +} + +function layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) { + const measure = new _text.TextMeasure(xfaFont, margin, lineHeight, fontFinder); + + if (typeof text === "string") { + measure.addString(text); + } else { + text[_xfa_object.$pushGlyphs](measure); + } + + return measure.compute(width); +} + +function layoutNode(node, availableSpace) { + let height = null; + let width = null; + let isBroken = false; + + if ((!node.w || !node.h) && node.value) { + let marginH = 0; + let marginV = 0; + + if (node.margin) { + marginH = node.margin.leftInset + node.margin.rightInset; + marginV = node.margin.topInset + node.margin.bottomInset; + } + + let lineHeight = null; + let margin = null; + + if (node.para) { + margin = Object.create(null); + lineHeight = node.para.lineHeight === "" ? null : node.para.lineHeight; + margin.top = node.para.spaceAbove === "" ? 0 : node.para.spaceAbove; + margin.bottom = node.para.spaceBelow === "" ? 0 : node.para.spaceBelow; + margin.left = node.para.marginLeft === "" ? 0 : node.para.marginLeft; + margin.right = node.para.marginRight === "" ? 0 : node.para.marginRight; + } + + let font = node.font; + + if (!font) { + const root = node[_xfa_object.$getTemplateRoot](); + + let parent = node[_xfa_object.$getParent](); + + while (parent && parent !== root) { + if (parent.font) { + font = parent.font; + break; + } + + parent = parent[_xfa_object.$getParent](); + } + } + + const maxWidth = (node.w || availableSpace.width) - marginH; + const fontFinder = node[_xfa_object.$globalData].fontFinder; + + if (node.value.exData && node.value.exData[_xfa_object.$content] && node.value.exData.contentType === "text/html") { + const res = layoutText(node.value.exData[_xfa_object.$content], font, margin, lineHeight, fontFinder, maxWidth); + width = res.width; + height = res.height; + isBroken = res.isBroken; + } else { + const text = node.value[_xfa_object.$text](); + + if (text) { + const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth); + width = res.width; + height = res.height; + isBroken = res.isBroken; + } + } + + if (width !== null && !node.w) { + width += marginH; + } + + if (height !== null && !node.h) { + height += marginV; + } + } + + return { + w: width, + h: height, + isBroken + }; +} + +function computeBbox(node, html, availableSpace) { + let bbox; + + if (node.w !== "" && node.h !== "") { + bbox = [node.x, node.y, node.w, node.h]; + } else { + if (!availableSpace) { + return null; + } + + let width = node.w; + + if (width === "") { + if (node.maxW === 0) { + const parent = node[_xfa_object.$getSubformParent](); + + if (parent.layout === "position" && parent.w !== "") { + width = 0; + } else { + width = node.minW; + } + } else { + width = Math.min(node.maxW, availableSpace.width); + } + + html.attributes.style.width = measureToString(width); + } + + let height = node.h; + + if (height === "") { + if (node.maxH === 0) { + const parent = node[_xfa_object.$getSubformParent](); + + if (parent.layout === "position" && parent.h !== "") { + height = 0; + } else { + height = node.minH; + } + } else { + height = Math.min(node.maxH, availableSpace.height); + } + + html.attributes.style.height = measureToString(height); + } + + bbox = [node.x, node.y, width, height]; + } + + return bbox; +} + +function fixDimensions(node) { + const parent = node[_xfa_object.$getSubformParent](); + + if (parent.layout && parent.layout.includes("row")) { + const extra = parent[_xfa_object.$extra]; + const colSpan = node.colSpan; + let width; + + if (colSpan === -1) { + width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0); + } else { + width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0); + } + + if (!isNaN(width)) { + node.w = width; + } + } + + if (parent.layout && parent.layout !== "position") { + node.x = node.y = 0; + } + + if (node.layout === "table") { + if (node.w === "" && Array.isArray(node.columnWidths)) { + node.w = node.columnWidths.reduce((a, x) => a + x, 0); + } + } +} + +function layoutClass(node) { + switch (node.layout) { + case "position": + return "xfaPosition"; + + case "lr-tb": + return "xfaLrTb"; + + case "rl-row": + return "xfaRlRow"; + + case "rl-tb": + return "xfaRlTb"; + + case "row": + return "xfaRow"; + + case "table": + return "xfaTable"; + + case "tb": + return "xfaTb"; + + default: + return "xfaPosition"; + } +} + +function toStyle(node, ...names) { + const style = Object.create(null); + + for (const name of names) { + const value = node[name]; + + if (value === null) { + continue; + } + + if (converters.hasOwnProperty(name)) { + converters[name](node, style); + continue; + } + + if (value instanceof _xfa_object.XFAObject) { + const newStyle = value[_xfa_object.$toStyle](); + + if (newStyle) { + Object.assign(style, newStyle); + } else { + (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`); + } + } + } + + return style; +} + +function createWrapper(node, html) { + const { + attributes + } = html; + const { + style + } = attributes; + const wrapper = { + name: "div", + attributes: { + class: ["xfaWrapper"], + style: Object.create(null) + }, + children: [] + }; + attributes.class.push("xfaWrapped"); + + if (node.border) { + const { + widths, + insets + } = node.border[_xfa_object.$extra]; + let width, height; + let top = insets[0]; + let left = insets[3]; + const insetsH = insets[0] + insets[2]; + const insetsW = insets[1] + insets[3]; + + switch (node.border.hand) { + case "even": + top -= widths[0] / 2; + left -= widths[3] / 2; + width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`; + height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`; + break; + + case "left": + top -= widths[0]; + left -= widths[3]; + width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`; + height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`; + break; + + case "right": + width = insetsW ? `calc(100% - ${insetsW}px)` : "100%"; + height = insetsH ? `calc(100% - ${insetsH}px)` : "100%"; + break; + } + + const classNames = ["xfaBorder"]; + + if (isPrintOnly(node.border)) { + classNames.push("xfaPrintOnly"); + } + + const border = { + name: "div", + attributes: { + class: classNames, + style: { + top: `${top}px`, + left: `${left}px`, + width, + height + } + }, + children: [] + }; + + for (const key of ["border", "borderWidth", "borderColor", "borderRadius", "borderStyle"]) { + if (style[key] !== undefined) { + border.attributes.style[key] = style[key]; + delete style[key]; + } + } + + wrapper.children.push(border, html); + } else { + wrapper.children.push(html); + } + + for (const key of ["background", "backgroundClip", "top", "left", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "transform", "transformOrigin", "visibility"]) { + if (style[key] !== undefined) { + wrapper.attributes.style[key] = style[key]; + delete style[key]; + } + } + + if (style.position === "absolute") { + wrapper.attributes.style.position = "absolute"; + } else { + wrapper.attributes.style.position = "relative"; + } + + delete style.position; + + if (style.alignSelf) { + wrapper.attributes.style.alignSelf = style.alignSelf; + delete style.alignSelf; + } + + return wrapper; +} + +function fixTextIndent(styles) { + const indent = (0, _utils.getMeasurement)(styles.textIndent, "0px"); + + if (indent >= 0) { + return; + } + + const align = styles.textAlign === "right" ? "right" : "left"; + const name = "padding" + (align === "left" ? "Left" : "Right"); + const padding = (0, _utils.getMeasurement)(styles[name], "0px"); + styles[name] = `${padding - indent}px`; +} + +function setAccess(node, classNames) { + switch (node.access) { + case "nonInteractive": + classNames.push("xfaNonInteractive"); + break; + + case "readOnly": + classNames.push("xfaReadOnly"); + break; + + case "protected": + classNames.push("xfaDisabled"); + break; + } +} + +function isPrintOnly(node) { + return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === "print"; +} + +function getCurrentPara(node) { + const stack = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].paraStack; + + return stack.length ? stack.at(-1) : null; +} + +function setPara(node, nodeStyle, value) { + if (value.attributes.class && value.attributes.class.includes("xfaRich")) { + if (nodeStyle) { + if (node.h === "") { + nodeStyle.height = "auto"; + } + + if (node.w === "") { + nodeStyle.width = "auto"; + } + } + + const para = getCurrentPara(node); + + if (para) { + const valueStyle = value.attributes.style; + valueStyle.display = "flex"; + valueStyle.flexDirection = "column"; + + switch (para.vAlign) { + case "top": + valueStyle.justifyContent = "start"; + break; + + case "bottom": + valueStyle.justifyContent = "end"; + break; + + case "middle": + valueStyle.justifyContent = "center"; + break; + } + + const paraStyle = para[_xfa_object.$toStyle](); + + for (const [key, val] of Object.entries(paraStyle)) { + if (!(key in valueStyle)) { + valueStyle[key] = val; + } + } + } + } +} + +function setFontFamily(xfaFont, node, fontFinder, style) { + if (!fontFinder) { + delete style.fontFamily; + return; + } + + const name = (0, _utils.stripQuotes)(xfaFont.typeface); + style.fontFamily = `"${name}"`; + const typeface = fontFinder.find(name); + + if (typeface) { + const { + fontFamily + } = typeface.regular.cssFontInfo; + + if (fontFamily !== name) { + style.fontFamily = `"${fontFamily}"`; + } + + const para = getCurrentPara(node); + + if (para && para.lineHeight !== "") { + return; + } + + if (style.lineHeight) { + return; + } + + const pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); + + if (pdfFont) { + style.lineHeight = Math.max(1.2, pdfFont.lineHeight); + } + } +} + +function fixURL(str) { + const absoluteUrl = (0, _util.createValidAbsoluteUrl)(str, null, { + addDefaultProtocol: true, + tryConvertEncoding: true + }); + return absoluteUrl ? absoluteUrl.href : null; +} + +/***/ }), +/* 85 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.FontFinder = void 0; +exports.getMetrics = getMetrics; +exports.selectFont = selectFont; + +var _xfa_object = __w_pdfjs_require__(77); + +var _utils = __w_pdfjs_require__(78); + +var _util = __w_pdfjs_require__(2); + +class FontFinder { + constructor(pdfFonts) { + this.fonts = new Map(); + this.cache = new Map(); + this.warned = new Set(); + this.defaultFont = null; + this.add(pdfFonts); + } + + add(pdfFonts, reallyMissingFonts = null) { + for (const pdfFont of pdfFonts) { + this.addPdfFont(pdfFont); + } + + for (const pdfFont of this.fonts.values()) { + if (!pdfFont.regular) { + pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic; + } + } + + if (!reallyMissingFonts || reallyMissingFonts.size === 0) { + return; + } + + const myriad = this.fonts.get("PdfJS-Fallback-PdfJS-XFA"); + + for (const missing of reallyMissingFonts) { + this.fonts.set(missing, myriad); + } + } + + addPdfFont(pdfFont) { + const cssFontInfo = pdfFont.cssFontInfo; + const name = cssFontInfo.fontFamily; + let font = this.fonts.get(name); + + if (!font) { + font = Object.create(null); + this.fonts.set(name, font); + + if (!this.defaultFont) { + this.defaultFont = font; + } + } + + let property = ""; + const fontWeight = parseFloat(cssFontInfo.fontWeight); + + if (parseFloat(cssFontInfo.italicAngle) !== 0) { + property = fontWeight >= 700 ? "bolditalic" : "italic"; + } else if (fontWeight >= 700) { + property = "bold"; + } + + if (!property) { + if (pdfFont.name.includes("Bold") || pdfFont.psName && pdfFont.psName.includes("Bold")) { + property = "bold"; + } + + if (pdfFont.name.includes("Italic") || pdfFont.name.endsWith("It") || pdfFont.psName && (pdfFont.psName.includes("Italic") || pdfFont.psName.endsWith("It"))) { + property += "italic"; + } + } + + if (!property) { + property = "regular"; + } + + font[property] = pdfFont; + } + + getDefault() { + return this.defaultFont; + } + + find(fontName, mustWarn = true) { + let font = this.fonts.get(fontName) || this.cache.get(fontName); + + if (font) { + return font; + } + + const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi; + let name = fontName.replace(pattern, ""); + font = this.fonts.get(name); + + if (font) { + this.cache.set(fontName, font); + return font; + } + + name = name.toLowerCase(); + const maybe = []; + + for (const [family, pdfFont] of this.fonts.entries()) { + if (family.replace(pattern, "").toLowerCase().startsWith(name)) { + maybe.push(pdfFont); + } + } + + if (maybe.length === 0) { + for (const [, pdfFont] of this.fonts.entries()) { + if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) { + maybe.push(pdfFont); + } + } + } + + if (maybe.length === 0) { + name = name.replace(/psmt|mt/gi, ""); + + for (const [family, pdfFont] of this.fonts.entries()) { + if (family.replace(pattern, "").toLowerCase().startsWith(name)) { + maybe.push(pdfFont); + } + } + } + + if (maybe.length === 0) { + for (const pdfFont of this.fonts.values()) { + if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) { + maybe.push(pdfFont); + } + } + } + + if (maybe.length >= 1) { + if (maybe.length !== 1 && mustWarn) { + (0, _util.warn)(`XFA - Too many choices to guess the correct font: ${fontName}`); + } + + this.cache.set(fontName, maybe[0]); + return maybe[0]; + } + + if (mustWarn && !this.warned.has(fontName)) { + this.warned.add(fontName); + (0, _util.warn)(`XFA - Cannot find the font: ${fontName}`); + } + + return null; + } + +} + +exports.FontFinder = FontFinder; + +function selectFont(xfaFont, typeface) { + if (xfaFont.posture === "italic") { + if (xfaFont.weight === "bold") { + return typeface.bolditalic; + } + + return typeface.italic; + } else if (xfaFont.weight === "bold") { + return typeface.bold; + } + + return typeface.regular; +} + +function getMetrics(xfaFont, real = false) { + let pdfFont = null; + + if (xfaFont) { + const name = (0, _utils.stripQuotes)(xfaFont.typeface); + + const typeface = xfaFont[_xfa_object.$globalData].fontFinder.find(name); + + pdfFont = selectFont(xfaFont, typeface); + } + + if (!pdfFont) { + return { + lineHeight: 12, + lineGap: 2, + lineNoGap: 10 + }; + } + + const size = xfaFont.size || 10; + const lineHeight = pdfFont.lineHeight ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight) : 1.2; + const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; + return { + lineHeight: lineHeight * size, + lineGap: lineGap * size, + lineNoGap: Math.max(1, lineHeight - lineGap) * size + }; +} + +/***/ }), +/* 86 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.TextMeasure = void 0; + +var _fonts = __w_pdfjs_require__(85); + +const WIDTH_FACTOR = 1.02; + +class FontInfo { + constructor(xfaFont, margin, lineHeight, fontFinder) { + this.lineHeight = lineHeight; + this.paraMargin = margin || { + top: 0, + bottom: 0, + left: 0, + right: 0 + }; + + if (!xfaFont) { + [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); + return; + } + + this.xfaFont = { + typeface: xfaFont.typeface, + posture: xfaFont.posture, + weight: xfaFont.weight, + size: xfaFont.size, + letterSpacing: xfaFont.letterSpacing + }; + const typeface = fontFinder.find(xfaFont.typeface); + + if (!typeface) { + [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); + return; + } + + this.pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); + + if (!this.pdfFont) { + [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); + } + } + + defaultFont(fontFinder) { + const font = fontFinder.find("Helvetica", false) || fontFinder.find("Myriad Pro", false) || fontFinder.find("Arial", false) || fontFinder.getDefault(); + + if (font && font.regular) { + const pdfFont = font.regular; + const info = pdfFont.cssFontInfo; + const xfaFont = { + typeface: info.fontFamily, + posture: "normal", + weight: "normal", + size: 10, + letterSpacing: 0 + }; + return [pdfFont, xfaFont]; + } + + const xfaFont = { + typeface: "Courier", + posture: "normal", + weight: "normal", + size: 10, + letterSpacing: 0 + }; + return [null, xfaFont]; + } + +} + +class FontSelector { + constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) { + this.fontFinder = fontFinder; + this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)]; + } + + pushData(xfaFont, margin, lineHeight) { + const lastFont = this.stack.at(-1); + + for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) { + if (!xfaFont[name]) { + xfaFont[name] = lastFont.xfaFont[name]; + } + } + + for (const name of ["top", "bottom", "left", "right"]) { + if (isNaN(margin[name])) { + margin[name] = lastFont.paraMargin[name]; + } + } + + const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder); + + if (!fontInfo.pdfFont) { + fontInfo.pdfFont = lastFont.pdfFont; + } + + this.stack.push(fontInfo); + } + + popFont() { + this.stack.pop(); + } + + topFont() { + return this.stack.at(-1); + } + +} + +class TextMeasure { + constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) { + this.glyphs = []; + this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts); + this.extraHeight = 0; + } + + pushData(xfaFont, margin, lineHeight) { + this.fontSelector.pushData(xfaFont, margin, lineHeight); + } + + popFont(xfaFont) { + return this.fontSelector.popFont(); + } + + addPara() { + const lastFont = this.fontSelector.topFont(); + this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom; + } + + addString(str) { + if (!str) { + return; + } + + const lastFont = this.fontSelector.topFont(); + const fontSize = lastFont.xfaFont.size; + + if (lastFont.pdfFont) { + const letterSpacing = lastFont.xfaFont.letterSpacing; + const pdfFont = lastFont.pdfFont; + const fontLineHeight = pdfFont.lineHeight || 1.2; + const lineHeight = lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize; + const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; + const noGap = fontLineHeight - lineGap; + const firstLineHeight = Math.max(1, noGap) * fontSize; + const scale = fontSize / 1000; + const fallbackWidth = pdfFont.defaultWidth || pdfFont.charsToGlyphs(" ")[0].width; + + for (const line of str.split(/[\u2029\n]/)) { + const encodedLine = pdfFont.encodeString(line).join(""); + const glyphs = pdfFont.charsToGlyphs(encodedLine); + + for (const glyph of glyphs) { + const width = glyph.width || fallbackWidth; + this.glyphs.push([width * scale + letterSpacing, lineHeight, firstLineHeight, glyph.unicode, false]); + } + + this.glyphs.push([0, 0, 0, "\n", true]); + } + + this.glyphs.pop(); + return; + } + + for (const line of str.split(/[\u2029\n]/)) { + for (const char of line.split("")) { + this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]); + } + + this.glyphs.push([0, 0, 0, "\n", true]); + } + + this.glyphs.pop(); + } + + compute(maxWidth) { + let lastSpacePos = -1, + lastSpaceWidth = 0, + width = 0, + height = 0, + currentLineWidth = 0, + currentLineHeight = 0; + let isBroken = false; + let isFirstLine = true; + + for (let i = 0, ii = this.glyphs.length; i < ii; i++) { + const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] = this.glyphs[i]; + const isSpace = char === " "; + const glyphHeight = isFirstLine ? firstLineHeight : lineHeight; + + if (isEOL) { + width = Math.max(width, currentLineWidth); + currentLineWidth = 0; + height += currentLineHeight; + currentLineHeight = glyphHeight; + lastSpacePos = -1; + lastSpaceWidth = 0; + isFirstLine = false; + continue; + } + + if (isSpace) { + if (currentLineWidth + glyphWidth > maxWidth) { + width = Math.max(width, currentLineWidth); + currentLineWidth = 0; + height += currentLineHeight; + currentLineHeight = glyphHeight; + lastSpacePos = -1; + lastSpaceWidth = 0; + isBroken = true; + isFirstLine = false; + } else { + currentLineHeight = Math.max(glyphHeight, currentLineHeight); + lastSpaceWidth = currentLineWidth; + currentLineWidth += glyphWidth; + lastSpacePos = i; + } + + continue; + } + + if (currentLineWidth + glyphWidth > maxWidth) { + height += currentLineHeight; + currentLineHeight = glyphHeight; + + if (lastSpacePos !== -1) { + i = lastSpacePos; + width = Math.max(width, lastSpaceWidth); + currentLineWidth = 0; + lastSpacePos = -1; + lastSpaceWidth = 0; + } else { + width = Math.max(width, currentLineWidth); + currentLineWidth = glyphWidth; + } + + isBroken = true; + isFirstLine = false; + continue; + } + + currentLineWidth += glyphWidth; + currentLineHeight = Math.max(glyphHeight, currentLineHeight); + } + + width = Math.max(width, currentLineWidth); + height += currentLineHeight + this.extraHeight; + return { + width: WIDTH_FACTOR * width, + height, + isBroken + }; + } + +} + +exports.TextMeasure = TextMeasure; + +/***/ }), +/* 87 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.DataHandler = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +class DataHandler { + constructor(root, data) { + this.data = data; + this.dataset = root.datasets || null; + } + + serialize(storage) { + const stack = [[-1, this.data[_xfa_object.$getChildren]()]]; + + while (stack.length > 0) { + const last = stack.at(-1); + const [i, children] = last; + + if (i + 1 === children.length) { + stack.pop(); + continue; + } + + const child = children[++last[0]]; + const storageEntry = storage.get(child[_xfa_object.$uid]); + + if (storageEntry) { + child[_xfa_object.$setValue](storageEntry); + } else { + const attributes = child[_xfa_object.$getAttributes](); + + for (const value of attributes.values()) { + const entry = storage.get(value[_xfa_object.$uid]); + + if (entry) { + value[_xfa_object.$setValue](entry); + + break; + } + } + } + + const nodes = child[_xfa_object.$getChildren](); + + if (nodes.length > 0) { + stack.push([-1, nodes]); + } + } + + const buf = [``]; + + if (this.dataset) { + for (const child of this.dataset[_xfa_object.$getChildren]()) { + if (child[_xfa_object.$nodeName] !== "data") { + child[_xfa_object.$toString](buf); + } + } + } + + this.data[_xfa_object.$toString](buf); + + buf.push(""); + return buf.join(""); + } + +} + +exports.DataHandler = DataHandler; + +/***/ }), +/* 88 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XFAParser = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +var _xml_parser = __w_pdfjs_require__(66); + +var _builder = __w_pdfjs_require__(89); + +var _util = __w_pdfjs_require__(2); + +class XFAParser extends _xml_parser.XMLParserBase { + constructor(rootNameSpace = null, richText = false) { + super(); + this._builder = new _builder.Builder(rootNameSpace); + this._stack = []; + this._globalData = { + usedTypefaces: new Set() + }; + this._ids = new Map(); + this._current = this._builder.buildRoot(this._ids); + this._errorCode = _xml_parser.XMLParserErrorCode.NoError; + this._whiteRegex = /^\s+$/; + this._nbsps = /\xa0+/g; + this._richText = richText; + } + + parse(data) { + this.parseXml(data); + + if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) { + return undefined; + } + + this._current[_xfa_object.$finalize](); + + return this._current.element; + } + + onText(text) { + text = text.replace(this._nbsps, match => match.slice(1) + " "); + + if (this._richText || this._current[_xfa_object.$acceptWhitespace]()) { + this._current[_xfa_object.$onText](text, this._richText); + + return; + } + + if (this._whiteRegex.test(text)) { + return; + } + + this._current[_xfa_object.$onText](text.trim()); + } + + onCdata(text) { + this._current[_xfa_object.$onText](text); + } + + _mkAttributes(attributes, tagName) { + let namespace = null; + let prefixes = null; + const attributeObj = Object.create({}); + + for (const { + name, + value + } of attributes) { + if (name === "xmlns") { + if (!namespace) { + namespace = value; + } else { + (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`); + } + } else if (name.startsWith("xmlns:")) { + const prefix = name.substring("xmlns:".length); + + if (!prefixes) { + prefixes = []; + } + + prefixes.push({ + prefix, + value + }); + } else { + const i = name.indexOf(":"); + + if (i === -1) { + attributeObj[name] = value; + } else { + let nsAttrs = attributeObj[_xfa_object.$nsAttributes]; + + if (!nsAttrs) { + nsAttrs = attributeObj[_xfa_object.$nsAttributes] = Object.create(null); + } + + const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)]; + let attrs = nsAttrs[ns]; + + if (!attrs) { + attrs = nsAttrs[ns] = Object.create(null); + } + + attrs[attrName] = value; + } + } + } + + return [namespace, prefixes, attributeObj]; + } + + _getNameAndPrefix(name, nsAgnostic) { + const i = name.indexOf(":"); + + if (i === -1) { + return [name, null]; + } + + return [name.substring(i + 1), nsAgnostic ? "" : name.substring(0, i)]; + } + + onBeginElement(tagName, attributes, isEmpty) { + const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName); + + const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic()); + + const node = this._builder.build({ + nsPrefix, + name, + attributes: attributesObj, + namespace, + prefixes + }); + + node[_xfa_object.$globalData] = this._globalData; + + if (isEmpty) { + node[_xfa_object.$finalize](); + + if (this._current[_xfa_object.$onChild](node)) { + node[_xfa_object.$setId](this._ids); + } + + node[_xfa_object.$clean](this._builder); + + return; + } + + this._stack.push(this._current); + + this._current = node; + } + + onEndElement(name) { + const node = this._current; + + if (node[_xfa_object.$isCDATAXml]() && typeof node[_xfa_object.$content] === "string") { + const parser = new XFAParser(); + parser._globalData = this._globalData; + const root = parser.parse(node[_xfa_object.$content]); + node[_xfa_object.$content] = null; + + node[_xfa_object.$onChild](root); + } + + node[_xfa_object.$finalize](); + + this._current = this._stack.pop(); + + if (this._current[_xfa_object.$onChild](node)) { + node[_xfa_object.$setId](this._ids); + } + + node[_xfa_object.$clean](this._builder); + } + + onError(code) { + this._errorCode = code; + } + +} + +exports.XFAParser = XFAParser; + +/***/ }), +/* 89 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.Builder = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +var _setup = __w_pdfjs_require__(90); + +var _template = __w_pdfjs_require__(82); + +var _unknown = __w_pdfjs_require__(99); + +var _util = __w_pdfjs_require__(2); + +class Root extends _xfa_object.XFAObject { + constructor(ids) { + super(-1, "root", Object.create(null)); + this.element = null; + this[_xfa_object.$ids] = ids; + } + + [_xfa_object.$onChild](child) { + this.element = child; + return true; + } + + [_xfa_object.$finalize]() { + super[_xfa_object.$finalize](); + + if (this.element.template instanceof _template.Template) { + this[_xfa_object.$ids].set(_xfa_object.$root, this.element); + + this.element.template[_xfa_object.$resolvePrototypes](this[_xfa_object.$ids]); + + this.element.template[_xfa_object.$ids] = this[_xfa_object.$ids]; + } + } + +} + +class Empty extends _xfa_object.XFAObject { + constructor() { + super(-1, "", Object.create(null)); + } + + [_xfa_object.$onChild](_) { + return false; + } + +} + +class Builder { + constructor(rootNameSpace = null) { + this._namespaceStack = []; + this._nsAgnosticLevel = 0; + this._namespacePrefixes = new Map(); + this._namespaces = new Map(); + this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({ + id + }) => id)); + this._currentNamespace = rootNameSpace || new _unknown.UnknownNamespace(++this._nextNsId); + } + + buildRoot(ids) { + return new Root(ids); + } + + build({ + nsPrefix, + name, + attributes, + namespace, + prefixes + }) { + const hasNamespaceDef = namespace !== null; + + if (hasNamespaceDef) { + this._namespaceStack.push(this._currentNamespace); + + this._currentNamespace = this._searchNamespace(namespace); + } + + if (prefixes) { + this._addNamespacePrefix(prefixes); + } + + if (attributes.hasOwnProperty(_xfa_object.$nsAttributes)) { + const dataTemplate = _setup.NamespaceSetUp.datasets; + const nsAttrs = attributes[_xfa_object.$nsAttributes]; + let xfaAttrs = null; + + for (const [ns, attrs] of Object.entries(nsAttrs)) { + const nsToUse = this._getNamespaceToUse(ns); + + if (nsToUse === dataTemplate) { + xfaAttrs = { + xfa: attrs + }; + break; + } + } + + if (xfaAttrs) { + attributes[_xfa_object.$nsAttributes] = xfaAttrs; + } else { + delete attributes[_xfa_object.$nsAttributes]; + } + } + + const namespaceToUse = this._getNamespaceToUse(nsPrefix); + + const node = namespaceToUse && namespaceToUse[_namespaces.$buildXFAObject](name, attributes) || new Empty(); + + if (node[_xfa_object.$isNsAgnostic]()) { + this._nsAgnosticLevel++; + } + + if (hasNamespaceDef || prefixes || node[_xfa_object.$isNsAgnostic]()) { + node[_xfa_object.$cleanup] = { + hasNamespace: hasNamespaceDef, + prefixes, + nsAgnostic: node[_xfa_object.$isNsAgnostic]() + }; + } + + return node; + } + + isNsAgnostic() { + return this._nsAgnosticLevel > 0; + } + + _searchNamespace(nsName) { + let ns = this._namespaces.get(nsName); + + if (ns) { + return ns; + } + + for (const [name, { + check + }] of Object.entries(_namespaces.NamespaceIds)) { + if (check(nsName)) { + ns = _setup.NamespaceSetUp[name]; + + if (ns) { + this._namespaces.set(nsName, ns); + + return ns; + } + + break; + } + } + + ns = new _unknown.UnknownNamespace(++this._nextNsId); + + this._namespaces.set(nsName, ns); + + return ns; + } + + _addNamespacePrefix(prefixes) { + for (const { + prefix, + value + } of prefixes) { + const namespace = this._searchNamespace(value); + + let prefixStack = this._namespacePrefixes.get(prefix); + + if (!prefixStack) { + prefixStack = []; + + this._namespacePrefixes.set(prefix, prefixStack); + } + + prefixStack.push(namespace); + } + } + + _getNamespaceToUse(prefix) { + if (!prefix) { + return this._currentNamespace; + } + + const prefixStack = this._namespacePrefixes.get(prefix); + + if (prefixStack && prefixStack.length > 0) { + return prefixStack.at(-1); + } + + (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`); + return null; + } + + clean(data) { + const { + hasNamespace, + prefixes, + nsAgnostic + } = data; + + if (hasNamespace) { + this._currentNamespace = this._namespaceStack.pop(); + } + + if (prefixes) { + prefixes.forEach(({ + prefix + }) => { + this._namespacePrefixes.get(prefix).pop(); + }); + } + + if (nsAgnostic) { + this._nsAgnosticLevel--; + } + } + +} + +exports.Builder = Builder; + +/***/ }), +/* 90 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.NamespaceSetUp = void 0; + +var _config = __w_pdfjs_require__(91); + +var _connection_set = __w_pdfjs_require__(92); + +var _datasets = __w_pdfjs_require__(93); + +var _locale_set = __w_pdfjs_require__(94); + +var _signature = __w_pdfjs_require__(95); + +var _stylesheet = __w_pdfjs_require__(96); + +var _template = __w_pdfjs_require__(82); + +var _xdp = __w_pdfjs_require__(97); + +var _xhtml = __w_pdfjs_require__(98); + +const NamespaceSetUp = { + config: _config.ConfigNamespace, + connection: _connection_set.ConnectionSetNamespace, + datasets: _datasets.DatasetsNamespace, + localeSet: _locale_set.LocaleSetNamespace, + signature: _signature.SignatureNamespace, + stylesheet: _stylesheet.StylesheetNamespace, + template: _template.TemplateNamespace, + xdp: _xdp.XdpNamespace, + xhtml: _xhtml.XhtmlNamespace +}; +exports.NamespaceSetUp = NamespaceSetUp; + +/***/ }), +/* 91 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ConfigNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +var _utils = __w_pdfjs_require__(78); + +var _util = __w_pdfjs_require__(2); + +const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id; + +class Acrobat extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "acrobat", true); + this.acrobat7 = null; + this.autoSave = null; + this.common = null; + this.validate = null; + this.validateApprovalSignatures = null; + this.submitUrl = new _xfa_object.XFAObjectArray(); + } + +} + +class Acrobat7 extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "acrobat7", true); + this.dynamicRender = null; + } + +} + +class ADBE_JSConsole extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]); + } + +} + +class ADBE_JSDebugger extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]); + } + +} + +class AddSilentPrint extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "addSilentPrint"); + } + +} + +class AddViewerPreferences extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "addViewerPreferences"); + } + +} + +class AdjustData extends _xfa_object.Option10 { + constructor(attributes) { + super(CONFIG_NS_ID, "adjustData"); + } + +} + +class AdobeExtensionLevel extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8); + } + +} + +class Agent extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "agent", true); + this.name = attributes.name ? attributes.name.trim() : ""; + this.common = new _xfa_object.XFAObjectArray(); + } + +} + +class AlwaysEmbed extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "alwaysEmbed"); + } + +} + +class Amd extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "amd"); + } + +} + +class Area extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "area"); + this.level = (0, _utils.getInteger)({ + data: attributes.level, + defaultValue: 0, + validate: n => n >= 1 && n <= 3 + }); + this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", "font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]); + } + +} + +class Attributes extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]); + } + +} + +class AutoSave extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]); + } + +} + +class Base extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "base"); + } + +} + +class BatchOutput extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "batchOutput"); + this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]); + } + +} + +class BehaviorOverride extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "behaviorOverride"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = new Map(this[_xfa_object.$content].trim().split(/\s+/).filter(x => x.includes(":")).map(x => x.split(":", 2))); + } + +} + +class Cache extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "cache", true); + this.templateCache = null; + } + +} + +class Change extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "change"); + } + +} + +class Common extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "common", true); + this.data = null; + this.locale = null; + this.localeSet = null; + this.messaging = null; + this.suppressBanner = null; + this.template = null; + this.validationMessaging = null; + this.versionControl = null; + this.log = new _xfa_object.XFAObjectArray(); + } + +} + +class Compress extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "compress"); + this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]); + } + +} + +class CompressLogicalStructure extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "compressLogicalStructure"); + } + +} + +class CompressObjectStream extends _xfa_object.Option10 { + constructor(attributes) { + super(CONFIG_NS_ID, "compressObjectStream"); + } + +} + +class Compression extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "compression", true); + this.compressLogicalStructure = null; + this.compressObjectStream = null; + this.level = null; + this.type = null; + } + +} + +class Config extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "config", true); + this.acrobat = null; + this.present = null; + this.trace = null; + this.agent = new _xfa_object.XFAObjectArray(); + } + +} + +class Conformance extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "conformance", ["A", "B"]); + } + +} + +class ContentCopy extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "contentCopy"); + } + +} + +class Copies extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "copies", 1, n => n >= 1); + } + +} + +class Creator extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "creator"); + } + +} + +class CurrentPage extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0); + } + +} + +class Data extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "data", true); + this.adjustData = null; + this.attributes = null; + this.incrementalLoad = null; + this.outputXSL = null; + this.range = null; + this.record = null; + this.startNode = null; + this.uri = null; + this.window = null; + this.xsl = null; + this.excludeNS = new _xfa_object.XFAObjectArray(); + this.transform = new _xfa_object.XFAObjectArray(); + } + +} + +class Debug extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "debug", true); + this.uri = null; + } + +} + +class DefaultTypeface extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "defaultTypeface"); + this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", "EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", "TraditionalChinese", "Vietnamese"]); + } + +} + +class Destination extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]); + } + +} + +class DocumentAssembly extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "documentAssembly"); + } + +} + +class Driver extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "driver", true); + this.name = attributes.name ? attributes.name.trim() : ""; + this.fontInfo = null; + this.xdc = null; + } + +} + +class DuplexOption extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]); + } + +} + +class DynamicRender extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]); + } + +} + +class Embed extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "embed"); + } + +} + +class Encrypt extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "encrypt"); + } + +} + +class Encryption extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "encryption", true); + this.encrypt = null; + this.encryptionLevel = null; + this.permissions = null; + } + +} + +class EncryptionLevel extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]); + } + +} + +class Enforce extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "enforce"); + } + +} + +class Equate extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "equate"); + this.force = (0, _utils.getInteger)({ + data: attributes.force, + defaultValue: 1, + validate: n => n === 0 + }); + this.from = attributes.from || ""; + this.to = attributes.to || ""; + } + +} + +class EquateRange extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "equateRange"); + this.from = attributes.from || ""; + this.to = attributes.to || ""; + this._unicodeRange = attributes.unicodeRange || ""; + } + + get unicodeRange() { + const ranges = []; + const unicodeRegex = /U\+([0-9a-fA-F]+)/; + const unicodeRange = this._unicodeRange; + + for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) { + range = range.split("-", 2).map(x => { + const found = x.match(unicodeRegex); + + if (!found) { + return 0; + } + + return parseInt(found[1], 16); + }); + + if (range.length === 1) { + range.push(range[0]); + } + + ranges.push(range); + } + + return (0, _util.shadow)(this, "unicodeRange", ranges); + } + +} + +class Exclude extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "exclude"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => x && ["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x)); + } + +} + +class ExcludeNS extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "excludeNS"); + } + +} + +class FlipLabel extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]); + } + +} + +class FontInfo extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "fontInfo", true); + this.embed = null; + this.map = null; + this.subsetBelow = null; + this.alwaysEmbed = new _xfa_object.XFAObjectArray(); + this.defaultTypeface = new _xfa_object.XFAObjectArray(); + this.neverEmbed = new _xfa_object.XFAObjectArray(); + } + +} + +class FormFieldFilling extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "formFieldFilling"); + } + +} + +class GroupParent extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "groupParent"); + } + +} + +class IfEmpty extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]); + } + +} + +class IncludeXDPContent extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "includeXDPContent"); + } + +} + +class IncrementalLoad extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]); + } + +} + +class IncrementalMerge extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "incrementalMerge"); + } + +} + +class Interactive extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "interactive"); + } + +} + +class Jog extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]); + } + +} + +class LabelPrinter extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "labelPrinter", true); + this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]); + this.batchOutput = null; + this.flipLabel = null; + this.fontInfo = null; + this.xdc = null; + } + +} + +class Layout extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "layout", ["paginate", "panel"]); + } + +} + +class Level extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "level", 0, n => n > 0); + } + +} + +class Linearized extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "linearized"); + } + +} + +class Locale extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "locale"); + } + +} + +class LocaleSet extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "localeSet"); + } + +} + +class Log extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "log", true); + this.mode = null; + this.threshold = null; + this.to = null; + this.uri = null; + } + +} + +class MapElement extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "map", true); + this.equate = new _xfa_object.XFAObjectArray(); + this.equateRange = new _xfa_object.XFAObjectArray(); + } + +} + +class MediumInfo extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "mediumInfo", true); + this.map = null; + } + +} + +class Message extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "message", true); + this.msgId = null; + this.severity = null; + } + +} + +class Messaging extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "messaging", true); + this.message = new _xfa_object.XFAObjectArray(); + } + +} + +class Mode extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "mode", ["append", "overwrite"]); + } + +} + +class ModifyAnnots extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "modifyAnnots"); + } + +} + +class MsgId extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "msgId", 1, n => n >= 1); + } + +} + +class NameAttr extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "nameAttr"); + } + +} + +class NeverEmbed extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "neverEmbed"); + } + +} + +class NumberOfCopies extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5); + } + +} + +class OpenAction extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "openAction", true); + this.destination = null; + } + +} + +class Output extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "output", true); + this.to = null; + this.type = null; + this.uri = null; + } + +} + +class OutputBin extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "outputBin"); + } + +} + +class OutputXSL extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "outputXSL", true); + this.uri = null; + } + +} + +class Overprint extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]); + } + +} + +class Packets extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "packets"); + } + + [_xfa_object.$finalize]() { + if (this[_xfa_object.$content] === "*") { + return; + } + + this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["config", "datasets", "template", "xfdf", "xslt"].includes(x)); + } + +} + +class PageOffset extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "pageOffset"); + this.x = (0, _utils.getInteger)({ + data: attributes.x, + defaultValue: "useXDCSetting", + validate: n => true + }); + this.y = (0, _utils.getInteger)({ + data: attributes.y, + defaultValue: "useXDCSetting", + validate: n => true + }); + } + +} + +class PageRange extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "pageRange"); + } + + [_xfa_object.$finalize]() { + const numbers = this[_xfa_object.$content].trim().split(/\s+/).map(x => parseInt(x, 10)); + + const ranges = []; + + for (let i = 0, ii = numbers.length; i < ii; i += 2) { + ranges.push(numbers.slice(i, i + 2)); + } + + this[_xfa_object.$content] = ranges; + } + +} + +class Pagination extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]); + } + +} + +class PaginationOverride extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", "forceDuplexShortEdge", "forceSimplex"]); + } + +} + +class Part extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "part", 1, n => false); + } + +} + +class Pcl extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "pcl", true); + this.name = attributes.name || ""; + this.batchOutput = null; + this.fontInfo = null; + this.jog = null; + this.mediumInfo = null; + this.outputBin = null; + this.pageOffset = null; + this.staple = null; + this.xdc = null; + } + +} + +class Pdf extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "pdf", true); + this.name = attributes.name || ""; + this.adobeExtensionLevel = null; + this.batchOutput = null; + this.compression = null; + this.creator = null; + this.encryption = null; + this.fontInfo = null; + this.interactive = null; + this.linearized = null; + this.openAction = null; + this.pdfa = null; + this.producer = null; + this.renderPolicy = null; + this.scriptModel = null; + this.silentPrint = null; + this.submitFormat = null; + this.tagged = null; + this.version = null; + this.viewerPreferences = null; + this.xdc = null; + } + +} + +class Pdfa extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "pdfa", true); + this.amd = null; + this.conformance = null; + this.includeXDPContent = null; + this.part = null; + } + +} + +class Permissions extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "permissions", true); + this.accessibleContent = null; + this.change = null; + this.contentCopy = null; + this.documentAssembly = null; + this.formFieldFilling = null; + this.modifyAnnots = null; + this.plaintextMetadata = null; + this.print = null; + this.printHighQuality = null; + } + +} + +class PickTrayByPDFSize extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "pickTrayByPDFSize"); + } + +} + +class Picture extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "picture"); + } + +} + +class PlaintextMetadata extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "plaintextMetadata"); + } + +} + +class Presence extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]); + } + +} + +class Present extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "present", true); + this.behaviorOverride = null; + this.cache = null; + this.common = null; + this.copies = null; + this.destination = null; + this.incrementalMerge = null; + this.layout = null; + this.output = null; + this.overprint = null; + this.pagination = null; + this.paginationOverride = null; + this.script = null; + this.validate = null; + this.xdp = null; + this.driver = new _xfa_object.XFAObjectArray(); + this.labelPrinter = new _xfa_object.XFAObjectArray(); + this.pcl = new _xfa_object.XFAObjectArray(); + this.pdf = new _xfa_object.XFAObjectArray(); + this.ps = new _xfa_object.XFAObjectArray(); + this.submitUrl = new _xfa_object.XFAObjectArray(); + this.webClient = new _xfa_object.XFAObjectArray(); + this.zpl = new _xfa_object.XFAObjectArray(); + } + +} + +class Print extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "print"); + } + +} + +class PrintHighQuality extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "printHighQuality"); + } + +} + +class PrintScaling extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]); + } + +} + +class PrinterName extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "printerName"); + } + +} + +class Producer extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "producer"); + } + +} + +class Ps extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "ps", true); + this.name = attributes.name || ""; + this.batchOutput = null; + this.fontInfo = null; + this.jog = null; + this.mediumInfo = null; + this.outputBin = null; + this.staple = null; + this.xdc = null; + } + +} + +class Range extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "range"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(range => range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => { + if (range.length === 1) { + range.push(range[0]); + } + + return range; + }); + } + +} + +class Record extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "record"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = this[_xfa_object.$content].trim(); + const n = parseInt(this[_xfa_object.$content], 10); + + if (!isNaN(n) && n >= 0) { + this[_xfa_object.$content] = n; + } + } + +} + +class Relevant extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "relevant"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/); + } + +} + +class Rename extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "rename"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = this[_xfa_object.$content].trim(); + + if (this[_xfa_object.$content].toLowerCase().startsWith("xml") || this[_xfa_object.$content].match(new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u"))) { + (0, _util.warn)("XFA - Rename: invalid XFA name"); + } + } + +} + +class RenderPolicy extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]); + } + +} + +class RunScripts extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]); + } + +} + +class Script extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "script", true); + this.currentPage = null; + this.exclude = null; + this.runScripts = null; + } + +} + +class ScriptModel extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]); + } + +} + +class Severity extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]); + } + +} + +class SilentPrint extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "silentPrint", true); + this.addSilentPrint = null; + this.printerName = null; + } + +} + +class Staple extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "staple"); + this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]); + } + +} + +class StartNode extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "startNode"); + } + +} + +class StartPage extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "startPage", 0, n => true); + } + +} + +class SubmitFormat extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]); + } + +} + +class SubmitUrl extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "submitUrl"); + } + +} + +class SubsetBelow extends _xfa_object.IntegerObject { + constructor(attributes) { + super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100); + } + +} + +class SuppressBanner extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "suppressBanner"); + } + +} + +class Tagged extends _xfa_object.Option01 { + constructor(attributes) { + super(CONFIG_NS_ID, "tagged"); + } + +} + +class Template extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "template", true); + this.base = null; + this.relevant = null; + this.startPage = null; + this.uri = null; + this.xsl = null; + } + +} + +class Threshold extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]); + } + +} + +class To extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]); + } + +} + +class TemplateCache extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "templateCache"); + this.maxEntries = (0, _utils.getInteger)({ + data: attributes.maxEntries, + defaultValue: 5, + validate: n => n >= 0 + }); + } + +} + +class Trace extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "trace", true); + this.area = new _xfa_object.XFAObjectArray(); + } + +} + +class Transform extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "transform", true); + this.groupParent = null; + this.ifEmpty = null; + this.nameAttr = null; + this.picture = null; + this.presence = null; + this.rename = null; + this.whitespace = null; + } + +} + +class Type extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", "native", "xdp", "mergedXDP"]); + } + +} + +class Uri extends _xfa_object.StringObject { + constructor(attributes) { + super(CONFIG_NS_ID, "uri"); + } + +} + +class Validate extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]); + } + +} + +class ValidateApprovalSignatures extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "validateApprovalSignatures"); + } + + [_xfa_object.$finalize]() { + this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["docReady", "postSign"].includes(x)); + } + +} + +class ValidationMessaging extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", "firstMessageOnly", "noMessages"]); + } + +} + +class Version extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]); + } + +} + +class VersionControl extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "VersionControl"); + this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]); + this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]); + this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]); + } + +} + +class ViewerPreferences extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "viewerPreferences", true); + this.ADBE_JSConsole = null; + this.ADBE_JSDebugger = null; + this.addViewerPreferences = null; + this.duplexOption = null; + this.enforce = null; + this.numberOfCopies = null; + this.pageRange = null; + this.pickTrayByPDFSize = null; + this.printScaling = null; + } + +} + +class WebClient extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "webClient", true); + this.name = attributes.name ? attributes.name.trim() : ""; + this.fontInfo = null; + this.xdc = null; + } + +} + +class Whitespace extends _xfa_object.OptionObject { + constructor(attributes) { + super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]); + } + +} + +class Window extends _xfa_object.ContentObject { + constructor(attributes) { + super(CONFIG_NS_ID, "window"); + } + + [_xfa_object.$finalize]() { + const pair = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10)); + + if (pair.some(x => isNaN(x))) { + this[_xfa_object.$content] = [0, 0]; + return; + } + + if (pair.length === 1) { + pair.push(pair[0]); + } + + this[_xfa_object.$content] = pair; + } + +} + +class Xdc extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "xdc", true); + this.uri = new _xfa_object.XFAObjectArray(); + this.xsl = new _xfa_object.XFAObjectArray(); + } + +} + +class Xdp extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "xdp", true); + this.packets = null; + } + +} + +class Xsl extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "xsl", true); + this.debug = null; + this.uri = null; + } + +} + +class Zpl extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONFIG_NS_ID, "zpl", true); + this.name = attributes.name ? attributes.name.trim() : ""; + this.batchOutput = null; + this.flipLabel = null; + this.fontInfo = null; + this.xdc = null; + } + +} + +class ConfigNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (ConfigNamespace.hasOwnProperty(name)) { + return ConfigNamespace[name](attributes); + } + + return undefined; + } + + static acrobat(attrs) { + return new Acrobat(attrs); + } + + static acrobat7(attrs) { + return new Acrobat7(attrs); + } + + static ADBE_JSConsole(attrs) { + return new ADBE_JSConsole(attrs); + } + + static ADBE_JSDebugger(attrs) { + return new ADBE_JSDebugger(attrs); + } + + static addSilentPrint(attrs) { + return new AddSilentPrint(attrs); + } + + static addViewerPreferences(attrs) { + return new AddViewerPreferences(attrs); + } + + static adjustData(attrs) { + return new AdjustData(attrs); + } + + static adobeExtensionLevel(attrs) { + return new AdobeExtensionLevel(attrs); + } + + static agent(attrs) { + return new Agent(attrs); + } + + static alwaysEmbed(attrs) { + return new AlwaysEmbed(attrs); + } + + static amd(attrs) { + return new Amd(attrs); + } + + static area(attrs) { + return new Area(attrs); + } + + static attributes(attrs) { + return new Attributes(attrs); + } + + static autoSave(attrs) { + return new AutoSave(attrs); + } + + static base(attrs) { + return new Base(attrs); + } + + static batchOutput(attrs) { + return new BatchOutput(attrs); + } + + static behaviorOverride(attrs) { + return new BehaviorOverride(attrs); + } + + static cache(attrs) { + return new Cache(attrs); + } + + static change(attrs) { + return new Change(attrs); + } + + static common(attrs) { + return new Common(attrs); + } + + static compress(attrs) { + return new Compress(attrs); + } + + static compressLogicalStructure(attrs) { + return new CompressLogicalStructure(attrs); + } + + static compressObjectStream(attrs) { + return new CompressObjectStream(attrs); + } + + static compression(attrs) { + return new Compression(attrs); + } + + static config(attrs) { + return new Config(attrs); + } + + static conformance(attrs) { + return new Conformance(attrs); + } + + static contentCopy(attrs) { + return new ContentCopy(attrs); + } + + static copies(attrs) { + return new Copies(attrs); + } + + static creator(attrs) { + return new Creator(attrs); + } + + static currentPage(attrs) { + return new CurrentPage(attrs); + } + + static data(attrs) { + return new Data(attrs); + } + + static debug(attrs) { + return new Debug(attrs); + } + + static defaultTypeface(attrs) { + return new DefaultTypeface(attrs); + } + + static destination(attrs) { + return new Destination(attrs); + } + + static documentAssembly(attrs) { + return new DocumentAssembly(attrs); + } + + static driver(attrs) { + return new Driver(attrs); + } + + static duplexOption(attrs) { + return new DuplexOption(attrs); + } + + static dynamicRender(attrs) { + return new DynamicRender(attrs); + } + + static embed(attrs) { + return new Embed(attrs); + } + + static encrypt(attrs) { + return new Encrypt(attrs); + } + + static encryption(attrs) { + return new Encryption(attrs); + } + + static encryptionLevel(attrs) { + return new EncryptionLevel(attrs); + } + + static enforce(attrs) { + return new Enforce(attrs); + } + + static equate(attrs) { + return new Equate(attrs); + } + + static equateRange(attrs) { + return new EquateRange(attrs); + } + + static exclude(attrs) { + return new Exclude(attrs); + } + + static excludeNS(attrs) { + return new ExcludeNS(attrs); + } + + static flipLabel(attrs) { + return new FlipLabel(attrs); + } + + static fontInfo(attrs) { + return new FontInfo(attrs); + } + + static formFieldFilling(attrs) { + return new FormFieldFilling(attrs); + } + + static groupParent(attrs) { + return new GroupParent(attrs); + } + + static ifEmpty(attrs) { + return new IfEmpty(attrs); + } + + static includeXDPContent(attrs) { + return new IncludeXDPContent(attrs); + } + + static incrementalLoad(attrs) { + return new IncrementalLoad(attrs); + } + + static incrementalMerge(attrs) { + return new IncrementalMerge(attrs); + } + + static interactive(attrs) { + return new Interactive(attrs); + } + + static jog(attrs) { + return new Jog(attrs); + } + + static labelPrinter(attrs) { + return new LabelPrinter(attrs); + } + + static layout(attrs) { + return new Layout(attrs); + } + + static level(attrs) { + return new Level(attrs); + } + + static linearized(attrs) { + return new Linearized(attrs); + } + + static locale(attrs) { + return new Locale(attrs); + } + + static localeSet(attrs) { + return new LocaleSet(attrs); + } + + static log(attrs) { + return new Log(attrs); + } + + static map(attrs) { + return new MapElement(attrs); + } + + static mediumInfo(attrs) { + return new MediumInfo(attrs); + } + + static message(attrs) { + return new Message(attrs); + } + + static messaging(attrs) { + return new Messaging(attrs); + } + + static mode(attrs) { + return new Mode(attrs); + } + + static modifyAnnots(attrs) { + return new ModifyAnnots(attrs); + } + + static msgId(attrs) { + return new MsgId(attrs); + } + + static nameAttr(attrs) { + return new NameAttr(attrs); + } + + static neverEmbed(attrs) { + return new NeverEmbed(attrs); + } + + static numberOfCopies(attrs) { + return new NumberOfCopies(attrs); + } + + static openAction(attrs) { + return new OpenAction(attrs); + } + + static output(attrs) { + return new Output(attrs); + } + + static outputBin(attrs) { + return new OutputBin(attrs); + } + + static outputXSL(attrs) { + return new OutputXSL(attrs); + } + + static overprint(attrs) { + return new Overprint(attrs); + } + + static packets(attrs) { + return new Packets(attrs); + } + + static pageOffset(attrs) { + return new PageOffset(attrs); + } + + static pageRange(attrs) { + return new PageRange(attrs); + } + + static pagination(attrs) { + return new Pagination(attrs); + } + + static paginationOverride(attrs) { + return new PaginationOverride(attrs); + } + + static part(attrs) { + return new Part(attrs); + } + + static pcl(attrs) { + return new Pcl(attrs); + } + + static pdf(attrs) { + return new Pdf(attrs); + } + + static pdfa(attrs) { + return new Pdfa(attrs); + } + + static permissions(attrs) { + return new Permissions(attrs); + } + + static pickTrayByPDFSize(attrs) { + return new PickTrayByPDFSize(attrs); + } + + static picture(attrs) { + return new Picture(attrs); + } + + static plaintextMetadata(attrs) { + return new PlaintextMetadata(attrs); + } + + static presence(attrs) { + return new Presence(attrs); + } + + static present(attrs) { + return new Present(attrs); + } + + static print(attrs) { + return new Print(attrs); + } + + static printHighQuality(attrs) { + return new PrintHighQuality(attrs); + } + + static printScaling(attrs) { + return new PrintScaling(attrs); + } + + static printerName(attrs) { + return new PrinterName(attrs); + } + + static producer(attrs) { + return new Producer(attrs); + } + + static ps(attrs) { + return new Ps(attrs); + } + + static range(attrs) { + return new Range(attrs); + } + + static record(attrs) { + return new Record(attrs); + } + + static relevant(attrs) { + return new Relevant(attrs); + } + + static rename(attrs) { + return new Rename(attrs); + } + + static renderPolicy(attrs) { + return new RenderPolicy(attrs); + } + + static runScripts(attrs) { + return new RunScripts(attrs); + } + + static script(attrs) { + return new Script(attrs); + } + + static scriptModel(attrs) { + return new ScriptModel(attrs); + } + + static severity(attrs) { + return new Severity(attrs); + } + + static silentPrint(attrs) { + return new SilentPrint(attrs); + } + + static staple(attrs) { + return new Staple(attrs); + } + + static startNode(attrs) { + return new StartNode(attrs); + } + + static startPage(attrs) { + return new StartPage(attrs); + } + + static submitFormat(attrs) { + return new SubmitFormat(attrs); + } + + static submitUrl(attrs) { + return new SubmitUrl(attrs); + } + + static subsetBelow(attrs) { + return new SubsetBelow(attrs); + } + + static suppressBanner(attrs) { + return new SuppressBanner(attrs); + } + + static tagged(attrs) { + return new Tagged(attrs); + } + + static template(attrs) { + return new Template(attrs); + } + + static templateCache(attrs) { + return new TemplateCache(attrs); + } + + static threshold(attrs) { + return new Threshold(attrs); + } + + static to(attrs) { + return new To(attrs); + } + + static trace(attrs) { + return new Trace(attrs); + } + + static transform(attrs) { + return new Transform(attrs); + } + + static type(attrs) { + return new Type(attrs); + } + + static uri(attrs) { + return new Uri(attrs); + } + + static validate(attrs) { + return new Validate(attrs); + } + + static validateApprovalSignatures(attrs) { + return new ValidateApprovalSignatures(attrs); + } + + static validationMessaging(attrs) { + return new ValidationMessaging(attrs); + } + + static version(attrs) { + return new Version(attrs); + } + + static versionControl(attrs) { + return new VersionControl(attrs); + } + + static viewerPreferences(attrs) { + return new ViewerPreferences(attrs); + } + + static webClient(attrs) { + return new WebClient(attrs); + } + + static whitespace(attrs) { + return new Whitespace(attrs); + } + + static window(attrs) { + return new Window(attrs); + } + + static xdc(attrs) { + return new Xdc(attrs); + } + + static xdp(attrs) { + return new Xdp(attrs); + } + + static xsl(attrs) { + return new Xsl(attrs); + } + + static zpl(attrs) { + return new Zpl(attrs); + } + +} + +exports.ConfigNamespace = ConfigNamespace; + +/***/ }), +/* 92 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.ConnectionSetNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id; + +class ConnectionSet extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "connectionSet", true); + this.wsdlConnection = new _xfa_object.XFAObjectArray(); + this.xmlConnection = new _xfa_object.XFAObjectArray(); + this.xsdConnection = new _xfa_object.XFAObjectArray(); + } + +} + +class EffectiveInputPolicy extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "effectiveInputPolicy"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class EffectiveOutputPolicy extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Operation extends _xfa_object.StringObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "operation"); + this.id = attributes.id || ""; + this.input = attributes.input || ""; + this.name = attributes.name || ""; + this.output = attributes.output || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class RootElement extends _xfa_object.StringObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "rootElement"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class SoapAction extends _xfa_object.StringObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "soapAction"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class SoapAddress extends _xfa_object.StringObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "soapAddress"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class Uri extends _xfa_object.StringObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "uri"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class WsdlAddress extends _xfa_object.StringObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "wsdlAddress"); + this.id = attributes.id || ""; + this.name = attributes.name || ""; + this.use = attributes.use || ""; + this.usehref = attributes.usehref || ""; + } + +} + +class WsdlConnection extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "wsdlConnection", true); + this.dataDescription = attributes.dataDescription || ""; + this.name = attributes.name || ""; + this.effectiveInputPolicy = null; + this.effectiveOutputPolicy = null; + this.operation = null; + this.soapAction = null; + this.soapAddress = null; + this.wsdlAddress = null; + } + +} + +class XmlConnection extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "xmlConnection", true); + this.dataDescription = attributes.dataDescription || ""; + this.name = attributes.name || ""; + this.uri = null; + } + +} + +class XsdConnection extends _xfa_object.XFAObject { + constructor(attributes) { + super(CONNECTION_SET_NS_ID, "xsdConnection", true); + this.dataDescription = attributes.dataDescription || ""; + this.name = attributes.name || ""; + this.rootElement = null; + this.uri = null; + } + +} + +class ConnectionSetNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (ConnectionSetNamespace.hasOwnProperty(name)) { + return ConnectionSetNamespace[name](attributes); + } + + return undefined; + } + + static connectionSet(attrs) { + return new ConnectionSet(attrs); + } + + static effectiveInputPolicy(attrs) { + return new EffectiveInputPolicy(attrs); + } + + static effectiveOutputPolicy(attrs) { + return new EffectiveOutputPolicy(attrs); + } + + static operation(attrs) { + return new Operation(attrs); + } + + static rootElement(attrs) { + return new RootElement(attrs); + } + + static soapAction(attrs) { + return new SoapAction(attrs); + } + + static soapAddress(attrs) { + return new SoapAddress(attrs); + } + + static uri(attrs) { + return new Uri(attrs); + } + + static wsdlAddress(attrs) { + return new WsdlAddress(attrs); + } + + static wsdlConnection(attrs) { + return new WsdlConnection(attrs); + } + + static xmlConnection(attrs) { + return new XmlConnection(attrs); + } + + static xsdConnection(attrs) { + return new XsdConnection(attrs); + } + +} + +exports.ConnectionSetNamespace = ConnectionSetNamespace; + +/***/ }), +/* 93 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.DatasetsNamespace = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +var _namespaces = __w_pdfjs_require__(79); + +const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id; + +class Data extends _xfa_object.XmlObject { + constructor(attributes) { + super(DATASETS_NS_ID, "data", attributes); + } + + [_xfa_object.$isNsAgnostic]() { + return true; + } + +} + +class Datasets extends _xfa_object.XFAObject { + constructor(attributes) { + super(DATASETS_NS_ID, "datasets", true); + this.data = null; + this.Signature = null; + } + + [_xfa_object.$onChild](child) { + const name = child[_xfa_object.$nodeName]; + + if (name === "data" && child[_xfa_object.$namespaceId] === DATASETS_NS_ID || name === "Signature" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.signature.id) { + this[name] = child; + } + + this[_xfa_object.$appendChild](child); + } + +} + +class DatasetsNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (DatasetsNamespace.hasOwnProperty(name)) { + return DatasetsNamespace[name](attributes); + } + + return undefined; + } + + static datasets(attributes) { + return new Datasets(attributes); + } + + static data(attributes) { + return new Data(attributes); + } + +} + +exports.DatasetsNamespace = DatasetsNamespace; + +/***/ }), +/* 94 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.LocaleSetNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +var _utils = __w_pdfjs_require__(78); + +const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id; + +class CalendarSymbols extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "calendarSymbols", true); + this.name = "gregorian"; + this.dayNames = new _xfa_object.XFAObjectArray(2); + this.eraNames = null; + this.meridiemNames = null; + this.monthNames = new _xfa_object.XFAObjectArray(2); + } + +} + +class CurrencySymbol extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "currencySymbol"); + this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]); + } + +} + +class CurrencySymbols extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "currencySymbols", true); + this.currencySymbol = new _xfa_object.XFAObjectArray(3); + } + +} + +class DatePattern extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "datePattern"); + this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); + } + +} + +class DatePatterns extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "datePatterns", true); + this.datePattern = new _xfa_object.XFAObjectArray(4); + } + +} + +class DateTimeSymbols extends _xfa_object.ContentObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "dateTimeSymbols"); + } + +} + +class Day extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "day"); + } + +} + +class DayNames extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "dayNames", true); + this.abbr = (0, _utils.getInteger)({ + data: attributes.abbr, + defaultValue: 0, + validate: x => x === 1 + }); + this.day = new _xfa_object.XFAObjectArray(7); + } + +} + +class Era extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "era"); + } + +} + +class EraNames extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "eraNames", true); + this.era = new _xfa_object.XFAObjectArray(2); + } + +} + +class Locale extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "locale", true); + this.desc = attributes.desc || ""; + this.name = "isoname"; + this.calendarSymbols = null; + this.currencySymbols = null; + this.datePatterns = null; + this.dateTimeSymbols = null; + this.numberPatterns = null; + this.numberSymbols = null; + this.timePatterns = null; + this.typeFaces = null; + } + +} + +class LocaleSet extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "localeSet", true); + this.locale = new _xfa_object.XFAObjectArray(); + } + +} + +class Meridiem extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "meridiem"); + } + +} + +class MeridiemNames extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "meridiemNames", true); + this.meridiem = new _xfa_object.XFAObjectArray(2); + } + +} + +class Month extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "month"); + } + +} + +class MonthNames extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "monthNames", true); + this.abbr = (0, _utils.getInteger)({ + data: attributes.abbr, + defaultValue: 0, + validate: x => x === 1 + }); + this.month = new _xfa_object.XFAObjectArray(12); + } + +} + +class NumberPattern extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "numberPattern"); + this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); + } + +} + +class NumberPatterns extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "numberPatterns", true); + this.numberPattern = new _xfa_object.XFAObjectArray(4); + } + +} + +class NumberSymbol extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "numberSymbol"); + this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", "zero"]); + } + +} + +class NumberSymbols extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "numberSymbols", true); + this.numberSymbol = new _xfa_object.XFAObjectArray(5); + } + +} + +class TimePattern extends _xfa_object.StringObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "timePattern"); + this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); + } + +} + +class TimePatterns extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "timePatterns", true); + this.timePattern = new _xfa_object.XFAObjectArray(4); + } + +} + +class TypeFace extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "typeFace", true); + this.name = attributes.name | ""; + } + +} + +class TypeFaces extends _xfa_object.XFAObject { + constructor(attributes) { + super(LOCALE_SET_NS_ID, "typeFaces", true); + this.typeFace = new _xfa_object.XFAObjectArray(); + } + +} + +class LocaleSetNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (LocaleSetNamespace.hasOwnProperty(name)) { + return LocaleSetNamespace[name](attributes); + } + + return undefined; + } + + static calendarSymbols(attrs) { + return new CalendarSymbols(attrs); + } + + static currencySymbol(attrs) { + return new CurrencySymbol(attrs); + } + + static currencySymbols(attrs) { + return new CurrencySymbols(attrs); + } + + static datePattern(attrs) { + return new DatePattern(attrs); + } + + static datePatterns(attrs) { + return new DatePatterns(attrs); + } + + static dateTimeSymbols(attrs) { + return new DateTimeSymbols(attrs); + } + + static day(attrs) { + return new Day(attrs); + } + + static dayNames(attrs) { + return new DayNames(attrs); + } + + static era(attrs) { + return new Era(attrs); + } + + static eraNames(attrs) { + return new EraNames(attrs); + } + + static locale(attrs) { + return new Locale(attrs); + } + + static localeSet(attrs) { + return new LocaleSet(attrs); + } + + static meridiem(attrs) { + return new Meridiem(attrs); + } + + static meridiemNames(attrs) { + return new MeridiemNames(attrs); + } + + static month(attrs) { + return new Month(attrs); + } + + static monthNames(attrs) { + return new MonthNames(attrs); + } + + static numberPattern(attrs) { + return new NumberPattern(attrs); + } + + static numberPatterns(attrs) { + return new NumberPatterns(attrs); + } + + static numberSymbol(attrs) { + return new NumberSymbol(attrs); + } + + static numberSymbols(attrs) { + return new NumberSymbols(attrs); + } + + static timePattern(attrs) { + return new TimePattern(attrs); + } + + static timePatterns(attrs) { + return new TimePatterns(attrs); + } + + static typeFace(attrs) { + return new TypeFace(attrs); + } + + static typeFaces(attrs) { + return new TypeFaces(attrs); + } + +} + +exports.LocaleSetNamespace = LocaleSetNamespace; + +/***/ }), +/* 95 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.SignatureNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id; + +class Signature extends _xfa_object.XFAObject { + constructor(attributes) { + super(SIGNATURE_NS_ID, "signature", true); + } + +} + +class SignatureNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (SignatureNamespace.hasOwnProperty(name)) { + return SignatureNamespace[name](attributes); + } + + return undefined; + } + + static signature(attributes) { + return new Signature(attributes); + } + +} + +exports.SignatureNamespace = SignatureNamespace; + +/***/ }), +/* 96 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.StylesheetNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id; + +class Stylesheet extends _xfa_object.XFAObject { + constructor(attributes) { + super(STYLESHEET_NS_ID, "stylesheet", true); + } + +} + +class StylesheetNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (StylesheetNamespace.hasOwnProperty(name)) { + return StylesheetNamespace[name](attributes); + } + + return undefined; + } + + static stylesheet(attributes) { + return new Stylesheet(attributes); + } + +} + +exports.StylesheetNamespace = StylesheetNamespace; + +/***/ }), +/* 97 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XdpNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id; + +class Xdp extends _xfa_object.XFAObject { + constructor(attributes) { + super(XDP_NS_ID, "xdp", true); + this.uuid = attributes.uuid || ""; + this.timeStamp = attributes.timeStamp || ""; + this.config = null; + this.connectionSet = null; + this.datasets = null; + this.localeSet = null; + this.stylesheet = new _xfa_object.XFAObjectArray(); + this.template = null; + } + + [_xfa_object.$onChildCheck](child) { + const ns = _namespaces.NamespaceIds[child[_xfa_object.$nodeName]]; + return ns && child[_xfa_object.$namespaceId] === ns.id; + } + +} + +class XdpNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (XdpNamespace.hasOwnProperty(name)) { + return XdpNamespace[name](attributes); + } + + return undefined; + } + + static xdp(attributes) { + return new Xdp(attributes); + } + +} + +exports.XdpNamespace = XdpNamespace; + +/***/ }), +/* 98 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XhtmlNamespace = void 0; + +var _xfa_object = __w_pdfjs_require__(77); + +var _namespaces = __w_pdfjs_require__(79); + +var _html_utils = __w_pdfjs_require__(84); + +var _utils = __w_pdfjs_require__(78); + +const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id; +const $richText = Symbol(); +const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]); +const StyleMapping = new Map([["page-break-after", "breakAfter"], ["page-break-before", "breakBefore"], ["page-break-inside", "breakInside"], ["kerning-mode", value => value === "none" ? "none" : "normal"], ["xfa-font-horizontal-scale", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-font-vertical-scale", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-spacerun", ""], ["xfa-tab-stops", ""], ["font-size", (value, original) => { + value = original.fontSize = (0, _utils.getMeasurement)(value); + return (0, _html_utils.measureToString)(0.99 * value); +}], ["letter-spacing", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["line-height", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-bottom", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-left", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-right", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-top", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["text-indent", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["font-family", value => value], ["vertical-align", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))]]); +const spacesRegExp = /\s+/g; +const crlfRegExp = /[\r\n]+/g; +const crlfForRichTextRegExp = /\r\n?/g; + +function mapStyle(styleStr, node, richText) { + const style = Object.create(null); + + if (!styleStr) { + return style; + } + + const original = Object.create(null); + + for (const [key, value] of styleStr.split(";").map(s => s.split(":", 2))) { + const mapping = StyleMapping.get(key); + + if (mapping === "") { + continue; + } + + let newValue = value; + + if (mapping) { + if (typeof mapping === "string") { + newValue = mapping; + } else { + newValue = mapping(value, original); + } + } + + if (key.endsWith("scale")) { + if (style.transform) { + style.transform = `${style[key]} ${newValue}`; + } else { + style.transform = newValue; + } + } else { + style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue; + } + } + + if (style.fontFamily) { + (0, _html_utils.setFontFamily)({ + typeface: style.fontFamily, + weight: style.fontWeight || "normal", + posture: style.fontStyle || "normal", + size: original.fontSize || 0 + }, node, node[_xfa_object.$globalData].fontFinder, style); + } + + if (richText && style.verticalAlign && style.verticalAlign !== "0px" && style.fontSize) { + const SUB_SUPER_SCRIPT_FACTOR = 0.583; + const VERTICAL_FACTOR = 0.333; + const fontSize = (0, _utils.getMeasurement)(style.fontSize); + style.fontSize = (0, _html_utils.measureToString)(fontSize * SUB_SUPER_SCRIPT_FACTOR); + style.verticalAlign = (0, _html_utils.measureToString)(Math.sign((0, _utils.getMeasurement)(style.verticalAlign)) * fontSize * VERTICAL_FACTOR); + } + + if (richText && style.fontSize) { + style.fontSize = `calc(${style.fontSize} * var(--scale-factor))`; + } + + (0, _html_utils.fixTextIndent)(style); + return style; +} + +function checkStyle(node) { + if (!node.style) { + return ""; + } + + return node.style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key, value]) => { + if (key === "font-family") { + node[_xfa_object.$globalData].usedTypefaces.add(value); + } + + return VALID_STYLES.has(key); + }).map(kv => kv.join(":")).join(";"); +} + +const NoWhites = new Set(["body", "html"]); + +class XhtmlObject extends _xfa_object.XmlObject { + constructor(attributes, name) { + super(XHTML_NS_ID, name); + this[$richText] = false; + this.style = attributes.style || ""; + } + + [_xfa_object.$clean](builder) { + super[_xfa_object.$clean](builder); + + this.style = checkStyle(this); + } + + [_xfa_object.$acceptWhitespace]() { + return !NoWhites.has(this[_xfa_object.$nodeName]); + } + + [_xfa_object.$onText](str, richText = false) { + if (!richText) { + str = str.replace(crlfRegExp, ""); + + if (!this.style.includes("xfa-spacerun:yes")) { + str = str.replace(spacesRegExp, " "); + } + } else { + this[$richText] = true; + } + + if (str) { + this[_xfa_object.$content] += str; + } + } + + [_xfa_object.$pushGlyphs](measure, mustPop = true) { + const xfaFont = Object.create(null); + const margin = { + top: NaN, + bottom: NaN, + left: NaN, + right: NaN + }; + let lineHeight = null; + + for (const [key, value] of this.style.split(";").map(s => s.split(":", 2))) { + switch (key) { + case "font-family": + xfaFont.typeface = (0, _utils.stripQuotes)(value); + break; + + case "font-size": + xfaFont.size = (0, _utils.getMeasurement)(value); + break; + + case "font-weight": + xfaFont.weight = value; + break; + + case "font-style": + xfaFont.posture = value; + break; + + case "letter-spacing": + xfaFont.letterSpacing = (0, _utils.getMeasurement)(value); + break; + + case "margin": + const values = value.split(/ \t/).map(x => (0, _utils.getMeasurement)(x)); + + switch (values.length) { + case 1: + margin.top = margin.bottom = margin.left = margin.right = values[0]; + break; + + case 2: + margin.top = margin.bottom = values[0]; + margin.left = margin.right = values[1]; + break; + + case 3: + margin.top = values[0]; + margin.bottom = values[2]; + margin.left = margin.right = values[1]; + break; + + case 4: + margin.top = values[0]; + margin.left = values[1]; + margin.bottom = values[2]; + margin.right = values[3]; + break; + } + + break; + + case "margin-top": + margin.top = (0, _utils.getMeasurement)(value); + break; + + case "margin-bottom": + margin.bottom = (0, _utils.getMeasurement)(value); + break; + + case "margin-left": + margin.left = (0, _utils.getMeasurement)(value); + break; + + case "margin-right": + margin.right = (0, _utils.getMeasurement)(value); + break; + + case "line-height": + lineHeight = (0, _utils.getMeasurement)(value); + break; + } + } + + measure.pushData(xfaFont, margin, lineHeight); + + if (this[_xfa_object.$content]) { + measure.addString(this[_xfa_object.$content]); + } else { + for (const child of this[_xfa_object.$getChildren]()) { + if (child[_xfa_object.$nodeName] === "#text") { + measure.addString(child[_xfa_object.$content]); + continue; + } + + child[_xfa_object.$pushGlyphs](measure); + } + } + + if (mustPop) { + measure.popFont(); + } + } + + [_xfa_object.$toHTML](availableSpace) { + const children = []; + this[_xfa_object.$extra] = { + children + }; + + this[_xfa_object.$childrenToHTML]({}); + + if (children.length === 0 && !this[_xfa_object.$content]) { + return _utils.HTMLResult.EMPTY; + } + + let value; + + if (this[$richText]) { + value = this[_xfa_object.$content] ? this[_xfa_object.$content].replace(crlfForRichTextRegExp, "\n") : undefined; + } else { + value = this[_xfa_object.$content] || undefined; + } + + return _utils.HTMLResult.success({ + name: this[_xfa_object.$nodeName], + attributes: { + href: this.href, + style: mapStyle(this.style, this, this[$richText]) + }, + children, + value + }); + } + +} + +class A extends XhtmlObject { + constructor(attributes) { + super(attributes, "a"); + this.href = (0, _html_utils.fixURL)(attributes.href) || ""; + } + +} + +class B extends XhtmlObject { + constructor(attributes) { + super(attributes, "b"); + } + + [_xfa_object.$pushGlyphs](measure) { + measure.pushFont({ + weight: "bold" + }); + + super[_xfa_object.$pushGlyphs](measure); + + measure.popFont(); + } + +} + +class Body extends XhtmlObject { + constructor(attributes) { + super(attributes, "body"); + } + + [_xfa_object.$toHTML](availableSpace) { + const res = super[_xfa_object.$toHTML](availableSpace); + + const { + html + } = res; + + if (!html) { + return _utils.HTMLResult.EMPTY; + } + + html.name = "div"; + html.attributes.class = ["xfaRich"]; + return res; + } + +} + +class Br extends XhtmlObject { + constructor(attributes) { + super(attributes, "br"); + } + + [_xfa_object.$text]() { + return "\n"; + } + + [_xfa_object.$pushGlyphs](measure) { + measure.addString("\n"); + } + + [_xfa_object.$toHTML](availableSpace) { + return _utils.HTMLResult.success({ + name: "br" + }); + } + +} + +class Html extends XhtmlObject { + constructor(attributes) { + super(attributes, "html"); + } + + [_xfa_object.$toHTML](availableSpace) { + const children = []; + this[_xfa_object.$extra] = { + children + }; + + this[_xfa_object.$childrenToHTML]({}); + + if (children.length === 0) { + return _utils.HTMLResult.success({ + name: "div", + attributes: { + class: ["xfaRich"], + style: {} + }, + value: this[_xfa_object.$content] || "" + }); + } + + if (children.length === 1) { + const child = children[0]; + + if (child.attributes && child.attributes.class.includes("xfaRich")) { + return _utils.HTMLResult.success(child); + } + } + + return _utils.HTMLResult.success({ + name: "div", + attributes: { + class: ["xfaRich"], + style: {} + }, + children + }); + } + +} + +class I extends XhtmlObject { + constructor(attributes) { + super(attributes, "i"); + } + + [_xfa_object.$pushGlyphs](measure) { + measure.pushFont({ + posture: "italic" + }); + + super[_xfa_object.$pushGlyphs](measure); + + measure.popFont(); + } + +} + +class Li extends XhtmlObject { + constructor(attributes) { + super(attributes, "li"); + } + +} + +class Ol extends XhtmlObject { + constructor(attributes) { + super(attributes, "ol"); + } + +} + +class P extends XhtmlObject { + constructor(attributes) { + super(attributes, "p"); + } + + [_xfa_object.$pushGlyphs](measure) { + super[_xfa_object.$pushGlyphs](measure, false); + + measure.addString("\n"); + measure.addPara(); + measure.popFont(); + } + + [_xfa_object.$text]() { + const siblings = this[_xfa_object.$getParent]()[_xfa_object.$getChildren](); + + if (siblings.at(-1) === this) { + return super[_xfa_object.$text](); + } + + return super[_xfa_object.$text]() + "\n"; + } + +} + +class Span extends XhtmlObject { + constructor(attributes) { + super(attributes, "span"); + } + +} + +class Sub extends XhtmlObject { + constructor(attributes) { + super(attributes, "sub"); + } + +} + +class Sup extends XhtmlObject { + constructor(attributes) { + super(attributes, "sup"); + } + +} + +class Ul extends XhtmlObject { + constructor(attributes) { + super(attributes, "ul"); + } + +} + +class XhtmlNamespace { + static [_namespaces.$buildXFAObject](name, attributes) { + if (XhtmlNamespace.hasOwnProperty(name)) { + return XhtmlNamespace[name](attributes); + } + + return undefined; + } + + static a(attributes) { + return new A(attributes); + } + + static b(attributes) { + return new B(attributes); + } + + static body(attributes) { + return new Body(attributes); + } + + static br(attributes) { + return new Br(attributes); + } + + static html(attributes) { + return new Html(attributes); + } + + static i(attributes) { + return new I(attributes); + } + + static li(attributes) { + return new Li(attributes); + } + + static ol(attributes) { + return new Ol(attributes); + } + + static p(attributes) { + return new P(attributes); + } + + static span(attributes) { + return new Span(attributes); + } + + static sub(attributes) { + return new Sub(attributes); + } + + static sup(attributes) { + return new Sup(attributes); + } + + static ul(attributes) { + return new Ul(attributes); + } + +} + +exports.XhtmlNamespace = XhtmlNamespace; + +/***/ }), +/* 99 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.UnknownNamespace = void 0; + +var _namespaces = __w_pdfjs_require__(79); + +var _xfa_object = __w_pdfjs_require__(77); + +class UnknownNamespace { + constructor(nsId) { + this.namespaceId = nsId; + } + + [_namespaces.$buildXFAObject](name, attributes) { + return new _xfa_object.XmlObject(this.namespaceId, name, attributes); + } + +} + +exports.UnknownNamespace = UnknownNamespace; + +/***/ }), +/* 100 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.DatasetReader = void 0; + +var _util = __w_pdfjs_require__(2); + +var _core_utils = __w_pdfjs_require__(6); + +var _xml_parser = __w_pdfjs_require__(66); + +function decodeString(str) { + try { + return (0, _util.stringToUTF8String)(str); + } catch (ex) { + (0, _util.warn)(`UTF-8 decoding failed: "${ex}".`); + return str; + } +} + +class DatasetXMLParser extends _xml_parser.SimpleXMLParser { + constructor(options) { + super(options); + this.node = null; + } + + onEndElement(name) { + const node = super.onEndElement(name); + + if (node && name === "xfa:datasets") { + this.node = node; + throw new Error("Aborting DatasetXMLParser."); + } + } + +} + +class DatasetReader { + constructor(data) { + if (data.datasets) { + this.node = new _xml_parser.SimpleXMLParser({ + hasAttributes: true + }).parseFromString(data.datasets).documentElement; + } else { + const parser = new DatasetXMLParser({ + hasAttributes: true + }); + + try { + parser.parseFromString(data["xdp:xdp"]); + } catch (_) {} + + this.node = parser.node; + } + } + + getValue(path) { + if (!this.node || !path) { + return ""; + } + + const node = this.node.searchNode((0, _core_utils.parseXFAPath)(path), 0); + + if (!node) { + return ""; + } + + const first = node.firstChild; + + if (first && first.nodeName === "value") { + return node.children.map(child => decodeString(child.textContent)); + } + + return decodeString(node.textContent); + } + +} + +exports.DatasetReader = DatasetReader; + +/***/ }), +/* 101 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.XRef = void 0; + +var _util = __w_pdfjs_require__(2); + +var _primitives = __w_pdfjs_require__(5); + +var _core_utils = __w_pdfjs_require__(6); + +var _parser = __w_pdfjs_require__(17); + +var _base_stream = __w_pdfjs_require__(7); + +var _crypto = __w_pdfjs_require__(67); + +class XRef { + constructor(stream, pdfManager) { + this.stream = stream; + this.pdfManager = pdfManager; + this.entries = []; + this.xrefstms = Object.create(null); + this._cacheMap = new Map(); + this._pendingRefs = new _primitives.RefSet(); + this.stats = new _core_utils.DocStats(pdfManager.msgHandler); + this._newRefNum = null; + } + + getNewRef() { + if (this._newRefNum === null) { + this._newRefNum = this.entries.length || 1; + } + + return _primitives.Ref.get(this._newRefNum++, 0); + } + + resetNewRef() { + this._newRefNum = null; + } + + setStartXRef(startXRef) { + this.startXRefQueue = [startXRef]; + } + + parse(recoveryMode = false) { + let trailerDict; + + if (!recoveryMode) { + trailerDict = this.readXRef(); + } else { + (0, _util.warn)("Indexing all PDF objects"); + trailerDict = this.indexObjects(); + } + + trailerDict.assignXref(this); + this.trailer = trailerDict; + let encrypt; + + try { + encrypt = trailerDict.get("Encrypt"); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); + } + + if (encrypt instanceof _primitives.Dict) { + const ids = trailerDict.get("ID"); + const fileId = ids && ids.length ? ids[0] : ""; + encrypt.suppressEncryption = true; + this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); + } + + let root; + + try { + root = trailerDict.get("Root"); + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`); + } + + if (root instanceof _primitives.Dict) { + try { + const pages = root.get("Pages"); + + if (pages instanceof _primitives.Dict) { + this.root = root; + return; + } + } catch (ex) { + if (ex instanceof _core_utils.MissingDataException) { + throw ex; + } + + (0, _util.warn)(`XRef.parse - Invalid "Pages" reference: "${ex}".`); + } + } + + if (!recoveryMode) { + throw new _core_utils.XRefParseException(); + } + + throw new _util.InvalidPDFException("Invalid Root reference."); + } + + processXRefTable(parser) { + if (!("tableState" in this)) { + this.tableState = { + entryNum: 0, + streamPos: parser.lexer.stream.pos, + parserBuf1: parser.buf1, + parserBuf2: parser.buf2 + }; + } + + const obj = this.readXRefTable(parser); + + if (!(0, _primitives.isCmd)(obj, "trailer")) { + throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary"); + } + + let dict = parser.getObj(); + + if (!(dict instanceof _primitives.Dict) && dict.dict) { + dict = dict.dict; + } + + if (!(dict instanceof _primitives.Dict)) { + throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary"); + } + + delete this.tableState; + return dict; + } + + readXRefTable(parser) { + const stream = parser.lexer.stream; + const tableState = this.tableState; + stream.pos = tableState.streamPos; + parser.buf1 = tableState.parserBuf1; + parser.buf2 = tableState.parserBuf2; + let obj; + + while (true) { + if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { + if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) { + break; + } + + tableState.firstEntryNum = obj; + tableState.entryCount = parser.getObj(); + } + + let first = tableState.firstEntryNum; + const count = tableState.entryCount; + + if (!Number.isInteger(first) || !Number.isInteger(count)) { + throw new _util.FormatError("Invalid XRef table: wrong types in subsection header"); + } + + for (let i = tableState.entryNum; i < count; i++) { + tableState.streamPos = stream.pos; + tableState.entryNum = i; + tableState.parserBuf1 = parser.buf1; + tableState.parserBuf2 = parser.buf2; + const entry = {}; + entry.offset = parser.getObj(); + entry.gen = parser.getObj(); + const type = parser.getObj(); + + if (type instanceof _primitives.Cmd) { + switch (type.cmd) { + case "f": + entry.free = true; + break; + + case "n": + entry.uncompressed = true; + break; + } + } + + if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { + throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`); + } + + if (i === 0 && entry.free && first === 1) { + first = 0; + } + + if (!this.entries[i + first]) { + this.entries[i + first] = entry; + } + } + + tableState.entryNum = 0; + tableState.streamPos = stream.pos; + tableState.parserBuf1 = parser.buf1; + tableState.parserBuf2 = parser.buf2; + delete tableState.firstEntryNum; + delete tableState.entryCount; + } + + if (this.entries[0] && !this.entries[0].free) { + throw new _util.FormatError("Invalid XRef table: unexpected first object"); + } + + return obj; + } + + processXRefStream(stream) { + if (!("streamState" in this)) { + const streamParameters = stream.dict; + const byteWidths = streamParameters.get("W"); + let range = streamParameters.get("Index"); + + if (!range) { + range = [0, streamParameters.get("Size")]; + } + + this.streamState = { + entryRanges: range, + byteWidths, + entryNum: 0, + streamPos: stream.pos + }; + } + + this.readXRefStream(stream); + delete this.streamState; + return stream.dict; + } + + readXRefStream(stream) { + const streamState = this.streamState; + stream.pos = streamState.streamPos; + const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] = streamState.byteWidths; + const entryRanges = streamState.entryRanges; + + while (entryRanges.length > 0) { + const [first, n] = entryRanges; + + if (!Number.isInteger(first) || !Number.isInteger(n)) { + throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`); + } + + if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { + throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`); + } + + for (let i = streamState.entryNum; i < n; ++i) { + streamState.entryNum = i; + streamState.streamPos = stream.pos; + let type = 0, + offset = 0, + generation = 0; + + for (let j = 0; j < typeFieldWidth; ++j) { + const typeByte = stream.getByte(); + + if (typeByte === -1) { + throw new _util.FormatError("Invalid XRef byteWidths 'type'."); + } + + type = type << 8 | typeByte; + } + + if (typeFieldWidth === 0) { + type = 1; + } + + for (let j = 0; j < offsetFieldWidth; ++j) { + const offsetByte = stream.getByte(); + + if (offsetByte === -1) { + throw new _util.FormatError("Invalid XRef byteWidths 'offset'."); + } + + offset = offset << 8 | offsetByte; + } + + for (let j = 0; j < generationFieldWidth; ++j) { + const generationByte = stream.getByte(); + + if (generationByte === -1) { + throw new _util.FormatError("Invalid XRef byteWidths 'generation'."); + } + + generation = generation << 8 | generationByte; + } + + const entry = {}; + entry.offset = offset; + entry.gen = generation; + + switch (type) { + case 0: + entry.free = true; + break; + + case 1: + entry.uncompressed = true; + break; + + case 2: + break; + + default: + throw new _util.FormatError(`Invalid XRef entry type: ${type}`); + } + + if (!this.entries[first + i]) { + this.entries[first + i] = entry; + } + } + + streamState.entryNum = 0; + streamState.streamPos = stream.pos; + entryRanges.splice(0, 2); + } + } + + indexObjects() { + const TAB = 0x9, + LF = 0xa, + CR = 0xd, + SPACE = 0x20; + const PERCENT = 0x25, + LT = 0x3c; + + function readToken(data, offset) { + let token = "", + ch = data[offset]; + + while (ch !== LF && ch !== CR && ch !== LT) { + if (++offset >= data.length) { + break; + } + + token += String.fromCharCode(ch); + ch = data[offset]; + } + + return token; + } + + function skipUntil(data, offset, what) { + const length = what.length, + dataLength = data.length; + let skipped = 0; + + while (offset < dataLength) { + let i = 0; + + while (i < length && data[offset + i] === what[i]) { + ++i; + } + + if (i >= length) { + break; + } + + offset++; + skipped++; + } + + return skipped; + } + + const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; + const endobjRegExp = /\bendobj[\b\s]$/; + const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; + const CHECK_CONTENT_LENGTH = 25; + const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); + const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); + const objBytes = new Uint8Array([111, 98, 106]); + const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); + this.entries.length = 0; + + this._cacheMap.clear(); + + const stream = this.stream; + stream.pos = 0; + const buffer = stream.getBytes(), + length = buffer.length; + let position = stream.start; + const trailers = [], + xrefStms = []; + + while (position < length) { + let ch = buffer[position]; + + if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { + ++position; + continue; + } + + if (ch === PERCENT) { + do { + ++position; + + if (position >= length) { + break; + } + + ch = buffer[position]; + } while (ch !== LF && ch !== CR); + + continue; + } + + const token = readToken(buffer, position); + let m; + + if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) { + position += skipUntil(buffer, position, trailerBytes); + trailers.push(position); + position += skipUntil(buffer, position, startxrefBytes); + } else if (m = objRegExp.exec(token)) { + const num = m[1] | 0, + gen = m[2] | 0; + let contentLength, + startPos = position + token.length, + updateEntries = false; + + if (!this.entries[num]) { + updateEntries = true; + } else if (this.entries[num].gen === gen) { + try { + const parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream.makeSubStream(startPos)) + }); + parser.getObj(); + updateEntries = true; + } catch (ex) { + if (ex instanceof _core_utils.ParserEOFException) { + (0, _util.warn)(`indexObjects -- checking object (${token}): "${ex}".`); + } else { + updateEntries = true; + } + } + } + + if (updateEntries) { + this.entries[num] = { + offset: position - stream.start, + gen, + uncompressed: true + }; + } + + while (startPos < buffer.length) { + const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; + contentLength = endPos - position; + const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); + const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); + + if (endobjRegExp.test(tokenStr)) { + break; + } else { + const objToken = nestedObjRegExp.exec(tokenStr); + + if (objToken && objToken[1]) { + (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.'); + contentLength -= objToken[1].length; + break; + } + } + + startPos = endPos; + } + + const content = buffer.subarray(position, position + contentLength); + const xrefTagOffset = skipUntil(content, 0, xrefBytes); + + if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { + xrefStms.push(position - stream.start); + this.xrefstms[position - stream.start] = 1; + } + + position += contentLength; + } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) { + trailers.push(position); + position += skipUntil(buffer, position, startxrefBytes); + } else { + position += token.length + 1; + } + } + + for (let i = 0, ii = xrefStms.length; i < ii; ++i) { + this.startXRefQueue.push(xrefStms[i]); + this.readXRef(true); + } + + let trailerDict; + + for (let i = 0, ii = trailers.length; i < ii; ++i) { + stream.pos = trailers[i]; + const parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream), + xref: this, + allowStreams: true, + recoveryMode: true + }); + const obj = parser.getObj(); + + if (!(0, _primitives.isCmd)(obj, "trailer")) { + continue; + } + + const dict = parser.getObj(); + + if (!(dict instanceof _primitives.Dict)) { + continue; + } + + try { + const rootDict = dict.get("Root"); + + if (!(rootDict instanceof _primitives.Dict)) { + continue; + } + + const pagesDict = rootDict.get("Pages"); + + if (!(pagesDict instanceof _primitives.Dict)) { + continue; + } + + const pagesCount = pagesDict.get("Count"); + + if (!Number.isInteger(pagesCount)) { + continue; + } + } catch (ex) { + continue; + } + + if (dict.has("ID")) { + return dict; + } + + trailerDict = dict; + } + + if (trailerDict) { + return trailerDict; + } + + if (this.topDict) { + return this.topDict; + } + + throw new _util.InvalidPDFException("Invalid PDF structure."); + } + + readXRef(recoveryMode = false) { + const stream = this.stream; + const startXRefParsedCache = new Set(); + + try { + while (this.startXRefQueue.length) { + const startXRef = this.startXRefQueue[0]; + + if (startXRefParsedCache.has(startXRef)) { + (0, _util.warn)("readXRef - skipping XRef table since it was already parsed."); + this.startXRefQueue.shift(); + continue; + } + + startXRefParsedCache.add(startXRef); + stream.pos = startXRef + stream.start; + const parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream), + xref: this, + allowStreams: true + }); + let obj = parser.getObj(); + let dict; + + if ((0, _primitives.isCmd)(obj, "xref")) { + dict = this.processXRefTable(parser); + + if (!this.topDict) { + this.topDict = dict; + } + + obj = dict.get("XRefStm"); + + if (Number.isInteger(obj)) { + const pos = obj; + + if (!(pos in this.xrefstms)) { + this.xrefstms[pos] = 1; + this.startXRefQueue.push(pos); + } + } + } else if (Number.isInteger(obj)) { + if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !((obj = parser.getObj()) instanceof _base_stream.BaseStream)) { + throw new _util.FormatError("Invalid XRef stream"); + } + + dict = this.processXRefStream(obj); + + if (!this.topDict) { + this.topDict = dict; + } + + if (!dict) { + throw new _util.FormatError("Failed to read XRef stream"); + } + } else { + throw new _util.FormatError("Invalid XRef stream header"); + } + + obj = dict.get("Prev"); + + if (Number.isInteger(obj)) { + this.startXRefQueue.push(obj); + } else if (obj instanceof _primitives.Ref) { + this.startXRefQueue.push(obj.num); + } + + this.startXRefQueue.shift(); + } + + return this.topDict; + } catch (e) { + if (e instanceof _core_utils.MissingDataException) { + throw e; + } + + (0, _util.info)("(while reading XRef): " + e); + this.startXRefQueue.shift(); + } + + if (recoveryMode) { + return undefined; + } + + throw new _core_utils.XRefParseException(); + } + + getEntry(i) { + const xrefEntry = this.entries[i]; + + if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { + return xrefEntry; + } + + return null; + } + + fetchIfRef(obj, suppressEncryption = false) { + if (obj instanceof _primitives.Ref) { + return this.fetch(obj, suppressEncryption); + } + + return obj; + } + + fetch(ref, suppressEncryption = false) { + if (!(ref instanceof _primitives.Ref)) { + throw new Error("ref object is not a reference"); + } + + const num = ref.num; + + const cacheEntry = this._cacheMap.get(num); + + if (cacheEntry !== undefined) { + if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { + cacheEntry.objId = ref.toString(); + } + + return cacheEntry; + } + + let xrefEntry = this.getEntry(num); + + if (xrefEntry === null) { + this._cacheMap.set(num, xrefEntry); + + return xrefEntry; + } + + if (this._pendingRefs.has(ref)) { + this._pendingRefs.remove(ref); + + (0, _util.warn)(`Ignoring circular reference: ${ref}.`); + return _primitives.CIRCULAR_REF; + } + + this._pendingRefs.put(ref); + + try { + if (xrefEntry.uncompressed) { + xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); + } else { + xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); + } + + this._pendingRefs.remove(ref); + } catch (ex) { + this._pendingRefs.remove(ref); + + throw ex; + } + + if (xrefEntry instanceof _primitives.Dict) { + xrefEntry.objId = ref.toString(); + } else if (xrefEntry instanceof _base_stream.BaseStream) { + xrefEntry.dict.objId = ref.toString(); + } + + return xrefEntry; + } + + fetchUncompressed(ref, xrefEntry, suppressEncryption = false) { + const gen = ref.gen; + let num = ref.num; + + if (xrefEntry.gen !== gen) { + throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`); + } + + const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); + const parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream), + xref: this, + allowStreams: true + }); + const obj1 = parser.getObj(); + const obj2 = parser.getObj(); + const obj3 = parser.getObj(); + + if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) { + throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); + } + + if (obj3.cmd !== "obj") { + if (obj3.cmd.startsWith("obj")) { + num = parseInt(obj3.cmd.substring(3), 10); + + if (!Number.isNaN(num)) { + return num; + } + } + + throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); + } + + if (this.encrypt && !suppressEncryption) { + xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); + } else { + xrefEntry = parser.getObj(); + } + + if (!(xrefEntry instanceof _base_stream.BaseStream)) { + this._cacheMap.set(num, xrefEntry); + } + + return xrefEntry; + } + + fetchCompressed(ref, xrefEntry, suppressEncryption = false) { + const tableOffset = xrefEntry.offset; + const stream = this.fetch(_primitives.Ref.get(tableOffset, 0)); + + if (!(stream instanceof _base_stream.BaseStream)) { + throw new _util.FormatError("bad ObjStm stream"); + } + + const first = stream.dict.get("First"); + const n = stream.dict.get("N"); + + if (!Number.isInteger(first) || !Number.isInteger(n)) { + throw new _util.FormatError("invalid first and n parameters for ObjStm stream"); + } + + let parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream), + xref: this, + allowStreams: true + }); + const nums = new Array(n); + const offsets = new Array(n); + + for (let i = 0; i < n; ++i) { + const num = parser.getObj(); + + if (!Number.isInteger(num)) { + throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`); + } + + const offset = parser.getObj(); + + if (!Number.isInteger(offset)) { + throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`); + } + + nums[i] = num; + offsets[i] = offset; + } + + const start = (stream.start || 0) + first; + const entries = new Array(n); + + for (let i = 0; i < n; ++i) { + const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined; + + if (length < 0) { + throw new _util.FormatError("Invalid offset in the ObjStm stream."); + } + + parser = new _parser.Parser({ + lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)), + xref: this, + allowStreams: true + }); + const obj = parser.getObj(); + entries[i] = obj; + + if (obj instanceof _base_stream.BaseStream) { + continue; + } + + const num = nums[i], + entry = this.entries[num]; + + if (entry && entry.offset === tableOffset && entry.gen === i) { + this._cacheMap.set(num, obj); + } + } + + xrefEntry = entries[xrefEntry.gen]; + + if (xrefEntry === undefined) { + throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`); + } + + return xrefEntry; + } + + async fetchIfRefAsync(obj, suppressEncryption) { + if (obj instanceof _primitives.Ref) { + return this.fetchAsync(obj, suppressEncryption); + } + + return obj; + } + + async fetchAsync(ref, suppressEncryption) { + try { + return this.fetch(ref, suppressEncryption); + } catch (ex) { + if (!(ex instanceof _core_utils.MissingDataException)) { + throw ex; + } + + await this.pdfManager.requestRange(ex.begin, ex.end); + return this.fetchAsync(ref, suppressEncryption); + } + } + + getCatalogObj() { + return this.root; + } + +} + +exports.XRef = XRef; + +/***/ }), +/* 102 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.MessageHandler = void 0; + +var _util = __w_pdfjs_require__(2); + +const CallbackKind = { + UNKNOWN: 0, + DATA: 1, + ERROR: 2 +}; +const StreamKind = { + UNKNOWN: 0, + CANCEL: 1, + CANCEL_COMPLETE: 2, + CLOSE: 3, + ENQUEUE: 4, + ERROR: 5, + PULL: 6, + PULL_COMPLETE: 7, + START_COMPLETE: 8 +}; + +function wrapReason(reason) { + if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { + (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); + } + + switch (reason.name) { + case "AbortException": + return new _util.AbortException(reason.message); + + case "MissingPDFException": + return new _util.MissingPDFException(reason.message); + + case "PasswordException": + return new _util.PasswordException(reason.message, reason.code); + + case "UnexpectedResponseException": + return new _util.UnexpectedResponseException(reason.message, reason.status); + + case "UnknownErrorException": + return new _util.UnknownErrorException(reason.message, reason.details); + + default: + return new _util.UnknownErrorException(reason.message, reason.toString()); + } +} + +class MessageHandler { + constructor(sourceName, targetName, comObj) { + this.sourceName = sourceName; + this.targetName = targetName; + this.comObj = comObj; + this.callbackId = 1; + this.streamId = 1; + this.streamSinks = Object.create(null); + this.streamControllers = Object.create(null); + this.callbackCapabilities = Object.create(null); + this.actionHandler = Object.create(null); + + this._onComObjOnMessage = event => { + const data = event.data; + + if (data.targetName !== this.sourceName) { + return; + } + + if (data.stream) { + this._processStreamMessage(data); + + return; + } + + if (data.callback) { + const callbackId = data.callbackId; + const capability = this.callbackCapabilities[callbackId]; + + if (!capability) { + throw new Error(`Cannot resolve callback ${callbackId}`); + } + + delete this.callbackCapabilities[callbackId]; + + if (data.callback === CallbackKind.DATA) { + capability.resolve(data.data); + } else if (data.callback === CallbackKind.ERROR) { + capability.reject(wrapReason(data.reason)); + } else { + throw new Error("Unexpected callback case"); + } + + return; + } + + const action = this.actionHandler[data.action]; + + if (!action) { + throw new Error(`Unknown action from worker: ${data.action}`); + } + + if (data.callbackId) { + const cbSourceName = this.sourceName; + const cbTargetName = data.sourceName; + new Promise(function (resolve) { + resolve(action(data.data)); + }).then(function (result) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.DATA, + callbackId: data.callbackId, + data: result + }); + }, function (reason) { + comObj.postMessage({ + sourceName: cbSourceName, + targetName: cbTargetName, + callback: CallbackKind.ERROR, + callbackId: data.callbackId, + reason: wrapReason(reason) + }); + }); + return; + } + + if (data.streamId) { + this._createStreamSink(data); + + return; + } + + action(data.data); + }; + + comObj.addEventListener("message", this._onComObjOnMessage); + } + + on(actionName, handler) { + const ah = this.actionHandler; + + if (ah[actionName]) { + throw new Error(`There is already an actionName called "${actionName}"`); + } + + ah[actionName] = handler; + } + + send(actionName, data, transfers) { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + data + }, transfers); + } + + sendWithPromise(actionName, data, transfers) { + const callbackId = this.callbackId++; + const capability = (0, _util.createPromiseCapability)(); + this.callbackCapabilities[callbackId] = capability; + + try { + this.comObj.postMessage({ + sourceName: this.sourceName, + targetName: this.targetName, + action: actionName, + callbackId, + data + }, transfers); + } catch (ex) { + capability.reject(ex); + } + + return capability.promise; + } + + sendWithStream(actionName, data, queueingStrategy, transfers) { + const streamId = this.streamId++, + sourceName = this.sourceName, + targetName = this.targetName, + comObj = this.comObj; + return new ReadableStream({ + start: controller => { + const startCapability = (0, _util.createPromiseCapability)(); + this.streamControllers[streamId] = { + controller, + startCall: startCapability, + pullCall: null, + cancelCall: null, + isClosed: false + }; + comObj.postMessage({ + sourceName, + targetName, + action: actionName, + streamId, + data, + desiredSize: controller.desiredSize + }, transfers); + return startCapability.promise; + }, + pull: controller => { + const pullCapability = (0, _util.createPromiseCapability)(); + this.streamControllers[streamId].pullCall = pullCapability; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL, + streamId, + desiredSize: controller.desiredSize + }); + return pullCapability.promise; + }, + cancel: reason => { + (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); + const cancelCapability = (0, _util.createPromiseCapability)(); + this.streamControllers[streamId].cancelCall = cancelCapability; + this.streamControllers[streamId].isClosed = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL, + streamId, + reason: wrapReason(reason) + }); + return cancelCapability.promise; + } + }, queueingStrategy); + } + + _createStreamSink(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const self = this, + action = this.actionHandler[data.action]; + const streamSink = { + enqueue(chunk, size = 1, transfers) { + if (this.isCancelled) { + return; + } + + const lastDesiredSize = this.desiredSize; + this.desiredSize -= size; + + if (lastDesiredSize > 0 && this.desiredSize <= 0) { + this.sinkCapability = (0, _util.createPromiseCapability)(); + this.ready = this.sinkCapability.promise; + } + + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ENQUEUE, + streamId, + chunk + }, transfers); + }, + + close() { + if (this.isCancelled) { + return; + } + + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CLOSE, + streamId + }); + delete self.streamSinks[streamId]; + }, + + error(reason) { + (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); + + if (this.isCancelled) { + return; + } + + this.isCancelled = true; + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.ERROR, + streamId, + reason: wrapReason(reason) + }); + }, + + sinkCapability: (0, _util.createPromiseCapability)(), + onPull: null, + onCancel: null, + isCancelled: false, + desiredSize: data.desiredSize, + ready: null + }; + streamSink.sinkCapability.resolve(); + streamSink.ready = streamSink.sinkCapability.promise; + this.streamSinks[streamId] = streamSink; + new Promise(function (resolve) { + resolve(action(data.data, streamSink)); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.START_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + } + + _processStreamMessage(data) { + const streamId = data.streamId, + sourceName = this.sourceName, + targetName = data.sourceName, + comObj = this.comObj; + const streamController = this.streamControllers[streamId], + streamSink = this.streamSinks[streamId]; + + switch (data.stream) { + case StreamKind.START_COMPLETE: + if (data.success) { + streamController.startCall.resolve(); + } else { + streamController.startCall.reject(wrapReason(data.reason)); + } + + break; + + case StreamKind.PULL_COMPLETE: + if (data.success) { + streamController.pullCall.resolve(); + } else { + streamController.pullCall.reject(wrapReason(data.reason)); + } + + break; + + case StreamKind.PULL: + if (!streamSink) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + break; + } + + if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { + streamSink.sinkCapability.resolve(); + } + + streamSink.desiredSize = data.desiredSize; + new Promise(function (resolve) { + resolve(streamSink.onPull && streamSink.onPull()); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.PULL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + break; + + case StreamKind.ENQUEUE: + (0, _util.assert)(streamController, "enqueue should have stream controller"); + + if (streamController.isClosed) { + break; + } + + streamController.controller.enqueue(data.chunk); + break; + + case StreamKind.CLOSE: + (0, _util.assert)(streamController, "close should have stream controller"); + + if (streamController.isClosed) { + break; + } + + streamController.isClosed = true; + streamController.controller.close(); + + this._deleteStreamController(streamController, streamId); + + break; + + case StreamKind.ERROR: + (0, _util.assert)(streamController, "error should have stream controller"); + streamController.controller.error(wrapReason(data.reason)); + + this._deleteStreamController(streamController, streamId); + + break; + + case StreamKind.CANCEL_COMPLETE: + if (data.success) { + streamController.cancelCall.resolve(); + } else { + streamController.cancelCall.reject(wrapReason(data.reason)); + } + + this._deleteStreamController(streamController, streamId); + + break; + + case StreamKind.CANCEL: + if (!streamSink) { + break; + } + + new Promise(function (resolve) { + resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); + }).then(function () { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + success: true + }); + }, function (reason) { + comObj.postMessage({ + sourceName, + targetName, + stream: StreamKind.CANCEL_COMPLETE, + streamId, + reason: wrapReason(reason) + }); + }); + streamSink.sinkCapability.reject(wrapReason(data.reason)); + streamSink.isCancelled = true; + delete this.streamSinks[streamId]; + break; + + default: + throw new Error("Unexpected stream case"); + } + } + + async _deleteStreamController(streamController, streamId) { + await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); + delete this.streamControllers[streamId]; + } + + destroy() { + this.comObj.removeEventListener("message", this._onComObjOnMessage); + } + +} + +exports.MessageHandler = MessageHandler; + +/***/ }), +/* 103 */ +/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { + + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.PDFWorkerStream = void 0; + +var _util = __w_pdfjs_require__(2); + +class PDFWorkerStream { + constructor(msgHandler) { + this._msgHandler = msgHandler; + this._contentLength = null; + this._fullRequestReader = null; + this._rangeRequestReaders = []; + } + + getFullReader() { + (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once."); + this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); + return this._fullRequestReader; + } + + getRangeReader(begin, end) { + const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); + + this._rangeRequestReaders.push(reader); + + return reader; + } + + cancelAllRequests(reason) { + if (this._fullRequestReader) { + this._fullRequestReader.cancel(reason); + } + + for (const reader of this._rangeRequestReaders.slice(0)) { + reader.cancel(reason); + } + } + +} + +exports.PDFWorkerStream = PDFWorkerStream; + +class PDFWorkerStreamReader { + constructor(msgHandler) { + this._msgHandler = msgHandler; + this.onProgress = null; + this._contentLength = null; + this._isRangeSupported = false; + this._isStreamingSupported = false; + + const readableStream = this._msgHandler.sendWithStream("GetReader"); + + this._reader = readableStream.getReader(); + this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => { + this._isStreamingSupported = data.isStreamingSupported; + this._isRangeSupported = data.isRangeSupported; + this._contentLength = data.contentLength; + }); + } + + get headersReady() { + return this._headersReady; + } + + get contentLength() { + return this._contentLength; + } + + get isStreamingSupported() { + return this._isStreamingSupported; + } + + get isRangeSupported() { + return this._isRangeSupported; + } + + async read() { + const { + value, + done + } = await this._reader.read(); + + if (done) { + return { + value: undefined, + done: true + }; + } + + return { + value: value.buffer, + done: false + }; + } + + cancel(reason) { + this._reader.cancel(reason); + } + +} + +class PDFWorkerStreamRangeReader { + constructor(begin, end, msgHandler) { + this._msgHandler = msgHandler; + this.onProgress = null; + + const readableStream = this._msgHandler.sendWithStream("GetRangeReader", { + begin, + end + }); + + this._reader = readableStream.getReader(); + } + + get isStreamingSupported() { + return false; + } + + async read() { + const { + value, + done + } = await this._reader.read(); + + if (done) { + return { + value: undefined, + done: true + }; + } + + return { + value: value.buffer, + done: false + }; + } + + cancel(reason) { + this._reader.cancel(reason); + } + +} + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __w_pdfjs_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __w_pdfjs_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__w_pdfjs_require__.o(definition, key) && !__w_pdfjs_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __w_pdfjs_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. +(() => { +var exports = __webpack_exports__; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +Object.defineProperty(exports, "WorkerMessageHandler", ({ + enumerable: true, + get: function () { + return _worker.WorkerMessageHandler; + } +})); + +var _worker = __w_pdfjs_require__(1); + +const pdfjsVersion = '2.16.105'; +const pdfjsBuild = '172ccdbe5'; +})(); + +/******/ return __webpack_exports__; +/******/ })() +; +}); +//# sourceMappingURL=pdf.worker.js.map \ No newline at end of file diff --git a/frontend/public/pdf.worker.min.mjs b/frontend/public/pdf.worker.min.mjs new file mode 100644 index 0000000..de36edc --- /dev/null +++ b/frontend/public/pdf.worker.min.mjs @@ -0,0 +1,29 @@ +/** + * @licstart The following is the entire license notice for the + * JavaScript code in this page + * + * Copyright 2024 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @licend The above is the entire license notice for the + * JavaScript code in this page + */ +/** + * pdfjsVersion = 5.3.31 + * pdfjsBuild = 47ad820d9 + */ +const e=!("object"!=typeof process||process+""!="[object process]"||process.versions.nw||process.versions.electron&&process.type&&"browser"!==process.type),t=[.001,0,0,.001,0,0],a=1.35,r=.35,i=.25925925925925924,n=1,s=2,o=4,c=8,l=16,h=64,u=128,d=256,f="pdfjs_internal_editor_",g=3,p=9,m=13,b=15,y=101,w={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},S=0,x=4,k=1,C=2,v=3,F=1,O=2,T=3,M=4,D=5,R=6,N=7,E=8,L=9,j=10,_=11,U=12,X=13,q=14,H=15,W=16,z=17,$=20,G="Group",V="R",K=1,J=2,Y=4,Z=16,Q=32,ee=128,te=512,ae=1,re=2,ie=4096,ne=8192,se=32768,oe=65536,ce=131072,le=1048576,he=2097152,ue=8388608,de=16777216,fe=1,ge=2,pe=3,me=4,be=5,ye={E:"Mouse Enter",X:"Mouse Exit",D:"Mouse Down",U:"Mouse Up",Fo:"Focus",Bl:"Blur",PO:"PageOpen",PC:"PageClose",PV:"PageVisible",PI:"PageInvisible",K:"Keystroke",F:"Format",V:"Validate",C:"Calculate"},we={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},Se={O:"PageOpen",C:"PageClose"},xe=1,Ae=5,ke=1,Ce=2,ve=3,Fe=4,Ie=5,Oe=6,Te=7,Me=8,De=9,Be=10,Re=11,Ne=12,Ee=13,Pe=14,Le=15,je=16,_e=17,Ue=18,Xe=19,qe=20,He=21,We=22,ze=23,$e=24,Ge=25,Ve=26,Ke=27,Je=28,Ye=29,Ze=30,Qe=31,et=32,tt=33,at=34,rt=35,it=36,nt=37,st=38,ot=39,ct=40,lt=41,ht=42,ut=43,dt=44,ft=45,gt=46,pt=47,mt=48,bt=49,yt=50,wt=51,St=52,xt=53,At=54,kt=55,Ct=56,vt=57,Ft=58,It=59,Ot=60,Tt=61,Mt=62,Dt=63,Bt=64,Rt=65,Nt=66,Et=67,Pt=68,Lt=69,jt=70,_t=71,Ut=72,Xt=73,qt=74,Ht=75,Wt=76,zt=77,$t=80,Gt=81,Vt=83,Kt=84,Jt=85,Yt=86,Zt=87,Qt=88,ea=89,ta=90,aa=91,ra=92,ia=93,na=94,sa=0,oa=1,ca=2,la=3,ha=1,ua=2;let da=xe;function getVerbosityLevel(){return da}function info(e){da>=Ae&&console.log(`Info: ${e}`)}function warn(e){da>=xe&&console.log(`Warning: ${e}`)}function unreachable(e){throw new Error(e)}function assert(e,t){e||unreachable(t)}function createValidAbsoluteUrl(e,t=null,a=null){if(!e)return null;if(a&&"string"==typeof e){if(a.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\./g);t?.length>=2&&(e=`http://${e}`)}if(a.tryConvertEncoding)try{e=stringToUTF8String(e)}catch{}}const r=t?URL.parse(e,t):URL.parse(e);return function _isValidProtocol(e){switch(e?.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(r)?r:null}function shadow(e,t,a,r=!1){Object.defineProperty(e,t,{value:a,enumerable:!r,configurable:!0,writable:!1});return a}const fa=function BaseExceptionClosure(){function BaseException(e,t){this.message=e;this.name=t}BaseException.prototype=new Error;BaseException.constructor=BaseException;return BaseException}();class PasswordException extends fa{constructor(e,t){super(e,"PasswordException");this.code=t}}class UnknownErrorException extends fa{constructor(e,t){super(e,"UnknownErrorException");this.details=t}}class InvalidPDFException extends fa{constructor(e){super(e,"InvalidPDFException")}}class ResponseException extends fa{constructor(e,t,a){super(e,"ResponseException");this.status=t;this.missing=a}}class FormatError extends fa{constructor(e){super(e,"FormatError")}}class AbortException extends fa{constructor(e){super(e,"AbortException")}}function bytesToString(e){"object"==typeof e&&void 0!==e?.length||unreachable("Invalid argument for bytesToString");const t=e.length,a=8192;if(t>24&255,e>>16&255,e>>8&255,255&e)}function objectSize(e){return Object.keys(e).length}class FeatureTest{static get isLittleEndian(){return shadow(this,"isLittleEndian",function isLittleEndian(){const e=new Uint8Array(4);e[0]=1;return 1===new Uint32Array(e.buffer,0,1)[0]}())}static get isEvalSupported(){return shadow(this,"isEvalSupported",function isEvalSupported(){try{new Function("");return!0}catch{return!1}}())}static get isOffscreenCanvasSupported(){return shadow(this,"isOffscreenCanvasSupported","undefined"!=typeof OffscreenCanvas)}static get isImageDecoderSupported(){return shadow(this,"isImageDecoderSupported","undefined"!=typeof ImageDecoder)}static get platform(){const{platform:e,userAgent:t}=navigator;return shadow(this,"platform",{isAndroid:t.includes("Android"),isLinux:e.includes("Linux"),isMac:e.includes("Mac"),isWindows:e.includes("Win"),isFirefox:t.includes("Firefox")})}static get isCSSRoundSupported(){return shadow(this,"isCSSRoundSupported",globalThis.CSS?.supports?.("width: round(1.5px, 1px)"))}}const ga=Array.from(Array(256).keys(),(e=>e.toString(16).padStart(2,"0")));class Util{static makeHexColor(e,t,a){return`#${ga[e]}${ga[t]}${ga[a]}`}static scaleMinMax(e,t){let a;if(e[0]){if(e[0]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[0];t[2]*=e[0];if(e[3]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[3];t[3]*=e[3]}else{a=t[0];t[0]=t[1];t[1]=a;a=t[2];t[2]=t[3];t[3]=a;if(e[1]<0){a=t[1];t[1]=t[3];t[3]=a}t[1]*=e[1];t[3]*=e[1];if(e[2]<0){a=t[0];t[0]=t[2];t[2]=a}t[0]*=e[2];t[2]*=e[2]}t[0]+=e[4];t[1]+=e[5];t[2]+=e[4];t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t,a=0){const r=e[a],i=e[a+1];e[a]=r*t[0]+i*t[2]+t[4];e[a+1]=r*t[1]+i*t[3]+t[5]}static applyTransformToBezier(e,t,a=0){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5];for(let t=0;t<6;t+=2){const l=e[a+t],h=e[a+t+1];e[a+t]=l*r+h*n+o;e[a+t+1]=l*i+h*s+c}}static applyInverseTransform(e,t){const a=e[0],r=e[1],i=t[0]*t[3]-t[1]*t[2];e[0]=(a*t[3]-r*t[2]+t[2]*t[5]-t[4]*t[3])/i;e[1]=(-a*t[1]+r*t[0]+t[4]*t[1]-t[5]*t[0])/i}static axialAlignedBoundingBox(e,t,a){const r=t[0],i=t[1],n=t[2],s=t[3],o=t[4],c=t[5],l=e[0],h=e[1],u=e[2],d=e[3];let f=r*l+o,g=f,p=r*u+o,m=p,b=s*h+c,y=b,w=s*d+c,S=w;if(0!==i||0!==n){const e=i*l,t=i*u,a=n*h,r=n*d;f+=a;m+=a;p+=r;g+=r;b+=e;S+=e;w+=t;y+=t}a[0]=Math.min(a[0],f,p,g,m);a[1]=Math.min(a[1],b,w,y,S);a[2]=Math.max(a[2],f,p,g,m);a[3]=Math.max(a[3],b,w,y,S)}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e,t){const a=e[0],r=e[1],i=e[2],n=e[3],s=a**2+r**2,o=a*i+r*n,c=i**2+n**2,l=(s+c)/2,h=Math.sqrt(l**2-(s*c-o**2));t[0]=Math.sqrt(l+h||1);t[1]=Math.sqrt(l-h||1)}static normalizeRect(e){const t=e.slice(0);if(e[0]>e[2]){t[0]=e[2];t[2]=e[0]}if(e[1]>e[3]){t[1]=e[3];t[3]=e[1]}return t}static intersect(e,t){const a=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),r=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(a>r)return null;const i=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return i>n?null:[a,i,r,n]}static pointBoundingBox(e,t,a){a[0]=Math.min(a[0],e);a[1]=Math.min(a[1],t);a[2]=Math.max(a[2],e);a[3]=Math.max(a[3],t)}static rectBoundingBox(e,t,a,r,i){i[0]=Math.min(i[0],e,a);i[1]=Math.min(i[1],t,r);i[2]=Math.max(i[2],e,a);i[3]=Math.max(i[3],t,r)}static#e(e,t,a,r,i,n,s,o,c,l){if(c<=0||c>=1)return;const h=1-c,u=c*c,d=u*c,f=h*(h*(h*e+3*c*t)+3*u*a)+d*r,g=h*(h*(h*i+3*c*n)+3*u*s)+d*o;l[0]=Math.min(l[0],f);l[1]=Math.min(l[1],g);l[2]=Math.max(l[2],f);l[3]=Math.max(l[3],g)}static#t(e,t,a,r,i,n,s,o,c,l,h,u){if(Math.abs(c)<1e-12){Math.abs(l)>=1e-12&&this.#e(e,t,a,r,i,n,s,o,-h/l,u);return}const d=l**2-4*h*c;if(d<0)return;const f=Math.sqrt(d),g=2*c;this.#e(e,t,a,r,i,n,s,o,(-l+f)/g,u);this.#e(e,t,a,r,i,n,s,o,(-l-f)/g,u)}static bezierBoundingBox(e,t,a,r,i,n,s,o,c){c[0]=Math.min(c[0],e,s);c[1]=Math.min(c[1],t,o);c[2]=Math.max(c[2],e,s);c[3]=Math.max(c[3],t,o);this.#t(e,a,i,s,t,r,n,o,3*(3*(a-i)-e+s),6*(e-2*a+i),3*(a-e),c);this.#t(e,a,i,s,t,r,n,o,3*(3*(r-n)-t+o),6*(t-2*r+n),3*(r-t),c)}}const pa=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function stringToPDFString(e,t=!1){if(e[0]>="ï"){let a;if("þ"===e[0]&&"ÿ"===e[1]){a="utf-16be";e.length%2==1&&(e=e.slice(0,-1))}else if("ÿ"===e[0]&&"þ"===e[1]){a="utf-16le";e.length%2==1&&(e=e.slice(0,-1))}else"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(a="utf-8");if(a)try{const r=new TextDecoder(a,{fatal:!0}),i=stringToBytes(e),n=r.decode(i);return t||!n.includes("")?n:n.replaceAll(/\x1b[^\x1b]*(?:\x1b|$)/g,"")}catch(e){warn(`stringToPDFString: "${e}".`)}}const a=[];for(let r=0,i=e.length;rga[e])).join("")}"function"!=typeof Promise.try&&(Promise.try=function(e,...t){return new Promise((a=>{a(e(...t))}))});"function"!=typeof Math.sumPrecise&&(Math.sumPrecise=function(e){return e.reduce(((e,t)=>e+t),0)});const ya=Symbol("CIRCULAR_REF"),wa=Symbol("EOF");let Sa=Object.create(null),xa=Object.create(null),Aa=Object.create(null);class Name{constructor(e){this.name=e}static get(e){return xa[e]||=new Name(e)}}class Cmd{constructor(e){this.cmd=e}static get(e){return Sa[e]||=new Cmd(e)}}const ka=function nonSerializableClosure(){return ka};class Dict{constructor(e=null){this._map=new Map;this.xref=e;this.objId=null;this.suppressEncryption=!1;this.__nonSerializable__=ka}assignXref(e){this.xref=e}get size(){return this._map.size}get(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetch(r,this.suppressEncryption):r}async getAsync(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}return r instanceof Ref&&this.xref?this.xref.fetchAsync(r,this.suppressEncryption):r}getArray(e,t,a){let r=this._map.get(e);if(void 0===r&&void 0!==t){r=this._map.get(t);void 0===r&&void 0!==a&&(r=this._map.get(a))}r instanceof Ref&&this.xref&&(r=this.xref.fetch(r,this.suppressEncryption));if(Array.isArray(r)){r=r.slice();for(let e=0,t=r.length;e{unreachable("Should not call `set` on the empty dictionary.")};return shadow(this,"empty",e)}static merge({xref:e,dictArray:t,mergeSubDicts:a=!1}){const r=new Dict(e),i=new Map;for(const e of t)if(e instanceof Dict)for(const[t,r]of e._map){let e=i.get(t);if(void 0===e){e=[];i.set(t,e)}else if(!(a&&r instanceof Dict))continue;e.push(r)}for(const[t,a]of i){if(1===a.length||!(a[0]instanceof Dict)){r._map.set(t,a[0]);continue}const i=new Dict(e);for(const e of a)for(const[t,a]of e._map)i._map.has(t)||i._map.set(t,a);i.size>0&&r._map.set(t,i)}i.clear();return r.size>0?r:Dict.empty}clone(){const e=new Dict(this.xref);for(const t of this.getKeys())e.set(t,this.getRaw(t));return e}delete(e){delete this._map[e]}}class Ref{constructor(e,t){this.num=e;this.gen=t}toString(){return 0===this.gen?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(e){const t=Aa[e];if(t)return t;const a=/^(\d+)R(\d*)$/.exec(e);return a&&"0"!==a[1]?Aa[e]=new Ref(parseInt(a[1]),a[2]?parseInt(a[2]):0):null}static get(e,t){const a=0===t?`${e}R`:`${e}R${t}`;return Aa[a]||=new Ref(e,t)}}class RefSet{constructor(e=null){this._set=new Set(e?._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}}class RefSetCache{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toString())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*values(){yield*this._map.values()}*items(){for(const[e,t]of this._map)yield[Ref.fromString(e),t]}}function isName(e,t){return e instanceof Name&&(void 0===t||e.name===t)}function isCmd(e,t){return e instanceof Cmd&&(void 0===t||e.cmd===t)}function isDict(e,t){return e instanceof Dict&&(void 0===t||isName(e.get("Type"),t))}function isRefsEqual(e,t){return e.num===t.num&&e.gen===t.gen}class BaseStream{get length(){unreachable("Abstract getter `length` accessed")}get isEmpty(){unreachable("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return shadow(this,"isDataLoaded",!0)}getByte(){unreachable("Abstract method `getByte` called")}getBytes(e){unreachable("Abstract method `getBytes` called")}async getImageData(e,t){return this.getBytes(e,t)}async asyncGetBytes(){unreachable("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get isAsyncDecoder(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}async getTransferableImage(){return null}peekByte(){const e=this.getByte();-1!==e&&this.pos--;return e}peekBytes(e){const t=this.getBytes(e);this.pos-=t.length;return t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){unreachable("Abstract method `getByteRange` called")}getString(e){return bytesToString(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){unreachable("Abstract method `reset` called")}moveStart(){unreachable("Abstract method `moveStart` called")}makeSubStream(e,t,a=null){unreachable("Abstract method `makeSubStream` called")}getBaseStreams(){return null}}const Ca=/^[1-9]\.\d$/,va=2**31-1,Fa=[1,0,0,1,0,0],Ia=["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"],Oa=["ExtGState","Font","Properties","XObject"];function getLookupTableFactory(e){let t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}class MissingDataException extends fa{constructor(e,t){super(`Missing data [${e}, ${t})`,"MissingDataException");this.begin=e;this.end=t}}class ParserEOFException extends fa{constructor(e){super(e,"ParserEOFException")}}class XRefEntryException extends fa{constructor(e){super(e,"XRefEntryException")}}class XRefParseException extends fa{constructor(e){super(e,"XRefParseException")}}function arrayBuffersToBytes(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let a=0;for(let r=0;r0,"The number should be a positive integer.");const a="M".repeat(e/1e3|0)+Ta[e%1e3/100|0]+Ta[10+(e%100/10|0)]+Ta[20+e%10];return t?a.toLowerCase():a}function log2(e){return e>0?Math.ceil(Math.log2(e)):0}function readInt8(e,t){return e[t]<<24>>24}function readInt16(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function readUint16(e,t){return e[t]<<8|e[t+1]}function readUint32(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function isWhiteSpace(e){return 32===e||9===e||13===e||10===e}function isNumberArray(e,t){return Array.isArray(e)?(null===t||e.length===t)&&e.every((e=>"number"==typeof e)):ArrayBuffer.isView(e)&&!(e instanceof BigInt64Array||e instanceof BigUint64Array)&&(null===t||e.length===t)}function lookupMatrix(e,t){return isNumberArray(e,6)?e:t}function lookupRect(e,t){return isNumberArray(e,4)?e:t}function lookupNormalRect(e,t){return isNumberArray(e,4)?Util.normalizeRect(e):t}function parseXFAPath(e){const t=/(.+)\[(\d+)\]$/;return e.split(".").map((e=>{const a=e.match(t);return a?{name:a[1],pos:parseInt(a[2],10)}:{name:e,pos:0}}))}function escapePDFName(e){const t=[];let a=0;for(let r=0,i=e.length;r126||35===i||40===i||41===i||60===i||62===i||91===i||93===i||123===i||125===i||47===i||37===i){a"\n"===e?"\\n":"\r"===e?"\\r":`\\${e}`))}function _collectJS(e,t,a,r){if(!e)return;let i=null;if(e instanceof Ref){if(r.has(e))return;i=e;r.put(i);e=t.fetch(e)}if(Array.isArray(e))for(const i of e)_collectJS(i,t,a,r);else if(e instanceof Dict){if(isName(e.get("S"),"JavaScript")){const t=e.get("JS");let r;t instanceof BaseStream?r=t.getString():"string"==typeof t&&(r=t);r&&=stringToPDFString(r,!0).replaceAll("\0","");r&&a.push(r)}_collectJS(e.getRaw("Next"),t,a,r)}i&&r.remove(i)}function collectActions(e,t,a){const r=Object.create(null),i=getInheritableProperty({dict:t,key:"AA",stopWhenFound:!1});if(i)for(let t=i.length-1;t>=0;t--){const n=i[t];if(n instanceof Dict)for(const t of n.getKeys()){const i=a[t];if(!i)continue;const s=[];_collectJS(n.getRaw(t),e,s,new RefSet);s.length>0&&(r[i]=s)}}if(t.has("A")){const a=[];_collectJS(t.get("A"),e,a,new RefSet);a.length>0&&(r.Action=a)}return objectSize(r)>0?r:null}const Ma={60:"<",62:">",38:"&",34:""",39:"'"};function*codePointIter(e){for(let t=0,a=e.length;t55295&&(a<57344||a>65533)&&t++;yield a}}function encodeToXmlString(e){const t=[];let a=0;for(let r=0,i=e.length;r55295&&(i<57344||i>65533)&&r++;a=r+1}}if(0===t.length)return e;a: ${e}.`);return!1}return!0}function validateCSSFont(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:a,fontWeight:r,italicAngle:i}=e;if(!validateFontName(a,!0))return!1;const n=r?r.toString():"";e.fontWeight=t.has(n)?n:"400";const s=parseFloat(i);e.italicAngle=isNaN(s)||s<-90||s>90?"14":i.toString();return!0}function recoverJsURL(e){const t=new RegExp("^\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\.")+")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))","i").exec(e);return t?.[2]?{url:t[2],newWindow:"app.launchURL"===t[1]&&"true"===t[3]}:null}function numberToString(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)}function getNewAnnotationsMap(e){if(!e)return null;const t=new Map;for(const[a,r]of e){if(!a.startsWith(f))continue;let e=t.get(r.pageIndex);if(!e){e=[];t.set(r.pageIndex,e)}e.push(r)}return t.size>0?t:null}function stringToAsciiOrUTF16BE(e){return function isAscii(e){return/^[\x00-\x7F]*$/.test(e)}(e)?e:stringToUTF16String(e,!0)}function stringToUTF16HexString(e){const t=[];for(let a=0,r=e.length;a>8&255],ga[255&r])}return t.join("")}function stringToUTF16String(e,t=!1){const a=[];t&&a.push("þÿ");for(let t=0,r=e.length;t>8&255),String.fromCharCode(255&r))}return a.join("")}function getRotationMatrix(e,t,a){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,a];case 270:return[0,-1,1,0,0,a];default:throw new Error("Invalid rotation")}}function getSizeInBytes(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}class QCMS{static#a=null;static _memory=null;static _mustAddAlpha=!1;static _destBuffer=null;static _destOffset=0;static _destLength=0;static _cssColor="";static _makeHexColor=null;static get _memoryArray(){const e=this.#a;return e?.byteLength?e:this.#a=new Uint8Array(this._memory.buffer)}}let Da;const Ba="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&Ba.decode();let Ra=null;function getUint8ArrayMemory0(){null!==Ra&&0!==Ra.byteLength||(Ra=new Uint8Array(Da.memory.buffer));return Ra}let Na=0;function passArray8ToWasm0(e,t){const a=t(1*e.length,1)>>>0;getUint8ArrayMemory0().set(e,a/1);Na=e.length;return a}const Ea=Object.freeze({RGB8:0,0:"RGB8",RGBA8:1,1:"RGBA8",BGRA8:2,2:"BGRA8",Gray8:3,3:"Gray8",GrayA8:4,4:"GrayA8",CMYK:5,5:"CMYK"}),Pa=Object.freeze({Perceptual:0,0:"Perceptual",RelativeColorimetric:1,1:"RelativeColorimetric",Saturation:2,2:"Saturation",AbsoluteColorimetric:3,3:"AbsoluteColorimetric"});function __wbg_get_imports(){const e={wbg:{}};e.wbg.__wbg_copyresult_b08ee7d273f295dd=function(e,t){!function copy_result(e,t){const{_mustAddAlpha:a,_destBuffer:r,_destOffset:i,_destLength:n,_memoryArray:s}=QCMS;if(t!==n)if(a)for(let a=e,n=e+t,o=i;a>>0,t>>>0)};e.wbg.__wbg_copyrgb_d60ce17bb05d9b67=function(e){!function copy_rgb(e){const{_destBuffer:t,_destOffset:a,_memoryArray:r}=QCMS;t[a]=r[e];t[a+1]=r[e+1];t[a+2]=r[e+2]}(e>>>0)};e.wbg.__wbg_makecssRGB_893bf0cd9fdb302d=function(e){!function make_cssRGB(e){const{_memoryArray:t}=QCMS;QCMS._cssColor=QCMS._makeHexColor(t[e],t[e+1],t[e+2])}(e>>>0)};e.wbg.__wbindgen_init_externref_table=function(){const e=Da.__wbindgen_export_0,t=e.grow(4);e.set(0,void 0);e.set(t+0,void 0);e.set(t+1,null);e.set(t+2,!0);e.set(t+3,!1)};e.wbg.__wbindgen_throw=function(e,t){throw new Error(function getStringFromWasm0(e,t){e>>>=0;return Ba.decode(getUint8ArrayMemory0().subarray(e,e+t))}(e,t))};return e}function __wbg_finalize_init(e,t){Da=e.exports;__wbg_init.__wbindgen_wasm_module=t;Ra=null;Da.__wbindgen_start();return Da}async function __wbg_init(e){if(void 0!==Da)return Da;void 0!==e&&(Object.getPrototypeOf(e)===Object.prototype?({module_or_path:e}=e):console.warn("using deprecated parameters for the initialization function; pass a single object instead"));const t=__wbg_get_imports();("string"==typeof e||"function"==typeof Request&&e instanceof Request||"function"==typeof URL&&e instanceof URL)&&(e=fetch(e));const{instance:a,module:r}=await async function __wbg_load(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(t){if("application/wasm"==e.headers.get("Content-Type"))throw t;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",t)}const a=await e.arrayBuffer();return await WebAssembly.instantiate(a,t)}{const a=await WebAssembly.instantiate(e,t);return a instanceof WebAssembly.Instance?{instance:a,module:e}:a}}(await e,t);return __wbg_finalize_init(a,r)}class ColorSpace{static#r=new Uint8ClampedArray(3);constructor(e,t){this.name=e;this.numComps=t}getRgb(e,t,a=new Uint8ClampedArray(3)){this.getRgbItem(e,t,a,0);return a}getRgbHex(e,t){const a=this.getRgb(e,t,ColorSpace.#r);return Util.makeHexColor(a[0],a[1],a[2])}getRgbItem(e,t,a,r){unreachable("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,a,r,i,n,s){unreachable("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){unreachable("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return ColorSpace.isDefaultDecode(e,this.numComps)}fillRgb(e,t,a,r,i,n,s,o,c){const l=t*a;let h=null;const u=1<u&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=s<=8?new Uint8Array(u):new Uint16Array(u);for(let e=0;e=.99554525?1:MathClamp(1.055*e**(1/2.4)-.055,0,1)}#b(e){return e<0?-this.#b(-e):e>8?((e+16)/116)**3:e*CalRGBCS.#d}#y(e,t,a){if(0===e[0]&&0===e[1]&&0===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=this.#b(0),i=(1-r)/(1-this.#b(e[0])),n=1-i,s=(1-r)/(1-this.#b(e[1])),o=1-s,c=(1-r)/(1-this.#b(e[2])),l=1-c;a[0]=t[0]*i+n;a[1]=t[1]*s+o;a[2]=t[2]*c+l}#w(e,t,a){if(1===e[0]&&1===e[2]){a[0]=t[0];a[1]=t[1];a[2]=t[2];return}const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#g(e,r,i);this.#f(CalRGBCS.#s,i,a)}#S(e,t,a){const r=a;this.#f(CalRGBCS.#n,t,r);const i=CalRGBCS.#l;this.#p(e,r,i);this.#f(CalRGBCS.#s,i,a)}#i(e,t,a,r,i){const n=MathClamp(e[t]*i,0,1),s=MathClamp(e[t+1]*i,0,1),o=MathClamp(e[t+2]*i,0,1),c=1===n?1:n**this.GR,l=1===s?1:s**this.GG,h=1===o?1:o**this.GB,u=this.MXA*c+this.MXB*l+this.MXC*h,d=this.MYA*c+this.MYB*l+this.MYC*h,f=this.MZA*c+this.MZB*l+this.MZC*h,g=CalRGBCS.#h;g[0]=u;g[1]=d;g[2]=f;const p=CalRGBCS.#u;this.#w(this.whitePoint,g,p);const m=CalRGBCS.#h;this.#y(this.blackPoint,p,m);const b=CalRGBCS.#u;this.#S(CalRGBCS.#c,m,b);const y=CalRGBCS.#h;this.#f(CalRGBCS.#o,b,y);a[r]=255*this.#m(y[0]);a[r+1]=255*this.#m(y[1]);a[r+2]=255*this.#m(y[2])}getRgbItem(e,t,a,r){this.#i(e,t,a,r,1)}getRgbBuffer(e,t,a,r,i,n,s){const o=1/((1<this.amax||this.bmin>this.bmax){info("Invalid Range, falling back to defaults");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}#x(e){return e>=6/29?e**3:108/841*(e-4/29)}#A(e,t,a,r){return a+e*(r-a)/t}#i(e,t,a,r,i){let n=e[t],s=e[t+1],o=e[t+2];if(!1!==a){n=this.#A(n,a,0,100);s=this.#A(s,a,this.amin,this.amax);o=this.#A(o,a,this.bmin,this.bmax)}s>this.amax?s=this.amax:sthis.bmax?o=this.bmax:o{!function qcms_drop_transformer(e){Da.qcms_drop_transformer(e)}(e)}));constructor(e,t,a){if(!IccColorSpace.isUsable)throw new Error("No ICC color space support");super(t,a);let r;switch(a){case 1:r=Ea.Gray8;this.#C=(e,t,a)=>function qcms_convert_one(e,t,a){Da.qcms_convert_one(e,t,a)}(this.#k,255*e[t],a);break;case 3:r=Ea.RGB8;this.#C=(e,t,a)=>function qcms_convert_three(e,t,a,r,i){Da.qcms_convert_three(e,t,a,r,i)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],a);break;case 4:r=Ea.CMYK;this.#C=(e,t,a)=>function qcms_convert_four(e,t,a,r,i,n){Da.qcms_convert_four(e,t,a,r,i,n)}(this.#k,255*e[t],255*e[t+1],255*e[t+2],255*e[t+3],a);break;default:throw new Error(`Unsupported number of components: ${a}`)}this.#k=function qcms_transformer_from_memory(e,t,a){const r=passArray8ToWasm0(e,Da.__wbindgen_malloc),i=Na;return Da.qcms_transformer_from_memory(r,i,t,a)>>>0}(e,r,Pa.Perceptual);if(!this.#k)throw new Error("Failed to create ICC color space");IccColorSpace.#I.register(this,this.#k)}getRgbHex(e,t){this.#C(e,t,!0);return QCMS._cssColor}getRgbItem(e,t,a,r){QCMS._destBuffer=a;QCMS._destOffset=r;QCMS._destLength=3;this.#C(e,t,!1);QCMS._destBuffer=null}getRgbBuffer(e,t,a,r,i,n,s){e=e.subarray(t,t+a*this.numComps);if(8!==n){const t=255/((1<=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e)return t.subarray(a,r);let i=a+e;i>r&&(i=r);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);return this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t,a=null){return new Stream(this.bytes.buffer,e,t,a)}}class StringStream extends Stream{constructor(e){super(stringToBytes(e))}}class NullStream extends Stream{constructor(){super(new Uint8Array(0))}}class ChunkedStream extends Stream{constructor(e,t,a){super(new Uint8Array(e),0,e,null);this.chunkSize=t;this._loadedChunks=new Set;this.numChunks=Math.ceil(e/t);this.manager=a;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,a=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=a;ethis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const a=Math.floor(e/this.chunkSize);if(a>this.numChunks)return;const r=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let i=a;i=this.end)return-1;e>=this.progressiveDataLength&&this.ensureByte(e);return this.bytes[this.pos++]}getBytes(e){const t=this.bytes,a=this.pos,r=this.end;if(!e){r>this.progressiveDataLength&&this.ensureRange(a,r);return t.subarray(a,r)}let i=a+e;i>r&&(i=r);i>this.progressiveDataLength&&this.ensureRange(a,i);this.pos=i;return t.subarray(a,i)}getByteRange(e,t){e<0&&(e=0);t>this.end&&(t=this.end);t>this.progressiveDataLength&&this.ensureRange(e,t);return this.bytes.subarray(e,t)}makeSubStream(e,t,a=null){t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e);function ChunkedStreamSubstream(){}ChunkedStreamSubstream.prototype=Object.create(this);ChunkedStreamSubstream.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),a=Math.floor((this.end-1)/e)+1,r=[];for(let e=t;e{const readChunk=({value:n,done:s})=>{try{if(s){const t=arrayBuffersToBytes(r);r=null;e(t);return}i+=n.byteLength;a.isStreamingSupported&&this.onProgress({loaded:i});r.push(n);a.read().then(readChunk,t)}catch(e){t(e)}};a.read().then(readChunk,t)})).then((t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})}))}requestAllChunks(e=!1){if(!e){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,a=new Set;this._chunksNeededByRequest.set(t,a);for(const t of e)this.stream.hasChunk(t)||a.add(t);if(0===a.size)return Promise.resolve();const r=Promise.withResolvers();this._promisesByRequest.set(t,r);const i=[];for(const e of a){let a=this._requestsByChunk.get(e);if(!a){a=[];this._requestsByChunk.set(e,a);i.push(e)}a.push(t)}if(i.length>0){const e=this.groupChunks(i);for(const t of e){const e=t.beginChunk*this.chunkSize,a=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,a).catch(r.reject)}}return r.promise.catch((e=>{if(!this.aborted)throw e}))}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const a=this.getBeginChunk(e),r=this.getEndChunk(t),i=[];for(let e=a;ee-t));return this._requestChunks(t)}groupChunks(e){const t=[];let a=-1,r=-1;for(let i=0,n=e.length;i=0&&r+1!==n){t.push({beginChunk:a,endChunk:r+1});a=n}i+1===e.length&&t.push({beginChunk:a,endChunk:n+1});r=n}return t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveData(e){const t=e.chunk,a=void 0===e.begin,r=a?this.progressiveDataLength:e.begin,i=r+t.byteLength,n=Math.floor(r/this.chunkSize),s=i0||o.push(a)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(s);Number.isInteger(e)&&this._requestChunks([e])}for(const e of o){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e);t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0;this.pdfNetworkStream?.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}function convertToRGBA(e){switch(e.kind){case k:return convertBlackAndWhiteToRGBA(e);case C:return function convertRGBToRGBA({src:e,srcPos:t=0,dest:a,destPos:r=0,width:i,height:n}){let s=0;const o=i*n*3,c=o>>2,l=new Uint32Array(e.buffer,t,c);if(FeatureTest.isLittleEndian){for(;s>>24|t<<8|4278190080;a[r+2]=t>>>16|i<<16|4278190080;a[r+3]=i>>>8|4278190080}for(let i=4*s,n=t+o;i>>8|255;a[r+2]=t<<16|i>>>16|255;a[r+3]=i<<8|255}for(let i=4*s,n=t+o;i>3,u=7&r,d=e.length;a=new Uint32Array(a.buffer);let f=0;for(let r=0;ra||t>a)return!0;const r=e*t;if(this._hasMaxArea)return r>this.MAX_AREA;if(r(this.MAX_AREA=this.#T**2)}static getReducePowerForJPX(e,t,a){const r=e*t,i=2**30/(4*a);if(!this.needsToBeResized(e,t))return r>i?Math.ceil(Math.log2(r/i)):0;const{MAX_DIM:n,MAX_AREA:s}=this,o=Math.max(e/n,t/n,Math.sqrt(r/Math.min(i,s)));return Math.ceil(Math.log2(o))}static get MAX_DIM(){return shadow(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){this._hasMaxArea=!0;return shadow(this,"MAX_AREA",this._guessMax(this.#T,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){if(e>=0){this._hasMaxArea=!0;shadow(this,"MAX_AREA",e)}}static setOptions({canvasMaxAreaInBytes:e=-1,isImageDecoderSupported:t=!1}){this._hasMaxArea||(this.MAX_AREA=e>>2);this.#M=t}static _areGoodDims(e,t){try{const a=new OffscreenCanvas(e,t),r=a.getContext("2d");r.fillRect(0,0,1,1);const i=r.getImageData(0,0,1,1).data[3];a.width=a.height=1;return 0!==i}catch{return!1}}static _guessMax(e,t,a,r){for(;e+a+1va){const e=this.#D();if(e)return e}const r=this._encodeBMP();let i,n;if(await ImageResizer.canUseImageDecoder){i=new ImageDecoder({data:r,type:"image/bmp",preferAnimation:!1,transfer:[r.buffer]});n=i.decode().catch((e=>{warn(`BMP image decoding failed: ${e}`);return createImageBitmap(new Blob([this._encodeBMP().buffer],{type:"image/bmp"}))})).finally((()=>{i.close()}))}else n=createImageBitmap(new Blob([r.buffer],{type:"image/bmp"}));const{MAX_AREA:s,MAX_DIM:o}=ImageResizer,c=Math.max(t/o,a/o,Math.sqrt(t*a/s)),l=Math.max(c,2),h=Math.round(10*(c+1.25))/10/l,u=Math.floor(Math.log2(h)),d=new Array(u+2).fill(2);d[0]=l;d.splice(-1,1,h/(1<>s,c=r>>s;let l,h=r;try{l=new Uint8Array(n)}catch{let e=Math.floor(Math.log2(n+1));for(;;)try{l=new Uint8Array(2**e-1);break}catch{e-=1}h=Math.floor((2**e-1)/(4*a));const t=a*h*4;t>s;e>3,s=a+3&-4;if(a!==s){const e=new Uint8Array(s*t);let r=0;for(let n=0,o=t*a;ni&&(r=i)}else{for(;!this.eof;)this.readBlock(t);r=this.bufferLength}this.pos=r;return this.buffer.subarray(a,r)}async getImageData(e,t){if(!this.canAsyncDecodeImageFromBuffer)return this.isAsyncDecoder?this.decodeImage(null,t):this.getBytes(e,t);const a=await this.stream.asyncGetBytes();return this.decodeImage(a,t)}reset(){this.pos=0}makeSubStream(e,t,a=null){if(void 0===t)for(;!this.eof;)this.readBlock();else{const a=e+t;for(;this.bufferLength<=a&&!this.eof;)this.readBlock()}return new Stream(this.buffer,e,t,a)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}}class StreamsSequenceStream extends DecodeStream{constructor(e,t=null){e=e.filter((e=>e instanceof BaseStream));let a=0;for(const t of e)a+=t instanceof DecodeStream?t._rawMinBufferLength:t.length;super(a);this.streams=e;this._onError=t}readBlock(){const e=this.streams;if(0===e.length){this.eof=!0;return}const t=e.shift();let a;try{a=t.getBytes()}catch(e){if(this._onError){this._onError(e,t.dict?.objId);return}throw e}const r=this.bufferLength,i=r+a.length;this.ensureBuffer(i).set(a,r);this.bufferLength=i}getBaseStreams(){const e=[];for(const t of this.streams){const a=t.getBaseStreams();a&&e.push(...a)}return e.length>0?e:null}}class ColorSpaceUtils{static parse({cs:e,xref:t,resources:a=null,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n,asyncIfNotCached:s=!1}){const o={xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n};let c,l,h;if(e instanceof Ref){l=e;const a=i.getByRef(l)||n.getByRef(l);if(a)return a;e=t.fetch(e)}if(e instanceof Name){c=e.name;const t=n.getByName(c);if(t)return t}try{h=this.#B(e,o)}catch(e){if(s&&!(e instanceof MissingDataException))return Promise.reject(e);throw e}if(c||l){n.set(c,l,h);l&&i.set(null,l,h)}return s?Promise.resolve(h):h}static#R(e,t){const{globalColorSpaceCache:a}=t;let r;if(e instanceof Ref){r=e;const t=a.getByRef(r);if(t)return t}const i=this.#B(e,t);r&&a.set(null,r,i);return i}static#B(e,t){const{xref:a,resources:r,pdfFunctionFactory:i,globalColorSpaceCache:n}=t;if((e=a.fetchIfRef(e))instanceof Name)switch(e.name){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"DeviceRGBA":return this.rgba;case"CMYK":case"DeviceCMYK":return this.cmyk;case"Pattern":return new PatternCS(null);default:if(r instanceof Dict){const a=r.get("ColorSpace");if(a instanceof Dict){const r=a.get(e.name);if(r){if(r instanceof Name)return this.#B(r,t);e=r;break}}}warn(`Unrecognized ColorSpace: ${e.name}`);return this.gray}if(Array.isArray(e)){const r=a.fetchIfRef(e[0]).name;let s,o,c,l,h,u;switch(r){case"G":case"DeviceGray":return this.gray;case"RGB":case"DeviceRGB":return this.rgb;case"CMYK":case"DeviceCMYK":return this.cmyk;case"CalGray":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.get("Gamma");return new CalGrayCS(l,h,u);case"CalRGB":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");u=s.getArray("Gamma");const d=s.getArray("Matrix");return new CalRGBCS(l,h,u,d);case"ICCBased":const f=e[1]instanceof Ref;if(f){const t=n.getByRef(e[1]);if(t)return t}const g=a.fetchIfRef(e[1]),p=g.dict;o=p.get("N");if(IccColorSpace.isUsable)try{const t=new IccColorSpace(g.getBytes(),"ICCBased",o);f&&n.set(null,e[1],t);return t}catch(t){if(t instanceof MissingDataException)throw t;warn(`ICCBased color space (${e[1]}): "${t}".`)}const m=p.getRaw("Alternate");if(m){const e=this.#R(m,t);if(e.numComps===o)return e;warn("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return this.gray;if(3===o)return this.rgb;if(4===o)return this.cmyk;break;case"Pattern":c=e[1]||null;c&&(c=this.#R(c,t));return new PatternCS(c);case"I":case"Indexed":c=this.#R(e[1],t);const b=MathClamp(a.fetchIfRef(e[2]),0,255),y=a.fetchIfRef(e[3]);return new IndexedCS(c,b,y);case"Separation":case"DeviceN":const w=a.fetchIfRef(e[1]);o=Array.isArray(w)?w.length:1;c=this.#R(e[2],t);const S=i.create(e[3]);return new AlternateCS(o,c,S);case"Lab":s=a.fetchIfRef(e[1]);l=s.getArray("WhitePoint");h=s.getArray("BlackPoint");const x=s.getArray("Range");return new LabCS(l,h,x);default:warn(`Unimplemented ColorSpace object: ${r}`);return this.gray}}warn(`Unrecognized ColorSpace object: ${e}`);return this.gray}static get gray(){return shadow(this,"gray",new DeviceGrayCS)}static get rgb(){return shadow(this,"rgb",new DeviceRgbCS)}static get rgba(){return shadow(this,"rgba",new DeviceRgbaCS)}static get cmyk(){if(CmykICCBasedCS.isUsable)try{return shadow(this,"cmyk",new CmykICCBasedCS)}catch{warn("CMYK fallback: DeviceCMYK")}return shadow(this,"cmyk",new DeviceCmykCS)}}class JpegError extends fa{constructor(e){super(e,"JpegError")}}class DNLMarkerError extends fa{constructor(e,t){super(e,"DNLMarkerError");this.scanLines=t}}class EOIMarkerError extends fa{constructor(e){super(e,"EOIMarkerError")}}const ja=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),_a=4017,Ua=799,Xa=3406,qa=2276,Ha=1567,Wa=3784,za=5793,$a=2896;function buildHuffmanTable(e,t){let a,r,i=0,n=16;for(;n>0&&!e[n-1];)n--;const s=[{children:[],index:0}];let o,c=s[0];for(a=0;a0;)c=s.pop();c.index++;s.push(c);for(;s.length<=a;){s.push(o={children:[],index:0});c.children[c.index]=o.children;c=o}i++}if(a+10){g--;return f>>g&1}f=e[t++];if(255===f){const r=e[t++];if(r){if(220===r&&l){const r=readUint16(e,t+=2);t+=2;if(r>0&&r!==a.scanLines)throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data",r)}else if(217===r){if(l){const e=y*(8===a.precision?8:0);if(e>0&&Math.round(a.scanLines/e)>=5)throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",e)}throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data")}throw new JpegError(`unexpected marker ${(f<<8|r).toString(16)}`)}}g=7;return f>>>7}function decodeHuffman(e){let t=e;for(;;){t=t[readBit()];switch(typeof t){case"number":return t;case"object":continue}throw new JpegError("invalid huffman sequence")}}function receive(e){let t=0;for(;e>0;){t=t<<1|readBit();e--}return t}function receiveAndExtend(e){if(1===e)return 1===readBit()?1:-1;const t=receive(e);return t>=1<0){p--;return}let a=n;const r=s;for(;a<=r;){const r=decodeHuffman(e.huffmanTableAC),i=15&r,n=r>>4;if(0===i){if(n<15){p=receive(n)+(1<>4;if(0===i)if(l<15){p=receive(l)+(1<>4;if(0===r){if(n<15)break;i+=16;continue}i+=n;const s=ja[i];e.blockData[t+s]=receiveAndExtend(r);i++}};let O,T=0;const M=1===w?r[0].blocksPerLine*r[0].blocksPerColumn:h*a.mcusPerColumn;let D,R;for(;T<=M;){const a=i?Math.min(M-T,i):M;if(a>0){for(x=0;x0?"unexpected":"excessive"} MCU data, current marker is: ${O.invalid}`);t=O.offset}if(!(O.marker>=65488&&O.marker<=65495))break;t+=2}return t-d}function quantizeAndInverse(e,t,a){const r=e.quantizationTable,i=e.blockData;let n,s,o,c,l,h,u,d,f,g,p,m,b,y,w,S,x;if(!r)throw new JpegError("missing required Quantization Table.");for(let e=0;e<64;e+=8){f=i[t+e];g=i[t+e+1];p=i[t+e+2];m=i[t+e+3];b=i[t+e+4];y=i[t+e+5];w=i[t+e+6];S=i[t+e+7];f*=r[e];if(g|p|m|b|y|w|S){g*=r[e+1];p*=r[e+2];m*=r[e+3];b*=r[e+4];y*=r[e+5];w*=r[e+6];S*=r[e+7];n=za*f+128>>8;s=za*b+128>>8;o=p;c=w;l=$a*(g-S)+128>>8;d=$a*(g+S)+128>>8;h=m<<4;u=y<<4;n=n+s+1>>1;s=n-s;x=o*Wa+c*Ha+128>>8;o=o*Ha-c*Wa+128>>8;c=x;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;x=l*qa+d*Xa+2048>>12;l=l*Xa-d*qa+2048>>12;d=x;x=h*Ua+u*_a+2048>>12;h=h*_a-u*Ua+2048>>12;u=x;a[e]=n+d;a[e+7]=n-d;a[e+1]=s+u;a[e+6]=s-u;a[e+2]=o+h;a[e+5]=o-h;a[e+3]=c+l;a[e+4]=c-l}else{x=za*f+512>>10;a[e]=x;a[e+1]=x;a[e+2]=x;a[e+3]=x;a[e+4]=x;a[e+5]=x;a[e+6]=x;a[e+7]=x}}for(let e=0;e<8;++e){f=a[e];g=a[e+8];p=a[e+16];m=a[e+24];b=a[e+32];y=a[e+40];w=a[e+48];S=a[e+56];if(g|p|m|b|y|w|S){n=za*f+2048>>12;s=za*b+2048>>12;o=p;c=w;l=$a*(g-S)+2048>>12;d=$a*(g+S)+2048>>12;h=m;u=y;n=4112+(n+s+1>>1);s=n-s;x=o*Wa+c*Ha+2048>>12;o=o*Ha-c*Wa+2048>>12;c=x;l=l+u+1>>1;u=l-u;d=d+h+1>>1;h=d-h;n=n+c+1>>1;c=n-c;s=s+o+1>>1;o=s-o;x=l*qa+d*Xa+2048>>12;l=l*Xa-d*qa+2048>>12;d=x;x=h*Ua+u*_a+2048>>12;h=h*_a-u*Ua+2048>>12;u=x;f=n+d;S=n-d;g=s+u;w=s-u;p=o+h;y=o-h;m=c+l;b=c-l;f<16?f=0:f>=4080?f=255:f>>=4;g<16?g=0:g>=4080?g=255:g>>=4;p<16?p=0:p>=4080?p=255:p>>=4;m<16?m=0:m>=4080?m=255:m>>=4;b<16?b=0:b>=4080?b=255:b>>=4;y<16?y=0:y>=4080?y=255:y>>=4;w<16?w=0:w>=4080?w=255:w>>=4;S<16?S=0:S>=4080?S=255:S>>=4;i[t+e]=f;i[t+e+8]=g;i[t+e+16]=p;i[t+e+24]=m;i[t+e+32]=b;i[t+e+40]=y;i[t+e+48]=w;i[t+e+56]=S}else{x=za*f+8192>>14;x=x<-2040?0:x>=2024?255:x+2056>>4;i[t+e]=x;i[t+e+8]=x;i[t+e+16]=x;i[t+e+24]=x;i[t+e+32]=x;i[t+e+40]=x;i[t+e+48]=x;i[t+e+56]=x}}}function buildComponentData(e,t){const a=t.blocksPerLine,r=t.blocksPerColumn,i=new Int16Array(64);for(let e=0;e=r)return null;const n=readUint16(e,t);if(n>=65472&&n<=65534)return{invalid:null,marker:n,offset:t};let s=readUint16(e,i);for(;!(s>=65472&&s<=65534);){if(++i>=r)return null;s=readUint16(e,i)}return{invalid:n.toString(16),marker:s,offset:i}}function prepareComponents(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),a=Math.ceil(e.scanLines/8/e.maxV);for(const r of e.components){const i=Math.ceil(Math.ceil(e.samplesPerLine/8)*r.h/e.maxH),n=Math.ceil(Math.ceil(e.scanLines/8)*r.v/e.maxV),s=t*r.h,o=64*(a*r.v)*(s+1);r.blockData=new Int16Array(o);r.blocksPerLine=i;r.blocksPerColumn=n}e.mcusPerLine=t;e.mcusPerColumn=a}function readDataBlock(e,t){const a=readUint16(e,t);let r=(t+=2)+a-2;const i=findNextFileMarker(e,r,t);if(i?.invalid){warn("readDataBlock - incorrect length, current marker is: "+i.invalid);r=i.offset}const n=e.subarray(t,r);return{appData:n,oldOffset:t,newOffset:t+n.length}}function skipData(e,t){const a=readUint16(e,t),r=(t+=2)+a-2,i=findNextFileMarker(e,r,t);return i?.invalid?i.offset:r}class JpegImage{constructor({decodeTransform:e=null,colorTransform:t=-1}={}){this._decodeTransform=e;this._colorTransform=t}static canUseImageDecoder(e,t=-1){let a=null,r=0,i=null,n=readUint16(e,r);r+=2;if(65496!==n)throw new JpegError("SOI not found");n=readUint16(e,r);r+=2;e:for(;65497!==n;){switch(n){case 65505:const{appData:t,oldOffset:s,newOffset:o}=readDataBlock(e,r);r=o;if(69===t[0]&&120===t[1]&&105===t[2]&&102===t[3]&&0===t[4]&&0===t[5]){if(a)throw new JpegError("Duplicate EXIF-blocks found.");a={exifStart:s+6,exifEnd:o}}n=readUint16(e,r);r+=2;continue;case 65472:case 65473:case 65474:i=e[r+7];break e;case 65535:255!==e[r]&&r--}r=skipData(e,r);n=readUint16(e,r);r+=2}return 4===i||3===i&&0===t?null:a||{}}parse(e,{dnlScanLines:t=null}={}){let a,r,i=0,n=null,s=null,o=0;const c=[],l=[],h=[];let u=readUint16(e,i);i+=2;if(65496!==u)throw new JpegError("SOI not found");u=readUint16(e,i);i+=2;e:for(;65497!==u;){let d,f,g;switch(u){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const{appData:p,newOffset:m}=readDataBlock(e,i);i=m;65504===u&&74===p[0]&&70===p[1]&&73===p[2]&&70===p[3]&&0===p[4]&&(n={version:{major:p[5],minor:p[6]},densityUnits:p[7],xDensity:p[8]<<8|p[9],yDensity:p[10]<<8|p[11],thumbWidth:p[12],thumbHeight:p[13],thumbData:p.subarray(14,14+3*p[12]*p[13])});65518===u&&65===p[0]&&100===p[1]&&111===p[2]&&98===p[3]&&101===p[4]&&(s={version:p[5]<<8|p[6],flags0:p[7]<<8|p[8],flags1:p[9]<<8|p[10],transformCode:p[11]});break;case 65499:const b=readUint16(e,i);i+=2;const y=b+i-2;let w;for(;i>4){if(t>>4!=1)throw new JpegError("DQT - invalid table spec");for(f=0;f<64;f++){w=ja[f];a[w]=readUint16(e,i);i+=2}}else for(f=0;f<64;f++){w=ja[f];a[w]=e[i++]}c[15&t]=a}break;case 65472:case 65473:case 65474:if(a)throw new JpegError("Only single frame JPEGs supported");i+=2;a={};a.extended=65473===u;a.progressive=65474===u;a.precision=e[i++];const S=readUint16(e,i);i+=2;a.scanLines=t||S;a.samplesPerLine=readUint16(e,i);i+=2;a.components=[];a.componentIds={};const x=e[i++];let k=0,C=0;for(d=0;d>4,n=15&e[i+1];k>4?l:h)[15&t]=buildHuffmanTable(a,n)}break;case 65501:i+=2;r=readUint16(e,i);i+=2;break;case 65498:const F=1==++o&&!t;i+=2;const O=e[i++],T=[];for(d=0;d>4];n.huffmanTableAC=l[15&s];T.push(n)}const M=e[i++],D=e[i++],R=e[i++];try{i+=decodeScan(e,i,a,T,r,M,D,R>>4,15&R,F)}catch(t){if(t instanceof DNLMarkerError){warn(`${t.message} -- attempting to re-parse the JPEG image.`);return this.parse(e,{dnlScanLines:t.scanLines})}if(t instanceof EOIMarkerError){warn(`${t.message} -- ignoring the rest of the image data.`);break e}throw t}break;case 65500:i+=4;break;case 65535:255!==e[i]&&i--;break;default:const N=findNextFileMarker(e,i-2,i-3);if(N?.invalid){warn("JpegImage.parse - unexpected data, current marker is: "+N.invalid);i=N.offset;break}if(!N||i>=e.length-1){warn("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new JpegError("JpegImage.parse - unknown marker: "+u.toString(16))}u=readUint16(e,i);i+=2}if(!a)throw new JpegError("JpegImage.parse - no frame data found.");this.width=a.samplesPerLine;this.height=a.scanLines;this.jfif=n;this.adobe=s;this.components=[];for(const e of a.components){const t=c[e.quantizationId];t&&(e.quantizationTable=t);this.components.push({index:e.index,output:buildComponentData(0,e),scaleX:e.h/a.maxH,scaleY:e.v/a.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(e,t,a=!1){const r=this.width/e,i=this.height/t;let n,s,o,c,l,h,u,d,f,g,p,m=0;const b=this.components.length,y=e*t*b,w=new Uint8ClampedArray(y),S=new Uint32Array(e),x=4294967288;let k;for(u=0;u>8)+C[f+1];return w}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,a,r;for(let i=0,n=e.length;i4)throw new JpegError("Unsupported color mode");const n=this._getLinearizedBlockData(e,t,i);if(1===this.numComponents&&(a||r)){const e=n.length*(a?4:3),t=new Uint8ClampedArray(e);let r=0;if(a)!function grayToRGBA(e,t){if(FeatureTest.isLittleEndian)for(let a=0,r=e.length;a0&&(e=e.subarray(t));break}return e}decodeImage(e){if(this.eof)return this.buffer;e=this.#N(e||this.bytes);const t=new JpegImage(this.jpegOptions);t.parse(e);const a=t.getData({width:this.drawWidth,height:this.drawHeight,forceRGBA:this.forceRGBA,forceRGB:this.forceRGB,isSourcePDF:!0});this.buffer=a;this.bufferLength=a.length;this.eof=!0;return this.buffer}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}async getTransferableImage(){if(!await JpegStream.canUseImageDecoder)return null;const e=this.jpegOptions;if(e.decodeTransform)return null;let t;try{const a=this.canAsyncDecodeImageFromBuffer&&await this.stream.asyncGetBytes()||this.bytes;if(!a)return null;let r=this.#N(a);const i=JpegImage.canUseImageDecoder(r,e.colorTransform);if(!i)return null;if(i.exifStart){r=r.slice();r.fill(0,i.exifStart,i.exifEnd)}t=new ImageDecoder({data:r,type:"image/jpeg",preferAnimation:!1});return(await t.decode()).image}catch(e){warn(`getTransferableImage - failed: "${e}".`);return null}finally{t?.close()}}}var OpenJPEG=async function(e={}){var t,a,r=e,i=new Promise(((e,r)=>{t=e;a=r})),n="./this.program",quit_=(e,t)=>{throw t},s=import.meta.url;try{new URL(".",s).href}catch{}var o,c,l,h,u,d,f=console.log.bind(console),g=console.error.bind(console),p=!1;function updateMemoryViews(){var e=o.buffer;l=new Int8Array(e);new Int16Array(e);h=new Uint8Array(e);new Uint16Array(e);u=new Int32Array(e);d=new Uint32Array(e);new Float32Array(e);new Float64Array(e);new BigInt64Array(e);new BigUint64Array(e)}var m=0,b=null;class ExitStatus{name="ExitStatus";constructor(e){this.message=`Program terminated with exit(${e})`;this.status=e}}var callRuntimeCallbacks=e=>{for(;e.length>0;)e.shift()(r)},y=[],addOnPostRun=e=>y.push(e),w=[],addOnPreRun=e=>w.push(e),S=!0,x=0,k={},handleException=e=>{if(e instanceof ExitStatus||"unwind"==e)return c;quit_(0,e)},keepRuntimeAlive=()=>S||x>0,_proc_exit=e=>{c=e;if(!keepRuntimeAlive()){r.onExit?.(e);p=!0}quit_(0,new ExitStatus(e))},_exit=(e,t)=>{c=e;_proc_exit(e)},callUserCallback=e=>{if(!p)try{e();(()=>{if(!keepRuntimeAlive())try{_exit(c)}catch(e){handleException(e)}})()}catch(e){handleException(e)}},growMemory=e=>{var t=(e-o.buffer.byteLength+65535)/65536|0;try{o.grow(t);updateMemoryViews();return 1}catch(e){}},C={},getEnvStrings=()=>{if(!getEnvStrings.strings){var e={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:n||"./this.program"};for(var t in C)void 0===C[t]?delete e[t]:e[t]=C[t];var a=[];for(var t in e)a.push(`${t}=${e[t]}`);getEnvStrings.strings=a}return getEnvStrings.strings},lengthBytesUTF8=e=>{for(var t=0,a=0;a=55296&&r<=57343){t+=4;++a}else t+=3}return t},v=[null,[],[]],F="undefined"!=typeof TextDecoder?new TextDecoder:void 0,UTF8ArrayToString=(e,t=0,a=NaN)=>{for(var r=t+a,i=t;e[i]&&!(i>=r);)++i;if(i-t>16&&e.buffer&&F)return F.decode(e.subarray(t,i));for(var n="";t>10,56320|1023&l)}}else n+=String.fromCharCode((31&s)<<6|o)}else n+=String.fromCharCode(s)}return n},printChar=(e,t)=>{var a=v[e];if(0===t||10===t){(1===e?f:g)(UTF8ArrayToString(a));a.length=0}else a.push(t)},UTF8ToString=(e,t)=>e?UTF8ArrayToString(h,e,t):"";r.noExitRuntime&&(S=r.noExitRuntime);r.print&&(f=r.print);r.printErr&&(g=r.printErr);r.wasmBinary&&r.wasmBinary;r.arguments&&r.arguments;r.thisProgram&&(n=r.thisProgram);r.writeArrayToMemory=(e,t)=>{l.set(e,t)};var O={l:()=>function abort(e){r.onAbort?.(e);g(e="Aborted("+e+")");p=!0;e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);a(t);throw t}(""),k:()=>{S=!1;x=0},m:(e,t)=>{if(k[e]){clearTimeout(k[e].id);delete k[e]}if(!t)return 0;var a=setTimeout((()=>{delete k[e];callUserCallback((()=>M(e,performance.now())))}),t);k[e]={id:a,timeout_ms:t};return 0},g:function _copy_pixels_1(e,t){e>>=2;const a=r.imageData=new Uint8ClampedArray(t),i=u.subarray(e,e+t);a.set(i)},f:function _copy_pixels_3(e,t,a,i){e>>=2;t>>=2;a>>=2;const n=r.imageData=new Uint8ClampedArray(3*i),s=u.subarray(e,e+i),o=u.subarray(t,t+i),c=u.subarray(a,a+i);for(let e=0;e>=2;t>>=2;a>>=2;i>>=2;const s=r.imageData=new Uint8ClampedArray(4*n),o=u.subarray(e,e+n),c=u.subarray(t,t+n),l=u.subarray(a,a+n),h=u.subarray(i,i+n);for(let e=0;e{var t,a,r=h.length,i=2147483648;if((e>>>=0)>i)return!1;for(var n=1;n<=4;n*=2){var s=r*(1+.2/n);s=Math.min(s,e+100663296);var o=Math.min(i,(t=Math.max(e,s),a=65536,Math.ceil(t/a)*a));if(growMemory(o))return!0}return!1},p:(e,t)=>{var a=0,r=0;for(var i of getEnvStrings()){var n=t+a;d[e+r>>2]=n;a+=((e,t,a,r)=>{if(!(r>0))return 0;for(var i=a,n=a+r-1,s=0;s=55296&&o<=57343&&(o=65536+((1023&o)<<10)|1023&e.charCodeAt(++s));if(o<=127){if(a>=n)break;t[a++]=o}else if(o<=2047){if(a+1>=n)break;t[a++]=192|o>>6;t[a++]=128|63&o}else if(o<=65535){if(a+2>=n)break;t[a++]=224|o>>12;t[a++]=128|o>>6&63;t[a++]=128|63&o}else{if(a+3>=n)break;t[a++]=240|o>>18;t[a++]=128|o>>12&63;t[a++]=128|o>>6&63;t[a++]=128|63&o}}t[a]=0;return a-i})(i,h,n,1/0)+1;r+=4}return 0},q:(e,t)=>{var a=getEnvStrings();d[e>>2]=a.length;var r=0;for(var i of a)r+=lengthBytesUTF8(i)+1;d[t>>2]=r;return 0},b:e=>52,o:function _fd_seek(e,t,a,r){t=(i=t)<-9007199254740992||i>9007199254740992?NaN:Number(i);var i;return 70},c:(e,t,a,r)=>{for(var i=0,n=0;n>2],o=d[t+4>>2];t+=8;for(var c=0;c>2]=i;return 0},r:function _gray_to_rgba(e,t){e>>=2;const a=r.imageData=new Uint8ClampedArray(4*t),i=u.subarray(e,e+t);for(let e=0;e>=2;t>>=2;const i=r.imageData=new Uint8ClampedArray(4*a),n=u.subarray(e,e+a),s=u.subarray(t,t+a);for(let e=0;e>=2;t>>=2;a>>=2;const n=r.imageData=new Uint8ClampedArray(4*i),s=u.subarray(e,e+i),o=u.subarray(t,t+i),c=u.subarray(a,a+i);for(let e=0;e{r.instantiateWasm(e,((e,a)=>{t(receiveInstance(e))}))}))}(),M=(T.t,r._malloc=T.u,r._free=T.v,r._jp2_decode=T.w,T.x);!function preInit(){if(r.preInit){"function"==typeof r.preInit&&(r.preInit=[r.preInit]);for(;r.preInit.length>0;)r.preInit.shift()()}}();!function run(){if(m>0)b=run;else{!function preRun(){if(r.preRun){"function"==typeof r.preRun&&(r.preRun=[r.preRun]);for(;r.preRun.length;)addOnPreRun(r.preRun.shift())}callRuntimeCallbacks(w)}();if(m>0)b=run;else if(r.setStatus){r.setStatus("Running...");setTimeout((()=>{setTimeout((()=>r.setStatus("")),1);doRun()}),1)}else doRun()}function doRun(){r.calledRun=!0;if(!p){!function initRuntime(){T.t()}();t(r);r.onRuntimeInitialized?.();!function postRun(){if(r.postRun){"function"==typeof r.postRun&&(r.postRun=[r.postRun]);for(;r.postRun.length;)addOnPostRun(r.postRun.shift())}callRuntimeCallbacks(y)}()}}}();return i};const Ga=OpenJPEG;class JpxError extends fa{constructor(e){super(e,"JpxError")}}class JpxImage{static#E=null;static#P=null;static#L=null;static#v=!0;static#j=!0;static#F=null;static setOptions({handler:e,useWasm:t,useWorkerFetch:a,wasmUrl:r}){this.#v=t;this.#j=a;this.#F=r;a||(this.#P=e)}static async#_(e){const t=`${this.#F}openjpeg_nowasm_fallback.js`;let a=null;try{a=(await import( +/*webpackIgnore: true*/ +/*@vite-ignore*/ +t)).default()}catch(e){warn(`JpxImage#getJsModule: ${e}`)}e(a)}static async#U(e,t,a){const r="openjpeg.wasm";try{this.#E||(this.#j?this.#E=await fetchBinaryData(`${this.#F}${r}`):this.#E=await this.#P.sendWithPromise("FetchBinaryData",{type:"wasmFactory",filename:r}));return a((await WebAssembly.instantiate(this.#E,t)).instance)}catch(t){warn(`JpxImage#instantiateWasm: ${t}`);this.#_(e);return null}finally{this.#P=null}}static async decode(e,{numComponents:t=4,isIndexedColormap:a=!1,smaskInData:r=!1,reducePower:i=0}={}){if(!this.#L){const{promise:e,resolve:t}=Promise.withResolvers(),a=[e];this.#v?a.push(Ga({warn,instantiateWasm:this.#U.bind(this,t)})):this.#_(t);this.#L=Promise.race(a)}const n=await this.#L;if(!n)throw new JpxError("OpenJPEG failed to initialize");let s;try{const o=e.length;s=n._malloc(o);n.writeArrayToMemory(e,s);if(n._jp2_decode(s,o,t>0?t:0,!!a,!!r,i)){const{errorMessages:e}=n;if(e){delete n.errorMessages;throw new JpxError(e)}throw new JpxError("Unknown error")}const{imageData:c}=n;n.imageData=null;return c}finally{s&&n._free(s)}}static cleanup(){this.#L=null}static parseImageProperties(e){let t=e.getByte();for(;t>=0;){const a=t;t=e.getByte();if(65361===(a<<8|t)){e.skip(4);const t=e.getInt32()>>>0,a=e.getInt32()>>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0;e.skip(16);return{width:t-r,height:a-i,bitsPerComponent:8,componentsCount:e.getUint16()}}}throw new JpxError("No size marker found in JPX stream")}}function addState(e,t,a,r,i){let n=e;for(let e=0,a=t.length-1;e1e3){l=Math.max(l,d);f+=u+2;d=0;u=0}h.push({transform:t,x:d,y:f,w:a.width,h:a.height});d+=a.width+2;u=Math.max(u,a.height)}const g=Math.max(l,d)+1,p=f+u+1,m=new Uint8Array(g*p*4),b=g<<2;for(let e=0;e=0;){t[n-4]=t[n];t[n-3]=t[n+1];t[n-2]=t[n+2];t[n-1]=t[n+3];t[n+a]=t[n+a-4];t[n+a+1]=t[n+a-3];t[n+a+2]=t[n+a-2];t[n+a+3]=t[n+a-1];n-=b}}const y={width:g,height:p};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(g,p);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(m.buffer),g,p),0,0);y.bitmap=e.transferToImageBitmap();y.data=null}else{y.kind=v;y.data=m}a.splice(n,4*c,Zt);r.splice(n,4*c,[y,h]);return n+1}));addState(Va,[Be,Ne,Vt,Re],null,(function iterateImageMaskGroup(e,t){const a=e.fnArray,r=(t-(e.iCurr-3))%4;switch(r){case 0:return a[t]===Be;case 1:return a[t]===Ne;case 2:return a[t]===Vt;case 3:return a[t]===Re}throw new Error(`iterateImageMaskGroup - invalid pos: ${r}`)}),(function foundImageMaskGroup(e,t){const a=e.fnArray,r=e.argsArray,i=e.iCurr,n=i-3,s=i-2,o=i-1;let c=Math.floor((t-n)/4);if(c<10)return t-(t-n)%4;let l,h,u=!1;const d=r[o][0],f=r[s][0],g=r[s][1],p=r[s][2],m=r[s][3];if(g===p){u=!0;l=s+4;let e=o+4;for(let t=1;t=4&&a[n-4]===a[s]&&a[n-3]===a[o]&&a[n-2]===a[c]&&a[n-1]===a[l]&&r[n-4][0]===h&&r[n-4][1]===u){d++;f-=5}let g=f+4;for(let e=1;e{const t=e.argsArray,a=t[e.iCurr-1][0];if(a!==qe&&a!==He&&a!==$e&&a!==Ge&&a!==Ve&&a!==Ke)return!0;const r=t[e.iCurr-2];return 1===r[0]&&0===r[1]&&0===r[2]&&1===r[3]}),(()=>!1),((e,t)=>{const{fnArray:a,argsArray:r}=e,i=e.iCurr,n=i-3,s=i-2,o=r[i-1],c=r[s],[,[l],h]=o;if(h){Util.scaleMinMax(c,h);for(let e=0,t=l.length;e=a)break}r=(r||Va)[e[t]];if(r&&!Array.isArray(r)){n.iCurr=t;t++;if(!r.checkFn||(0,r.checkFn)(n)){i=r;r=null}else r=null}else t++}this.state=r;this.match=i;this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e);this.match=null;this.state=null;this._optimize()}}reset(){this.state=null;this.match=null;this.lastProcessed=0}}class OperatorList{static CHUNK_SIZE=1e3;static CHUNK_SIZE_ABOUT=this.CHUNK_SIZE-5;static isOffscreenCanvasSupported=!1;constructor(e=0,t){this._streamSink=t;this.fnArray=[];this.argsArray=[];this.optimizer=!t||e&d?new NullOptimizer(this):new QueueOptimizer(this);this.dependencies=new Set;this._totalLength=0;this.weight=0;this._resolved=t?null:Promise.resolve()}static setOptions({isOffscreenCanvasSupported:e}){this.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t);this.weight++;this._streamSink&&(this.weight>=OperatorList.CHUNK_SIZE||this.weight>=OperatorList.CHUNK_SIZE_ABOUT&&(e===Re||e===et))&&this.flush()}addImageOps(e,t,a,r=!1){if(r){this.addOp(Be);this.addOp(De,[[["SMask",!1]]])}void 0!==a&&this.addOp(jt,["OC",a]);this.addOp(e,t);void 0!==a&&this.addOp(_t,[]);r&&this.addOp(Re)}addDependency(e){if(!this.dependencies.has(e)){this.dependencies.add(e);this.addOp(ke,[e])}}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof OperatorList){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,a=e.length;t>>0}function hexToStr(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function addHex(e,t,a){let r=0;for(let i=a;i>=0;i--){r+=e[i]+t[i];e[i]=255&r;r>>=8}}function incHex(e,t){let a=1;for(let r=t;r>=0&&a>0;r--){a+=e[r];e[r]=255&a;a>>=8}}const Ka=16;class BinaryCMapStream{constructor(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const a=this.readByte();if(a<0)throw new FormatError("unexpected EOF in bcmap");e=!(128&a);t=t<<7|127&a}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1}readHexNumber(e,t){let a;const r=this.tmpBuf;let i=0;do{const e=this.readByte();if(e<0)throw new FormatError("unexpected EOF in bcmap");a=!(128&e);r[i++]=127&e}while(!a);let n=t,s=0,o=0;for(;n>=0;){for(;o<8&&r.length>0;){s|=r[--i]<>=8;o-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const a=1&e[t]?255:0;let r=0;for(let i=0;i<=t;i++){r=(1&r)<<8|e[i];e[i]=r>>1^a}}readString(){const e=this.readNumber(),t=new Array(e);for(let a=0;a=0;){const e=d>>5;if(7===e){switch(31&d){case 0:r.readString();break;case 1:n=r.readString()}continue}const a=!!(16&d),i=15&d;if(i+1>Ka)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const f=1,g=r.readNumber();switch(e){case 0:r.readHex(s,i);r.readHexNumber(o,i);addHex(o,s,i);t.addCodespaceRange(i+1,hexToInt(s,i),hexToInt(o,i));for(let e=1;e=0;--i){r[a+i]=255&s;s>>=8}}}}class AsciiHexStream extends DecodeStream{constructor(e,t){t&&(t*=.5);super(t);this.str=e;this.dict=e.dict;this.firstDigit=-1}readBlock(){const e=this.str.getBytes(8e3);if(!e.length){this.eof=!0;return}const t=e.length+1>>1,a=this.ensureBuffer(this.bufferLength+t);let r=this.bufferLength,i=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}if(i<0)i=e;else{a[r++]=i<<4|e;i=-1}}if(i>=0&&this.eof){a[r++]=i<<4;i=-1}this.firstDigit=i;this.bufferLength=r}}const Ja=-1,Ya=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],Za=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],Qa=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],er=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],tr=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],ar=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];class CCITTFaxDecoder{constructor(e,t={}){if("function"!=typeof e?.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');this.source=e;this.eof=!1;this.encoding=t.K||0;this.eoline=t.EndOfLine||!1;this.byteAlign=t.EncodedByteAlign||!1;this.columns=t.Columns||1728;this.rows=t.Rows||0;this.eoblock=t.EndOfBlock??!0;this.black=t.BlackIs1||!1;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;this.rowsDone=!1;let a;for(;0===(a=this._lookBits(12));)this._eatBits(1);1===a&&this._eatBits(12);if(this.encoding>0){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,a=this.columns;let r,i,n,s,o;if(0===this.outputBits){this.rowsDone&&(this.eof=!0);if(this.eof)return-1;this.err=!1;let n,o,c;if(this.nextLine2D){for(s=0;t[s]=64);do{o+=c=this._getWhiteCode()}while(c>=64)}else{do{n+=c=this._getWhiteCode()}while(c>=64);do{o+=c=this._getBlackCode()}while(c>=64)}this._addPixels(t[this.codingPos]+n,i);t[this.codingPos]0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]0?--r:++r;for(;e[r]<=t[this.codingPos]&&e[r]=64);else do{n+=c=this._getWhiteCode()}while(c>=64);this._addPixels(t[this.codingPos]+n,i);i^=1}}let l=!1;this.byteAlign&&(this.inputBits&=-8);if(this.eoblock||this.row!==this.rows-1){n=this._lookBits(12);if(this.eoline)for(;n!==Ja&&1!==n;){this._eatBits(1);n=this._lookBits(12)}else for(;0===n;){this._eatBits(1);n=this._lookBits(12)}if(1===n){this._eatBits(12);l=!0}else n===Ja&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone){this.nextLine2D=!this._lookBits(1);this._eatBits(1)}if(this.eoblock&&l&&this.byteAlign){n=this._lookBits(12);if(1===n){this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}if(this.encoding>=0)for(s=0;s<4;++s){n=this._lookBits(12);1!==n&&info("bad rtc code: "+n);this._eatBits(12);if(this.encoding>0){this._lookBits(1);this._eatBits(1)}}this.eof=!0}}else if(this.err&&this.eoline){for(;;){n=this._lookBits(13);if(n===Ja){this.eof=!0;return-1}if(n>>1==1)break;this._eatBits(1)}this._eatBits(12);if(this.encoding>0){this._eatBits(1);this.nextLine2D=!(1&n)}}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1];this.row++}if(this.outputBits>=8){o=1&this.codingPos?0:255;this.outputBits-=8;if(0===this.outputBits&&t[this.codingPos]n){o<<=n;1&this.codingPos||(o|=255>>8-n);this.outputBits-=n;n=0}else{o<<=this.outputBits;1&this.codingPos||(o|=255>>8-this.outputBits);n-=this.outputBits;this.outputBits=0;if(t[this.codingPos]0){o<<=n;n=0}}}while(n)}this.black&&(o^=255);return o}_addPixels(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}this.codingPos=r}_addPixelsNeg(e,t){const a=this.codingLine;let r=this.codingPos;if(e>a[r]){if(e>this.columns){info("row is wrong length");this.err=!0;e=this.columns}1&r^t&&++r;a[r]=e}else if(e0&&e=i){const t=a[e-i];if(t[0]===r){this._eatBits(r);return[!0,t[1],!0]}}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;if(this.eoblock){t=this._lookBits(7);e=Ya[t];if(e?.[0]>0){this._eatBits(e[0]);return e[1]}}else{const e=this._findTableCode(1,7,Ya);if(e[0]&&e[2])return e[1]}info("Bad two dim code");return Ja}_getWhiteCode(){let e,t=0;if(this.eoblock){t=this._lookBits(12);if(t===Ja)return 1;e=t>>5?Qa[t>>3]:Za[t];if(e[0]>0){this._eatBits(e[0]);return e[1]}}else{let e=this._findTableCode(1,9,Qa);if(e[0])return e[1];e=this._findTableCode(11,12,Za);if(e[0])return e[1]}info("bad white code");this._eatBits(1);return 1}_getBlackCode(){let e,t;if(this.eoblock){e=this._lookBits(13);if(e===Ja)return 1;t=e>>7?!(e>>9)&&e>>7?tr[(e>>1)-64]:ar[e>>7]:er[e];if(t[0]>0){this._eatBits(t[0]);return t[1]}}else{let e=this._findTableCode(2,6,ar);if(e[0])return e[1];e=this._findTableCode(7,12,tr,64);if(e[0])return e[1];e=this._findTableCode(10,13,er);if(e[0])return e[1]}info("bad black code");this._eatBits(1);return 1}_lookBits(e){let t;for(;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t;this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}class CCITTFaxStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;a instanceof Dict||(a=Dict.empty);const r={next:()=>e.getByte()};this.ccittFaxDecoder=new CCITTFaxDecoder(r,{K:a.get("K"),EndOfLine:a.get("EndOfLine"),EncodedByteAlign:a.get("EncodedByteAlign"),Columns:a.get("Columns"),Rows:a.get("Rows"),EndOfBlock:a.get("EndOfBlock"),BlackIs1:a.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=e}}}const rr=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ir=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),nr=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),sr=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],or=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class FlateStream extends DecodeStream{constructor(e,t){super(t);this.str=e;this.dict=e.dict;const a=e.getByte(),r=e.getByte();if(-1===a||-1===r)throw new FormatError(`Invalid header in flate stream: ${a}, ${r}`);if(8!=(15&a))throw new FormatError(`Unknown compression method in flate stream: ${a}, ${r}`);if(((a<<8)+r)%31!=0)throw new FormatError(`Bad FCHECK in flate stream: ${a}, ${r}`);if(32&r)throw new FormatError(`FDICT bit set in flate stream: ${a}, ${r}`);this.codeSize=0;this.codeBuf=0}async getImageData(e,t){const a=await this.asyncGetBytes();return a?a.length<=e?a:a.subarray(0,e):this.getBytes(e)}async asyncGetBytes(){this.str.reset();const e=this.str.getBytes();try{const{readable:t,writable:a}=new DecompressionStream("deflate"),r=a.getWriter();await r.ready;r.write(e).then((async()=>{await r.ready;await r.close()})).catch((()=>{}));const i=[];let n=0;for await(const e of t){i.push(e);n+=e.byteLength}const s=new Uint8Array(n);let o=0;for(const e of i){s.set(e,o);o+=e.byteLength}return s}catch{this.str=new Stream(e,2,e.length,this.str.dict);this.reset();return null}}get isAsync(){return!0}getBits(e){const t=this.str;let a,r=this.codeSize,i=this.codeBuf;for(;r>e;this.codeSize=r-=e;return a}getCode(e){const t=this.str,a=e[0],r=e[1];let i,n=this.codeSize,s=this.codeBuf;for(;n>16,l=65535&o;if(c<1||n>c;this.codeSize=n-c;return l}generateHuffmanTable(e){const t=e.length;let a,r=0;for(a=0;ar&&(r=e[a]);const i=1<>=1}for(a=e;a>=1;if(0===t){let t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}let a=t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}a|=t<<8;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}let i=t;if(-1===(t=r.getByte())){this.#X("Bad block header in flate stream");return}i|=t<<8;if(i!==(65535&~a)&&(0!==a||0!==i))throw new FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0;this.codeSize=0;const n=this.bufferLength,s=n+a;e=this.ensureBuffer(s);this.bufferLength=s;if(0===a)-1===r.peekByte()&&(this.eof=!0);else{const t=r.getBytes(a);e.set(t,n);t.length0;)h[o++]=f}i=this.generateHuffmanTable(h.subarray(0,e));n=this.generateHuffmanTable(h.subarray(e,l))}}e=this.buffer;let s=e?e.length:0,o=this.bufferLength;for(;;){let t=this.getCode(i);if(t<256){if(o+1>=s){e=this.ensureBuffer(o+1);s=e.length}e[o++]=t;continue}if(256===t){this.bufferLength=o;return}t-=257;t=ir[t];let r=t>>16;r>0&&(r=this.getBits(r));a=(65535&t)+r;t=this.getCode(n);t=nr[t];r=t>>16;r>0&&(r=this.getBits(r));const c=(65535&t)+r;if(o+a>=s){e=this.ensureBuffer(o+a);s=e.length}for(let t=0;t>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}byteIn(){const e=this.data;let t=this.bp;if(255===e[t])if(e[t+1]>143){this.clow+=65280;this.ct=8}else{t++;this.clow+=e[t]<<9;this.ct=7;this.bp=t}else{t++;this.clow+=t65535){this.chigh+=this.clow>>16;this.clow&=65535}}readBit(e,t){let a=e[t]>>1,r=1&e[t];const i=cr[a],n=i.qe;let s,o=this.a-n;if(this.chigh>15&1;this.clow=this.clow<<1&65535;this.ct--}while(!(32768&o));this.a=o;e[t]=a<<1|r;return s}}class Jbig2Error extends fa{constructor(e){super(e,"Jbig2Error")}}class ContextCache{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class DecodingContext{constructor(e,t,a){this.data=e;this.start=t;this.end=a}get decoder(){return shadow(this,"decoder",new ArithmeticDecoder(this.data,this.start,this.end))}get contextCache(){return shadow(this,"contextCache",new ContextCache)}}function decodeInteger(e,t,a){const r=e.getContexts(t);let i=1;function readBits(e){let t=0;for(let n=0;n>>0}const n=readBits(1),s=readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(1)?readBits(32)+4436:readBits(12)+340:readBits(8)+84:readBits(6)+20:readBits(4)+4:readBits(2);let o;0===n?o=s:s>0&&(o=-s);return o>=-2147483648&&o<=va?o:null}function decodeIAID(e,t,a){const r=e.getContexts("IAID");let i=1;for(let e=0;ee.y-t.y||e.x-t.x));const h=l.length,u=new Int8Array(h),d=new Int8Array(h),f=[];let g,p,m=0,b=0,y=0,w=0;for(p=0;p=v&&E=F){q=q<<1&m;for(p=0;p=0&&j=0){_=D[L][j];_&&(q|=_<=e?l<<=1:l=l<<1|x[o][c]}for(f=0;f=w||c<0||c>=y?l<<=1:l=l<<1|r[o][c]}const g=k.readBit(C,l);t[s]=g}}return x}function decodeTextRegion(e,t,a,r,i,n,s,o,c,l,h,u,d,f,g,p,m,b,y){if(e&&t)throw new Jbig2Error("refinement with Huffman is not supported");const w=[];let S,x;for(S=0;S1&&(i=e?y.readBits(b):decodeInteger(C,"IAIT",k));const n=s*v+i,F=e?f.symbolIDTable.decode(y):decodeIAID(C,k,c),O=t&&(e?y.readBit():decodeInteger(C,"IARI",k));let T=o[F],M=T[0].length,D=T.length;if(O){const e=decodeInteger(C,"IARDW",k),t=decodeInteger(C,"IARDH",k);M+=e;D+=t;T=decodeRefinement(M,D,g,T,(e>>1)+decodeInteger(C,"IARDX",k),(t>>1)+decodeInteger(C,"IARDY",k),!1,p,m)}let R=0;l?1&u?R=D-1:r+=D-1:u>1?r+=M-1:R=M-1;const N=n-(1&u?0:D-1),E=r-(2&u?M-1:0);let L,j,_;if(l)for(L=0;L>5&7;const c=[31&s];let l=t+6;if(7===s){o=536870911&readUint32(e,l-1);l+=3;let t=o+7>>3;c[0]=e[l++];for(;--t>0;)c.push(e[l++])}else if(5===s||6===s)throw new Jbig2Error("invalid referred-to flags");a.retainBits=c;let h=4;a.number<=256?h=1:a.number<=65536&&(h=2);const u=[];let d,f;for(d=0;d>>24&255;n[3]=t.height>>16&255;n[4]=t.height>>8&255;n[5]=255&t.height;for(d=l,f=e.length;d>2&3;e.huffmanDWSelector=t>>4&3;e.bitmapSizeSelector=t>>6&1;e.aggregationInstancesSelector=t>>7&1;e.bitmapCodingContextUsed=!!(256&t);e.bitmapCodingContextRetained=!!(512&t);e.template=t>>10&3;e.refinementTemplate=t>>12&1;l+=2;if(!e.huffman){c=0===e.template?4:1;s=[];for(o=0;o>2&3;h.stripSize=1<>4&3;h.transposed=!!(64&u);h.combinationOperator=u>>7&3;h.defaultPixelValue=u>>9&1;h.dsOffset=u<<17>>27;h.refinementTemplate=u>>15&1;if(h.huffman){const e=readUint16(r,l);l+=2;h.huffmanFS=3&e;h.huffmanDS=e>>2&3;h.huffmanDT=e>>4&3;h.huffmanRefinementDW=e>>6&3;h.huffmanRefinementDH=e>>8&3;h.huffmanRefinementDX=e>>10&3;h.huffmanRefinementDY=e>>12&3;h.huffmanRefinementSizeSelector=!!(16384&e)}if(h.refinement&&!h.refinementTemplate){s=[];for(o=0;o<2;o++){s.push({x:readInt8(r,l),y:readInt8(r,l+1)});l+=2}h.refinementAt=s}h.numberOfSymbolInstances=readUint32(r,l);l+=4;n=[h,a.referredTo,r,l,i];break;case 16:const d={},f=r[l++];d.mmr=!!(1&f);d.template=f>>1&3;d.patternWidth=r[l++];d.patternHeight=r[l++];d.maxPatternIndex=readUint32(r,l);l+=4;n=[d,a.number,r,l,i];break;case 22:case 23:const g={};g.info=readRegionSegmentInformation(r,l);l+=gr;const p=r[l++];g.mmr=!!(1&p);g.template=p>>1&3;g.enableSkip=!!(8&p);g.combinationOperator=p>>4&7;g.defaultPixelValue=p>>7&1;g.gridWidth=readUint32(r,l);l+=4;g.gridHeight=readUint32(r,l);l+=4;g.gridOffsetX=4294967295&readUint32(r,l);l+=4;g.gridOffsetY=4294967295&readUint32(r,l);l+=4;g.gridVectorX=readUint16(r,l);l+=2;g.gridVectorY=readUint16(r,l);l+=2;n=[g,a.referredTo,r,l,i];break;case 38:case 39:const m={};m.info=readRegionSegmentInformation(r,l);l+=gr;const b=r[l++];m.mmr=!!(1&b);m.template=b>>1&3;m.prediction=!!(8&b);if(!m.mmr){c=0===m.template?4:1;s=[];for(o=0;o>2&1;y.combinationOperator=w>>3&3;y.requiresBuffer=!!(32&w);y.combinationOperatorOverride=!!(64&w);n=[y];break;case 49:case 50:case 51:case 62:break;case 53:n=[a.number,r,l,i];break;default:throw new Jbig2Error(`segment type ${a.typeName}(${a.type}) is not implemented`)}const h="on"+a.typeName;h in t&&t[h].apply(t,n)}function processSegments(e,t){for(let a=0,r=e.length;a>3,a=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&a.fill(255);this.buffer=a}drawBitmap(e,t){const a=this.currentPageInfo,r=e.width,i=e.height,n=a.width+7>>3,s=a.combinationOperatorOverride?e.combinationOperator:a.combinationOperator,o=this.buffer,c=128>>(7&e.x);let l,h,u,d,f=e.y*n+(e.x>>3);switch(s){case 0:for(l=0;l>=1;if(!u){u=128;d++}}f+=n}break;case 2:for(l=0;l>=1;if(!u){u=128;d++}}f+=n}break;default:throw new Jbig2Error(`operator ${s} is not supported`)}}onImmediateGenericRegion(e,t,a,r){const i=e.info,n=new DecodingContext(t,a,r),s=decodeBitmap(e.mmr,i.width,i.height,e.template,e.prediction,null,e.at,n);this.drawBitmap(i,s)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,a,r,i,n){let s,o;if(e.huffman){s=function getSymbolDictionaryHuffmanTables(e,t,a){let r,i,n,s,o=0;switch(e.huffmanDHSelector){case 0:case 1:r=getStandardTable(e.huffmanDHSelector+4);break;case 3:r=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:i=getStandardTable(e.huffmanDWSelector+2);break;case 3:i=getCustomHuffmanTable(o,t,a);o++;break;default:throw new Jbig2Error("invalid Huffman DW selector")}if(e.bitmapSizeSelector){n=getCustomHuffmanTable(o,t,a);o++}else n=getStandardTable(1);s=e.aggregationInstancesSelector?getCustomHuffmanTable(o,t,a):getStandardTable(1);return{tableDeltaHeight:r,tableDeltaWidth:i,tableBitmapSize:n,tableAggregateInstances:s}}(e,a,this.customTables);o=new Reader(r,i,n)}let c=this.symbols;c||(this.symbols=c={});const l=[];for(const e of a){const t=c[e];t&&l.push(...t)}const h=new DecodingContext(r,i,n);c[t]=function decodeSymbolDictionary(e,t,a,r,i,n,s,o,c,l,h,u){if(e&&t)throw new Jbig2Error("symbol refinement with Huffman is not supported");const d=[];let f=0,g=log2(a.length+r);const p=h.decoder,m=h.contextCache;let b,y;if(e){b=getStandardTable(1);y=[];g=Math.max(g,1)}for(;d.length1)w=decodeTextRegion(e,t,r,f,0,i,1,a.concat(d),g,0,0,1,0,n,c,l,h,0,u);else{const e=decodeIAID(m,p,g),t=decodeInteger(m,"IARDX",p),i=decodeInteger(m,"IARDY",p);w=decodeRefinement(r,f,c,e=32){let a,r,s;switch(t){case 32:if(0===e)throw new Jbig2Error("no previous value in symbol ID table");r=i.readBits(2)+3;a=n[e-1].prefixLength;break;case 33:r=i.readBits(3)+3;a=0;break;case 34:r=i.readBits(7)+11;a=0;break;default:throw new Jbig2Error("invalid code length in symbol ID table")}for(s=0;s=0;m--){T=e?decodeMMRBitmap(O,c,l,!0):decodeBitmap(!1,c,l,a,!1,null,v,g);F[m]=T}for(M=0;M=0;b--){R^=F[b][M][D];N|=R<>8;j=u+M*d-D*f>>8;if(L>=0&&L+x<=r&&j>=0&&j+k<=i)for(m=0;m=i)){U=p[t];_=E[m];for(b=0;b=0&&e>1&7),c=1+(r>>4&7),l=[];let h,u,d=i;do{h=s.readBits(o);u=s.readBits(c);l.push(new HuffmanLine([d,h,u,0]));d+=1<>t&1;if(t<=0)this.children[a]=new HuffmanTreeNode(e);else{let r=this.children[a];r||(this.children[a]=r=new HuffmanTreeNode(null));r.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new Jbig2Error("invalid Huffman data");return t.decodeNode(e)}}class HuffmanTable{constructor(e,t){t||this.assignPrefixCodes(e);this.rootNode=new HuffmanTreeNode(null);for(let t=0,a=e.length;t0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let a=0;for(let r=0;r=this.end)throw new Jbig2Error("end of data while reading bit");this.currentByte=this.data[this.position++];this.shift=7}const e=this.currentByte>>this.shift&1;this.shift--;return e}readBits(e){let t,a=0;for(t=e-1;t>=0;t--)a|=this.readBit()<=this.end?-1:this.data[this.position++]}}function getCustomHuffmanTable(e,t,a){let r=0;for(let i=0,n=t.length;i>a&1;a--}}if(r&&!o){const e=5;for(let t=0;t>>t&(1<0;if(e<256){d[0]=e;f=1}else{if(!(e>=258)){if(256===e){h=9;s=258;f=0;continue}this.eof=!0;delete this.lzwState;break}if(e=0;t--){d[t]=o[a];a=l[a]}}else d[f++]=d[0]}if(i){l[s]=u;c[s]=c[u]+1;o[s]=d[0];s++;h=s+n&s+n-1?h:0|Math.min(Math.log(s+n)/.6931471805599453+1,12)}u=e;g+=f;if(r15))throw new FormatError(`Unsupported predictor: ${r}`);this.readBlock=2===r?this.readBlockTiff:this.readBlockPng;this.str=e;this.dict=e.dict;const i=this.colors=a.get("Colors")||1,n=this.bits=a.get("BPC","BitsPerComponent")||8,s=this.columns=a.get("Columns")||1;this.pixBytes=i*n+7>>3;this.rowBytes=s*i*n+7>>3;return this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,a=this.ensureBuffer(t+e),r=this.bits,i=this.colors,n=this.str.getBytes(e);this.eof=!n.length;if(this.eof)return;let s,o=0,c=0,l=0,h=0,u=t;if(1===r&&1===i)for(s=0;s>1;e^=e>>2;e^=e>>4;o=(1&e)<<7;a[u++]=e}else if(8===r){for(s=0;s>8&255;a[u++]=255&e}}else{const e=new Uint8Array(i+1),u=(1<>l-r)&u;l-=r;c=c<=8){a[f++]=c>>h-8&255;h-=8}}h>0&&(a[f++]=(c<<8-h)+(o&(1<<8-h)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,a=this.str.getByte(),r=this.str.getBytes(e);this.eof=!r.length;if(this.eof)return;const i=this.bufferLength,n=this.ensureBuffer(i+e);let s=n.subarray(i-e,i);0===s.length&&(s=new Uint8Array(e));let o,c,l,h=i;switch(a){case 0:for(o=0;o>1)+r[o];for(;o>1)+r[o]&255;h++}break;case 4:for(o=0;o0){const e=this.str.getBytes(r);t.set(e,a);a+=r}}else{r=257-r;t=this.ensureBuffer(a+r+1);t.fill(e[1],a,a+r);a+=r}this.bufferLength=a}}class Parser{constructor({lexer:e,xref:t,allowStreams:a=!1,recoveryMode:r=!1}){this.lexer=e;this.xref=t;this.allowStreams=a;this.recoveryMode=r;this.imageCache=Object.create(null);this._imageId=0;this.refill()}refill(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()}shift(){if(this.buf2 instanceof Cmd&&"ID"===this.buf2.cmd){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}}tryShift(){try{this.shift();return!0}catch(e){if(e instanceof MissingDataException)throw e;return!1}}getObj(e=null){const t=this.buf1;this.shift();if(t instanceof Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const a=[];for(;!isCmd(this.buf1,"]")&&this.buf1!==wa;)a.push(this.getObj(e));if(this.buf1===wa){if(this.recoveryMode)return a;throw new ParserEOFException("End of file inside array.")}this.shift();return a;case"<<":const r=new Dict(this.xref);for(;!isCmd(this.buf1,">>")&&this.buf1!==wa;){if(!(this.buf1 instanceof Name)){info("Malformed dictionary: key must be a name object");this.shift();continue}const t=this.buf1.name;this.shift();if(this.buf1===wa)break;r.set(t,this.getObj(e))}if(this.buf1===wa){if(this.recoveryMode)return r;throw new ParserEOFException("End of file inside dictionary.")}if(isCmd(this.buf2,"stream"))return this.allowStreams?this.makeStream(r,e):r;this.shift();return r;default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&isCmd(this.buf2,"R")){const e=Ref.get(t,this.buf1);this.shift();this.shift();return e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,a=e.pos;let r,i,n=0;for(;-1!==(r=e.getByte());)if(0===n)n=69===r?1:0;else if(1===n)n=73===r?2:0;else if(32===r||10===r||13===r){i=e.pos;const a=e.peekBytes(15),s=a.length;if(0===s)break;for(let e=0;e127))){n=0;break}}if(2!==n)continue;if(!t){warn("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}const o=new Lexer(new Stream(e.peekBytes(75)),t);o._hexStringWarn=()=>{};let c=0;for(;;){const e=o.getObj();if(e===wa){n=0;break}if(e instanceof Cmd){const a=t[e.cmd];if(!a){n=0;break}if(a.variableArgs?c<=a.numArgs:c===a.numArgs)break;c=0}else c++}if(2===n)break}else n=0;if(-1===r){warn("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker");if(i){warn('... trying to recover by using the last "EI" occurrence.');e.skip(-(e.pos-i))}}let s=4;e.skip(-s);r=e.peekByte();e.skip(s);isWhiteSpace(r)||s--;return e.pos-s-a}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let a,r,i=!1;for(;-1!==(a=e.getByte());)if(255===a){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:r=e.getUint16();r>2?e.skip(r-2):e.skip(-2)}if(i)break}const n=e.pos-t;if(-1===a){warn("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead.");e.skip(-n);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return n}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte());)if(126===a){const t=e.pos;a=e.peekByte();for(;isWhiteSpace(a);){e.skip();a=e.peekByte()}if(62===a){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const r=e.pos-t;if(-1===a){warn("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let a;for(;-1!==(a=e.getByte())&&62!==a;);const r=e.pos-t;if(-1===a){warn("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead.");e.skip(-r);return this.findDefaultInlineStreamEnd(e)}this.inlineStreamSkipEI(e);return r}inlineStreamSkipEI(e){let t,a=0;for(;-1!==(t=e.getByte());)if(0===a)a=69===t?1:0;else if(1===a)a=73===t?2:0;else if(2===a)break}makeInlineImage(e){const t=this.lexer,a=t.stream,r=Object.create(null);let i;for(;!isCmd(this.buf1,"ID")&&this.buf1!==wa;){if(!(this.buf1 instanceof Name))throw new FormatError("Dictionary key must be a name object");const t=this.buf1.name;this.shift();if(this.buf1===wa)break;r[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(i=a.pos-t.beginInlineImagePos);const n=this.xref.fetchIfRef(r.F||r.Filter);let s;if(n instanceof Name)s=n.name;else if(Array.isArray(n)){const e=this.xref.fetchIfRef(n[0]);e instanceof Name&&(s=e.name)}const o=a.pos;let c,l;switch(s){case"DCT":case"DCTDecode":c=this.findDCTDecodeInlineStreamEnd(a);break;case"A85":case"ASCII85Decode":c=this.findASCII85DecodeInlineStreamEnd(a);break;case"AHx":case"ASCIIHexDecode":c=this.findASCIIHexDecodeInlineStreamEnd(a);break;default:c=this.findDefaultInlineStreamEnd(a)}if(c<1e3&&i>0){const e=a.pos;a.pos=t.beginInlineImagePos;l=function getInlineImageCacheKey(e){const t=[],a=e.length;let r=0;for(;r=r){let r=!1;for(const e of i){const t=e.length;let i=0;for(;i=n){r=!0;break}if(i>=t){if(isWhiteSpace(s[c+o+i])){info(`Found "${bytesToString([...a,...e])}" when searching for endstream command.`);r=!0}break}}if(r){t.pos+=c;return t.pos-e}}c++}t.pos+=o}return-1}makeStream(e,t){const a=this.lexer;let r=a.stream;a.skipToNextLine();const i=r.pos-1;let n=e.get("Length");if(!Number.isInteger(n)){info(`Bad length "${n&&n.toString()}" in stream.`);n=0}r.pos=i+n;a.nextChar();if(this.tryShift()&&isCmd(this.buf2,"endstream"))this.shift();else{n=this.#q(i);if(n<0)throw new FormatError("Missing endstream command.");a.nextChar();this.shift();this.shift()}this.shift();r=r.makeSubStream(i,n,e);t&&(r=t.createStream(r,n));r=this.filter(r,e,n);r.dict=e;return r}filter(e,t,a){let r=t.get("F","Filter"),i=t.get("DP","DecodeParms");if(r instanceof Name){Array.isArray(i)&&warn("/DecodeParms should not be an Array, when /Filter is a Name.");return this.makeFilter(e,r.name,a,i)}let n=a;if(Array.isArray(r)){const t=r,a=i;for(let s=0,o=t.length;s=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class Lexer{constructor(e,t=null){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t;this._hexStringNumWarn=0;this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,a=0,r=1;if(45===e){r=-1;e=this.nextChar();45===e&&(e=this.nextChar())}else 43===e&&(e=this.nextChar());if(10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e){a=10;e=this.nextChar()}if(e<48||e>57){const t=`Invalid number: ${String.fromCharCode(e)} (charCode ${e})`;if(isWhiteSpace(e)||40===e||60===e||-1===e){info(`Lexer.getNumber - "${t}".`);return 0}throw new FormatError(t)}let i=e-48,n=0,s=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const r=e-48;if(t)n=10*n+r;else{0!==a&&(a*=10);i=10*i+r}}else if(46===e){if(0!==a)break;a=1}else if(45===e)warn("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;e=this.peekChar();if(43===e||45===e){s=45===e?-1:1;this.nextChar()}else if(e<48||e>57)break;t=!0}0!==a&&(i/=a);t&&(i*=10**(s*n));return r*i}getString(){let e=1,t=!1;const a=this.strBuf;a.length=0;let r=this.nextChar();for(;;){let i=!1;switch(0|r){case-1:warn("Unterminated string");t=!0;break;case 40:++e;a.push("(");break;case 41:if(0==--e){this.nextChar();t=!0}else a.push(")");break;case 92:r=this.nextChar();switch(r){case-1:warn("Unterminated string");t=!0;break;case 110:a.push("\n");break;case 114:a.push("\r");break;case 116:a.push("\t");break;case 98:a.push("\b");break;case 102:a.push("\f");break;case 92:case 40:case 41:a.push(String.fromCharCode(r));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&r;r=this.nextChar();i=!0;if(r>=48&&r<=55){e=(e<<3)+(15&r);r=this.nextChar();if(r>=48&&r<=55){i=!1;e=(e<<3)+(15&r)}}a.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:a.push(String.fromCharCode(r))}break;default:a.push(String.fromCharCode(r))}if(t)break;i||(r=this.nextChar())}return a.join("")}getName(){let e,t;const a=this.strBuf;a.length=0;for(;(e=this.nextChar())>=0&&!mr[e];)if(35===e){e=this.nextChar();if(mr[e]){warn("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number.");a.push("#");break}const r=toHexDigit(e);if(-1!==r){t=e;e=this.nextChar();const i=toHexDigit(e);if(-1===i){warn(`Lexer_getName: Illegal digit (${String.fromCharCode(e)}) in hexadecimal number.`);a.push("#",String.fromCharCode(t));if(mr[e])break;a.push(String.fromCharCode(e));continue}a.push(String.fromCharCode(r<<4|i))}else a.push("#",String.fromCharCode(e))}else a.push(String.fromCharCode(e));a.length>127&&warn(`Name token is longer than allowed by the spec: ${a.length}`);return Name.get(a.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||warn(`getHexString - ignoring invalid character: ${e}`):warn("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t=this.currentChar,a=-1,r=-1;this._hexStringNumWarn=0;for(;;){if(t<0){warn("Unterminated hex string");break}if(62===t){this.nextChar();break}if(1!==mr[t]){r=toHexDigit(t);if(-1===r)this._hexStringWarn(t);else if(-1===a)a=r;else{e.push(String.fromCharCode(a<<4|r));a=-1}t=this.nextChar()}else t=this.nextChar()}-1!==a&&e.push(String.fromCharCode(a<<4));return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return wa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==mr[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return Cmd.get("[");case 93:this.nextChar();return Cmd.get("]");case 60:t=this.nextChar();if(60===t){this.nextChar();return Cmd.get("<<")}return this.getHexString();case 62:t=this.nextChar();if(62===t){this.nextChar();return Cmd.get(">>")}return Cmd.get(">");case 123:this.nextChar();return Cmd.get("{");case 125:this.nextChar();return Cmd.get("}");case 41:this.nextChar();throw new FormatError(`Illegal character: ${t}`)}let a=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127){this.nextChar();return Cmd.get(a)}}const r=this.knownCommands;let i=void 0!==r?.[a];for(;(t=this.nextChar())>=0&&!mr[t];){const e=a+String.fromCharCode(t);if(i&&void 0===r[e])break;if(128===a.length)throw new FormatError(`Command token too long: ${a.length}`);a=e;i=void 0!==r?.[a]}if("true"===a)return!0;if("false"===a)return!1;if("null"===a)return null;"BI"===a&&(this.beginInlineImagePos=this.stream.pos);return Cmd.get(a)}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar();10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}class Linearization{static create(e){function getInt(e,t,a=!1){const r=e.get(t);if(Number.isInteger(r)&&(a?r>=0:r>0))return r;throw new Error(`The "${t}" parameter in the linearization dictionary is invalid.`)}const t=new Parser({lexer:new Lexer(e),xref:null}),a=t.getObj(),r=t.getObj(),i=t.getObj(),n=t.getObj();let s,o;if(!(Number.isInteger(a)&&Number.isInteger(r)&&isCmd(i,"obj")&&n instanceof Dict&&"number"==typeof(s=n.get("Linearized"))&&s>0))return null;if((o=getInt(n,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:o,hints:function getHints(e){const t=e.get("H");let a;if(Array.isArray(t)&&(2===(a=t.length)||4===a)){for(let e=0;e0))throw new Error(`Hint (${e}) in the linearization dictionary is invalid.`)}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(n),objectNumberFirst:getInt(n,"O"),endFirst:getInt(n,"E"),numPages:getInt(n,"N"),mainXRefEntriesOffset:getInt(n,"T"),pageFirst:n.has("P")?getInt(n,"P",!0):0}}}const br=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],yr=2**24-1;class CMap{constructor(e=!1){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name="";this.vertical=!1;this.useCMap=null;this.builtInCMap=e}addCodespaceRange(e,t,a){this.codespaceRanges[e-1].push(t,a);this.numCodespaceRanges++}mapCidRange(e,t,a){if(t-e>yr)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=a++}mapBfRange(e,t,a){if(t-e>yr)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const r=a.length-1;for(;e<=t;){this._map[e++]=a;const t=a.charCodeAt(r)+1;t>255?a=a.substring(0,r-1)+String.fromCharCode(a.charCodeAt(r-1)+1)+"\0":a=a.substring(0,r)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,a){if(t-e>yr)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const r=a.length;let i=0;for(;e<=t&&i>>0;const s=i[n];for(let e=0,t=s.length;e=t&&r<=i){a.charcode=r;a.length=n+1;return}}}a.charcode=0;a.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let a=0,r=t.length;a=i&&e<=n)return a+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}class IdentityCMap extends CMap{constructor(e,t){super();this.vertical=e;this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,a){unreachable("should not call mapCidRange")}mapBfRange(e,t,a){unreachable("should not call mapBfRange")}mapBfRangeToArray(e,t,a){unreachable("should not call mapBfRangeToArray")}mapOne(e,t){unreachable("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){unreachable("should not access .isIdentityCMap")}}function strToInt(e){let t=0;for(let a=0;a>>0}function expectString(e){if("string"!=typeof e)throw new FormatError("Malformed CMap: expected string.")}function expectInt(e){if(!Number.isInteger(e))throw new FormatError("Malformed CMap: expected int.")}function parseBfChar(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endbfchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=a;e.mapOne(r,i)}}function parseBfRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endbfrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();if(Number.isInteger(a)||"string"==typeof a){const t=Number.isInteger(a)?String.fromCharCode(a):a;e.mapBfRange(r,i,t)}else{if(!isCmd(a,"["))break;{a=t.getObj();const n=[];for(;!isCmd(a,"]")&&a!==wa;){n.push(a);a=t.getObj()}e.mapBfRangeToArray(r,i,n)}}}throw new FormatError("Invalid bf range.")}function parseCidChar(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcidchar"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectInt(a);const i=a;e.mapOne(r,i)}}function parseCidRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcidrange"))return;expectString(a);const r=strToInt(a);a=t.getObj();expectString(a);const i=strToInt(a);a=t.getObj();expectInt(a);const n=a;e.mapCidRange(r,i,n)}}function parseCodespaceRange(e,t){for(;;){let a=t.getObj();if(a===wa)break;if(isCmd(a,"endcodespacerange"))return;if("string"!=typeof a)break;const r=strToInt(a);a=t.getObj();if("string"!=typeof a)break;const i=strToInt(a);e.addCodespaceRange(a.length,r,i)}throw new FormatError("Invalid codespace range.")}function parseWMode(e,t){const a=t.getObj();Number.isInteger(a)&&(e.vertical=!!a)}function parseCMapName(e,t){const a=t.getObj();a instanceof Name&&(e.name=a.name)}async function parseCMap(e,t,a,r){let i,n;e:for(;;)try{const a=t.getObj();if(a===wa)break;if(a instanceof Name){"WMode"===a.name?parseWMode(e,t):"CMapName"===a.name&&parseCMapName(e,t);i=a}else if(a instanceof Cmd)switch(a.cmd){case"endcmap":break e;case"usecmap":i instanceof Name&&(n=i.name);break;case"begincodespacerange":parseCodespaceRange(e,t);break;case"beginbfchar":parseBfChar(e,t);break;case"begincidchar":parseCidChar(e,t);break;case"beginbfrange":parseBfRange(e,t);break;case"begincidrange":parseCidRange(e,t)}}catch(e){if(e instanceof MissingDataException)throw e;warn("Invalid cMap data: "+e);continue}!r&&n&&(r=n);return r?extendCMap(e,a,r):e}async function extendCMap(e,t,a){e.useCMap=await createBuiltInCMap(a,t);if(0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let a=0;aextendCMap(i,t,e)));const n=new Lexer(new Stream(a));return parseCMap(i,n,t,null)}class CMapFactory{static async create({encoding:e,fetchBuiltInCMap:t,useCMap:a}){if(e instanceof Name)return createBuiltInCMap(e.name,t);if(e instanceof BaseStream){const r=await parseCMap(new CMap,new Lexer(e),t,a);return r.isIdentityCMap?createBuiltInCMap(r.name,t):r}throw new Error("Encoding required.")}}const wr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],Sr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],xr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],Ar=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""],kr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],Cr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""],vr=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];function getEncoding(e){switch(e){case"WinAnsiEncoding":return kr;case"StandardEncoding":return Ar;case"MacRomanEncoding":return xr;case"SymbolSetEncoding":return Cr;case"ZapfDingbatsEncoding":return vr;case"ExpertEncoding":return wr;case"MacExpertEncoding":return Sr;default:return null}}const Fr=getLookupTableFactory((function(e){e.A=65;e.AE=198;e.AEacute=508;e.AEmacron=482;e.AEsmall=63462;e.Aacute=193;e.Aacutesmall=63457;e.Abreve=258;e.Abreveacute=7854;e.Abrevecyrillic=1232;e.Abrevedotbelow=7862;e.Abrevegrave=7856;e.Abrevehookabove=7858;e.Abrevetilde=7860;e.Acaron=461;e.Acircle=9398;e.Acircumflex=194;e.Acircumflexacute=7844;e.Acircumflexdotbelow=7852;e.Acircumflexgrave=7846;e.Acircumflexhookabove=7848;e.Acircumflexsmall=63458;e.Acircumflextilde=7850;e.Acute=63177;e.Acutesmall=63412;e.Acyrillic=1040;e.Adblgrave=512;e.Adieresis=196;e.Adieresiscyrillic=1234;e.Adieresismacron=478;e.Adieresissmall=63460;e.Adotbelow=7840;e.Adotmacron=480;e.Agrave=192;e.Agravesmall=63456;e.Ahookabove=7842;e.Aiecyrillic=1236;e.Ainvertedbreve=514;e.Alpha=913;e.Alphatonos=902;e.Amacron=256;e.Amonospace=65313;e.Aogonek=260;e.Aring=197;e.Aringacute=506;e.Aringbelow=7680;e.Aringsmall=63461;e.Asmall=63329;e.Atilde=195;e.Atildesmall=63459;e.Aybarmenian=1329;e.B=66;e.Bcircle=9399;e.Bdotaccent=7682;e.Bdotbelow=7684;e.Becyrillic=1041;e.Benarmenian=1330;e.Beta=914;e.Bhook=385;e.Blinebelow=7686;e.Bmonospace=65314;e.Brevesmall=63220;e.Bsmall=63330;e.Btopbar=386;e.C=67;e.Caarmenian=1342;e.Cacute=262;e.Caron=63178;e.Caronsmall=63221;e.Ccaron=268;e.Ccedilla=199;e.Ccedillaacute=7688;e.Ccedillasmall=63463;e.Ccircle=9400;e.Ccircumflex=264;e.Cdot=266;e.Cdotaccent=266;e.Cedillasmall=63416;e.Chaarmenian=1353;e.Cheabkhasiancyrillic=1212;e.Checyrillic=1063;e.Chedescenderabkhasiancyrillic=1214;e.Chedescendercyrillic=1206;e.Chedieresiscyrillic=1268;e.Cheharmenian=1347;e.Chekhakassiancyrillic=1227;e.Cheverticalstrokecyrillic=1208;e.Chi=935;e.Chook=391;e.Circumflexsmall=63222;e.Cmonospace=65315;e.Coarmenian=1361;e.Csmall=63331;e.D=68;e.DZ=497;e.DZcaron=452;e.Daarmenian=1332;e.Dafrican=393;e.Dcaron=270;e.Dcedilla=7696;e.Dcircle=9401;e.Dcircumflexbelow=7698;e.Dcroat=272;e.Ddotaccent=7690;e.Ddotbelow=7692;e.Decyrillic=1044;e.Deicoptic=1006;e.Delta=8710;e.Deltagreek=916;e.Dhook=394;e.Dieresis=63179;e.DieresisAcute=63180;e.DieresisGrave=63181;e.Dieresissmall=63400;e.Digammagreek=988;e.Djecyrillic=1026;e.Dlinebelow=7694;e.Dmonospace=65316;e.Dotaccentsmall=63223;e.Dslash=272;e.Dsmall=63332;e.Dtopbar=395;e.Dz=498;e.Dzcaron=453;e.Dzeabkhasiancyrillic=1248;e.Dzecyrillic=1029;e.Dzhecyrillic=1039;e.E=69;e.Eacute=201;e.Eacutesmall=63465;e.Ebreve=276;e.Ecaron=282;e.Ecedillabreve=7708;e.Echarmenian=1333;e.Ecircle=9402;e.Ecircumflex=202;e.Ecircumflexacute=7870;e.Ecircumflexbelow=7704;e.Ecircumflexdotbelow=7878;e.Ecircumflexgrave=7872;e.Ecircumflexhookabove=7874;e.Ecircumflexsmall=63466;e.Ecircumflextilde=7876;e.Ecyrillic=1028;e.Edblgrave=516;e.Edieresis=203;e.Edieresissmall=63467;e.Edot=278;e.Edotaccent=278;e.Edotbelow=7864;e.Efcyrillic=1060;e.Egrave=200;e.Egravesmall=63464;e.Eharmenian=1335;e.Ehookabove=7866;e.Eightroman=8551;e.Einvertedbreve=518;e.Eiotifiedcyrillic=1124;e.Elcyrillic=1051;e.Elevenroman=8554;e.Emacron=274;e.Emacronacute=7702;e.Emacrongrave=7700;e.Emcyrillic=1052;e.Emonospace=65317;e.Encyrillic=1053;e.Endescendercyrillic=1186;e.Eng=330;e.Enghecyrillic=1188;e.Enhookcyrillic=1223;e.Eogonek=280;e.Eopen=400;e.Epsilon=917;e.Epsilontonos=904;e.Ercyrillic=1056;e.Ereversed=398;e.Ereversedcyrillic=1069;e.Escyrillic=1057;e.Esdescendercyrillic=1194;e.Esh=425;e.Esmall=63333;e.Eta=919;e.Etarmenian=1336;e.Etatonos=905;e.Eth=208;e.Ethsmall=63472;e.Etilde=7868;e.Etildebelow=7706;e.Euro=8364;e.Ezh=439;e.Ezhcaron=494;e.Ezhreversed=440;e.F=70;e.Fcircle=9403;e.Fdotaccent=7710;e.Feharmenian=1366;e.Feicoptic=996;e.Fhook=401;e.Fitacyrillic=1138;e.Fiveroman=8548;e.Fmonospace=65318;e.Fourroman=8547;e.Fsmall=63334;e.G=71;e.GBsquare=13191;e.Gacute=500;e.Gamma=915;e.Gammaafrican=404;e.Gangiacoptic=1002;e.Gbreve=286;e.Gcaron=486;e.Gcedilla=290;e.Gcircle=9404;e.Gcircumflex=284;e.Gcommaaccent=290;e.Gdot=288;e.Gdotaccent=288;e.Gecyrillic=1043;e.Ghadarmenian=1346;e.Ghemiddlehookcyrillic=1172;e.Ghestrokecyrillic=1170;e.Gheupturncyrillic=1168;e.Ghook=403;e.Gimarmenian=1331;e.Gjecyrillic=1027;e.Gmacron=7712;e.Gmonospace=65319;e.Grave=63182;e.Gravesmall=63328;e.Gsmall=63335;e.Gsmallhook=667;e.Gstroke=484;e.H=72;e.H18533=9679;e.H18543=9642;e.H18551=9643;e.H22073=9633;e.HPsquare=13259;e.Haabkhasiancyrillic=1192;e.Hadescendercyrillic=1202;e.Hardsigncyrillic=1066;e.Hbar=294;e.Hbrevebelow=7722;e.Hcedilla=7720;e.Hcircle=9405;e.Hcircumflex=292;e.Hdieresis=7718;e.Hdotaccent=7714;e.Hdotbelow=7716;e.Hmonospace=65320;e.Hoarmenian=1344;e.Horicoptic=1e3;e.Hsmall=63336;e.Hungarumlaut=63183;e.Hungarumlautsmall=63224;e.Hzsquare=13200;e.I=73;e.IAcyrillic=1071;e.IJ=306;e.IUcyrillic=1070;e.Iacute=205;e.Iacutesmall=63469;e.Ibreve=300;e.Icaron=463;e.Icircle=9406;e.Icircumflex=206;e.Icircumflexsmall=63470;e.Icyrillic=1030;e.Idblgrave=520;e.Idieresis=207;e.Idieresisacute=7726;e.Idieresiscyrillic=1252;e.Idieresissmall=63471;e.Idot=304;e.Idotaccent=304;e.Idotbelow=7882;e.Iebrevecyrillic=1238;e.Iecyrillic=1045;e.Ifraktur=8465;e.Igrave=204;e.Igravesmall=63468;e.Ihookabove=7880;e.Iicyrillic=1048;e.Iinvertedbreve=522;e.Iishortcyrillic=1049;e.Imacron=298;e.Imacroncyrillic=1250;e.Imonospace=65321;e.Iniarmenian=1339;e.Iocyrillic=1025;e.Iogonek=302;e.Iota=921;e.Iotaafrican=406;e.Iotadieresis=938;e.Iotatonos=906;e.Ismall=63337;e.Istroke=407;e.Itilde=296;e.Itildebelow=7724;e.Izhitsacyrillic=1140;e.Izhitsadblgravecyrillic=1142;e.J=74;e.Jaarmenian=1345;e.Jcircle=9407;e.Jcircumflex=308;e.Jecyrillic=1032;e.Jheharmenian=1355;e.Jmonospace=65322;e.Jsmall=63338;e.K=75;e.KBsquare=13189;e.KKsquare=13261;e.Kabashkircyrillic=1184;e.Kacute=7728;e.Kacyrillic=1050;e.Kadescendercyrillic=1178;e.Kahookcyrillic=1219;e.Kappa=922;e.Kastrokecyrillic=1182;e.Kaverticalstrokecyrillic=1180;e.Kcaron=488;e.Kcedilla=310;e.Kcircle=9408;e.Kcommaaccent=310;e.Kdotbelow=7730;e.Keharmenian=1364;e.Kenarmenian=1343;e.Khacyrillic=1061;e.Kheicoptic=998;e.Khook=408;e.Kjecyrillic=1036;e.Klinebelow=7732;e.Kmonospace=65323;e.Koppacyrillic=1152;e.Koppagreek=990;e.Ksicyrillic=1134;e.Ksmall=63339;e.L=76;e.LJ=455;e.LL=63167;e.Lacute=313;e.Lambda=923;e.Lcaron=317;e.Lcedilla=315;e.Lcircle=9409;e.Lcircumflexbelow=7740;e.Lcommaaccent=315;e.Ldot=319;e.Ldotaccent=319;e.Ldotbelow=7734;e.Ldotbelowmacron=7736;e.Liwnarmenian=1340;e.Lj=456;e.Ljecyrillic=1033;e.Llinebelow=7738;e.Lmonospace=65324;e.Lslash=321;e.Lslashsmall=63225;e.Lsmall=63340;e.M=77;e.MBsquare=13190;e.Macron=63184;e.Macronsmall=63407;e.Macute=7742;e.Mcircle=9410;e.Mdotaccent=7744;e.Mdotbelow=7746;e.Menarmenian=1348;e.Mmonospace=65325;e.Msmall=63341;e.Mturned=412;e.Mu=924;e.N=78;e.NJ=458;e.Nacute=323;e.Ncaron=327;e.Ncedilla=325;e.Ncircle=9411;e.Ncircumflexbelow=7754;e.Ncommaaccent=325;e.Ndotaccent=7748;e.Ndotbelow=7750;e.Nhookleft=413;e.Nineroman=8552;e.Nj=459;e.Njecyrillic=1034;e.Nlinebelow=7752;e.Nmonospace=65326;e.Nowarmenian=1350;e.Nsmall=63342;e.Ntilde=209;e.Ntildesmall=63473;e.Nu=925;e.O=79;e.OE=338;e.OEsmall=63226;e.Oacute=211;e.Oacutesmall=63475;e.Obarredcyrillic=1256;e.Obarreddieresiscyrillic=1258;e.Obreve=334;e.Ocaron=465;e.Ocenteredtilde=415;e.Ocircle=9412;e.Ocircumflex=212;e.Ocircumflexacute=7888;e.Ocircumflexdotbelow=7896;e.Ocircumflexgrave=7890;e.Ocircumflexhookabove=7892;e.Ocircumflexsmall=63476;e.Ocircumflextilde=7894;e.Ocyrillic=1054;e.Odblacute=336;e.Odblgrave=524;e.Odieresis=214;e.Odieresiscyrillic=1254;e.Odieresissmall=63478;e.Odotbelow=7884;e.Ogoneksmall=63227;e.Ograve=210;e.Ogravesmall=63474;e.Oharmenian=1365;e.Ohm=8486;e.Ohookabove=7886;e.Ohorn=416;e.Ohornacute=7898;e.Ohorndotbelow=7906;e.Ohorngrave=7900;e.Ohornhookabove=7902;e.Ohorntilde=7904;e.Ohungarumlaut=336;e.Oi=418;e.Oinvertedbreve=526;e.Omacron=332;e.Omacronacute=7762;e.Omacrongrave=7760;e.Omega=8486;e.Omegacyrillic=1120;e.Omegagreek=937;e.Omegaroundcyrillic=1146;e.Omegatitlocyrillic=1148;e.Omegatonos=911;e.Omicron=927;e.Omicrontonos=908;e.Omonospace=65327;e.Oneroman=8544;e.Oogonek=490;e.Oogonekmacron=492;e.Oopen=390;e.Oslash=216;e.Oslashacute=510;e.Oslashsmall=63480;e.Osmall=63343;e.Ostrokeacute=510;e.Otcyrillic=1150;e.Otilde=213;e.Otildeacute=7756;e.Otildedieresis=7758;e.Otildesmall=63477;e.P=80;e.Pacute=7764;e.Pcircle=9413;e.Pdotaccent=7766;e.Pecyrillic=1055;e.Peharmenian=1354;e.Pemiddlehookcyrillic=1190;e.Phi=934;e.Phook=420;e.Pi=928;e.Piwrarmenian=1363;e.Pmonospace=65328;e.Psi=936;e.Psicyrillic=1136;e.Psmall=63344;e.Q=81;e.Qcircle=9414;e.Qmonospace=65329;e.Qsmall=63345;e.R=82;e.Raarmenian=1356;e.Racute=340;e.Rcaron=344;e.Rcedilla=342;e.Rcircle=9415;e.Rcommaaccent=342;e.Rdblgrave=528;e.Rdotaccent=7768;e.Rdotbelow=7770;e.Rdotbelowmacron=7772;e.Reharmenian=1360;e.Rfraktur=8476;e.Rho=929;e.Ringsmall=63228;e.Rinvertedbreve=530;e.Rlinebelow=7774;e.Rmonospace=65330;e.Rsmall=63346;e.Rsmallinverted=641;e.Rsmallinvertedsuperior=694;e.S=83;e.SF010000=9484;e.SF020000=9492;e.SF030000=9488;e.SF040000=9496;e.SF050000=9532;e.SF060000=9516;e.SF070000=9524;e.SF080000=9500;e.SF090000=9508;e.SF100000=9472;e.SF110000=9474;e.SF190000=9569;e.SF200000=9570;e.SF210000=9558;e.SF220000=9557;e.SF230000=9571;e.SF240000=9553;e.SF250000=9559;e.SF260000=9565;e.SF270000=9564;e.SF280000=9563;e.SF360000=9566;e.SF370000=9567;e.SF380000=9562;e.SF390000=9556;e.SF400000=9577;e.SF410000=9574;e.SF420000=9568;e.SF430000=9552;e.SF440000=9580;e.SF450000=9575;e.SF460000=9576;e.SF470000=9572;e.SF480000=9573;e.SF490000=9561;e.SF500000=9560;e.SF510000=9554;e.SF520000=9555;e.SF530000=9579;e.SF540000=9578;e.Sacute=346;e.Sacutedotaccent=7780;e.Sampigreek=992;e.Scaron=352;e.Scarondotaccent=7782;e.Scaronsmall=63229;e.Scedilla=350;e.Schwa=399;e.Schwacyrillic=1240;e.Schwadieresiscyrillic=1242;e.Scircle=9416;e.Scircumflex=348;e.Scommaaccent=536;e.Sdotaccent=7776;e.Sdotbelow=7778;e.Sdotbelowdotaccent=7784;e.Seharmenian=1357;e.Sevenroman=8550;e.Shaarmenian=1351;e.Shacyrillic=1064;e.Shchacyrillic=1065;e.Sheicoptic=994;e.Shhacyrillic=1210;e.Shimacoptic=1004;e.Sigma=931;e.Sixroman=8549;e.Smonospace=65331;e.Softsigncyrillic=1068;e.Ssmall=63347;e.Stigmagreek=986;e.T=84;e.Tau=932;e.Tbar=358;e.Tcaron=356;e.Tcedilla=354;e.Tcircle=9417;e.Tcircumflexbelow=7792;e.Tcommaaccent=354;e.Tdotaccent=7786;e.Tdotbelow=7788;e.Tecyrillic=1058;e.Tedescendercyrillic=1196;e.Tenroman=8553;e.Tetsecyrillic=1204;e.Theta=920;e.Thook=428;e.Thorn=222;e.Thornsmall=63486;e.Threeroman=8546;e.Tildesmall=63230;e.Tiwnarmenian=1359;e.Tlinebelow=7790;e.Tmonospace=65332;e.Toarmenian=1337;e.Tonefive=444;e.Tonesix=388;e.Tonetwo=423;e.Tretroflexhook=430;e.Tsecyrillic=1062;e.Tshecyrillic=1035;e.Tsmall=63348;e.Twelveroman=8555;e.Tworoman=8545;e.U=85;e.Uacute=218;e.Uacutesmall=63482;e.Ubreve=364;e.Ucaron=467;e.Ucircle=9418;e.Ucircumflex=219;e.Ucircumflexbelow=7798;e.Ucircumflexsmall=63483;e.Ucyrillic=1059;e.Udblacute=368;e.Udblgrave=532;e.Udieresis=220;e.Udieresisacute=471;e.Udieresisbelow=7794;e.Udieresiscaron=473;e.Udieresiscyrillic=1264;e.Udieresisgrave=475;e.Udieresismacron=469;e.Udieresissmall=63484;e.Udotbelow=7908;e.Ugrave=217;e.Ugravesmall=63481;e.Uhookabove=7910;e.Uhorn=431;e.Uhornacute=7912;e.Uhorndotbelow=7920;e.Uhorngrave=7914;e.Uhornhookabove=7916;e.Uhorntilde=7918;e.Uhungarumlaut=368;e.Uhungarumlautcyrillic=1266;e.Uinvertedbreve=534;e.Ukcyrillic=1144;e.Umacron=362;e.Umacroncyrillic=1262;e.Umacrondieresis=7802;e.Umonospace=65333;e.Uogonek=370;e.Upsilon=933;e.Upsilon1=978;e.Upsilonacutehooksymbolgreek=979;e.Upsilonafrican=433;e.Upsilondieresis=939;e.Upsilondieresishooksymbolgreek=980;e.Upsilonhooksymbol=978;e.Upsilontonos=910;e.Uring=366;e.Ushortcyrillic=1038;e.Usmall=63349;e.Ustraightcyrillic=1198;e.Ustraightstrokecyrillic=1200;e.Utilde=360;e.Utildeacute=7800;e.Utildebelow=7796;e.V=86;e.Vcircle=9419;e.Vdotbelow=7806;e.Vecyrillic=1042;e.Vewarmenian=1358;e.Vhook=434;e.Vmonospace=65334;e.Voarmenian=1352;e.Vsmall=63350;e.Vtilde=7804;e.W=87;e.Wacute=7810;e.Wcircle=9420;e.Wcircumflex=372;e.Wdieresis=7812;e.Wdotaccent=7814;e.Wdotbelow=7816;e.Wgrave=7808;e.Wmonospace=65335;e.Wsmall=63351;e.X=88;e.Xcircle=9421;e.Xdieresis=7820;e.Xdotaccent=7818;e.Xeharmenian=1341;e.Xi=926;e.Xmonospace=65336;e.Xsmall=63352;e.Y=89;e.Yacute=221;e.Yacutesmall=63485;e.Yatcyrillic=1122;e.Ycircle=9422;e.Ycircumflex=374;e.Ydieresis=376;e.Ydieresissmall=63487;e.Ydotaccent=7822;e.Ydotbelow=7924;e.Yericyrillic=1067;e.Yerudieresiscyrillic=1272;e.Ygrave=7922;e.Yhook=435;e.Yhookabove=7926;e.Yiarmenian=1349;e.Yicyrillic=1031;e.Yiwnarmenian=1362;e.Ymonospace=65337;e.Ysmall=63353;e.Ytilde=7928;e.Yusbigcyrillic=1130;e.Yusbigiotifiedcyrillic=1132;e.Yuslittlecyrillic=1126;e.Yuslittleiotifiedcyrillic=1128;e.Z=90;e.Zaarmenian=1334;e.Zacute=377;e.Zcaron=381;e.Zcaronsmall=63231;e.Zcircle=9423;e.Zcircumflex=7824;e.Zdot=379;e.Zdotaccent=379;e.Zdotbelow=7826;e.Zecyrillic=1047;e.Zedescendercyrillic=1176;e.Zedieresiscyrillic=1246;e.Zeta=918;e.Zhearmenian=1338;e.Zhebrevecyrillic=1217;e.Zhecyrillic=1046;e.Zhedescendercyrillic=1174;e.Zhedieresiscyrillic=1244;e.Zlinebelow=7828;e.Zmonospace=65338;e.Zsmall=63354;e.Zstroke=437;e.a=97;e.aabengali=2438;e.aacute=225;e.aadeva=2310;e.aagujarati=2694;e.aagurmukhi=2566;e.aamatragurmukhi=2622;e.aarusquare=13059;e.aavowelsignbengali=2494;e.aavowelsigndeva=2366;e.aavowelsigngujarati=2750;e.abbreviationmarkarmenian=1375;e.abbreviationsigndeva=2416;e.abengali=2437;e.abopomofo=12570;e.abreve=259;e.abreveacute=7855;e.abrevecyrillic=1233;e.abrevedotbelow=7863;e.abrevegrave=7857;e.abrevehookabove=7859;e.abrevetilde=7861;e.acaron=462;e.acircle=9424;e.acircumflex=226;e.acircumflexacute=7845;e.acircumflexdotbelow=7853;e.acircumflexgrave=7847;e.acircumflexhookabove=7849;e.acircumflextilde=7851;e.acute=180;e.acutebelowcmb=791;e.acutecmb=769;e.acutecomb=769;e.acutedeva=2388;e.acutelowmod=719;e.acutetonecmb=833;e.acyrillic=1072;e.adblgrave=513;e.addakgurmukhi=2673;e.adeva=2309;e.adieresis=228;e.adieresiscyrillic=1235;e.adieresismacron=479;e.adotbelow=7841;e.adotmacron=481;e.ae=230;e.aeacute=509;e.aekorean=12624;e.aemacron=483;e.afii00208=8213;e.afii08941=8356;e.afii10017=1040;e.afii10018=1041;e.afii10019=1042;e.afii10020=1043;e.afii10021=1044;e.afii10022=1045;e.afii10023=1025;e.afii10024=1046;e.afii10025=1047;e.afii10026=1048;e.afii10027=1049;e.afii10028=1050;e.afii10029=1051;e.afii10030=1052;e.afii10031=1053;e.afii10032=1054;e.afii10033=1055;e.afii10034=1056;e.afii10035=1057;e.afii10036=1058;e.afii10037=1059;e.afii10038=1060;e.afii10039=1061;e.afii10040=1062;e.afii10041=1063;e.afii10042=1064;e.afii10043=1065;e.afii10044=1066;e.afii10045=1067;e.afii10046=1068;e.afii10047=1069;e.afii10048=1070;e.afii10049=1071;e.afii10050=1168;e.afii10051=1026;e.afii10052=1027;e.afii10053=1028;e.afii10054=1029;e.afii10055=1030;e.afii10056=1031;e.afii10057=1032;e.afii10058=1033;e.afii10059=1034;e.afii10060=1035;e.afii10061=1036;e.afii10062=1038;e.afii10063=63172;e.afii10064=63173;e.afii10065=1072;e.afii10066=1073;e.afii10067=1074;e.afii10068=1075;e.afii10069=1076;e.afii10070=1077;e.afii10071=1105;e.afii10072=1078;e.afii10073=1079;e.afii10074=1080;e.afii10075=1081;e.afii10076=1082;e.afii10077=1083;e.afii10078=1084;e.afii10079=1085;e.afii10080=1086;e.afii10081=1087;e.afii10082=1088;e.afii10083=1089;e.afii10084=1090;e.afii10085=1091;e.afii10086=1092;e.afii10087=1093;e.afii10088=1094;e.afii10089=1095;e.afii10090=1096;e.afii10091=1097;e.afii10092=1098;e.afii10093=1099;e.afii10094=1100;e.afii10095=1101;e.afii10096=1102;e.afii10097=1103;e.afii10098=1169;e.afii10099=1106;e.afii10100=1107;e.afii10101=1108;e.afii10102=1109;e.afii10103=1110;e.afii10104=1111;e.afii10105=1112;e.afii10106=1113;e.afii10107=1114;e.afii10108=1115;e.afii10109=1116;e.afii10110=1118;e.afii10145=1039;e.afii10146=1122;e.afii10147=1138;e.afii10148=1140;e.afii10192=63174;e.afii10193=1119;e.afii10194=1123;e.afii10195=1139;e.afii10196=1141;e.afii10831=63175;e.afii10832=63176;e.afii10846=1241;e.afii299=8206;e.afii300=8207;e.afii301=8205;e.afii57381=1642;e.afii57388=1548;e.afii57392=1632;e.afii57393=1633;e.afii57394=1634;e.afii57395=1635;e.afii57396=1636;e.afii57397=1637;e.afii57398=1638;e.afii57399=1639;e.afii57400=1640;e.afii57401=1641;e.afii57403=1563;e.afii57407=1567;e.afii57409=1569;e.afii57410=1570;e.afii57411=1571;e.afii57412=1572;e.afii57413=1573;e.afii57414=1574;e.afii57415=1575;e.afii57416=1576;e.afii57417=1577;e.afii57418=1578;e.afii57419=1579;e.afii57420=1580;e.afii57421=1581;e.afii57422=1582;e.afii57423=1583;e.afii57424=1584;e.afii57425=1585;e.afii57426=1586;e.afii57427=1587;e.afii57428=1588;e.afii57429=1589;e.afii57430=1590;e.afii57431=1591;e.afii57432=1592;e.afii57433=1593;e.afii57434=1594;e.afii57440=1600;e.afii57441=1601;e.afii57442=1602;e.afii57443=1603;e.afii57444=1604;e.afii57445=1605;e.afii57446=1606;e.afii57448=1608;e.afii57449=1609;e.afii57450=1610;e.afii57451=1611;e.afii57452=1612;e.afii57453=1613;e.afii57454=1614;e.afii57455=1615;e.afii57456=1616;e.afii57457=1617;e.afii57458=1618;e.afii57470=1607;e.afii57505=1700;e.afii57506=1662;e.afii57507=1670;e.afii57508=1688;e.afii57509=1711;e.afii57511=1657;e.afii57512=1672;e.afii57513=1681;e.afii57514=1722;e.afii57519=1746;e.afii57534=1749;e.afii57636=8362;e.afii57645=1470;e.afii57658=1475;e.afii57664=1488;e.afii57665=1489;e.afii57666=1490;e.afii57667=1491;e.afii57668=1492;e.afii57669=1493;e.afii57670=1494;e.afii57671=1495;e.afii57672=1496;e.afii57673=1497;e.afii57674=1498;e.afii57675=1499;e.afii57676=1500;e.afii57677=1501;e.afii57678=1502;e.afii57679=1503;e.afii57680=1504;e.afii57681=1505;e.afii57682=1506;e.afii57683=1507;e.afii57684=1508;e.afii57685=1509;e.afii57686=1510;e.afii57687=1511;e.afii57688=1512;e.afii57689=1513;e.afii57690=1514;e.afii57694=64298;e.afii57695=64299;e.afii57700=64331;e.afii57705=64287;e.afii57716=1520;e.afii57717=1521;e.afii57718=1522;e.afii57723=64309;e.afii57793=1460;e.afii57794=1461;e.afii57795=1462;e.afii57796=1467;e.afii57797=1464;e.afii57798=1463;e.afii57799=1456;e.afii57800=1458;e.afii57801=1457;e.afii57802=1459;e.afii57803=1474;e.afii57804=1473;e.afii57806=1465;e.afii57807=1468;e.afii57839=1469;e.afii57841=1471;e.afii57842=1472;e.afii57929=700;e.afii61248=8453;e.afii61289=8467;e.afii61352=8470;e.afii61573=8236;e.afii61574=8237;e.afii61575=8238;e.afii61664=8204;e.afii63167=1645;e.afii64937=701;e.agrave=224;e.agujarati=2693;e.agurmukhi=2565;e.ahiragana=12354;e.ahookabove=7843;e.aibengali=2448;e.aibopomofo=12574;e.aideva=2320;e.aiecyrillic=1237;e.aigujarati=2704;e.aigurmukhi=2576;e.aimatragurmukhi=2632;e.ainarabic=1593;e.ainfinalarabic=65226;e.aininitialarabic=65227;e.ainmedialarabic=65228;e.ainvertedbreve=515;e.aivowelsignbengali=2504;e.aivowelsigndeva=2376;e.aivowelsigngujarati=2760;e.akatakana=12450;e.akatakanahalfwidth=65393;e.akorean=12623;e.alef=1488;e.alefarabic=1575;e.alefdageshhebrew=64304;e.aleffinalarabic=65166;e.alefhamzaabovearabic=1571;e.alefhamzaabovefinalarabic=65156;e.alefhamzabelowarabic=1573;e.alefhamzabelowfinalarabic=65160;e.alefhebrew=1488;e.aleflamedhebrew=64335;e.alefmaddaabovearabic=1570;e.alefmaddaabovefinalarabic=65154;e.alefmaksuraarabic=1609;e.alefmaksurafinalarabic=65264;e.alefmaksurainitialarabic=65267;e.alefmaksuramedialarabic=65268;e.alefpatahhebrew=64302;e.alefqamatshebrew=64303;e.aleph=8501;e.allequal=8780;e.alpha=945;e.alphatonos=940;e.amacron=257;e.amonospace=65345;e.ampersand=38;e.ampersandmonospace=65286;e.ampersandsmall=63270;e.amsquare=13250;e.anbopomofo=12578;e.angbopomofo=12580;e.angbracketleft=12296;e.angbracketright=12297;e.angkhankhuthai=3674;e.angle=8736;e.anglebracketleft=12296;e.anglebracketleftvertical=65087;e.anglebracketright=12297;e.anglebracketrightvertical=65088;e.angleleft=9001;e.angleright=9002;e.angstrom=8491;e.anoteleia=903;e.anudattadeva=2386;e.anusvarabengali=2434;e.anusvaradeva=2306;e.anusvaragujarati=2690;e.aogonek=261;e.apaatosquare=13056;e.aparen=9372;e.apostrophearmenian=1370;e.apostrophemod=700;e.apple=63743;e.approaches=8784;e.approxequal=8776;e.approxequalorimage=8786;e.approximatelyequal=8773;e.araeaekorean=12686;e.araeakorean=12685;e.arc=8978;e.arighthalfring=7834;e.aring=229;e.aringacute=507;e.aringbelow=7681;e.arrowboth=8596;e.arrowdashdown=8675;e.arrowdashleft=8672;e.arrowdashright=8674;e.arrowdashup=8673;e.arrowdblboth=8660;e.arrowdbldown=8659;e.arrowdblleft=8656;e.arrowdblright=8658;e.arrowdblup=8657;e.arrowdown=8595;e.arrowdownleft=8601;e.arrowdownright=8600;e.arrowdownwhite=8681;e.arrowheaddownmod=709;e.arrowheadleftmod=706;e.arrowheadrightmod=707;e.arrowheadupmod=708;e.arrowhorizex=63719;e.arrowleft=8592;e.arrowleftdbl=8656;e.arrowleftdblstroke=8653;e.arrowleftoverright=8646;e.arrowleftwhite=8678;e.arrowright=8594;e.arrowrightdblstroke=8655;e.arrowrightheavy=10142;e.arrowrightoverleft=8644;e.arrowrightwhite=8680;e.arrowtableft=8676;e.arrowtabright=8677;e.arrowup=8593;e.arrowupdn=8597;e.arrowupdnbse=8616;e.arrowupdownbase=8616;e.arrowupleft=8598;e.arrowupleftofdown=8645;e.arrowupright=8599;e.arrowupwhite=8679;e.arrowvertex=63718;e.asciicircum=94;e.asciicircummonospace=65342;e.asciitilde=126;e.asciitildemonospace=65374;e.ascript=593;e.ascriptturned=594;e.asmallhiragana=12353;e.asmallkatakana=12449;e.asmallkatakanahalfwidth=65383;e.asterisk=42;e.asteriskaltonearabic=1645;e.asteriskarabic=1645;e.asteriskmath=8727;e.asteriskmonospace=65290;e.asterisksmall=65121;e.asterism=8258;e.asuperior=63209;e.asymptoticallyequal=8771;e.at=64;e.atilde=227;e.atmonospace=65312;e.atsmall=65131;e.aturned=592;e.aubengali=2452;e.aubopomofo=12576;e.audeva=2324;e.augujarati=2708;e.augurmukhi=2580;e.aulengthmarkbengali=2519;e.aumatragurmukhi=2636;e.auvowelsignbengali=2508;e.auvowelsigndeva=2380;e.auvowelsigngujarati=2764;e.avagrahadeva=2365;e.aybarmenian=1377;e.ayin=1506;e.ayinaltonehebrew=64288;e.ayinhebrew=1506;e.b=98;e.babengali=2476;e.backslash=92;e.backslashmonospace=65340;e.badeva=2348;e.bagujarati=2732;e.bagurmukhi=2604;e.bahiragana=12400;e.bahtthai=3647;e.bakatakana=12496;e.bar=124;e.barmonospace=65372;e.bbopomofo=12549;e.bcircle=9425;e.bdotaccent=7683;e.bdotbelow=7685;e.beamedsixteenthnotes=9836;e.because=8757;e.becyrillic=1073;e.beharabic=1576;e.behfinalarabic=65168;e.behinitialarabic=65169;e.behiragana=12409;e.behmedialarabic=65170;e.behmeeminitialarabic=64671;e.behmeemisolatedarabic=64520;e.behnoonfinalarabic=64621;e.bekatakana=12505;e.benarmenian=1378;e.bet=1489;e.beta=946;e.betasymbolgreek=976;e.betdagesh=64305;e.betdageshhebrew=64305;e.bethebrew=1489;e.betrafehebrew=64332;e.bhabengali=2477;e.bhadeva=2349;e.bhagujarati=2733;e.bhagurmukhi=2605;e.bhook=595;e.bihiragana=12403;e.bikatakana=12499;e.bilabialclick=664;e.bindigurmukhi=2562;e.birusquare=13105;e.blackcircle=9679;e.blackdiamond=9670;e.blackdownpointingtriangle=9660;e.blackleftpointingpointer=9668;e.blackleftpointingtriangle=9664;e.blacklenticularbracketleft=12304;e.blacklenticularbracketleftvertical=65083;e.blacklenticularbracketright=12305;e.blacklenticularbracketrightvertical=65084;e.blacklowerlefttriangle=9699;e.blacklowerrighttriangle=9698;e.blackrectangle=9644;e.blackrightpointingpointer=9658;e.blackrightpointingtriangle=9654;e.blacksmallsquare=9642;e.blacksmilingface=9787;e.blacksquare=9632;e.blackstar=9733;e.blackupperlefttriangle=9700;e.blackupperrighttriangle=9701;e.blackuppointingsmalltriangle=9652;e.blackuppointingtriangle=9650;e.blank=9251;e.blinebelow=7687;e.block=9608;e.bmonospace=65346;e.bobaimaithai=3610;e.bohiragana=12412;e.bokatakana=12508;e.bparen=9373;e.bqsquare=13251;e.braceex=63732;e.braceleft=123;e.braceleftbt=63731;e.braceleftmid=63730;e.braceleftmonospace=65371;e.braceleftsmall=65115;e.bracelefttp=63729;e.braceleftvertical=65079;e.braceright=125;e.bracerightbt=63742;e.bracerightmid=63741;e.bracerightmonospace=65373;e.bracerightsmall=65116;e.bracerighttp=63740;e.bracerightvertical=65080;e.bracketleft=91;e.bracketleftbt=63728;e.bracketleftex=63727;e.bracketleftmonospace=65339;e.bracketlefttp=63726;e.bracketright=93;e.bracketrightbt=63739;e.bracketrightex=63738;e.bracketrightmonospace=65341;e.bracketrighttp=63737;e.breve=728;e.brevebelowcmb=814;e.brevecmb=774;e.breveinvertedbelowcmb=815;e.breveinvertedcmb=785;e.breveinverteddoublecmb=865;e.bridgebelowcmb=810;e.bridgeinvertedbelowcmb=826;e.brokenbar=166;e.bstroke=384;e.bsuperior=63210;e.btopbar=387;e.buhiragana=12406;e.bukatakana=12502;e.bullet=8226;e.bulletinverse=9688;e.bulletoperator=8729;e.bullseye=9678;e.c=99;e.caarmenian=1390;e.cabengali=2458;e.cacute=263;e.cadeva=2330;e.cagujarati=2714;e.cagurmukhi=2586;e.calsquare=13192;e.candrabindubengali=2433;e.candrabinducmb=784;e.candrabindudeva=2305;e.candrabindugujarati=2689;e.capslock=8682;e.careof=8453;e.caron=711;e.caronbelowcmb=812;e.caroncmb=780;e.carriagereturn=8629;e.cbopomofo=12568;e.ccaron=269;e.ccedilla=231;e.ccedillaacute=7689;e.ccircle=9426;e.ccircumflex=265;e.ccurl=597;e.cdot=267;e.cdotaccent=267;e.cdsquare=13253;e.cedilla=184;e.cedillacmb=807;e.cent=162;e.centigrade=8451;e.centinferior=63199;e.centmonospace=65504;e.centoldstyle=63394;e.centsuperior=63200;e.chaarmenian=1401;e.chabengali=2459;e.chadeva=2331;e.chagujarati=2715;e.chagurmukhi=2587;e.chbopomofo=12564;e.cheabkhasiancyrillic=1213;e.checkmark=10003;e.checyrillic=1095;e.chedescenderabkhasiancyrillic=1215;e.chedescendercyrillic=1207;e.chedieresiscyrillic=1269;e.cheharmenian=1395;e.chekhakassiancyrillic=1228;e.cheverticalstrokecyrillic=1209;e.chi=967;e.chieuchacirclekorean=12919;e.chieuchaparenkorean=12823;e.chieuchcirclekorean=12905;e.chieuchkorean=12618;e.chieuchparenkorean=12809;e.chochangthai=3594;e.chochanthai=3592;e.chochingthai=3593;e.chochoethai=3596;e.chook=392;e.cieucacirclekorean=12918;e.cieucaparenkorean=12822;e.cieuccirclekorean=12904;e.cieuckorean=12616;e.cieucparenkorean=12808;e.cieucuparenkorean=12828;e.circle=9675;e.circlecopyrt=169;e.circlemultiply=8855;e.circleot=8857;e.circleplus=8853;e.circlepostalmark=12342;e.circlewithlefthalfblack=9680;e.circlewithrighthalfblack=9681;e.circumflex=710;e.circumflexbelowcmb=813;e.circumflexcmb=770;e.clear=8999;e.clickalveolar=450;e.clickdental=448;e.clicklateral=449;e.clickretroflex=451;e.club=9827;e.clubsuitblack=9827;e.clubsuitwhite=9831;e.cmcubedsquare=13220;e.cmonospace=65347;e.cmsquaredsquare=13216;e.coarmenian=1409;e.colon=58;e.colonmonetary=8353;e.colonmonospace=65306;e.colonsign=8353;e.colonsmall=65109;e.colontriangularhalfmod=721;e.colontriangularmod=720;e.comma=44;e.commaabovecmb=787;e.commaaboverightcmb=789;e.commaaccent=63171;e.commaarabic=1548;e.commaarmenian=1373;e.commainferior=63201;e.commamonospace=65292;e.commareversedabovecmb=788;e.commareversedmod=701;e.commasmall=65104;e.commasuperior=63202;e.commaturnedabovecmb=786;e.commaturnedmod=699;e.compass=9788;e.congruent=8773;e.contourintegral=8750;e.control=8963;e.controlACK=6;e.controlBEL=7;e.controlBS=8;e.controlCAN=24;e.controlCR=13;e.controlDC1=17;e.controlDC2=18;e.controlDC3=19;e.controlDC4=20;e.controlDEL=127;e.controlDLE=16;e.controlEM=25;e.controlENQ=5;e.controlEOT=4;e.controlESC=27;e.controlETB=23;e.controlETX=3;e.controlFF=12;e.controlFS=28;e.controlGS=29;e.controlHT=9;e.controlLF=10;e.controlNAK=21;e.controlNULL=0;e.controlRS=30;e.controlSI=15;e.controlSO=14;e.controlSOT=2;e.controlSTX=1;e.controlSUB=26;e.controlSYN=22;e.controlUS=31;e.controlVT=11;e.copyright=169;e.copyrightsans=63721;e.copyrightserif=63193;e.cornerbracketleft=12300;e.cornerbracketlefthalfwidth=65378;e.cornerbracketleftvertical=65089;e.cornerbracketright=12301;e.cornerbracketrighthalfwidth=65379;e.cornerbracketrightvertical=65090;e.corporationsquare=13183;e.cosquare=13255;e.coverkgsquare=13254;e.cparen=9374;e.cruzeiro=8354;e.cstretched=663;e.curlyand=8911;e.curlyor=8910;e.currency=164;e.cyrBreve=63185;e.cyrFlex=63186;e.cyrbreve=63188;e.cyrflex=63189;e.d=100;e.daarmenian=1380;e.dabengali=2470;e.dadarabic=1590;e.dadeva=2342;e.dadfinalarabic=65214;e.dadinitialarabic=65215;e.dadmedialarabic=65216;e.dagesh=1468;e.dageshhebrew=1468;e.dagger=8224;e.daggerdbl=8225;e.dagujarati=2726;e.dagurmukhi=2598;e.dahiragana=12384;e.dakatakana=12480;e.dalarabic=1583;e.dalet=1491;e.daletdagesh=64307;e.daletdageshhebrew=64307;e.dalethebrew=1491;e.dalfinalarabic=65194;e.dammaarabic=1615;e.dammalowarabic=1615;e.dammatanaltonearabic=1612;e.dammatanarabic=1612;e.danda=2404;e.dargahebrew=1447;e.dargalefthebrew=1447;e.dasiapneumatacyrilliccmb=1157;e.dblGrave=63187;e.dblanglebracketleft=12298;e.dblanglebracketleftvertical=65085;e.dblanglebracketright=12299;e.dblanglebracketrightvertical=65086;e.dblarchinvertedbelowcmb=811;e.dblarrowleft=8660;e.dblarrowright=8658;e.dbldanda=2405;e.dblgrave=63190;e.dblgravecmb=783;e.dblintegral=8748;e.dbllowline=8215;e.dbllowlinecmb=819;e.dbloverlinecmb=831;e.dblprimemod=698;e.dblverticalbar=8214;e.dblverticallineabovecmb=782;e.dbopomofo=12553;e.dbsquare=13256;e.dcaron=271;e.dcedilla=7697;e.dcircle=9427;e.dcircumflexbelow=7699;e.dcroat=273;e.ddabengali=2465;e.ddadeva=2337;e.ddagujarati=2721;e.ddagurmukhi=2593;e.ddalarabic=1672;e.ddalfinalarabic=64393;e.dddhadeva=2396;e.ddhabengali=2466;e.ddhadeva=2338;e.ddhagujarati=2722;e.ddhagurmukhi=2594;e.ddotaccent=7691;e.ddotbelow=7693;e.decimalseparatorarabic=1643;e.decimalseparatorpersian=1643;e.decyrillic=1076;e.degree=176;e.dehihebrew=1453;e.dehiragana=12391;e.deicoptic=1007;e.dekatakana=12487;e.deleteleft=9003;e.deleteright=8998;e.delta=948;e.deltaturned=397;e.denominatorminusonenumeratorbengali=2552;e.dezh=676;e.dhabengali=2471;e.dhadeva=2343;e.dhagujarati=2727;e.dhagurmukhi=2599;e.dhook=599;e.dialytikatonos=901;e.dialytikatonoscmb=836;e.diamond=9830;e.diamondsuitwhite=9826;e.dieresis=168;e.dieresisacute=63191;e.dieresisbelowcmb=804;e.dieresiscmb=776;e.dieresisgrave=63192;e.dieresistonos=901;e.dihiragana=12386;e.dikatakana=12482;e.dittomark=12291;e.divide=247;e.divides=8739;e.divisionslash=8725;e.djecyrillic=1106;e.dkshade=9619;e.dlinebelow=7695;e.dlsquare=13207;e.dmacron=273;e.dmonospace=65348;e.dnblock=9604;e.dochadathai=3598;e.dodekthai=3604;e.dohiragana=12393;e.dokatakana=12489;e.dollar=36;e.dollarinferior=63203;e.dollarmonospace=65284;e.dollaroldstyle=63268;e.dollarsmall=65129;e.dollarsuperior=63204;e.dong=8363;e.dorusquare=13094;e.dotaccent=729;e.dotaccentcmb=775;e.dotbelowcmb=803;e.dotbelowcomb=803;e.dotkatakana=12539;e.dotlessi=305;e.dotlessj=63166;e.dotlessjstrokehook=644;e.dotmath=8901;e.dottedcircle=9676;e.doubleyodpatah=64287;e.doubleyodpatahhebrew=64287;e.downtackbelowcmb=798;e.downtackmod=725;e.dparen=9375;e.dsuperior=63211;e.dtail=598;e.dtopbar=396;e.duhiragana=12389;e.dukatakana=12485;e.dz=499;e.dzaltone=675;e.dzcaron=454;e.dzcurl=677;e.dzeabkhasiancyrillic=1249;e.dzecyrillic=1109;e.dzhecyrillic=1119;e.e=101;e.eacute=233;e.earth=9793;e.ebengali=2447;e.ebopomofo=12572;e.ebreve=277;e.ecandradeva=2317;e.ecandragujarati=2701;e.ecandravowelsigndeva=2373;e.ecandravowelsigngujarati=2757;e.ecaron=283;e.ecedillabreve=7709;e.echarmenian=1381;e.echyiwnarmenian=1415;e.ecircle=9428;e.ecircumflex=234;e.ecircumflexacute=7871;e.ecircumflexbelow=7705;e.ecircumflexdotbelow=7879;e.ecircumflexgrave=7873;e.ecircumflexhookabove=7875;e.ecircumflextilde=7877;e.ecyrillic=1108;e.edblgrave=517;e.edeva=2319;e.edieresis=235;e.edot=279;e.edotaccent=279;e.edotbelow=7865;e.eegurmukhi=2575;e.eematragurmukhi=2631;e.efcyrillic=1092;e.egrave=232;e.egujarati=2703;e.eharmenian=1383;e.ehbopomofo=12573;e.ehiragana=12360;e.ehookabove=7867;e.eibopomofo=12575;e.eight=56;e.eightarabic=1640;e.eightbengali=2542;e.eightcircle=9319;e.eightcircleinversesansserif=10129;e.eightdeva=2414;e.eighteencircle=9329;e.eighteenparen=9349;e.eighteenperiod=9369;e.eightgujarati=2798;e.eightgurmukhi=2670;e.eighthackarabic=1640;e.eighthangzhou=12328;e.eighthnotebeamed=9835;e.eightideographicparen=12839;e.eightinferior=8328;e.eightmonospace=65304;e.eightoldstyle=63288;e.eightparen=9339;e.eightperiod=9359;e.eightpersian=1784;e.eightroman=8567;e.eightsuperior=8312;e.eightthai=3672;e.einvertedbreve=519;e.eiotifiedcyrillic=1125;e.ekatakana=12456;e.ekatakanahalfwidth=65396;e.ekonkargurmukhi=2676;e.ekorean=12628;e.elcyrillic=1083;e.element=8712;e.elevencircle=9322;e.elevenparen=9342;e.elevenperiod=9362;e.elevenroman=8570;e.ellipsis=8230;e.ellipsisvertical=8942;e.emacron=275;e.emacronacute=7703;e.emacrongrave=7701;e.emcyrillic=1084;e.emdash=8212;e.emdashvertical=65073;e.emonospace=65349;e.emphasismarkarmenian=1371;e.emptyset=8709;e.enbopomofo=12579;e.encyrillic=1085;e.endash=8211;e.endashvertical=65074;e.endescendercyrillic=1187;e.eng=331;e.engbopomofo=12581;e.enghecyrillic=1189;e.enhookcyrillic=1224;e.enspace=8194;e.eogonek=281;e.eokorean=12627;e.eopen=603;e.eopenclosed=666;e.eopenreversed=604;e.eopenreversedclosed=606;e.eopenreversedhook=605;e.eparen=9376;e.epsilon=949;e.epsilontonos=941;e.equal=61;e.equalmonospace=65309;e.equalsmall=65126;e.equalsuperior=8316;e.equivalence=8801;e.erbopomofo=12582;e.ercyrillic=1088;e.ereversed=600;e.ereversedcyrillic=1101;e.escyrillic=1089;e.esdescendercyrillic=1195;e.esh=643;e.eshcurl=646;e.eshortdeva=2318;e.eshortvowelsigndeva=2374;e.eshreversedloop=426;e.eshsquatreversed=645;e.esmallhiragana=12359;e.esmallkatakana=12455;e.esmallkatakanahalfwidth=65386;e.estimated=8494;e.esuperior=63212;e.eta=951;e.etarmenian=1384;e.etatonos=942;e.eth=240;e.etilde=7869;e.etildebelow=7707;e.etnahtafoukhhebrew=1425;e.etnahtafoukhlefthebrew=1425;e.etnahtahebrew=1425;e.etnahtalefthebrew=1425;e.eturned=477;e.eukorean=12641;e.euro=8364;e.evowelsignbengali=2503;e.evowelsigndeva=2375;e.evowelsigngujarati=2759;e.exclam=33;e.exclamarmenian=1372;e.exclamdbl=8252;e.exclamdown=161;e.exclamdownsmall=63393;e.exclammonospace=65281;e.exclamsmall=63265;e.existential=8707;e.ezh=658;e.ezhcaron=495;e.ezhcurl=659;e.ezhreversed=441;e.ezhtail=442;e.f=102;e.fadeva=2398;e.fagurmukhi=2654;e.fahrenheit=8457;e.fathaarabic=1614;e.fathalowarabic=1614;e.fathatanarabic=1611;e.fbopomofo=12552;e.fcircle=9429;e.fdotaccent=7711;e.feharabic=1601;e.feharmenian=1414;e.fehfinalarabic=65234;e.fehinitialarabic=65235;e.fehmedialarabic=65236;e.feicoptic=997;e.female=9792;e.ff=64256;e.f_f=64256;e.ffi=64259;e.f_f_i=64259;e.ffl=64260;e.f_f_l=64260;e.fi=64257;e.f_i=64257;e.fifteencircle=9326;e.fifteenparen=9346;e.fifteenperiod=9366;e.figuredash=8210;e.filledbox=9632;e.filledrect=9644;e.finalkaf=1498;e.finalkafdagesh=64314;e.finalkafdageshhebrew=64314;e.finalkafhebrew=1498;e.finalmem=1501;e.finalmemhebrew=1501;e.finalnun=1503;e.finalnunhebrew=1503;e.finalpe=1507;e.finalpehebrew=1507;e.finaltsadi=1509;e.finaltsadihebrew=1509;e.firsttonechinese=713;e.fisheye=9673;e.fitacyrillic=1139;e.five=53;e.fivearabic=1637;e.fivebengali=2539;e.fivecircle=9316;e.fivecircleinversesansserif=10126;e.fivedeva=2411;e.fiveeighths=8541;e.fivegujarati=2795;e.fivegurmukhi=2667;e.fivehackarabic=1637;e.fivehangzhou=12325;e.fiveideographicparen=12836;e.fiveinferior=8325;e.fivemonospace=65301;e.fiveoldstyle=63285;e.fiveparen=9336;e.fiveperiod=9356;e.fivepersian=1781;e.fiveroman=8564;e.fivesuperior=8309;e.fivethai=3669;e.fl=64258;e.f_l=64258;e.florin=402;e.fmonospace=65350;e.fmsquare=13209;e.fofanthai=3615;e.fofathai=3613;e.fongmanthai=3663;e.forall=8704;e.four=52;e.fourarabic=1636;e.fourbengali=2538;e.fourcircle=9315;e.fourcircleinversesansserif=10125;e.fourdeva=2410;e.fourgujarati=2794;e.fourgurmukhi=2666;e.fourhackarabic=1636;e.fourhangzhou=12324;e.fourideographicparen=12835;e.fourinferior=8324;e.fourmonospace=65300;e.fournumeratorbengali=2551;e.fouroldstyle=63284;e.fourparen=9335;e.fourperiod=9355;e.fourpersian=1780;e.fourroman=8563;e.foursuperior=8308;e.fourteencircle=9325;e.fourteenparen=9345;e.fourteenperiod=9365;e.fourthai=3668;e.fourthtonechinese=715;e.fparen=9377;e.fraction=8260;e.franc=8355;e.g=103;e.gabengali=2455;e.gacute=501;e.gadeva=2327;e.gafarabic=1711;e.gaffinalarabic=64403;e.gafinitialarabic=64404;e.gafmedialarabic=64405;e.gagujarati=2711;e.gagurmukhi=2583;e.gahiragana=12364;e.gakatakana=12460;e.gamma=947;e.gammalatinsmall=611;e.gammasuperior=736;e.gangiacoptic=1003;e.gbopomofo=12557;e.gbreve=287;e.gcaron=487;e.gcedilla=291;e.gcircle=9430;e.gcircumflex=285;e.gcommaaccent=291;e.gdot=289;e.gdotaccent=289;e.gecyrillic=1075;e.gehiragana=12370;e.gekatakana=12466;e.geometricallyequal=8785;e.gereshaccenthebrew=1436;e.gereshhebrew=1523;e.gereshmuqdamhebrew=1437;e.germandbls=223;e.gershayimaccenthebrew=1438;e.gershayimhebrew=1524;e.getamark=12307;e.ghabengali=2456;e.ghadarmenian=1394;e.ghadeva=2328;e.ghagujarati=2712;e.ghagurmukhi=2584;e.ghainarabic=1594;e.ghainfinalarabic=65230;e.ghaininitialarabic=65231;e.ghainmedialarabic=65232;e.ghemiddlehookcyrillic=1173;e.ghestrokecyrillic=1171;e.gheupturncyrillic=1169;e.ghhadeva=2394;e.ghhagurmukhi=2650;e.ghook=608;e.ghzsquare=13203;e.gihiragana=12366;e.gikatakana=12462;e.gimarmenian=1379;e.gimel=1490;e.gimeldagesh=64306;e.gimeldageshhebrew=64306;e.gimelhebrew=1490;e.gjecyrillic=1107;e.glottalinvertedstroke=446;e.glottalstop=660;e.glottalstopinverted=662;e.glottalstopmod=704;e.glottalstopreversed=661;e.glottalstopreversedmod=705;e.glottalstopreversedsuperior=740;e.glottalstopstroke=673;e.glottalstopstrokereversed=674;e.gmacron=7713;e.gmonospace=65351;e.gohiragana=12372;e.gokatakana=12468;e.gparen=9378;e.gpasquare=13228;e.gradient=8711;e.grave=96;e.gravebelowcmb=790;e.gravecmb=768;e.gravecomb=768;e.gravedeva=2387;e.gravelowmod=718;e.gravemonospace=65344;e.gravetonecmb=832;e.greater=62;e.greaterequal=8805;e.greaterequalorless=8923;e.greatermonospace=65310;e.greaterorequivalent=8819;e.greaterorless=8823;e.greateroverequal=8807;e.greatersmall=65125;e.gscript=609;e.gstroke=485;e.guhiragana=12368;e.guillemotleft=171;e.guillemotright=187;e.guilsinglleft=8249;e.guilsinglright=8250;e.gukatakana=12464;e.guramusquare=13080;e.gysquare=13257;e.h=104;e.haabkhasiancyrillic=1193;e.haaltonearabic=1729;e.habengali=2489;e.hadescendercyrillic=1203;e.hadeva=2361;e.hagujarati=2745;e.hagurmukhi=2617;e.haharabic=1581;e.hahfinalarabic=65186;e.hahinitialarabic=65187;e.hahiragana=12399;e.hahmedialarabic=65188;e.haitusquare=13098;e.hakatakana=12495;e.hakatakanahalfwidth=65418;e.halantgurmukhi=2637;e.hamzaarabic=1569;e.hamzalowarabic=1569;e.hangulfiller=12644;e.hardsigncyrillic=1098;e.harpoonleftbarbup=8636;e.harpoonrightbarbup=8640;e.hasquare=13258;e.hatafpatah=1458;e.hatafpatah16=1458;e.hatafpatah23=1458;e.hatafpatah2f=1458;e.hatafpatahhebrew=1458;e.hatafpatahnarrowhebrew=1458;e.hatafpatahquarterhebrew=1458;e.hatafpatahwidehebrew=1458;e.hatafqamats=1459;e.hatafqamats1b=1459;e.hatafqamats28=1459;e.hatafqamats34=1459;e.hatafqamatshebrew=1459;e.hatafqamatsnarrowhebrew=1459;e.hatafqamatsquarterhebrew=1459;e.hatafqamatswidehebrew=1459;e.hatafsegol=1457;e.hatafsegol17=1457;e.hatafsegol24=1457;e.hatafsegol30=1457;e.hatafsegolhebrew=1457;e.hatafsegolnarrowhebrew=1457;e.hatafsegolquarterhebrew=1457;e.hatafsegolwidehebrew=1457;e.hbar=295;e.hbopomofo=12559;e.hbrevebelow=7723;e.hcedilla=7721;e.hcircle=9431;e.hcircumflex=293;e.hdieresis=7719;e.hdotaccent=7715;e.hdotbelow=7717;e.he=1492;e.heart=9829;e.heartsuitblack=9829;e.heartsuitwhite=9825;e.hedagesh=64308;e.hedageshhebrew=64308;e.hehaltonearabic=1729;e.heharabic=1607;e.hehebrew=1492;e.hehfinalaltonearabic=64423;e.hehfinalalttwoarabic=65258;e.hehfinalarabic=65258;e.hehhamzaabovefinalarabic=64421;e.hehhamzaaboveisolatedarabic=64420;e.hehinitialaltonearabic=64424;e.hehinitialarabic=65259;e.hehiragana=12408;e.hehmedialaltonearabic=64425;e.hehmedialarabic=65260;e.heiseierasquare=13179;e.hekatakana=12504;e.hekatakanahalfwidth=65421;e.hekutaarusquare=13110;e.henghook=615;e.herutusquare=13113;e.het=1495;e.hethebrew=1495;e.hhook=614;e.hhooksuperior=689;e.hieuhacirclekorean=12923;e.hieuhaparenkorean=12827;e.hieuhcirclekorean=12909;e.hieuhkorean=12622;e.hieuhparenkorean=12813;e.hihiragana=12402;e.hikatakana=12498;e.hikatakanahalfwidth=65419;e.hiriq=1460;e.hiriq14=1460;e.hiriq21=1460;e.hiriq2d=1460;e.hiriqhebrew=1460;e.hiriqnarrowhebrew=1460;e.hiriqquarterhebrew=1460;e.hiriqwidehebrew=1460;e.hlinebelow=7830;e.hmonospace=65352;e.hoarmenian=1392;e.hohipthai=3627;e.hohiragana=12411;e.hokatakana=12507;e.hokatakanahalfwidth=65422;e.holam=1465;e.holam19=1465;e.holam26=1465;e.holam32=1465;e.holamhebrew=1465;e.holamnarrowhebrew=1465;e.holamquarterhebrew=1465;e.holamwidehebrew=1465;e.honokhukthai=3630;e.hookabovecomb=777;e.hookcmb=777;e.hookpalatalizedbelowcmb=801;e.hookretroflexbelowcmb=802;e.hoonsquare=13122;e.horicoptic=1001;e.horizontalbar=8213;e.horncmb=795;e.hotsprings=9832;e.house=8962;e.hparen=9379;e.hsuperior=688;e.hturned=613;e.huhiragana=12405;e.huiitosquare=13107;e.hukatakana=12501;e.hukatakanahalfwidth=65420;e.hungarumlaut=733;e.hungarumlautcmb=779;e.hv=405;e.hyphen=45;e.hypheninferior=63205;e.hyphenmonospace=65293;e.hyphensmall=65123;e.hyphensuperior=63206;e.hyphentwo=8208;e.i=105;e.iacute=237;e.iacyrillic=1103;e.ibengali=2439;e.ibopomofo=12583;e.ibreve=301;e.icaron=464;e.icircle=9432;e.icircumflex=238;e.icyrillic=1110;e.idblgrave=521;e.ideographearthcircle=12943;e.ideographfirecircle=12939;e.ideographicallianceparen=12863;e.ideographiccallparen=12858;e.ideographiccentrecircle=12965;e.ideographicclose=12294;e.ideographiccomma=12289;e.ideographiccommaleft=65380;e.ideographiccongratulationparen=12855;e.ideographiccorrectcircle=12963;e.ideographicearthparen=12847;e.ideographicenterpriseparen=12861;e.ideographicexcellentcircle=12957;e.ideographicfestivalparen=12864;e.ideographicfinancialcircle=12950;e.ideographicfinancialparen=12854;e.ideographicfireparen=12843;e.ideographichaveparen=12850;e.ideographichighcircle=12964;e.ideographiciterationmark=12293;e.ideographiclaborcircle=12952;e.ideographiclaborparen=12856;e.ideographicleftcircle=12967;e.ideographiclowcircle=12966;e.ideographicmedicinecircle=12969;e.ideographicmetalparen=12846;e.ideographicmoonparen=12842;e.ideographicnameparen=12852;e.ideographicperiod=12290;e.ideographicprintcircle=12958;e.ideographicreachparen=12867;e.ideographicrepresentparen=12857;e.ideographicresourceparen=12862;e.ideographicrightcircle=12968;e.ideographicsecretcircle=12953;e.ideographicselfparen=12866;e.ideographicsocietyparen=12851;e.ideographicspace=12288;e.ideographicspecialparen=12853;e.ideographicstockparen=12849;e.ideographicstudyparen=12859;e.ideographicsunparen=12848;e.ideographicsuperviseparen=12860;e.ideographicwaterparen=12844;e.ideographicwoodparen=12845;e.ideographiczero=12295;e.ideographmetalcircle=12942;e.ideographmooncircle=12938;e.ideographnamecircle=12948;e.ideographsuncircle=12944;e.ideographwatercircle=12940;e.ideographwoodcircle=12941;e.ideva=2311;e.idieresis=239;e.idieresisacute=7727;e.idieresiscyrillic=1253;e.idotbelow=7883;e.iebrevecyrillic=1239;e.iecyrillic=1077;e.ieungacirclekorean=12917;e.ieungaparenkorean=12821;e.ieungcirclekorean=12903;e.ieungkorean=12615;e.ieungparenkorean=12807;e.igrave=236;e.igujarati=2695;e.igurmukhi=2567;e.ihiragana=12356;e.ihookabove=7881;e.iibengali=2440;e.iicyrillic=1080;e.iideva=2312;e.iigujarati=2696;e.iigurmukhi=2568;e.iimatragurmukhi=2624;e.iinvertedbreve=523;e.iishortcyrillic=1081;e.iivowelsignbengali=2496;e.iivowelsigndeva=2368;e.iivowelsigngujarati=2752;e.ij=307;e.ikatakana=12452;e.ikatakanahalfwidth=65394;e.ikorean=12643;e.ilde=732;e.iluyhebrew=1452;e.imacron=299;e.imacroncyrillic=1251;e.imageorapproximatelyequal=8787;e.imatragurmukhi=2623;e.imonospace=65353;e.increment=8710;e.infinity=8734;e.iniarmenian=1387;e.integral=8747;e.integralbottom=8993;e.integralbt=8993;e.integralex=63733;e.integraltop=8992;e.integraltp=8992;e.intersection=8745;e.intisquare=13061;e.invbullet=9688;e.invcircle=9689;e.invsmileface=9787;e.iocyrillic=1105;e.iogonek=303;e.iota=953;e.iotadieresis=970;e.iotadieresistonos=912;e.iotalatin=617;e.iotatonos=943;e.iparen=9380;e.irigurmukhi=2674;e.ismallhiragana=12355;e.ismallkatakana=12451;e.ismallkatakanahalfwidth=65384;e.issharbengali=2554;e.istroke=616;e.isuperior=63213;e.iterationhiragana=12445;e.iterationkatakana=12541;e.itilde=297;e.itildebelow=7725;e.iubopomofo=12585;e.iucyrillic=1102;e.ivowelsignbengali=2495;e.ivowelsigndeva=2367;e.ivowelsigngujarati=2751;e.izhitsacyrillic=1141;e.izhitsadblgravecyrillic=1143;e.j=106;e.jaarmenian=1393;e.jabengali=2460;e.jadeva=2332;e.jagujarati=2716;e.jagurmukhi=2588;e.jbopomofo=12560;e.jcaron=496;e.jcircle=9433;e.jcircumflex=309;e.jcrossedtail=669;e.jdotlessstroke=607;e.jecyrillic=1112;e.jeemarabic=1580;e.jeemfinalarabic=65182;e.jeeminitialarabic=65183;e.jeemmedialarabic=65184;e.jeharabic=1688;e.jehfinalarabic=64395;e.jhabengali=2461;e.jhadeva=2333;e.jhagujarati=2717;e.jhagurmukhi=2589;e.jheharmenian=1403;e.jis=12292;e.jmonospace=65354;e.jparen=9381;e.jsuperior=690;e.k=107;e.kabashkircyrillic=1185;e.kabengali=2453;e.kacute=7729;e.kacyrillic=1082;e.kadescendercyrillic=1179;e.kadeva=2325;e.kaf=1499;e.kafarabic=1603;e.kafdagesh=64315;e.kafdageshhebrew=64315;e.kaffinalarabic=65242;e.kafhebrew=1499;e.kafinitialarabic=65243;e.kafmedialarabic=65244;e.kafrafehebrew=64333;e.kagujarati=2709;e.kagurmukhi=2581;e.kahiragana=12363;e.kahookcyrillic=1220;e.kakatakana=12459;e.kakatakanahalfwidth=65398;e.kappa=954;e.kappasymbolgreek=1008;e.kapyeounmieumkorean=12657;e.kapyeounphieuphkorean=12676;e.kapyeounpieupkorean=12664;e.kapyeounssangpieupkorean=12665;e.karoriisquare=13069;e.kashidaautoarabic=1600;e.kashidaautonosidebearingarabic=1600;e.kasmallkatakana=12533;e.kasquare=13188;e.kasraarabic=1616;e.kasratanarabic=1613;e.kastrokecyrillic=1183;e.katahiraprolongmarkhalfwidth=65392;e.kaverticalstrokecyrillic=1181;e.kbopomofo=12558;e.kcalsquare=13193;e.kcaron=489;e.kcedilla=311;e.kcircle=9434;e.kcommaaccent=311;e.kdotbelow=7731;e.keharmenian=1412;e.kehiragana=12369;e.kekatakana=12465;e.kekatakanahalfwidth=65401;e.kenarmenian=1391;e.kesmallkatakana=12534;e.kgreenlandic=312;e.khabengali=2454;e.khacyrillic=1093;e.khadeva=2326;e.khagujarati=2710;e.khagurmukhi=2582;e.khaharabic=1582;e.khahfinalarabic=65190;e.khahinitialarabic=65191;e.khahmedialarabic=65192;e.kheicoptic=999;e.khhadeva=2393;e.khhagurmukhi=2649;e.khieukhacirclekorean=12920;e.khieukhaparenkorean=12824;e.khieukhcirclekorean=12906;e.khieukhkorean=12619;e.khieukhparenkorean=12810;e.khokhaithai=3586;e.khokhonthai=3589;e.khokhuatthai=3587;e.khokhwaithai=3588;e.khomutthai=3675;e.khook=409;e.khorakhangthai=3590;e.khzsquare=13201;e.kihiragana=12365;e.kikatakana=12461;e.kikatakanahalfwidth=65399;e.kiroguramusquare=13077;e.kiromeetorusquare=13078;e.kirosquare=13076;e.kiyeokacirclekorean=12910;e.kiyeokaparenkorean=12814;e.kiyeokcirclekorean=12896;e.kiyeokkorean=12593;e.kiyeokparenkorean=12800;e.kiyeoksioskorean=12595;e.kjecyrillic=1116;e.klinebelow=7733;e.klsquare=13208;e.kmcubedsquare=13222;e.kmonospace=65355;e.kmsquaredsquare=13218;e.kohiragana=12371;e.kohmsquare=13248;e.kokaithai=3585;e.kokatakana=12467;e.kokatakanahalfwidth=65402;e.kooposquare=13086;e.koppacyrillic=1153;e.koreanstandardsymbol=12927;e.koroniscmb=835;e.kparen=9382;e.kpasquare=13226;e.ksicyrillic=1135;e.ktsquare=13263;e.kturned=670;e.kuhiragana=12367;e.kukatakana=12463;e.kukatakanahalfwidth=65400;e.kvsquare=13240;e.kwsquare=13246;e.l=108;e.labengali=2482;e.lacute=314;e.ladeva=2354;e.lagujarati=2738;e.lagurmukhi=2610;e.lakkhangyaothai=3653;e.lamaleffinalarabic=65276;e.lamalefhamzaabovefinalarabic=65272;e.lamalefhamzaaboveisolatedarabic=65271;e.lamalefhamzabelowfinalarabic=65274;e.lamalefhamzabelowisolatedarabic=65273;e.lamalefisolatedarabic=65275;e.lamalefmaddaabovefinalarabic=65270;e.lamalefmaddaaboveisolatedarabic=65269;e.lamarabic=1604;e.lambda=955;e.lambdastroke=411;e.lamed=1500;e.lameddagesh=64316;e.lameddageshhebrew=64316;e.lamedhebrew=1500;e.lamfinalarabic=65246;e.lamhahinitialarabic=64714;e.laminitialarabic=65247;e.lamjeeminitialarabic=64713;e.lamkhahinitialarabic=64715;e.lamlamhehisolatedarabic=65010;e.lammedialarabic=65248;e.lammeemhahinitialarabic=64904;e.lammeeminitialarabic=64716;e.largecircle=9711;e.lbar=410;e.lbelt=620;e.lbopomofo=12556;e.lcaron=318;e.lcedilla=316;e.lcircle=9435;e.lcircumflexbelow=7741;e.lcommaaccent=316;e.ldot=320;e.ldotaccent=320;e.ldotbelow=7735;e.ldotbelowmacron=7737;e.leftangleabovecmb=794;e.lefttackbelowcmb=792;e.less=60;e.lessequal=8804;e.lessequalorgreater=8922;e.lessmonospace=65308;e.lessorequivalent=8818;e.lessorgreater=8822;e.lessoverequal=8806;e.lesssmall=65124;e.lezh=622;e.lfblock=9612;e.lhookretroflex=621;e.lira=8356;e.liwnarmenian=1388;e.lj=457;e.ljecyrillic=1113;e.ll=63168;e.lladeva=2355;e.llagujarati=2739;e.llinebelow=7739;e.llladeva=2356;e.llvocalicbengali=2529;e.llvocalicdeva=2401;e.llvocalicvowelsignbengali=2531;e.llvocalicvowelsigndeva=2403;e.lmiddletilde=619;e.lmonospace=65356;e.lmsquare=13264;e.lochulathai=3628;e.logicaland=8743;e.logicalnot=172;e.logicalnotreversed=8976;e.logicalor=8744;e.lolingthai=3621;e.longs=383;e.lowlinecenterline=65102;e.lowlinecmb=818;e.lowlinedashed=65101;e.lozenge=9674;e.lparen=9383;e.lslash=322;e.lsquare=8467;e.lsuperior=63214;e.ltshade=9617;e.luthai=3622;e.lvocalicbengali=2444;e.lvocalicdeva=2316;e.lvocalicvowelsignbengali=2530;e.lvocalicvowelsigndeva=2402;e.lxsquare=13267;e.m=109;e.mabengali=2478;e.macron=175;e.macronbelowcmb=817;e.macroncmb=772;e.macronlowmod=717;e.macronmonospace=65507;e.macute=7743;e.madeva=2350;e.magujarati=2734;e.magurmukhi=2606;e.mahapakhhebrew=1444;e.mahapakhlefthebrew=1444;e.mahiragana=12414;e.maichattawalowleftthai=63637;e.maichattawalowrightthai=63636;e.maichattawathai=3659;e.maichattawaupperleftthai=63635;e.maieklowleftthai=63628;e.maieklowrightthai=63627;e.maiekthai=3656;e.maiekupperleftthai=63626;e.maihanakatleftthai=63620;e.maihanakatthai=3633;e.maitaikhuleftthai=63625;e.maitaikhuthai=3655;e.maitholowleftthai=63631;e.maitholowrightthai=63630;e.maithothai=3657;e.maithoupperleftthai=63629;e.maitrilowleftthai=63634;e.maitrilowrightthai=63633;e.maitrithai=3658;e.maitriupperleftthai=63632;e.maiyamokthai=3654;e.makatakana=12510;e.makatakanahalfwidth=65423;e.male=9794;e.mansyonsquare=13127;e.maqafhebrew=1470;e.mars=9794;e.masoracirclehebrew=1455;e.masquare=13187;e.mbopomofo=12551;e.mbsquare=13268;e.mcircle=9436;e.mcubedsquare=13221;e.mdotaccent=7745;e.mdotbelow=7747;e.meemarabic=1605;e.meemfinalarabic=65250;e.meeminitialarabic=65251;e.meemmedialarabic=65252;e.meemmeeminitialarabic=64721;e.meemmeemisolatedarabic=64584;e.meetorusquare=13133;e.mehiragana=12417;e.meizierasquare=13182;e.mekatakana=12513;e.mekatakanahalfwidth=65426;e.mem=1502;e.memdagesh=64318;e.memdageshhebrew=64318;e.memhebrew=1502;e.menarmenian=1396;e.merkhahebrew=1445;e.merkhakefulahebrew=1446;e.merkhakefulalefthebrew=1446;e.merkhalefthebrew=1445;e.mhook=625;e.mhzsquare=13202;e.middledotkatakanahalfwidth=65381;e.middot=183;e.mieumacirclekorean=12914;e.mieumaparenkorean=12818;e.mieumcirclekorean=12900;e.mieumkorean=12609;e.mieumpansioskorean=12656;e.mieumparenkorean=12804;e.mieumpieupkorean=12654;e.mieumsioskorean=12655;e.mihiragana=12415;e.mikatakana=12511;e.mikatakanahalfwidth=65424;e.minus=8722;e.minusbelowcmb=800;e.minuscircle=8854;e.minusmod=727;e.minusplus=8723;e.minute=8242;e.miribaarusquare=13130;e.mirisquare=13129;e.mlonglegturned=624;e.mlsquare=13206;e.mmcubedsquare=13219;e.mmonospace=65357;e.mmsquaredsquare=13215;e.mohiragana=12418;e.mohmsquare=13249;e.mokatakana=12514;e.mokatakanahalfwidth=65427;e.molsquare=13270;e.momathai=3617;e.moverssquare=13223;e.moverssquaredsquare=13224;e.mparen=9384;e.mpasquare=13227;e.mssquare=13235;e.msuperior=63215;e.mturned=623;e.mu=181;e.mu1=181;e.muasquare=13186;e.muchgreater=8811;e.muchless=8810;e.mufsquare=13196;e.mugreek=956;e.mugsquare=13197;e.muhiragana=12416;e.mukatakana=12512;e.mukatakanahalfwidth=65425;e.mulsquare=13205;e.multiply=215;e.mumsquare=13211;e.munahhebrew=1443;e.munahlefthebrew=1443;e.musicalnote=9834;e.musicalnotedbl=9835;e.musicflatsign=9837;e.musicsharpsign=9839;e.mussquare=13234;e.muvsquare=13238;e.muwsquare=13244;e.mvmegasquare=13241;e.mvsquare=13239;e.mwmegasquare=13247;e.mwsquare=13245;e.n=110;e.nabengali=2472;e.nabla=8711;e.nacute=324;e.nadeva=2344;e.nagujarati=2728;e.nagurmukhi=2600;e.nahiragana=12394;e.nakatakana=12490;e.nakatakanahalfwidth=65413;e.napostrophe=329;e.nasquare=13185;e.nbopomofo=12555;e.nbspace=160;e.ncaron=328;e.ncedilla=326;e.ncircle=9437;e.ncircumflexbelow=7755;e.ncommaaccent=326;e.ndotaccent=7749;e.ndotbelow=7751;e.nehiragana=12397;e.nekatakana=12493;e.nekatakanahalfwidth=65416;e.newsheqelsign=8362;e.nfsquare=13195;e.ngabengali=2457;e.ngadeva=2329;e.ngagujarati=2713;e.ngagurmukhi=2585;e.ngonguthai=3591;e.nhiragana=12435;e.nhookleft=626;e.nhookretroflex=627;e.nieunacirclekorean=12911;e.nieunaparenkorean=12815;e.nieuncieuckorean=12597;e.nieuncirclekorean=12897;e.nieunhieuhkorean=12598;e.nieunkorean=12596;e.nieunpansioskorean=12648;e.nieunparenkorean=12801;e.nieunsioskorean=12647;e.nieuntikeutkorean=12646;e.nihiragana=12395;e.nikatakana=12491;e.nikatakanahalfwidth=65414;e.nikhahitleftthai=63641;e.nikhahitthai=3661;e.nine=57;e.ninearabic=1641;e.ninebengali=2543;e.ninecircle=9320;e.ninecircleinversesansserif=10130;e.ninedeva=2415;e.ninegujarati=2799;e.ninegurmukhi=2671;e.ninehackarabic=1641;e.ninehangzhou=12329;e.nineideographicparen=12840;e.nineinferior=8329;e.ninemonospace=65305;e.nineoldstyle=63289;e.nineparen=9340;e.nineperiod=9360;e.ninepersian=1785;e.nineroman=8568;e.ninesuperior=8313;e.nineteencircle=9330;e.nineteenparen=9350;e.nineteenperiod=9370;e.ninethai=3673;e.nj=460;e.njecyrillic=1114;e.nkatakana=12531;e.nkatakanahalfwidth=65437;e.nlegrightlong=414;e.nlinebelow=7753;e.nmonospace=65358;e.nmsquare=13210;e.nnabengali=2467;e.nnadeva=2339;e.nnagujarati=2723;e.nnagurmukhi=2595;e.nnnadeva=2345;e.nohiragana=12398;e.nokatakana=12494;e.nokatakanahalfwidth=65417;e.nonbreakingspace=160;e.nonenthai=3603;e.nonuthai=3609;e.noonarabic=1606;e.noonfinalarabic=65254;e.noonghunnaarabic=1722;e.noonghunnafinalarabic=64415;e.nooninitialarabic=65255;e.noonjeeminitialarabic=64722;e.noonjeemisolatedarabic=64587;e.noonmedialarabic=65256;e.noonmeeminitialarabic=64725;e.noonmeemisolatedarabic=64590;e.noonnoonfinalarabic=64653;e.notcontains=8716;e.notelement=8713;e.notelementof=8713;e.notequal=8800;e.notgreater=8815;e.notgreaternorequal=8817;e.notgreaternorless=8825;e.notidentical=8802;e.notless=8814;e.notlessnorequal=8816;e.notparallel=8742;e.notprecedes=8832;e.notsubset=8836;e.notsucceeds=8833;e.notsuperset=8837;e.nowarmenian=1398;e.nparen=9385;e.nssquare=13233;e.nsuperior=8319;e.ntilde=241;e.nu=957;e.nuhiragana=12396;e.nukatakana=12492;e.nukatakanahalfwidth=65415;e.nuktabengali=2492;e.nuktadeva=2364;e.nuktagujarati=2748;e.nuktagurmukhi=2620;e.numbersign=35;e.numbersignmonospace=65283;e.numbersignsmall=65119;e.numeralsigngreek=884;e.numeralsignlowergreek=885;e.numero=8470;e.nun=1504;e.nundagesh=64320;e.nundageshhebrew=64320;e.nunhebrew=1504;e.nvsquare=13237;e.nwsquare=13243;e.nyabengali=2462;e.nyadeva=2334;e.nyagujarati=2718;e.nyagurmukhi=2590;e.o=111;e.oacute=243;e.oangthai=3629;e.obarred=629;e.obarredcyrillic=1257;e.obarreddieresiscyrillic=1259;e.obengali=2451;e.obopomofo=12571;e.obreve=335;e.ocandradeva=2321;e.ocandragujarati=2705;e.ocandravowelsigndeva=2377;e.ocandravowelsigngujarati=2761;e.ocaron=466;e.ocircle=9438;e.ocircumflex=244;e.ocircumflexacute=7889;e.ocircumflexdotbelow=7897;e.ocircumflexgrave=7891;e.ocircumflexhookabove=7893;e.ocircumflextilde=7895;e.ocyrillic=1086;e.odblacute=337;e.odblgrave=525;e.odeva=2323;e.odieresis=246;e.odieresiscyrillic=1255;e.odotbelow=7885;e.oe=339;e.oekorean=12634;e.ogonek=731;e.ogonekcmb=808;e.ograve=242;e.ogujarati=2707;e.oharmenian=1413;e.ohiragana=12362;e.ohookabove=7887;e.ohorn=417;e.ohornacute=7899;e.ohorndotbelow=7907;e.ohorngrave=7901;e.ohornhookabove=7903;e.ohorntilde=7905;e.ohungarumlaut=337;e.oi=419;e.oinvertedbreve=527;e.okatakana=12458;e.okatakanahalfwidth=65397;e.okorean=12631;e.olehebrew=1451;e.omacron=333;e.omacronacute=7763;e.omacrongrave=7761;e.omdeva=2384;e.omega=969;e.omega1=982;e.omegacyrillic=1121;e.omegalatinclosed=631;e.omegaroundcyrillic=1147;e.omegatitlocyrillic=1149;e.omegatonos=974;e.omgujarati=2768;e.omicron=959;e.omicrontonos=972;e.omonospace=65359;e.one=49;e.onearabic=1633;e.onebengali=2535;e.onecircle=9312;e.onecircleinversesansserif=10122;e.onedeva=2407;e.onedotenleader=8228;e.oneeighth=8539;e.onefitted=63196;e.onegujarati=2791;e.onegurmukhi=2663;e.onehackarabic=1633;e.onehalf=189;e.onehangzhou=12321;e.oneideographicparen=12832;e.oneinferior=8321;e.onemonospace=65297;e.onenumeratorbengali=2548;e.oneoldstyle=63281;e.oneparen=9332;e.oneperiod=9352;e.onepersian=1777;e.onequarter=188;e.oneroman=8560;e.onesuperior=185;e.onethai=3665;e.onethird=8531;e.oogonek=491;e.oogonekmacron=493;e.oogurmukhi=2579;e.oomatragurmukhi=2635;e.oopen=596;e.oparen=9386;e.openbullet=9702;e.option=8997;e.ordfeminine=170;e.ordmasculine=186;e.orthogonal=8735;e.oshortdeva=2322;e.oshortvowelsigndeva=2378;e.oslash=248;e.oslashacute=511;e.osmallhiragana=12361;e.osmallkatakana=12457;e.osmallkatakanahalfwidth=65387;e.ostrokeacute=511;e.osuperior=63216;e.otcyrillic=1151;e.otilde=245;e.otildeacute=7757;e.otildedieresis=7759;e.oubopomofo=12577;e.overline=8254;e.overlinecenterline=65098;e.overlinecmb=773;e.overlinedashed=65097;e.overlinedblwavy=65100;e.overlinewavy=65099;e.overscore=175;e.ovowelsignbengali=2507;e.ovowelsigndeva=2379;e.ovowelsigngujarati=2763;e.p=112;e.paampssquare=13184;e.paasentosquare=13099;e.pabengali=2474;e.pacute=7765;e.padeva=2346;e.pagedown=8671;e.pageup=8670;e.pagujarati=2730;e.pagurmukhi=2602;e.pahiragana=12401;e.paiyannoithai=3631;e.pakatakana=12497;e.palatalizationcyrilliccmb=1156;e.palochkacyrillic=1216;e.pansioskorean=12671;e.paragraph=182;e.parallel=8741;e.parenleft=40;e.parenleftaltonearabic=64830;e.parenleftbt=63725;e.parenleftex=63724;e.parenleftinferior=8333;e.parenleftmonospace=65288;e.parenleftsmall=65113;e.parenleftsuperior=8317;e.parenlefttp=63723;e.parenleftvertical=65077;e.parenright=41;e.parenrightaltonearabic=64831;e.parenrightbt=63736;e.parenrightex=63735;e.parenrightinferior=8334;e.parenrightmonospace=65289;e.parenrightsmall=65114;e.parenrightsuperior=8318;e.parenrighttp=63734;e.parenrightvertical=65078;e.partialdiff=8706;e.paseqhebrew=1472;e.pashtahebrew=1433;e.pasquare=13225;e.patah=1463;e.patah11=1463;e.patah1d=1463;e.patah2a=1463;e.patahhebrew=1463;e.patahnarrowhebrew=1463;e.patahquarterhebrew=1463;e.patahwidehebrew=1463;e.pazerhebrew=1441;e.pbopomofo=12550;e.pcircle=9439;e.pdotaccent=7767;e.pe=1508;e.pecyrillic=1087;e.pedagesh=64324;e.pedageshhebrew=64324;e.peezisquare=13115;e.pefinaldageshhebrew=64323;e.peharabic=1662;e.peharmenian=1402;e.pehebrew=1508;e.pehfinalarabic=64343;e.pehinitialarabic=64344;e.pehiragana=12410;e.pehmedialarabic=64345;e.pekatakana=12506;e.pemiddlehookcyrillic=1191;e.perafehebrew=64334;e.percent=37;e.percentarabic=1642;e.percentmonospace=65285;e.percentsmall=65130;e.period=46;e.periodarmenian=1417;e.periodcentered=183;e.periodhalfwidth=65377;e.periodinferior=63207;e.periodmonospace=65294;e.periodsmall=65106;e.periodsuperior=63208;e.perispomenigreekcmb=834;e.perpendicular=8869;e.perthousand=8240;e.peseta=8359;e.pfsquare=13194;e.phabengali=2475;e.phadeva=2347;e.phagujarati=2731;e.phagurmukhi=2603;e.phi=966;e.phi1=981;e.phieuphacirclekorean=12922;e.phieuphaparenkorean=12826;e.phieuphcirclekorean=12908;e.phieuphkorean=12621;e.phieuphparenkorean=12812;e.philatin=632;e.phinthuthai=3642;e.phisymbolgreek=981;e.phook=421;e.phophanthai=3614;e.phophungthai=3612;e.phosamphaothai=3616;e.pi=960;e.pieupacirclekorean=12915;e.pieupaparenkorean=12819;e.pieupcieuckorean=12662;e.pieupcirclekorean=12901;e.pieupkiyeokkorean=12658;e.pieupkorean=12610;e.pieupparenkorean=12805;e.pieupsioskiyeokkorean=12660;e.pieupsioskorean=12612;e.pieupsiostikeutkorean=12661;e.pieupthieuthkorean=12663;e.pieuptikeutkorean=12659;e.pihiragana=12404;e.pikatakana=12500;e.pisymbolgreek=982;e.piwrarmenian=1411;e.planckover2pi=8463;e.planckover2pi1=8463;e.plus=43;e.plusbelowcmb=799;e.pluscircle=8853;e.plusminus=177;e.plusmod=726;e.plusmonospace=65291;e.plussmall=65122;e.plussuperior=8314;e.pmonospace=65360;e.pmsquare=13272;e.pohiragana=12413;e.pointingindexdownwhite=9759;e.pointingindexleftwhite=9756;e.pointingindexrightwhite=9758;e.pointingindexupwhite=9757;e.pokatakana=12509;e.poplathai=3611;e.postalmark=12306;e.postalmarkface=12320;e.pparen=9387;e.precedes=8826;e.prescription=8478;e.primemod=697;e.primereversed=8245;e.product=8719;e.projective=8965;e.prolongedkana=12540;e.propellor=8984;e.propersubset=8834;e.propersuperset=8835;e.proportion=8759;e.proportional=8733;e.psi=968;e.psicyrillic=1137;e.psilipneumatacyrilliccmb=1158;e.pssquare=13232;e.puhiragana=12407;e.pukatakana=12503;e.pvsquare=13236;e.pwsquare=13242;e.q=113;e.qadeva=2392;e.qadmahebrew=1448;e.qafarabic=1602;e.qaffinalarabic=65238;e.qafinitialarabic=65239;e.qafmedialarabic=65240;e.qamats=1464;e.qamats10=1464;e.qamats1a=1464;e.qamats1c=1464;e.qamats27=1464;e.qamats29=1464;e.qamats33=1464;e.qamatsde=1464;e.qamatshebrew=1464;e.qamatsnarrowhebrew=1464;e.qamatsqatanhebrew=1464;e.qamatsqatannarrowhebrew=1464;e.qamatsqatanquarterhebrew=1464;e.qamatsqatanwidehebrew=1464;e.qamatsquarterhebrew=1464;e.qamatswidehebrew=1464;e.qarneyparahebrew=1439;e.qbopomofo=12561;e.qcircle=9440;e.qhook=672;e.qmonospace=65361;e.qof=1511;e.qofdagesh=64327;e.qofdageshhebrew=64327;e.qofhebrew=1511;e.qparen=9388;e.quarternote=9833;e.qubuts=1467;e.qubuts18=1467;e.qubuts25=1467;e.qubuts31=1467;e.qubutshebrew=1467;e.qubutsnarrowhebrew=1467;e.qubutsquarterhebrew=1467;e.qubutswidehebrew=1467;e.question=63;e.questionarabic=1567;e.questionarmenian=1374;e.questiondown=191;e.questiondownsmall=63423;e.questiongreek=894;e.questionmonospace=65311;e.questionsmall=63295;e.quotedbl=34;e.quotedblbase=8222;e.quotedblleft=8220;e.quotedblmonospace=65282;e.quotedblprime=12318;e.quotedblprimereversed=12317;e.quotedblright=8221;e.quoteleft=8216;e.quoteleftreversed=8219;e.quotereversed=8219;e.quoteright=8217;e.quoterightn=329;e.quotesinglbase=8218;e.quotesingle=39;e.quotesinglemonospace=65287;e.r=114;e.raarmenian=1404;e.rabengali=2480;e.racute=341;e.radeva=2352;e.radical=8730;e.radicalex=63717;e.radoverssquare=13230;e.radoverssquaredsquare=13231;e.radsquare=13229;e.rafe=1471;e.rafehebrew=1471;e.ragujarati=2736;e.ragurmukhi=2608;e.rahiragana=12425;e.rakatakana=12521;e.rakatakanahalfwidth=65431;e.ralowerdiagonalbengali=2545;e.ramiddlediagonalbengali=2544;e.ramshorn=612;e.ratio=8758;e.rbopomofo=12566;e.rcaron=345;e.rcedilla=343;e.rcircle=9441;e.rcommaaccent=343;e.rdblgrave=529;e.rdotaccent=7769;e.rdotbelow=7771;e.rdotbelowmacron=7773;e.referencemark=8251;e.reflexsubset=8838;e.reflexsuperset=8839;e.registered=174;e.registersans=63720;e.registerserif=63194;e.reharabic=1585;e.reharmenian=1408;e.rehfinalarabic=65198;e.rehiragana=12428;e.rekatakana=12524;e.rekatakanahalfwidth=65434;e.resh=1512;e.reshdageshhebrew=64328;e.reshhebrew=1512;e.reversedtilde=8765;e.reviahebrew=1431;e.reviamugrashhebrew=1431;e.revlogicalnot=8976;e.rfishhook=638;e.rfishhookreversed=639;e.rhabengali=2525;e.rhadeva=2397;e.rho=961;e.rhook=637;e.rhookturned=635;e.rhookturnedsuperior=693;e.rhosymbolgreek=1009;e.rhotichookmod=734;e.rieulacirclekorean=12913;e.rieulaparenkorean=12817;e.rieulcirclekorean=12899;e.rieulhieuhkorean=12608;e.rieulkiyeokkorean=12602;e.rieulkiyeoksioskorean=12649;e.rieulkorean=12601;e.rieulmieumkorean=12603;e.rieulpansioskorean=12652;e.rieulparenkorean=12803;e.rieulphieuphkorean=12607;e.rieulpieupkorean=12604;e.rieulpieupsioskorean=12651;e.rieulsioskorean=12605;e.rieulthieuthkorean=12606;e.rieultikeutkorean=12650;e.rieulyeorinhieuhkorean=12653;e.rightangle=8735;e.righttackbelowcmb=793;e.righttriangle=8895;e.rihiragana=12426;e.rikatakana=12522;e.rikatakanahalfwidth=65432;e.ring=730;e.ringbelowcmb=805;e.ringcmb=778;e.ringhalfleft=703;e.ringhalfleftarmenian=1369;e.ringhalfleftbelowcmb=796;e.ringhalfleftcentered=723;e.ringhalfright=702;e.ringhalfrightbelowcmb=825;e.ringhalfrightcentered=722;e.rinvertedbreve=531;e.rittorusquare=13137;e.rlinebelow=7775;e.rlongleg=636;e.rlonglegturned=634;e.rmonospace=65362;e.rohiragana=12429;e.rokatakana=12525;e.rokatakanahalfwidth=65435;e.roruathai=3619;e.rparen=9389;e.rrabengali=2524;e.rradeva=2353;e.rragurmukhi=2652;e.rreharabic=1681;e.rrehfinalarabic=64397;e.rrvocalicbengali=2528;e.rrvocalicdeva=2400;e.rrvocalicgujarati=2784;e.rrvocalicvowelsignbengali=2500;e.rrvocalicvowelsigndeva=2372;e.rrvocalicvowelsigngujarati=2756;e.rsuperior=63217;e.rtblock=9616;e.rturned=633;e.rturnedsuperior=692;e.ruhiragana=12427;e.rukatakana=12523;e.rukatakanahalfwidth=65433;e.rupeemarkbengali=2546;e.rupeesignbengali=2547;e.rupiah=63197;e.ruthai=3620;e.rvocalicbengali=2443;e.rvocalicdeva=2315;e.rvocalicgujarati=2699;e.rvocalicvowelsignbengali=2499;e.rvocalicvowelsigndeva=2371;e.rvocalicvowelsigngujarati=2755;e.s=115;e.sabengali=2488;e.sacute=347;e.sacutedotaccent=7781;e.sadarabic=1589;e.sadeva=2360;e.sadfinalarabic=65210;e.sadinitialarabic=65211;e.sadmedialarabic=65212;e.sagujarati=2744;e.sagurmukhi=2616;e.sahiragana=12373;e.sakatakana=12469;e.sakatakanahalfwidth=65403;e.sallallahoualayhewasallamarabic=65018;e.samekh=1505;e.samekhdagesh=64321;e.samekhdageshhebrew=64321;e.samekhhebrew=1505;e.saraaathai=3634;e.saraaethai=3649;e.saraaimaimalaithai=3652;e.saraaimaimuanthai=3651;e.saraamthai=3635;e.saraathai=3632;e.saraethai=3648;e.saraiileftthai=63622;e.saraiithai=3637;e.saraileftthai=63621;e.saraithai=3636;e.saraothai=3650;e.saraueeleftthai=63624;e.saraueethai=3639;e.saraueleftthai=63623;e.sarauethai=3638;e.sarauthai=3640;e.sarauuthai=3641;e.sbopomofo=12569;e.scaron=353;e.scarondotaccent=7783;e.scedilla=351;e.schwa=601;e.schwacyrillic=1241;e.schwadieresiscyrillic=1243;e.schwahook=602;e.scircle=9442;e.scircumflex=349;e.scommaaccent=537;e.sdotaccent=7777;e.sdotbelow=7779;e.sdotbelowdotaccent=7785;e.seagullbelowcmb=828;e.second=8243;e.secondtonechinese=714;e.section=167;e.seenarabic=1587;e.seenfinalarabic=65202;e.seeninitialarabic=65203;e.seenmedialarabic=65204;e.segol=1462;e.segol13=1462;e.segol1f=1462;e.segol2c=1462;e.segolhebrew=1462;e.segolnarrowhebrew=1462;e.segolquarterhebrew=1462;e.segoltahebrew=1426;e.segolwidehebrew=1462;e.seharmenian=1405;e.sehiragana=12379;e.sekatakana=12475;e.sekatakanahalfwidth=65406;e.semicolon=59;e.semicolonarabic=1563;e.semicolonmonospace=65307;e.semicolonsmall=65108;e.semivoicedmarkkana=12444;e.semivoicedmarkkanahalfwidth=65439;e.sentisquare=13090;e.sentosquare=13091;e.seven=55;e.sevenarabic=1639;e.sevenbengali=2541;e.sevencircle=9318;e.sevencircleinversesansserif=10128;e.sevendeva=2413;e.seveneighths=8542;e.sevengujarati=2797;e.sevengurmukhi=2669;e.sevenhackarabic=1639;e.sevenhangzhou=12327;e.sevenideographicparen=12838;e.seveninferior=8327;e.sevenmonospace=65303;e.sevenoldstyle=63287;e.sevenparen=9338;e.sevenperiod=9358;e.sevenpersian=1783;e.sevenroman=8566;e.sevensuperior=8311;e.seventeencircle=9328;e.seventeenparen=9348;e.seventeenperiod=9368;e.seventhai=3671;e.sfthyphen=173;e.shaarmenian=1399;e.shabengali=2486;e.shacyrillic=1096;e.shaddaarabic=1617;e.shaddadammaarabic=64609;e.shaddadammatanarabic=64606;e.shaddafathaarabic=64608;e.shaddakasraarabic=64610;e.shaddakasratanarabic=64607;e.shade=9618;e.shadedark=9619;e.shadelight=9617;e.shademedium=9618;e.shadeva=2358;e.shagujarati=2742;e.shagurmukhi=2614;e.shalshelethebrew=1427;e.shbopomofo=12565;e.shchacyrillic=1097;e.sheenarabic=1588;e.sheenfinalarabic=65206;e.sheeninitialarabic=65207;e.sheenmedialarabic=65208;e.sheicoptic=995;e.sheqel=8362;e.sheqelhebrew=8362;e.sheva=1456;e.sheva115=1456;e.sheva15=1456;e.sheva22=1456;e.sheva2e=1456;e.shevahebrew=1456;e.shevanarrowhebrew=1456;e.shevaquarterhebrew=1456;e.shevawidehebrew=1456;e.shhacyrillic=1211;e.shimacoptic=1005;e.shin=1513;e.shindagesh=64329;e.shindageshhebrew=64329;e.shindageshshindot=64300;e.shindageshshindothebrew=64300;e.shindageshsindot=64301;e.shindageshsindothebrew=64301;e.shindothebrew=1473;e.shinhebrew=1513;e.shinshindot=64298;e.shinshindothebrew=64298;e.shinsindot=64299;e.shinsindothebrew=64299;e.shook=642;e.sigma=963;e.sigma1=962;e.sigmafinal=962;e.sigmalunatesymbolgreek=1010;e.sihiragana=12375;e.sikatakana=12471;e.sikatakanahalfwidth=65404;e.siluqhebrew=1469;e.siluqlefthebrew=1469;e.similar=8764;e.sindothebrew=1474;e.siosacirclekorean=12916;e.siosaparenkorean=12820;e.sioscieuckorean=12670;e.sioscirclekorean=12902;e.sioskiyeokkorean=12666;e.sioskorean=12613;e.siosnieunkorean=12667;e.siosparenkorean=12806;e.siospieupkorean=12669;e.siostikeutkorean=12668;e.six=54;e.sixarabic=1638;e.sixbengali=2540;e.sixcircle=9317;e.sixcircleinversesansserif=10127;e.sixdeva=2412;e.sixgujarati=2796;e.sixgurmukhi=2668;e.sixhackarabic=1638;e.sixhangzhou=12326;e.sixideographicparen=12837;e.sixinferior=8326;e.sixmonospace=65302;e.sixoldstyle=63286;e.sixparen=9337;e.sixperiod=9357;e.sixpersian=1782;e.sixroman=8565;e.sixsuperior=8310;e.sixteencircle=9327;e.sixteencurrencydenominatorbengali=2553;e.sixteenparen=9347;e.sixteenperiod=9367;e.sixthai=3670;e.slash=47;e.slashmonospace=65295;e.slong=383;e.slongdotaccent=7835;e.smileface=9786;e.smonospace=65363;e.sofpasuqhebrew=1475;e.softhyphen=173;e.softsigncyrillic=1100;e.sohiragana=12381;e.sokatakana=12477;e.sokatakanahalfwidth=65407;e.soliduslongoverlaycmb=824;e.solidusshortoverlaycmb=823;e.sorusithai=3625;e.sosalathai=3624;e.sosothai=3595;e.sosuathai=3626;e.space=32;e.spacehackarabic=32;e.spade=9824;e.spadesuitblack=9824;e.spadesuitwhite=9828;e.sparen=9390;e.squarebelowcmb=827;e.squarecc=13252;e.squarecm=13213;e.squarediagonalcrosshatchfill=9641;e.squarehorizontalfill=9636;e.squarekg=13199;e.squarekm=13214;e.squarekmcapital=13262;e.squareln=13265;e.squarelog=13266;e.squaremg=13198;e.squaremil=13269;e.squaremm=13212;e.squaremsquared=13217;e.squareorthogonalcrosshatchfill=9638;e.squareupperlefttolowerrightfill=9639;e.squareupperrighttolowerleftfill=9640;e.squareverticalfill=9637;e.squarewhitewithsmallblack=9635;e.srsquare=13275;e.ssabengali=2487;e.ssadeva=2359;e.ssagujarati=2743;e.ssangcieuckorean=12617;e.ssanghieuhkorean=12677;e.ssangieungkorean=12672;e.ssangkiyeokkorean=12594;e.ssangnieunkorean=12645;e.ssangpieupkorean=12611;e.ssangsioskorean=12614;e.ssangtikeutkorean=12600;e.ssuperior=63218;e.sterling=163;e.sterlingmonospace=65505;e.strokelongoverlaycmb=822;e.strokeshortoverlaycmb=821;e.subset=8834;e.subsetnotequal=8842;e.subsetorequal=8838;e.succeeds=8827;e.suchthat=8715;e.suhiragana=12377;e.sukatakana=12473;e.sukatakanahalfwidth=65405;e.sukunarabic=1618;e.summation=8721;e.sun=9788;e.superset=8835;e.supersetnotequal=8843;e.supersetorequal=8839;e.svsquare=13276;e.syouwaerasquare=13180;e.t=116;e.tabengali=2468;e.tackdown=8868;e.tackleft=8867;e.tadeva=2340;e.tagujarati=2724;e.tagurmukhi=2596;e.taharabic=1591;e.tahfinalarabic=65218;e.tahinitialarabic=65219;e.tahiragana=12383;e.tahmedialarabic=65220;e.taisyouerasquare=13181;e.takatakana=12479;e.takatakanahalfwidth=65408;e.tatweelarabic=1600;e.tau=964;e.tav=1514;e.tavdages=64330;e.tavdagesh=64330;e.tavdageshhebrew=64330;e.tavhebrew=1514;e.tbar=359;e.tbopomofo=12554;e.tcaron=357;e.tccurl=680;e.tcedilla=355;e.tcheharabic=1670;e.tchehfinalarabic=64379;e.tchehinitialarabic=64380;e.tchehmedialarabic=64381;e.tcircle=9443;e.tcircumflexbelow=7793;e.tcommaaccent=355;e.tdieresis=7831;e.tdotaccent=7787;e.tdotbelow=7789;e.tecyrillic=1090;e.tedescendercyrillic=1197;e.teharabic=1578;e.tehfinalarabic=65174;e.tehhahinitialarabic=64674;e.tehhahisolatedarabic=64524;e.tehinitialarabic=65175;e.tehiragana=12390;e.tehjeeminitialarabic=64673;e.tehjeemisolatedarabic=64523;e.tehmarbutaarabic=1577;e.tehmarbutafinalarabic=65172;e.tehmedialarabic=65176;e.tehmeeminitialarabic=64676;e.tehmeemisolatedarabic=64526;e.tehnoonfinalarabic=64627;e.tekatakana=12486;e.tekatakanahalfwidth=65411;e.telephone=8481;e.telephoneblack=9742;e.telishagedolahebrew=1440;e.telishaqetanahebrew=1449;e.tencircle=9321;e.tenideographicparen=12841;e.tenparen=9341;e.tenperiod=9361;e.tenroman=8569;e.tesh=679;e.tet=1496;e.tetdagesh=64312;e.tetdageshhebrew=64312;e.tethebrew=1496;e.tetsecyrillic=1205;e.tevirhebrew=1435;e.tevirlefthebrew=1435;e.thabengali=2469;e.thadeva=2341;e.thagujarati=2725;e.thagurmukhi=2597;e.thalarabic=1584;e.thalfinalarabic=65196;e.thanthakhatlowleftthai=63640;e.thanthakhatlowrightthai=63639;e.thanthakhatthai=3660;e.thanthakhatupperleftthai=63638;e.theharabic=1579;e.thehfinalarabic=65178;e.thehinitialarabic=65179;e.thehmedialarabic=65180;e.thereexists=8707;e.therefore=8756;e.theta=952;e.theta1=977;e.thetasymbolgreek=977;e.thieuthacirclekorean=12921;e.thieuthaparenkorean=12825;e.thieuthcirclekorean=12907;e.thieuthkorean=12620;e.thieuthparenkorean=12811;e.thirteencircle=9324;e.thirteenparen=9344;e.thirteenperiod=9364;e.thonangmonthothai=3601;e.thook=429;e.thophuthaothai=3602;e.thorn=254;e.thothahanthai=3607;e.thothanthai=3600;e.thothongthai=3608;e.thothungthai=3606;e.thousandcyrillic=1154;e.thousandsseparatorarabic=1644;e.thousandsseparatorpersian=1644;e.three=51;e.threearabic=1635;e.threebengali=2537;e.threecircle=9314;e.threecircleinversesansserif=10124;e.threedeva=2409;e.threeeighths=8540;e.threegujarati=2793;e.threegurmukhi=2665;e.threehackarabic=1635;e.threehangzhou=12323;e.threeideographicparen=12834;e.threeinferior=8323;e.threemonospace=65299;e.threenumeratorbengali=2550;e.threeoldstyle=63283;e.threeparen=9334;e.threeperiod=9354;e.threepersian=1779;e.threequarters=190;e.threequartersemdash=63198;e.threeroman=8562;e.threesuperior=179;e.threethai=3667;e.thzsquare=13204;e.tihiragana=12385;e.tikatakana=12481;e.tikatakanahalfwidth=65409;e.tikeutacirclekorean=12912;e.tikeutaparenkorean=12816;e.tikeutcirclekorean=12898;e.tikeutkorean=12599;e.tikeutparenkorean=12802;e.tilde=732;e.tildebelowcmb=816;e.tildecmb=771;e.tildecomb=771;e.tildedoublecmb=864;e.tildeoperator=8764;e.tildeoverlaycmb=820;e.tildeverticalcmb=830;e.timescircle=8855;e.tipehahebrew=1430;e.tipehalefthebrew=1430;e.tippigurmukhi=2672;e.titlocyrilliccmb=1155;e.tiwnarmenian=1407;e.tlinebelow=7791;e.tmonospace=65364;e.toarmenian=1385;e.tohiragana=12392;e.tokatakana=12488;e.tokatakanahalfwidth=65412;e.tonebarextrahighmod=741;e.tonebarextralowmod=745;e.tonebarhighmod=742;e.tonebarlowmod=744;e.tonebarmidmod=743;e.tonefive=445;e.tonesix=389;e.tonetwo=424;e.tonos=900;e.tonsquare=13095;e.topatakthai=3599;e.tortoiseshellbracketleft=12308;e.tortoiseshellbracketleftsmall=65117;e.tortoiseshellbracketleftvertical=65081;e.tortoiseshellbracketright=12309;e.tortoiseshellbracketrightsmall=65118;e.tortoiseshellbracketrightvertical=65082;e.totaothai=3605;e.tpalatalhook=427;e.tparen=9391;e.trademark=8482;e.trademarksans=63722;e.trademarkserif=63195;e.tretroflexhook=648;e.triagdn=9660;e.triaglf=9668;e.triagrt=9658;e.triagup=9650;e.ts=678;e.tsadi=1510;e.tsadidagesh=64326;e.tsadidageshhebrew=64326;e.tsadihebrew=1510;e.tsecyrillic=1094;e.tsere=1461;e.tsere12=1461;e.tsere1e=1461;e.tsere2b=1461;e.tserehebrew=1461;e.tserenarrowhebrew=1461;e.tserequarterhebrew=1461;e.tserewidehebrew=1461;e.tshecyrillic=1115;e.tsuperior=63219;e.ttabengali=2463;e.ttadeva=2335;e.ttagujarati=2719;e.ttagurmukhi=2591;e.tteharabic=1657;e.ttehfinalarabic=64359;e.ttehinitialarabic=64360;e.ttehmedialarabic=64361;e.tthabengali=2464;e.tthadeva=2336;e.tthagujarati=2720;e.tthagurmukhi=2592;e.tturned=647;e.tuhiragana=12388;e.tukatakana=12484;e.tukatakanahalfwidth=65410;e.tusmallhiragana=12387;e.tusmallkatakana=12483;e.tusmallkatakanahalfwidth=65391;e.twelvecircle=9323;e.twelveparen=9343;e.twelveperiod=9363;e.twelveroman=8571;e.twentycircle=9331;e.twentyhangzhou=21316;e.twentyparen=9351;e.twentyperiod=9371;e.two=50;e.twoarabic=1634;e.twobengali=2536;e.twocircle=9313;e.twocircleinversesansserif=10123;e.twodeva=2408;e.twodotenleader=8229;e.twodotleader=8229;e.twodotleadervertical=65072;e.twogujarati=2792;e.twogurmukhi=2664;e.twohackarabic=1634;e.twohangzhou=12322;e.twoideographicparen=12833;e.twoinferior=8322;e.twomonospace=65298;e.twonumeratorbengali=2549;e.twooldstyle=63282;e.twoparen=9333;e.twoperiod=9353;e.twopersian=1778;e.tworoman=8561;e.twostroke=443;e.twosuperior=178;e.twothai=3666;e.twothirds=8532;e.u=117;e.uacute=250;e.ubar=649;e.ubengali=2441;e.ubopomofo=12584;e.ubreve=365;e.ucaron=468;e.ucircle=9444;e.ucircumflex=251;e.ucircumflexbelow=7799;e.ucyrillic=1091;e.udattadeva=2385;e.udblacute=369;e.udblgrave=533;e.udeva=2313;e.udieresis=252;e.udieresisacute=472;e.udieresisbelow=7795;e.udieresiscaron=474;e.udieresiscyrillic=1265;e.udieresisgrave=476;e.udieresismacron=470;e.udotbelow=7909;e.ugrave=249;e.ugujarati=2697;e.ugurmukhi=2569;e.uhiragana=12358;e.uhookabove=7911;e.uhorn=432;e.uhornacute=7913;e.uhorndotbelow=7921;e.uhorngrave=7915;e.uhornhookabove=7917;e.uhorntilde=7919;e.uhungarumlaut=369;e.uhungarumlautcyrillic=1267;e.uinvertedbreve=535;e.ukatakana=12454;e.ukatakanahalfwidth=65395;e.ukcyrillic=1145;e.ukorean=12636;e.umacron=363;e.umacroncyrillic=1263;e.umacrondieresis=7803;e.umatragurmukhi=2625;e.umonospace=65365;e.underscore=95;e.underscoredbl=8215;e.underscoremonospace=65343;e.underscorevertical=65075;e.underscorewavy=65103;e.union=8746;e.universal=8704;e.uogonek=371;e.uparen=9392;e.upblock=9600;e.upperdothebrew=1476;e.upsilon=965;e.upsilondieresis=971;e.upsilondieresistonos=944;e.upsilonlatin=650;e.upsilontonos=973;e.uptackbelowcmb=797;e.uptackmod=724;e.uragurmukhi=2675;e.uring=367;e.ushortcyrillic=1118;e.usmallhiragana=12357;e.usmallkatakana=12453;e.usmallkatakanahalfwidth=65385;e.ustraightcyrillic=1199;e.ustraightstrokecyrillic=1201;e.utilde=361;e.utildeacute=7801;e.utildebelow=7797;e.uubengali=2442;e.uudeva=2314;e.uugujarati=2698;e.uugurmukhi=2570;e.uumatragurmukhi=2626;e.uuvowelsignbengali=2498;e.uuvowelsigndeva=2370;e.uuvowelsigngujarati=2754;e.uvowelsignbengali=2497;e.uvowelsigndeva=2369;e.uvowelsigngujarati=2753;e.v=118;e.vadeva=2357;e.vagujarati=2741;e.vagurmukhi=2613;e.vakatakana=12535;e.vav=1493;e.vavdagesh=64309;e.vavdagesh65=64309;e.vavdageshhebrew=64309;e.vavhebrew=1493;e.vavholam=64331;e.vavholamhebrew=64331;e.vavvavhebrew=1520;e.vavyodhebrew=1521;e.vcircle=9445;e.vdotbelow=7807;e.vecyrillic=1074;e.veharabic=1700;e.vehfinalarabic=64363;e.vehinitialarabic=64364;e.vehmedialarabic=64365;e.vekatakana=12537;e.venus=9792;e.verticalbar=124;e.verticallineabovecmb=781;e.verticallinebelowcmb=809;e.verticallinelowmod=716;e.verticallinemod=712;e.vewarmenian=1406;e.vhook=651;e.vikatakana=12536;e.viramabengali=2509;e.viramadeva=2381;e.viramagujarati=2765;e.visargabengali=2435;e.visargadeva=2307;e.visargagujarati=2691;e.vmonospace=65366;e.voarmenian=1400;e.voicediterationhiragana=12446;e.voicediterationkatakana=12542;e.voicedmarkkana=12443;e.voicedmarkkanahalfwidth=65438;e.vokatakana=12538;e.vparen=9393;e.vtilde=7805;e.vturned=652;e.vuhiragana=12436;e.vukatakana=12532;e.w=119;e.wacute=7811;e.waekorean=12633;e.wahiragana=12431;e.wakatakana=12527;e.wakatakanahalfwidth=65436;e.wakorean=12632;e.wasmallhiragana=12430;e.wasmallkatakana=12526;e.wattosquare=13143;e.wavedash=12316;e.wavyunderscorevertical=65076;e.wawarabic=1608;e.wawfinalarabic=65262;e.wawhamzaabovearabic=1572;e.wawhamzaabovefinalarabic=65158;e.wbsquare=13277;e.wcircle=9446;e.wcircumflex=373;e.wdieresis=7813;e.wdotaccent=7815;e.wdotbelow=7817;e.wehiragana=12433;e.weierstrass=8472;e.wekatakana=12529;e.wekorean=12638;e.weokorean=12637;e.wgrave=7809;e.whitebullet=9702;e.whitecircle=9675;e.whitecircleinverse=9689;e.whitecornerbracketleft=12302;e.whitecornerbracketleftvertical=65091;e.whitecornerbracketright=12303;e.whitecornerbracketrightvertical=65092;e.whitediamond=9671;e.whitediamondcontainingblacksmalldiamond=9672;e.whitedownpointingsmalltriangle=9663;e.whitedownpointingtriangle=9661;e.whiteleftpointingsmalltriangle=9667;e.whiteleftpointingtriangle=9665;e.whitelenticularbracketleft=12310;e.whitelenticularbracketright=12311;e.whiterightpointingsmalltriangle=9657;e.whiterightpointingtriangle=9655;e.whitesmallsquare=9643;e.whitesmilingface=9786;e.whitesquare=9633;e.whitestar=9734;e.whitetelephone=9743;e.whitetortoiseshellbracketleft=12312;e.whitetortoiseshellbracketright=12313;e.whiteuppointingsmalltriangle=9653;e.whiteuppointingtriangle=9651;e.wihiragana=12432;e.wikatakana=12528;e.wikorean=12639;e.wmonospace=65367;e.wohiragana=12434;e.wokatakana=12530;e.wokatakanahalfwidth=65382;e.won=8361;e.wonmonospace=65510;e.wowaenthai=3623;e.wparen=9394;e.wring=7832;e.wsuperior=695;e.wturned=653;e.wynn=447;e.x=120;e.xabovecmb=829;e.xbopomofo=12562;e.xcircle=9447;e.xdieresis=7821;e.xdotaccent=7819;e.xeharmenian=1389;e.xi=958;e.xmonospace=65368;e.xparen=9395;e.xsuperior=739;e.y=121;e.yaadosquare=13134;e.yabengali=2479;e.yacute=253;e.yadeva=2351;e.yaekorean=12626;e.yagujarati=2735;e.yagurmukhi=2607;e.yahiragana=12420;e.yakatakana=12516;e.yakatakanahalfwidth=65428;e.yakorean=12625;e.yamakkanthai=3662;e.yasmallhiragana=12419;e.yasmallkatakana=12515;e.yasmallkatakanahalfwidth=65388;e.yatcyrillic=1123;e.ycircle=9448;e.ycircumflex=375;e.ydieresis=255;e.ydotaccent=7823;e.ydotbelow=7925;e.yeharabic=1610;e.yehbarreearabic=1746;e.yehbarreefinalarabic=64431;e.yehfinalarabic=65266;e.yehhamzaabovearabic=1574;e.yehhamzaabovefinalarabic=65162;e.yehhamzaaboveinitialarabic=65163;e.yehhamzaabovemedialarabic=65164;e.yehinitialarabic=65267;e.yehmedialarabic=65268;e.yehmeeminitialarabic=64733;e.yehmeemisolatedarabic=64600;e.yehnoonfinalarabic=64660;e.yehthreedotsbelowarabic=1745;e.yekorean=12630;e.yen=165;e.yenmonospace=65509;e.yeokorean=12629;e.yeorinhieuhkorean=12678;e.yerahbenyomohebrew=1450;e.yerahbenyomolefthebrew=1450;e.yericyrillic=1099;e.yerudieresiscyrillic=1273;e.yesieungkorean=12673;e.yesieungpansioskorean=12675;e.yesieungsioskorean=12674;e.yetivhebrew=1434;e.ygrave=7923;e.yhook=436;e.yhookabove=7927;e.yiarmenian=1397;e.yicyrillic=1111;e.yikorean=12642;e.yinyang=9775;e.yiwnarmenian=1410;e.ymonospace=65369;e.yod=1497;e.yoddagesh=64313;e.yoddageshhebrew=64313;e.yodhebrew=1497;e.yodyodhebrew=1522;e.yodyodpatahhebrew=64287;e.yohiragana=12424;e.yoikorean=12681;e.yokatakana=12520;e.yokatakanahalfwidth=65430;e.yokorean=12635;e.yosmallhiragana=12423;e.yosmallkatakana=12519;e.yosmallkatakanahalfwidth=65390;e.yotgreek=1011;e.yoyaekorean=12680;e.yoyakorean=12679;e.yoyakthai=3618;e.yoyingthai=3597;e.yparen=9396;e.ypogegrammeni=890;e.ypogegrammenigreekcmb=837;e.yr=422;e.yring=7833;e.ysuperior=696;e.ytilde=7929;e.yturned=654;e.yuhiragana=12422;e.yuikorean=12684;e.yukatakana=12518;e.yukatakanahalfwidth=65429;e.yukorean=12640;e.yusbigcyrillic=1131;e.yusbigiotifiedcyrillic=1133;e.yuslittlecyrillic=1127;e.yuslittleiotifiedcyrillic=1129;e.yusmallhiragana=12421;e.yusmallkatakana=12517;e.yusmallkatakanahalfwidth=65389;e.yuyekorean=12683;e.yuyeokorean=12682;e.yyabengali=2527;e.yyadeva=2399;e.z=122;e.zaarmenian=1382;e.zacute=378;e.zadeva=2395;e.zagurmukhi=2651;e.zaharabic=1592;e.zahfinalarabic=65222;e.zahinitialarabic=65223;e.zahiragana=12374;e.zahmedialarabic=65224;e.zainarabic=1586;e.zainfinalarabic=65200;e.zakatakana=12470;e.zaqefgadolhebrew=1429;e.zaqefqatanhebrew=1428;e.zarqahebrew=1432;e.zayin=1494;e.zayindagesh=64310;e.zayindageshhebrew=64310;e.zayinhebrew=1494;e.zbopomofo=12567;e.zcaron=382;e.zcircle=9449;e.zcircumflex=7825;e.zcurl=657;e.zdot=380;e.zdotaccent=380;e.zdotbelow=7827;e.zecyrillic=1079;e.zedescendercyrillic=1177;e.zedieresiscyrillic=1247;e.zehiragana=12380;e.zekatakana=12476;e.zero=48;e.zeroarabic=1632;e.zerobengali=2534;e.zerodeva=2406;e.zerogujarati=2790;e.zerogurmukhi=2662;e.zerohackarabic=1632;e.zeroinferior=8320;e.zeromonospace=65296;e.zerooldstyle=63280;e.zeropersian=1776;e.zerosuperior=8304;e.zerothai=3664;e.zerowidthjoiner=65279;e.zerowidthnonjoiner=8204;e.zerowidthspace=8203;e.zeta=950;e.zhbopomofo=12563;e.zhearmenian=1386;e.zhebrevecyrillic=1218;e.zhecyrillic=1078;e.zhedescendercyrillic=1175;e.zhedieresiscyrillic=1245;e.zihiragana=12376;e.zikatakana=12472;e.zinorhebrew=1454;e.zlinebelow=7829;e.zmonospace=65370;e.zohiragana=12382;e.zokatakana=12478;e.zparen=9397;e.zretroflexhook=656;e.zstroke=438;e.zuhiragana=12378;e.zukatakana=12474;e[".notdef"]=0;e.angbracketleftbig=9001;e.angbracketleftBig=9001;e.angbracketleftbigg=9001;e.angbracketleftBigg=9001;e.angbracketrightBig=9002;e.angbracketrightbig=9002;e.angbracketrightBigg=9002;e.angbracketrightbigg=9002;e.arrowhookleft=8618;e.arrowhookright=8617;e.arrowlefttophalf=8636;e.arrowleftbothalf=8637;e.arrownortheast=8599;e.arrownorthwest=8598;e.arrowrighttophalf=8640;e.arrowrightbothalf=8641;e.arrowsoutheast=8600;e.arrowsouthwest=8601;e.backslashbig=8726;e.backslashBig=8726;e.backslashBigg=8726;e.backslashbigg=8726;e.bardbl=8214;e.bracehtipdownleft=65079;e.bracehtipdownright=65079;e.bracehtipupleft=65080;e.bracehtipupright=65080;e.braceleftBig=123;e.braceleftbig=123;e.braceleftbigg=123;e.braceleftBigg=123;e.bracerightBig=125;e.bracerightbig=125;e.bracerightbigg=125;e.bracerightBigg=125;e.bracketleftbig=91;e.bracketleftBig=91;e.bracketleftbigg=91;e.bracketleftBigg=91;e.bracketrightBig=93;e.bracketrightbig=93;e.bracketrightbigg=93;e.bracketrightBigg=93;e.ceilingleftbig=8968;e.ceilingleftBig=8968;e.ceilingleftBigg=8968;e.ceilingleftbigg=8968;e.ceilingrightbig=8969;e.ceilingrightBig=8969;e.ceilingrightbigg=8969;e.ceilingrightBigg=8969;e.circledotdisplay=8857;e.circledottext=8857;e.circlemultiplydisplay=8855;e.circlemultiplytext=8855;e.circleplusdisplay=8853;e.circleplustext=8853;e.contintegraldisplay=8750;e.contintegraltext=8750;e.coproductdisplay=8720;e.coproducttext=8720;e.floorleftBig=8970;e.floorleftbig=8970;e.floorleftbigg=8970;e.floorleftBigg=8970;e.floorrightbig=8971;e.floorrightBig=8971;e.floorrightBigg=8971;e.floorrightbigg=8971;e.hatwide=770;e.hatwider=770;e.hatwidest=770;e.intercal=7488;e.integraldisplay=8747;e.integraltext=8747;e.intersectiondisplay=8898;e.intersectiontext=8898;e.logicalanddisplay=8743;e.logicalandtext=8743;e.logicalordisplay=8744;e.logicalortext=8744;e.parenleftBig=40;e.parenleftbig=40;e.parenleftBigg=40;e.parenleftbigg=40;e.parenrightBig=41;e.parenrightbig=41;e.parenrightBigg=41;e.parenrightbigg=41;e.prime=8242;e.productdisplay=8719;e.producttext=8719;e.radicalbig=8730;e.radicalBig=8730;e.radicalBigg=8730;e.radicalbigg=8730;e.radicalbt=8730;e.radicaltp=8730;e.radicalvertex=8730;e.slashbig=47;e.slashBig=47;e.slashBigg=47;e.slashbigg=47;e.summationdisplay=8721;e.summationtext=8721;e.tildewide=732;e.tildewider=732;e.tildewidest=732;e.uniondisplay=8899;e.unionmultidisplay=8846;e.unionmultitext=8846;e.unionsqdisplay=8852;e.unionsqtext=8852;e.uniontext=8899;e.vextenddouble=8741;e.vextendsingle=8739})),Ir=getLookupTableFactory((function(e){e.space=32;e.a1=9985;e.a2=9986;e.a202=9987;e.a3=9988;e.a4=9742;e.a5=9990;e.a119=9991;e.a118=9992;e.a117=9993;e.a11=9755;e.a12=9758;e.a13=9996;e.a14=9997;e.a15=9998;e.a16=9999;e.a105=1e4;e.a17=10001;e.a18=10002;e.a19=10003;e.a20=10004;e.a21=10005;e.a22=10006;e.a23=10007;e.a24=10008;e.a25=10009;e.a26=10010;e.a27=10011;e.a28=10012;e.a6=10013;e.a7=10014;e.a8=10015;e.a9=10016;e.a10=10017;e.a29=10018;e.a30=10019;e.a31=10020;e.a32=10021;e.a33=10022;e.a34=10023;e.a35=9733;e.a36=10025;e.a37=10026;e.a38=10027;e.a39=10028;e.a40=10029;e.a41=10030;e.a42=10031;e.a43=10032;e.a44=10033;e.a45=10034;e.a46=10035;e.a47=10036;e.a48=10037;e.a49=10038;e.a50=10039;e.a51=10040;e.a52=10041;e.a53=10042;e.a54=10043;e.a55=10044;e.a56=10045;e.a57=10046;e.a58=10047;e.a59=10048;e.a60=10049;e.a61=10050;e.a62=10051;e.a63=10052;e.a64=10053;e.a65=10054;e.a66=10055;e.a67=10056;e.a68=10057;e.a69=10058;e.a70=10059;e.a71=9679;e.a72=10061;e.a73=9632;e.a74=10063;e.a203=10064;e.a75=10065;e.a204=10066;e.a76=9650;e.a77=9660;e.a78=9670;e.a79=10070;e.a81=9687;e.a82=10072;e.a83=10073;e.a84=10074;e.a97=10075;e.a98=10076;e.a99=10077;e.a100=10078;e.a101=10081;e.a102=10082;e.a103=10083;e.a104=10084;e.a106=10085;e.a107=10086;e.a108=10087;e.a112=9827;e.a111=9830;e.a110=9829;e.a109=9824;e.a120=9312;e.a121=9313;e.a122=9314;e.a123=9315;e.a124=9316;e.a125=9317;e.a126=9318;e.a127=9319;e.a128=9320;e.a129=9321;e.a130=10102;e.a131=10103;e.a132=10104;e.a133=10105;e.a134=10106;e.a135=10107;e.a136=10108;e.a137=10109;e.a138=10110;e.a139=10111;e.a140=10112;e.a141=10113;e.a142=10114;e.a143=10115;e.a144=10116;e.a145=10117;e.a146=10118;e.a147=10119;e.a148=10120;e.a149=10121;e.a150=10122;e.a151=10123;e.a152=10124;e.a153=10125;e.a154=10126;e.a155=10127;e.a156=10128;e.a157=10129;e.a158=10130;e.a159=10131;e.a160=10132;e.a161=8594;e.a163=8596;e.a164=8597;e.a196=10136;e.a165=10137;e.a192=10138;e.a166=10139;e.a167=10140;e.a168=10141;e.a169=10142;e.a170=10143;e.a171=10144;e.a172=10145;e.a173=10146;e.a162=10147;e.a174=10148;e.a175=10149;e.a176=10150;e.a177=10151;e.a178=10152;e.a179=10153;e.a193=10154;e.a180=10155;e.a199=10156;e.a181=10157;e.a200=10158;e.a182=10159;e.a201=10161;e.a183=10162;e.a184=10163;e.a197=10164;e.a185=10165;e.a194=10166;e.a198=10167;e.a186=10168;e.a195=10169;e.a187=10170;e.a188=10171;e.a189=10172;e.a190=10173;e.a191=10174;e.a89=10088;e.a90=10089;e.a93=10090;e.a94=10091;e.a91=10092;e.a92=10093;e.a205=10094;e.a85=10095;e.a206=10096;e.a86=10097;e.a87=10098;e.a88=10099;e.a95=10100;e.a96=10101;e[".notdef"]=0})),Or=getLookupTableFactory((function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63729]=9127;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120}));function getUnicodeForGlyph(e,t){let a=t[e];if(void 0!==a)return a;if(!e)return-1;if("u"===e[0]){const t=e.length;let r;if(7===t&&"n"===e[1]&&"i"===e[2])r=e.substring(3);else{if(!(t>=5&&t<=7))return-1;r=e.substring(1)}if(r===r.toUpperCase()){a=parseInt(r,16);if(a>=0)return a}}return-1}const Tr=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function getUnicodeRangeFor(e,t=-1){if(-1!==t){const a=Tr[t];for(let r=0,i=a.length;r=a[r]&&e<=a[r+1])return t}for(let t=0,a=Tr.length;t=a[r]&&e<=a[r+1])return t}return-1}const Mr=new RegExp("^(\\s)|(\\p{Mn})|(\\p{Cf})$","u"),Dr=new Map;const Rr=!0,Nr=1,Er=2,Pr=4,Lr=32,jr=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function recoverGlyphName(e,t){if(void 0!==t[e])return e;const a=getUnicodeForGlyph(e,t);if(-1!==a)for(const e in t)if(t[e]===a)return e;info("Unable to recover a standard glyph name for: "+e);return e}function type1FontGlyphMapping(e,t,a){const r=Object.create(null);let i,n,s;const o=!!(e.flags&Pr);if(e.isInternalFont){s=t;for(n=0;n=0?i:0}}else if(e.baseEncodingName){s=getEncoding(e.baseEncodingName);for(n=0;n=0?i:0}}else if(o)for(n in t)r[n]=t[n];else{s=Ar;for(n=0;n=0?i:0}}const c=e.differences;let l;if(c)for(n in c){const e=c[n];i=a.indexOf(e);if(-1===i){l||(l=Fr());const t=recoverGlyphName(e,l);t!==e&&(i=a.indexOf(t))}r[n]=i>=0?i:0}return r}function normalizeFontName(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\s/g,"")}const _r=getLookupTableFactory((e=>{e[8211]=65074;e[8212]=65073;e[8229]=65072;e[8230]=65049;e[12289]=65041;e[12290]=65042;e[12296]=65087;e[12297]=65088;e[12298]=65085;e[12299]=65086;e[12300]=65089;e[12301]=65090;e[12302]=65091;e[12303]=65092;e[12304]=65083;e[12305]=65084;e[12308]=65081;e[12309]=65082;e[12310]=65047;e[12311]=65048;e[65103]=65076;e[65281]=65045;e[65288]=65077;e[65289]=65078;e[65292]=65040;e[65306]=65043;e[65307]=65044;e[65311]=65046;e[65339]=65095;e[65341]=65096;e[65343]=65075;e[65371]=65079;e[65373]=65080}));const Ur=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Xr=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],qr=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Hr=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],Wr=391,zr=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],$r=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];class CFFParser{constructor(e,t,a){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!a}parse(){const e=this.properties,t=new CFF;this.cff=t;const a=this.parseHeader(),r=this.parseIndex(a.endPos),i=this.parseIndex(r.endPos),n=this.parseIndex(i.endPos),s=this.parseIndex(n.endPos),o=this.parseDict(i.obj.get(0)),c=this.createDict(CFFTopDict,o,t.strings);t.header=a.obj;t.names=this.parseNameIndex(r.obj);t.strings=this.parseStringIndex(n.obj);t.topDict=c;t.globalSubrIndex=s.obj;this.parsePrivateDict(t.topDict);t.isCIDFont=c.hasName("ROS");const l=c.getByName("CharStrings"),h=this.parseIndex(l).obj,u=c.getByName("FontMatrix");u&&(e.fontMatrix=u);const d=c.getByName("FontBBox");if(d){e.ascent=Math.max(d[3],d[1]);e.descent=Math.min(d[1],d[3]);e.ascentScaled=!0}let f,g;if(t.isCIDFont){const e=this.parseIndex(c.getByName("FDArray")).obj;for(let a=0,r=e.count;a=t)throw new FormatError("Invalid CFF header");if(0!==a){info("cff data is shifted");e=e.subarray(a);this.bytes=e}const r=e[0],i=e[1],n=e[2],s=e[3];return{obj:new CFFHeader(r,i,n,s),endPos:n}}parseDict(e){let t=0;function parseOperand(){let a=e[t++];if(30===a)return function parseFloatOperand(){let a="";const r=15,i=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],n=e.length;for(;t>4,o=15&n;if(s===r)break;a+=i[s];if(o===r)break;a+=i[o]}return parseFloat(a)}();if(28===a){a=readInt16(e,t);t+=2;return a}if(29===a){a=e[t++];a=a<<8|e[t++];a=a<<8|e[t++];a=a<<8|e[t++];return a}if(a>=32&&a<=246)return a-139;if(a>=247&&a<=250)return 256*(a-247)+e[t++]+108;if(a>=251&&a<=254)return-256*(a-251)-e[t++]-108;warn('CFFParser_parseDict: "'+a+'" is a reserved command.');return NaN}let a=[];const r=[];t=0;const i=e.length;for(;t10)return!1;let i=e.stackSize;const n=e.stack;let s=t.length;for(let o=0;o=4){i-=4;if(this.seacAnalysisEnabled){e.seac=n.slice(i,i+4);return!1}}l=zr[c]}else if(c>=32&&c<=246){n[i]=c-139;i++}else if(c>=247&&c<=254){n[i]=c<251?(c-247<<8)+t[o]+108:-(c-251<<8)-t[o]-108;o++;i++}else if(255===c){n[i]=(t[o]<<24|t[o+1]<<16|t[o+2]<<8|t[o+3])/65536;o+=4;i++}else if(19===c||20===c){e.hints+=i>>1;if(0===e.hints){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}o+=e.hints+7>>3;i%=2;l=zr[c]}else{if(10===c||29===c){const t=10===c?a:r;if(!t){l=zr[c];warn("Missing subrsIndex for "+l.id);return!1}let s=32768;t.count<1240?s=107:t.count<33900&&(s=1131);const o=n[--i]+s;if(o<0||o>=t.count||isNaN(o)){l=zr[c];warn("Out of bounds subrIndex for "+l.id);return!1}e.stackSize=i;e.callDepth++;if(!this.parseCharString(e,t.get(o),a,r))return!1;e.callDepth--;i=e.stackSize;continue}if(11===c){e.stackSize=i;return!0}if(0===c&&o===t.length){t[o-1]=14;l=zr[14]}else{if(9===c){t.copyWithin(o-1,o,-1);o-=1;s-=1;continue}l=zr[c]}}if(l){if(l.stem){e.hints+=i>>1;if(3===c||23===c)e.hasVStems=!0;else if(e.hasVStems&&(1===c||18===c)){warn("CFF stem hints are in wrong order");t[o-1]=1===c?3:23}}if("min"in l&&!e.undefStack&&i=2&&l.stem?i%=2:i>1&&warn("Found too many parameters for stack-clearing command");i>0&&(e.width=n[i-1])}if("stackDelta"in l){"stackFn"in l&&l.stackFn(n,i);i+=l.stackDelta}else if(l.stackClearing)i=0;else if(l.resetStack){i=0;e.undefStack=!1}else if(l.undefStack){i=0;e.undefStack=!0;e.firstStackClearing=!1}}}s=i.length){warn("Invalid fd index for glyph index.");u=!1}if(u){f=i[e].privateDict;d=f.subrsIndex}}else t&&(d=t);u&&(u=this.parseCharString(h,c,d,a));if(null!==h.width){const e=f.getByName("nominalWidthX");o[l]=e+h.width}else{const e=f.getByName("defaultWidthX");o[l]=e}null!==h.seac&&(s[l]=h.seac);u||e.set(l,new Uint8Array([14]))}return{charStrings:e,seacs:s,widths:o}}emptyPrivateDictionary(e){const t=this.createDict(CFFPrivateDict,[],e.strings);e.setByKey(18,[0,0]);e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private")){this.emptyPrivateDictionary(e);return}const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length){e.removeByName("Private");return}const a=t[0],r=t[1];if(0===a||r>=this.bytes.length){this.emptyPrivateDictionary(e);return}const i=r+a,n=this.bytes.subarray(r,i),s=this.parseDict(n),o=this.createDict(CFFPrivateDict,s,e.strings);e.privateDict=o;0===o.getByName("ExpansionFactor")&&o.setByName("ExpansionFactor",.06);if(!o.getByName("Subrs"))return;const c=o.getByName("Subrs"),l=r+c;if(0===c||l>=this.bytes.length){this.emptyPrivateDictionary(e);return}const h=this.parseIndex(l);o.subrsIndex=h.obj}parseCharsets(e,t,a,r){if(0===e)return new CFFCharset(!0,Kr.ISO_ADOBE,Ur);if(1===e)return new CFFCharset(!0,Kr.EXPERT,Xr);if(2===e)return new CFFCharset(!0,Kr.EXPERT_SUBSET,qr);const i=this.bytes,n=e,s=i[e++],o=[r?0:".notdef"];let c,l,h;t-=1;switch(s){case 0:for(h=0;h=65535){warn("Not enough space in charstrings to duplicate first glyph.");return}const e=this.charStrings.get(0);this.charStrings.add(e);this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){if(e<0||e>=this.charStrings.count)return!1;return this.charStrings.get(e).length>0}}class CFFHeader{constructor(e,t,a,r){this.major=e;this.minor=t;this.hdrSize=a;this.offSize=r}}class CFFStrings{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?Hr[e]:e-Wr<=this.strings.length?this.strings[e-Wr]:Hr[0]}getSID(e){let t=Hr.indexOf(e);if(-1!==t)return t;t=this.strings.indexOf(e);return-1!==t?t+Wr:-1}add(e){this.strings.push(e)}get count(){return this.strings.length}}class CFFIndex{constructor(){this.objects=[];this.length=0}add(e){this.length+=e.length;this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length;this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}class CFFDict{constructor(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const a of t)if(isNaN(a)){warn(`Invalid CFFDict value: "${t}" for key "${e}".`);return!0}const a=this.types[e];"num"!==a&&"sid"!==a&&"offset"!==a||(t=t[0]);this.values[e]=t;return!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name "${e}"`);this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new FormatError(`Invalid dictionary name ${e}"`);const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete this.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const a of e){const e=Array.isArray(a[0])?(a[0][0]<<8)+a[0][1]:a[0];t.keyToNameMap[e]=a[1];t.nameToKeyMap[a[1]]=e;t.types[e]=a[2];t.defaults[e]=a[3];t.opcodes[e]=Array.isArray(a[0])?a[0]:[a[0]];t.order.push(e)}return t}}const Gr=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class CFFTopDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Gr))}constructor(e){super(CFFTopDict.tables,e);this.privateDict=null}}const Vr=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class CFFPrivateDict extends CFFDict{static get tables(){return shadow(this,"tables",this.createTables(Vr))}constructor(e){super(CFFPrivateDict.tables,e);this.subrsIndex=null}}const Kr={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class CFFCharset{constructor(e,t,a,r){this.predefined=e;this.format=t;this.charset=a;this.raw=r}}class CFFEncoding{constructor(e,t,a,r){this.predefined=e;this.format=t;this.encoding=a;this.raw=r}}class CFFFDSelect{constructor(e,t){this.format=e;this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}class CFFOffsetTracker{constructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new FormatError(`Already tracking location of ${e}`);this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,a){if(!(e in this.offsets))throw new FormatError(`Not tracking location of ${e}`);const r=a.data,i=this.offsets[e];for(let e=0,a=t.length;e>24&255;r[s]=l>>16&255;r[o]=l>>8&255;r[c]=255&l}}}class CFFCompiler{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch{this.data=this.data.concat(e)}this.length=this.data.length}},a=this.compileHeader(e.header);t.add(a);const r=this.compileNameIndex(e.names);t.add(r);if(e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const a of e.fdArray){let e=t.slice(0);a.hasName("FontMatrix")&&(e=Util.transform(e,a.getByName("FontMatrix")));a.setByName("FontMatrix",e)}}const i=e.topDict.getByName("XUID");i?.length>16&&e.topDict.removeByName("XUID");e.topDict.setByName("charset",0);let n=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(n.output);const s=n.trackers[0],o=this.compileStringIndex(e.strings.strings);t.add(o);const c=this.compileIndex(e.globalSubrIndex);t.add(c);if(e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)s.setEntryLocation("Encoding",[e.encoding.format],t);else{const a=this.compileEncoding(e.encoding);s.setEntryLocation("Encoding",[t.length],t);t.add(a)}const l=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);s.setEntryLocation("charset",[t.length],t);t.add(l);const h=this.compileCharStrings(e.charStrings);s.setEntryLocation("CharStrings",[t.length],t);t.add(h);if(e.isCIDFont){s.setEntryLocation("FDSelect",[t.length],t);const a=this.compileFDSelect(e.fdSelect);t.add(a);n=this.compileTopDicts(e.fdArray,t.length,!0);s.setEntryLocation("FDArray",[t.length],t);t.add(n.output);const r=n.trackers;this.compilePrivateDicts(e.fdArray,r,t)}this.compilePrivateDicts([e.topDict],[s],t);t.add([0]);return t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return shadow(this,"EncodeFloatRegExp",/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const a=CFFCompiler.EncodeFloatRegExp.exec(t);if(a){const r=parseFloat("1e"+((a[2]?+a[2]:0)+a[1].length));t=(Math.round(e*r)/r).toString()}let r,i,n="";for(r=0,i=t.length;r=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e];return t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new CFFIndex;for(const a of e){const e=Math.min(a.length,127);let r=new Array(e);for(let t=0;t"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_");r[t]=e}r=r.join("");""===r&&(r="Bad_Font_Name");t.add(stringToBytes(r))}return this.compileIndex(t)}compileTopDicts(e,t,a){const r=[];let i=new CFFIndex;for(const n of e){if(a){n.removeByName("CIDFontVersion");n.removeByName("CIDFontRevision");n.removeByName("CIDFontType");n.removeByName("CIDCount");n.removeByName("UIDBase")}const e=new CFFOffsetTracker,s=this.compileDict(n,e);r.push(e);i.add(s);e.offset(t)}i=this.compileIndex(i,r);return{trackers:r,output:i}}compilePrivateDicts(e,t,a){for(let r=0,i=e.length;r>8&255,255&e])}else{i=new Uint8Array(1+2*n);i[0]=0;let t=0;const r=e.charset.length;let s=!1;for(let n=1;n>8&255;i[n+1]=255&o}}return this.compileTypedArray(i)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let a,r;switch(t){case 0:a=new Uint8Array(1+e.fdSelect.length);a[0]=t;for(r=0;r>8&255,255&i,n];for(r=1;r>8&255,255&r,t);n=t}}const o=(s.length-3)/3;s[1]=o>>8&255;s[2]=255&o;s.push(r>>8&255,255&r);a=new Uint8Array(s)}return this.compileTypedArray(a)}compileTypedArray(e){return Array.from(e)}compileIndex(e,t=[]){const a=e.objects,r=a.length;if(0===r)return[0,0];const i=[r>>8&255,255&r];let n,s,o=1;for(n=0;n>8&255,255&c):3===s?i.push(c>>16&255,c>>8&255,255&c):i.push(c>>>24&255,c>>16&255,c>>8&255,255&c);a[n]&&(c+=a[n].length)}for(n=0;n=this.firstChar&&e<=this.lastChar?e:-1}amend(e){unreachable("Should not call amend()")}}class CFFFont{constructor(e,t){this.properties=t;const a=new CFFParser(e,t,Rr);this.cff=a.parse();this.cff.duplicateFirstGlyph();const r=new CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=r.compile()}catch{warn("Failed to compile font "+t.loadedName);this.data=e}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:a,cMap:r}=t,i=e.charset.charset;let n,s;if(t.composite){let t,o;if(a?.length>0){t=Object.create(null);for(let e=0,r=a.length;e=0){const r=a[t];r&&(i[e]=r)}}i.length>0&&(this.properties.builtInEncoding=i)}}function getFloat214(e,t){return readInt16(e,t)/16384}function getSubroutineBias(e){const t=e.length;let a=32768;t<1240?a=107:t<33900&&(a=1131);return a}function parseCmap(e,t,a){const r=1===readUint16(e,t+2)?readUint32(e,t+8):readUint32(e,t+16),i=readUint16(e,t+r);let n,s,o;if(4===i){readUint16(e,t+r+2);const a=readUint16(e,t+r+6)>>1;s=t+r+14;n=[];for(o=0;o>1;a0;)h.push({flags:n})}for(a=0;a>1;y=!0;break;case 4:s+=i.pop();moveTo(n,s);y=!0;break;case 5:for(;i.length>0;){n+=i.shift();s+=i.shift();lineTo(n,s)}break;case 6:for(;i.length>0;){n+=i.shift();lineTo(n,s);if(0===i.length)break;s+=i.shift();lineTo(n,s)}break;case 7:for(;i.length>0;){s+=i.shift();lineTo(n,s);if(0===i.length)break;n+=i.shift();lineTo(n,s)}break;case 8:for(;i.length>0;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 10:m=i.pop();b=null;if(a.isCFFCIDFont){const e=a.fdSelect.getFDIndex(r);if(e>=0&&eMath.abs(s-t)?n+=i.shift():s+=i.shift();bezierCurveTo(l,u,h,d,n,s);break;default:throw new FormatError(`unknown operator: 12 ${w}`)}break;case 14:if(i.length>=4){const e=i.pop(),r=i.pop();s=i.pop();n=i.pop();t.save();t.translate(n,s);let o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[Ar[e]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId);t.restore();o=lookupCmap(a.cmap,String.fromCharCode(a.glyphNameMap[Ar[r]]));compileCharString(a.glyphs[o.glyphId],t,a,o.glyphId)}return;case 19:case 20:o+=i.length>>1;c+=o+7>>3;y=!0;break;case 21:s+=i.pop();n+=i.pop();moveTo(n,s);y=!0;break;case 22:n+=i.pop();moveTo(n,s);y=!0;break;case 24:for(;i.length>2;){l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}n+=i.shift();s+=i.shift();lineTo(n,s);break;case 25:for(;i.length>6;){n+=i.shift();s+=i.shift();lineTo(n,s)}l=n+i.shift();u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+i.shift();bezierCurveTo(l,u,h,d,n,s);break;case 26:i.length%2&&(n+=i.shift());for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h;s=d+i.shift();bezierCurveTo(l,u,h,d,n,s)}break;case 27:i.length%2&&(s+=i.shift());for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d;bezierCurveTo(l,u,h,d,n,s)}break;case 28:i.push(readInt16(e,c));c+=2;break;case 29:m=i.pop()+a.gsubrsBias;b=a.gsubrs[m];b&&parse(b);break;case 30:for(;i.length>0;){l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;case 31:for(;i.length>0;){l=n+i.shift();u=s;h=l+i.shift();d=u+i.shift();s=d+i.shift();n=h+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s);if(0===i.length)break;l=n;u=s+i.shift();h=l+i.shift();d=u+i.shift();n=h+i.shift();s=d+(1===i.length?i.shift():0);bezierCurveTo(l,u,h,d,n,s)}break;default:if(w<32)throw new FormatError(`unknown operator: ${w}`);if(w<247)i.push(w-139);else if(w<251)i.push(256*(w-247)+e[c++]+108);else if(w<255)i.push(256*-(w-251)-e[c++]-108);else{i.push((e[c]<<24|e[c+1]<<16|e[c+2]<<8|e[c+3])/65536);c+=4}}y&&(i.length=0)}}(e)}class Commands{cmds=[];transformStack=[];currentTransform=[1,0,0,1,0,0];add(e,t){if(t){const{currentTransform:a}=this;for(let e=0,r=t.length;e=0&&e2*readUint16(e,t)}const n=[];let s=i(t,0);for(let a=r;ae.getSize()+3&-4)))}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),a=e>131070,r=a?4:2,i=new DataView(new ArrayBuffer((this.glyphs.length+1)*r));a?i.setUint32(0,0):i.setUint16(0,0);let n=0,s=0;for(const e of this.glyphs){n+=e.write(n,t);n=n+3&-4;s+=r;a?i.setUint32(s,n):i.setUint16(s,n>>1)}return{isLocationLong:a,loca:new Uint8Array(i.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,a=this.glyphs.length;te.getSize())));return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const a=e;e+=this.header.write(e,t);if(this.simple)e+=this.simple.write(e,t);else for(const a of this.composites)e+=a.write(e,t);return e-a}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;this.header.scale(t,e);if(this.simple)this.simple.scale(t,e);else for(const a of this.composites)a.scale(t,e)}}class GlyphHeader{constructor({numberOfContours:e,xMin:t,yMin:a,xMax:r,yMax:i}){this.numberOfContours=e;this.xMin=t;this.yMin=a;this.xMax=r;this.yMax=i}static parse(e,t){return[10,new GlyphHeader({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){t.setInt16(e,this.numberOfContours);t.setInt16(e+2,this.xMin);t.setInt16(e+4,this.yMin);t.setInt16(e+6,this.xMax);t.setInt16(e+8,this.yMax);return 10}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t);this.xMax=Math.round(e+(this.xMax-e)*t)}}class Contour{constructor({flags:e,xCoordinates:t,yCoordinates:a}){this.xCoordinates=t;this.yCoordinates=a;this.flags=e}}class SimpleGlyph{constructor({contours:e,instructions:t}){this.contours=e;this.instructions=t}static parse(e,t,a){const r=[];for(let i=0;i255?e+=2:o>0&&(e+=1);t=n;o=Math.abs(s-a);o>255?e+=2:o>0&&(e+=1);a=s}}return e}write(e,t){const a=e,r=[],i=[],n=[];let s=0,o=0;for(const a of this.contours){for(let e=0,t=a.xCoordinates.length;e=0?18:2;r.push(e)}else r.push(l)}s=c;const h=a.yCoordinates[e];l=h-o;if(0===l){t|=32;i.push(0)}else{const e=Math.abs(l);if(e<=255){t|=l>=0?36:4;i.push(e)}else i.push(l)}o=h;n.push(t)}t.setUint16(e,r.length-1);e+=2}t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}for(const a of n)t.setUint8(e++,a);for(let a=0,i=r.length;a=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2);return e}write(e,t){const a=e;2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1);t.setUint16(e,this.flags);t.setUint16(e+2,this.glyphIndex);e+=4;if(1&this.flags){if(2&this.flags){t.setInt16(e,this.argument1);t.setInt16(e+2,this.argument2)}else{t.setUint16(e,this.argument1);t.setUint16(e+2,this.argument2)}e+=4}else{t.setUint8(e,this.argument1);t.setUint8(e+1,this.argument2);e+=2}if(256&this.flags){t.setUint16(e,this.instructions.length);e+=2;if(this.instructions.length){new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e);e+=this.instructions.length}}return e-a}scale(e,t){}}function writeInt16(e,t,a){e[t]=a>>8&255;e[t+1]=255&a}function writeInt32(e,t,a){e[t]=a>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}function writeData(e,t,a){if(a instanceof Uint8Array)e.set(a,t);else if("string"==typeof a)for(let r=0,i=a.length;ra;){a<<=1;r++}const i=a*t;return{range:i,entry:r,rangeShift:t*e-i}}toArray(){let e=this.sfnt;const t=this.tables,a=Object.keys(t);a.sort();const r=a.length;let i,n,s,o,c,l=12+16*r;const h=[l];for(i=0;i>>0;h.push(l)}const u=new Uint8Array(l);for(i=0;i>>0}writeInt32(u,l+4,e);writeInt32(u,l+8,h[i]);writeInt32(u,l+12,t[c].length);l+=16}return u}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}const si=[4],oi=[5],ci=[6],li=[7],hi=[8],ui=[12,35],di=[14],fi=[21],gi=[22],pi=[30],mi=[31];class Type1CharString{constructor(){this.width=0;this.lsb=0;this.flexing=!1;this.output=[];this.stack=[]}convert(e,t,a){const r=e.length;let i,n,s,o=!1;for(let c=0;cr)return!0;const i=r-e;for(let e=i;e>8&255,255&t);else{t=65536*t|0;this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t)}}this.output.push(...t);a?this.stack.splice(i,e):this.stack.length=0;return!1}}function isHexDigit(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function decrypt(e,t,a){if(a>=e.length)return new Uint8Array(0);let r,i,n=0|t;for(r=0;r>8;n=52845*(t+n)+22719&65535}return o}function isSpecial(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}class Type1Parser{constructor(e,t,a){if(t){const t=e.getBytes(),a=!((isHexDigit(t[0])||isWhiteSpace(t[0]))&&isHexDigit(t[1])&&isHexDigit(t[2])&&isHexDigit(t[3])&&isHexDigit(t[4])&&isHexDigit(t[5])&&isHexDigit(t[6])&&isHexDigit(t[7]));e=new Stream(a?decrypt(t,55665,4):function decryptAscii(e,t,a){let r=0|t;const i=e.length,n=new Uint8Array(i>>>1);let s,o;for(s=0,o=0;s>8;r=52845*(e+r)+22719&65535}}return n.slice(a,o)}(t,55665,4))}this.seacAnalysisEnabled=!!a;this.stream=e;this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){this.stream.skip(-2);return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}if(isSpecial(t)){this.nextChar();return String.fromCharCode(t)}let a="";do{a+=String.fromCharCode(t);t=this.nextChar()}while(t>=0&&!isWhiteSpace(t)&&!isSpecial(t));return a}readCharStrings(e,t){return-1===t?e:decrypt(e,4330,t)}extractFontProgram(e){const t=this.stream,a=[],r=[],i=Object.create(null);i.lenIV=4;const n={subrs:[],charstrings:[],properties:{privateData:i}};let s,o,c,l;for(;null!==(s=this.getToken());)if("/"===s){s=this.getToken();switch(s){case"CharStrings":this.getToken();this.getToken();this.getToken();this.getToken();for(;;){s=this.getToken();if(null===s||"end"===s)break;if("/"!==s)continue;const e=this.getToken();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.lenIV;const a=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s?this.getToken():"/"===s&&this.prevChar();r.push({glyph:e,encoded:a})}break;case"Subrs":this.readInt();this.getToken();for(;"dup"===this.getToken();){const e=this.readInt();o=this.readInt();this.getToken();c=o>0?t.getBytes(o):new Uint8Array(0);l=n.properties.privateData.lenIV;const r=this.readCharStrings(c,l);this.nextChar();s=this.getToken();"noaccess"===s&&this.getToken();a[e]=r}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length,0;break;case"StemSnapH":case"StemSnapV":n.properties.privateData[s]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[s]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[s]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[s]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[s]=this.readBoolean()}}for(const{encoded:t,glyph:i}of r){const r=new Type1CharString,s=r.convert(t,a,this.seacAnalysisEnabled);let o=r.output;s&&(o=[14]);const c={glyphName:i,charstring:o,width:r.width,lsb:r.lsb,seac:r.seac};".notdef"===i?n.charstrings.unshift(c):n.charstrings.push(c);if(e.builtInEncoding){const t=e.builtInEncoding.indexOf(i);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=r.width)}}return n}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t){t=this.getToken();switch(t){case"FontMatrix":const a=this.readNumberArray();e.fontMatrix=a;break;case"Encoding":const r=this.getToken();let i;if(/^\d+$/.test(r)){i=[];const e=0|parseInt(r,10);this.getToken();for(let a=0;a=i){s+=a;for(;s=0&&(r[e]=i)}}return type1FontGlyphMapping(e,r,a)}hasGlyphId(e){if(e<0||e>=this.numGlyphs)return!1;if(0===e)return!0;return this.charstrings[e-1].charstring.length>0}getSeacs(e){const t=[];for(let a=0,r=e.length;a0;e--)t[e]-=t[e-1];f.setByName(e,t)}n.topDict.privateDict=f;const p=new CFFIndex;for(h=0,u=r.length;h0&&e.toUnicode.amend(t)}class fonts_Glyph{constructor(e,t,a,r,i,n,s,o,c){this.originalCharCode=e;this.fontChar=t;this.unicode=a;this.accent=r;this.width=i;this.vmetric=n;this.operatorListId=s;this.isSpace=o;this.isInFont=c}get category(){return shadow(this,"category",function getCharUnicodeCategory(e){const t=Dr.get(e);if(t)return t;const a=e.match(Mr),r={isWhitespace:!!a?.[1],isZeroWidthDiacritic:!!a?.[2],isInvisibleFormatMark:!!a?.[3]};Dr.set(e,r);return r}(this.unicode),!0)}}function int16(e,t){return(e<<8)+t}function writeSignedInt16(e,t,a){e[t+1]=a;e[t]=a>>>8}function signedInt16(e,t){const a=(e<<8)+t;return 32768&a?a-65536:a}function string16(e){return String.fromCharCode(e>>8&255,255&e)}function safeString16(e){e>32767?e=32767:e<-32768&&(e=-32768);return String.fromCharCode(e>>8&255,255&e)}function isTrueTypeCollectionFile(e){return"ttcf"===bytesToString(e.peekBytes(4))}function getFontFileType(e,{type:t,subtype:a,composite:r}){let i,n;if(function isTrueTypeFile(e){const t=e.peekBytes(4);return 65536===readUint32(t,0)||"true"===bytesToString(t)}(e)||isTrueTypeCollectionFile(e))i=r?"CIDFontType2":"TrueType";else if(function isOpenTypeFile(e){return"OTTO"===bytesToString(e.peekBytes(4))}(e))i=r?"CIDFontType2":"OpenType";else if(function isType1File(e){const t=e.peekBytes(2);return 37===t[0]&&33===t[1]||128===t[0]&&1===t[1]}(e))i=r?"CIDFontType0":"MMType1"===t?"MMType1":"Type1";else if(function isCFFFile(e){const t=e.peekBytes(4);return t[0]>=1&&t[3]>=1&&t[3]<=4}(e))if(r){i="CIDFontType0";n="CIDFontType0C"}else{i="MMType1"===t?"MMType1":"Type1";n="Type1C"}else{warn("getFontFileType: Unable to detect correct font file Type/Subtype.");i=t;n=a}return[i,n]}function applyStandardFontGlyphMap(e,t){for(const a in t)e[+a]=t[a]}function buildToFontChar(e,t,a){const r=[];let i;for(let a=0,n=e.length;ah){c++;if(c>=bi.length){warn("Ran out of space in font private use area.");break}l=bi[c][0];h=bi[c][1]}const p=l++;0===g&&(g=a);let m=r.get(f);if("string"==typeof m)if(1===m.length)m=m.codePointAt(0);else{if(!u){u=new Map;for(let e=64256;e<=64335;e++){const t=String.fromCharCode(e).normalize("NFKD");t.length>1&&u.set(t,e)}}m=u.get(m)||m.codePointAt(0)}if(m&&!(d=m,bi[0][0]<=d&&d<=bi[0][1]||bi[1][0]<=d&&d<=bi[1][1])&&!o.has(g)){n.set(m,g);o.add(g)}i[p]=g;s[f]=p}var d;return{toFontChar:s,charCodeToGlyphId:i,toUnicodeExtraMap:n,nextAvailableFontCharCode:l}}function createCmapTable(e,t,a){const r=function getRanges(e,t,a){const r=[];for(const t in e)e[t]>=a||r.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,i]of t)i>=a||r.push({fontCharCode:e,glyphId:i});0===r.length&&r.push({fontCharCode:0,glyphId:0});r.sort(((e,t)=>e.fontCharCode-t.fontCharCode));const i=[],n=r.length;for(let e=0;e65535?2:1;let n,s,o,c,l="\0\0"+string16(i)+"\0\0"+string32(4+8*i);for(n=r.length-1;n>=0&&!(r[n][0]<=65535);--n);const h=n+1;r[n][0]<65535&&65535===r[n][1]&&(r[n][1]=65534);const u=r[n][1]<65535?1:0,d=h+u,f=OpenTypeFileBuilder.getSearchParams(d,2);let g,p,m,b,y="",w="",S="",x="",k="",C=0;for(n=0,s=h;n0){w+="ÿÿ";y+="ÿÿ";S+="\0";x+="\0\0"}const v="\0\0"+string16(2*d)+string16(f.range)+string16(f.entry)+string16(f.rangeShift)+w+"\0\0"+y+S+x+k;let F="",O="";if(i>1){l+="\0\0\n"+string32(4+8*i+4+v.length);F="";for(n=0,s=r.length;ne||!o)&&(o=e);c 123 are reserved for internal usage");s|=1<65535&&(c=65535)}else{o=0;c=255}const h=e.bbox||[0,0,0,0],u=a.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),d=e.ascentScaled?1:u/yi,f=a.ascent||Math.round(d*(e.ascent||h[3]));let g=a.descent||Math.round(d*(e.descent||h[1]));g>0&&e.descent>0&&h[1]<0&&(g=-g);const p=a.yMax||f,m=-a.yMin||-g;return"\0$ô\0\0\0Š»\0\0\0ŒŠ»\0\0ß\x001\0\0\0\0"+String.fromCharCode(e.fixedPitch?9:0)+"\0\0\0\0\0\0"+string32(r)+string32(i)+string32(n)+string32(s)+"*21*"+string16(e.italicAngle?1:0)+string16(o||e.firstChar)+string16(c||e.lastChar)+string16(f)+string16(g)+"\0d"+string16(p)+string16(m)+"\0\0\0\0\0\0\0\0"+string16(e.xHeight)+string16(e.capHeight)+string16(0)+string16(o||e.firstChar)+"\0"}function createPostTable(e){return"\0\0\0"+string32(Math.floor(65536*e.italicAngle))+"\0\0\0\0"+string32(e.fixedPitch?1:0)+"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}function createPostscriptName(e){return e.replaceAll(/[^\x21-\x7E]|[[\](){}<>/%]/g,"").slice(0,63)}function createNameTable(e,t){t||(t=[[],[]]);const a=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||createPostscriptName(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],r=[];let i,n,s,o,c;for(i=0,n=a.length;i0;if((s||o)&&"CIDFontType2"===a&&this.cidEncoding.startsWith("Identity-")){const a=e.cidToGidMap,r=[];applyStandardFontGlyphMap(r,ti());/Arial-?Black/i.test(t)?applyStandardFontGlyphMap(r,ai()):/Calibri/i.test(t)&&applyStandardFontGlyphMap(r,ri());if(a){for(const e in r){const t=r[e];void 0!==a[t]&&(r[+e]=a[t])}a.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){const i=r[e];void 0===a[i]&&(r[+e]=t)}))}this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){r[+e]=t}));this.toFontChar=r;this.toUnicode=new ToUnicodeMap(r)}else if(/Symbol/i.test(r))this.toFontChar=buildToFontChar(Cr,Fr(),this.differences);else if(/Dingbats/i.test(r))this.toFontChar=buildToFontChar(vr,Ir(),this.differences);else if(s||o){const e=buildToFontChar(this.defaultEncoding,Fr(),this.differences);"CIDFontType2"!==a||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof IdentityToUnicodeMap||this.toUnicode.forEach((function(t,a){e[+t]=a}));this.toFontChar=e}else{const e=Fr(),a=[];this.toUnicode.forEach(((t,r)=>{if(!this.composite){const a=getUnicodeForGlyph(this.differences[t]||this.defaultEncoding[t],e);-1!==a&&(r=a)}a[+t]=r}));this.composite&&this.toUnicode instanceof IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&applyStandardFontGlyphMap(a,ti());this.toFontChar=a}amendFallbackToUnicode(e);this.loadedName=r.split("-",1)[0]}checkAndRepair(e,t,a){const r=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function readTables(e,t){const a=Object.create(null);a["OS/2"]=null;a.cmap=null;a.head=null;a.hhea=null;a.hmtx=null;a.maxp=null;a.name=null;a.post=null;for(let i=0;i>>0,r=e.getInt32()>>>0,i=e.getInt32()>>>0,n=e.pos;e.pos=e.start||0;e.skip(r);const s=e.getBytes(i);e.pos=n;if("head"===t){s[8]=s[9]=s[10]=s[11]=0;s[17]|=32}return{tag:t,checksum:a,length:i,offset:r,data:s}}function readOpenTypeHeader(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function sanitizeGlyph(e,t,a,r,i,n){const s={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||a>e.length||a-t<=12)return s;const o=e.subarray(t,a),c=signedInt16(o[2],o[3]),l=signedInt16(o[4],o[5]),h=signedInt16(o[6],o[7]),u=signedInt16(o[8],o[9]);if(c>h){writeSignedInt16(o,2,h);writeSignedInt16(o,6,c)}if(l>u){writeSignedInt16(o,4,u);writeSignedInt16(o,8,l)}const d=signedInt16(o[0],o[1]);if(d<0){if(d<-1)return s;r.set(o,i);s.length=o.length;return s}let f,g=10,p=0;for(f=0;fo.length)return s;if(!n&&b>0){r.set(o.subarray(0,m),i);r.set([0,0],i+m);r.set(o.subarray(y,S),i+m+2);S-=b;o.length-S>3&&(S=S+3&-4);s.length=S;return s}if(o.length-S>3){S=S+3&-4;r.set(o.subarray(0,S),i);s.length=S;return s}r.set(o,i);s.length=o.length;return s}function readNameTable(e){const a=(t.start||0)+e.offset;t.pos=a;const r=[[],[]],i=[],n=e.length,s=a+n;if(0!==t.getUint16()||n<6)return[r,i];const o=t.getUint16(),c=t.getUint16();let l,h;for(l=0;ls)continue;t.pos=n;const o=e.name;if(e.encoding){let a="";for(let r=0,i=e.length;r0&&(l+=e-1)}}else{if(m||y){warn("TT: nested FDEFs not allowed");p=!0}m=!0;u=l;s=d.pop();t.functionsDefined[s]={data:c,i:l}}else if(!m&&!y){s=d.at(-1);if(isNaN(s))info("TT: CALL empty stack (or invalid entry).");else{t.functionsUsed[s]=!0;if(s in t.functionsStackDeltas){const e=d.length+t.functionsStackDeltas[s];if(e<0){warn("TT: CALL invalid functions stack delta.");t.hintsValid=!1;return}d.length=e}else if(s in t.functionsDefined&&!g.includes(s)){f.push({data:c,i:l,stackTop:d.length-1});g.push(s);o=t.functionsDefined[s];if(!o){warn("TT: CALL non-existent function");t.hintsValid=!1;return}c=o.data;l=o.i}}}if(!m&&!y){let t=0;e<=142?t=i[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2);if(e>=113&&e<=117){r=d.pop();isNaN(r)||(t=2*-r)}for(;t<0&&d.length>0;){d.pop();t++}for(;t>0;){d.push(NaN);t--}}}t.tooComplexToFollowFunctions=p;const w=[c];l>c.length&&w.push(new Uint8Array(l-c.length));if(u>h){warn("TT: complementing a missing function tail");w.push(new Uint8Array([34,45]))}!function foldTTTable(e,t){if(t.length>1){let a,r,i=0;for(a=0,r=t.length;a>>0,n=[];for(let t=0;t>>0);const s={ttcTag:t,majorVersion:a,minorVersion:r,numFonts:i,offsetTable:n};switch(a){case 1:return s;case 2:s.dsigTag=e.getInt32()>>>0;s.dsigLength=e.getInt32()>>>0;s.dsigOffset=e.getInt32()>>>0;return s}throw new FormatError(`Invalid TrueType Collection majorVersion: ${a}.`)}(e),i=t.split("+");let n;for(let s=0;s0||!(a.cMap instanceof IdentityCMap));if("OTTO"===n.version&&!t||!s.head||!s.hhea||!s.maxp||!s.post){c=new Stream(s["CFF "].data);o=new CFFFont(c,a);return this.convert(e,o,a)}delete s.glyf;delete s.loca;delete s.fpgm;delete s.prep;delete s["cvt "];this.isOpenType=!0}if(!s.maxp)throw new FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+s.maxp.offset;let h=t.getInt32();const u=t.getUint16();if(65536!==h&&20480!==h){if(6===s.maxp.length)h=20480;else{if(!(s.maxp.length>=32))throw new FormatError('"maxp" table has a wrong version number');h=65536}!function writeUint32(e,t,a){e[t+3]=255&a;e[t+2]=a>>>8;e[t+1]=a>>>16;e[t]=a>>>24}(s.maxp.data,0,h)}if(a.scaleFactors?.length===u&&l){const{scaleFactors:e}=a,t=int16(s.head.data[50],s.head.data[51]),r=new GlyfTable({glyfTable:s.glyf.data,isGlyphLocationsLong:t,locaTable:s.loca.data,numGlyphs:u});r.scale(e);const{glyf:i,loca:n,isLocationLong:o}=r.write();s.glyf.data=i;s.loca.data=n;if(o!==!!t){s.head.data[50]=0;s.head.data[51]=o?1:0}const c=s.hmtx.data;for(let t=0;t>8&255;c[a+1]=255&r;writeSignedInt16(c,a+2,Math.round(e[t]*signedInt16(c[a+2],c[a+3])))}}let d=u+1,f=!0;if(d>65535){f=!1;d=u;warn("Not enough space in glyfs to duplicate first glyph.")}let g=0,p=0;if(h>=65536&&s.maxp.length>=32){t.pos+=8;if(t.getUint16()>2){s.maxp.data[14]=0;s.maxp.data[15]=2}t.pos+=4;g=t.getUint16();t.pos+=4;p=t.getUint16()}s.maxp.data[4]=d>>8;s.maxp.data[5]=255&d;const m=function sanitizeTTPrograms(e,t,a,r){const i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};e&&sanitizeTTProgram(e,i);t&&sanitizeTTProgram(t,i);e&&function checkInvalidFunctions(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t){warn("TT: more functions defined than expected");e.hintsValid=!1}else for(let a=0,r=e.functionsUsed.length;at){warn("TT: invalid function id: "+a);e.hintsValid=!1;return}if(e.functionsUsed[a]&&!e.functionsDefined[a]){warn("TT: undefined function: "+a);e.hintsValid=!1;return}}}(i,r);if(a&&1&a.length){const e=new Uint8Array(a.length+1);e.set(a.data);a.data=e}return i.hintsValid}(s.fpgm,s.prep,s["cvt "],g);if(!m){delete s.fpgm;delete s.prep;delete s["cvt "]}!function sanitizeMetrics(e,t,a,r,i,n){if(!t){a&&(a.data=null);return}e.pos=(e.start||0)+t.offset;e.pos+=4;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;e.pos+=2;const s=e.getUint16();e.pos+=8;e.pos+=2;let o=e.getUint16();if(0!==s){if(!(2&int16(r.data[44],r.data[45]))){t.data[22]=0;t.data[23]=0}}if(o>i){info(`The numOfMetrics (${o}) should not be greater than the numGlyphs (${i}).`);o=i;t.data[34]=(65280&o)>>8;t.data[35]=255&o}const c=i-o-(a.length-4*o>>1);if(c>0){const e=new Uint8Array(a.length+2*c);e.set(a.data);if(n){e[a.length]=a.data[2];e[a.length+1]=a.data[3]}a.data=e}}(t,s.hhea,s.hmtx,s.head,d,f);if(!s.head)throw new FormatError('Required "head" table is not found');!function sanitizeHead(e,t,a){const r=e.data,i=function int32(e,t,a,r){return(e<<24)+(t<<16)+(a<<8)+r}(r[0],r[1],r[2],r[3]);if(i>>16!=1){info("Attempting to fix invalid version in head table: "+i);r[0]=0;r[1]=1;r[2]=0;r[3]=0}const n=int16(r[50],r[51]);if(n<0||n>1){info("Attempting to fix invalid indexToLocFormat in head table: "+n);const e=t+1;if(a===e<<1){r[50]=0;r[51]=0}else{if(a!==e<<2)throw new FormatError("Could not fix indexToLocFormat: "+n);r[50]=0;r[51]=1}}}(s.head,u,l?s.loca.length:0);let b=Object.create(null);if(l){const e=int16(s.head.data[50],s.head.data[51]),t=function sanitizeGlyphLocations(e,t,a,r,i,n,s){let o,c,l;if(r){o=4;c=function fontItemDecodeLong(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};l=function fontItemEncodeLong(e,t,a){e[t]=a>>>24&255;e[t+1]=a>>16&255;e[t+2]=a>>8&255;e[t+3]=255&a}}else{o=2;c=function fontItemDecode(e,t){return e[t]<<9|e[t+1]<<1};l=function fontItemEncode(e,t,a){e[t]=a>>9&255;e[t+1]=a>>1&255}}const h=n?a+1:a,u=o*(1+h),d=new Uint8Array(u);d.set(e.data.subarray(0,u));e.data=d;const f=t.data,g=f.length,p=new Uint8Array(g);let m,b;const y=[];for(m=0,b=0;mg&&(e=g);y.push({index:m,offset:e,endOffset:0})}y.sort(((e,t)=>e.offset-t.offset));for(m=0;me.index-t.index));for(m=0;ms&&(s=e.sizeOfInstructions);x+=t;l(d,b,x)}if(0===x){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(m=0,b=o;ma+x)t.data=p.subarray(0,a+x);else{t.data=new Uint8Array(a+x);t.data.set(p.subarray(0,x))}t.data.set(p.subarray(0,a),x);l(e.data,d.length-o,x+a)}else t.data=p.subarray(0,x);return{missingGlyphs:S,maxSizeOfInstructions:s}}(s.loca,s.glyf,u,e,m,f,p);b=t.missingGlyphs;if(h>=65536&&s.maxp.length>=32){s.maxp.data[26]=t.maxSizeOfInstructions>>8;s.maxp.data[27]=255&t.maxSizeOfInstructions}}if(!s.hhea)throw new FormatError('Required "hhea" table is not found');if(0===s.hhea.data[10]&&0===s.hhea.data[11]){s.hhea.data[10]=255;s.hhea.data[11]=255}const y={unitsPerEm:int16(s.head.data[18],s.head.data[19]),yMax:signedInt16(s.head.data[42],s.head.data[43]),yMin:signedInt16(s.head.data[38],s.head.data[39]),ascent:signedInt16(s.hhea.data[4],s.hhea.data[5]),descent:signedInt16(s.hhea.data[6],s.hhea.data[7]),lineGap:signedInt16(s.hhea.data[8],s.hhea.data[9])};this.ascent=y.ascent/y.unitsPerEm;this.descent=y.descent/y.unitsPerEm;this.lineGap=y.lineGap/y.unitsPerEm;if(this.cssFontInfo?.lineHeight){this.lineHeight=this.cssFontInfo.metrics.lineHeight;this.lineGap=this.cssFontInfo.metrics.lineGap}else this.lineHeight=this.ascent-this.descent+this.lineGap;s.post&&function readPostScriptTable(e,a,r){const i=(t.start||0)+e.offset;t.pos=i;const n=i+e.length,s=t.getInt32();t.skip(28);let o,c,l=!0;switch(s){case 65536:o=jr;break;case 131072:const e=t.getUint16();if(e!==r){l=!1;break}const i=[];for(c=0;c=32768){l=!1;break}i.push(e)}if(!l)break;const h=[],u=[];for(;t.pos65535)throw new FormatError("Max size of CID is 65,535");let i=-1;t?i=r:void 0!==e[r]&&(i=e[r]);i>=0&&i>>0;let h=!1;if(o?.platformId!==i||o?.encodingId!==n){if(0!==i||0!==n&&1!==n&&3!==n)if(1===i&&0===n)h=!0;else if(3!==i||1!==n||!r&&o){if(a&&3===i&&0===n){h=!0;let a=!0;if(e>3;e.push(r);a=Math.max(r,a)}const r=[];for(let e=0;e<=a;e++)r.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:signedInt16(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let a=0;a<256;a++)if(0===e[a]){t.pos=r[0].idRangePos+2*a;f=t.getUint16();u.push({charCode:a,glyphId:f})}else{const i=r[e[a]];for(d=0;d>1;t.skip(6);const a=[];let r;for(r=0;r>1)-(e-r);i.offsetIndex=s;o=Math.max(o,s+i.end-i.start+1)}else i.offsetIndex=-1}const c=[];for(d=0;d>>0;for(d=0;d>>0,a=t.getInt32()>>>0;let r=t.getInt32()>>>0;for(let t=e;t<=a;t++)u.push({charCode:t,glyphId:r++})}}}u.sort(((e,t)=>e.charCode-t.charCode));const g=[],p=new Set;for(const e of u){const{charCode:t}=e;if(!p.has(t)){p.add(t);g.push(e)}}return{platformId:o.platformId,encodingId:o.encodingId,mappings:g,hasShortCmap:h}}(s.cmap,t,this.isSymbolicFont,a.hasEncoding),r=e.platformId,i=e.encodingId,n=e.mappings;let o=[],c=!1;!a.hasEncoding||"MacRomanEncoding"!==a.baseEncodingName&&"WinAnsiEncoding"!==a.baseEncodingName||(o=getEncoding(a.baseEncodingName));if(a.hasEncoding&&!this.isSymbolicFont&&(3===r&&1===i||1===r&&0===i)){const e=Fr();for(let t=0;t<256;t++){let s;s=void 0!==this.differences[t]?this.differences[t]:o.length&&""!==o[t]?o[t]:Ar[t];if(!s)continue;const c=recoverGlyphName(s,e);let l;3===r&&1===i?l=e[c]:1===r&&0===i&&(l=xr.indexOf(c));if(void 0===l){if(!a.glyphNames&&a.hasIncludedToUnicodeMap&&!(this.toUnicode instanceof IdentityToUnicodeMap)){const e=this.toUnicode.get(t);e&&(l=e.codePointAt(0))}if(void 0===l)continue}for(const e of n)if(e.charCode===l){w[t]=e.glyphId;break}}}else if(0===r){for(const e of n)w[e.charCode]=e.glyphId;c=!0}else if(3===r&&0===i)for(const e of n){let t=e.charCode;t>=61440&&t<=61695&&(t&=255);w[t]=e.glyphId}else for(const e of n)w[e.charCode]=e.glyphId;if(a.glyphNames&&(o.length||this.differences.length))for(let e=0;e<256;++e){if(!c&&void 0!==w[e])continue;const t=this.differences[e]||o[e];if(!t)continue;const r=a.glyphNames.indexOf(t);r>0&&hasGlyph(r)&&(w[e]=r)}}0===w.length&&(w[0]=0);let S=d-1;f||(S=0);if(!a.cssFontInfo){const e=adjustMapping(w,hasGlyph,S,this.toUnicode);this.toFontChar=e.toFontChar;s.cmap={tag:"cmap",data:createCmapTable(e.charCodeToGlyphId,e.toUnicodeExtraMap,d)};s["OS/2"]&&function validateOS2Table(e,t){t.pos=(t.start||0)+e.offset;const a=t.getUint16();t.skip(60);const r=t.getUint16();if(a<4&&768&r)return!1;if(t.getUint16()>t.getUint16())return!1;t.skip(6);if(0===t.getUint16())return!1;e.data[8]=e.data[9]=0;return!0}(s["OS/2"],t)||(s["OS/2"]={tag:"OS/2",data:createOS2Table(a,e.charCodeToGlyphId,y)})}if(!l)try{c=new Stream(s["CFF "].data);o=new CFFParser(c,a,Rr).parse();o.duplicateFirstGlyph();const e=new CFFCompiler(o);s["CFF "].data=e.compile()}catch{warn("Failed to compile font "+a.loadedName)}if(s.name){const[t,r]=readNameTable(s.name);s.name.data=createNameTable(e,t);this.psName=t[0][6]||null;a.composite||function adjustTrueTypeToUnicode(e,t,a){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;if(!t)return;if(0===a.length)return;if(e.defaultEncoding===kr)return;for(const e of a)if(!isWinNameRecord(e))return;const r=kr,i=[],n=Fr();for(const e in r){const t=r[e];if(""===t)continue;const a=n[t];void 0!==a&&(i[e]=String.fromCharCode(a))}i.length>0&&e.toUnicode.amend(i)}(a,this.isSymbolicFont,r)}else s.name={tag:"name",data:createNameTable(this.name)};const x=new OpenTypeFileBuilder(n.version);for(const e in s)x.addTable(e,s[e].data);return x.toArray()}convert(e,a,r){r.fixedPitch=!1;r.builtInEncoding&&function adjustType1ToUnicode(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof IdentityToUnicodeMap)return;const a=[],r=Fr();for(const i in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[i]))continue;const n=getUnicodeForGlyph(t[i],r);-1!==n&&(a[i]=String.fromCharCode(n))}a.length>0&&e.toUnicode.amend(a)}(r,r.builtInEncoding);let i=1;a instanceof CFFFont&&(i=a.numGlyphs-1);const n=a.getGlyphMapping(r);let s=null,o=n,c=null;if(!r.cssFontInfo){s=adjustMapping(n,a.hasGlyphId.bind(a),i,this.toUnicode);this.toFontChar=s.toFontChar;o=s.charCodeToGlyphId;c=s.toUnicodeExtraMap}const l=a.numGlyphs;function getCharCodes(e,t){let a=null;for(const r in e)t===e[r]&&(a||=[]).push(0|r);return a}function createCharCode(e,t){for(const a in e)if(t===e[a])return 0|a;s.charCodeToGlyphId[s.nextAvailableFontCharCode]=t;return s.nextAvailableFontCharCode++}const h=a.seacs;if(s&&h?.length){const e=r.fontMatrix||t,i=a.getCharset(),o=Object.create(null);for(let t in h){t|=0;const a=h[t],r=Ar[a[2]],c=Ar[a[3]],l=i.indexOf(r),u=i.indexOf(c);if(l<0||u<0)continue;const d={x:a[0]*e[0]+a[1]*e[2]+e[4],y:a[0]*e[1]+a[1]*e[3]+e[5]},f=getCharCodes(n,t);if(f)for(const e of f){const t=s.charCodeToGlyphId,a=createCharCode(t,l),r=createCharCode(t,u);o[e]={baseFontCharCode:a,accentFontCharCode:r,accentOffset:d}}}r.seacMap=o}const u=r.fontMatrix?1/Math.max(...r.fontMatrix.slice(0,4).map(Math.abs)):1e3,d=new OpenTypeFileBuilder("OTTO");d.addTable("CFF ",a.data);d.addTable("OS/2",createOS2Table(r,o));d.addTable("cmap",createCmapTable(o,c,l));d.addTable("head","\0\0\0\0\0\0\0\0\0\0_<õ\0\0"+safeString16(u)+"\0\0\0\0ž\v~'\0\0\0\0ž\v~'\0\0"+safeString16(r.descent)+"ÿ"+safeString16(r.ascent)+string16(r.italicAngle?2:0)+"\0\0\0\0\0\0\0");d.addTable("hhea","\0\0\0"+safeString16(r.ascent)+safeString16(r.descent)+"\0\0ÿÿ\0\0\0\0\0\0"+safeString16(r.capHeight)+safeString16(Math.tan(r.italicAngle)*r.xHeight)+"\0\0\0\0\0\0\0\0\0\0\0\0"+string16(l));d.addTable("hmtx",function fontFieldsHmtx(){const e=a.charstrings,t=a.cff?a.cff.widths:null;let r="\0\0\0\0";for(let a=1,i=l;a=65520&&e<=65535?0:e>=62976&&e<=63743?Or()[e]||e:173===e?45:e}(a)}this.isType3Font&&(i=a);let h=null;if(this.seacMap?.[e]){l=!0;const t=this.seacMap[e];a=t.baseFontCharCode;h={fontChar:String.fromCodePoint(t.accentFontCharCode),offset:t.accentOffset}}let u="";"number"==typeof a&&(a<=1114111?u=String.fromCodePoint(a):warn(`charToGlyph - invalid fontCharCode: ${a}`));if(this.missingFile&&this.vertical&&1===u.length){const e=_r()[u.charCodeAt(0)];e&&(u=c=String.fromCharCode(e))}n=new fonts_Glyph(e,u,c,h,r,o,i,t,l);return this._glyphCache[e]=n}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;t=[];if(this.cMap){const a=Object.create(null),r=e.length;let i=0;for(;it.length%2==1,r=this.toUnicode instanceof IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let i=0,n=e.length;i55295&&(n<57344||n>65533)&&i++;if(this.toUnicode){const e=r(n);if(-1!==e){if(hasCurrentBufErrors()){t.push(a.join(""));a.length=0}for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)a.push(String.fromCharCode(e>>8*t&255));continue}}if(!hasCurrentBufErrors()){t.push(a.join(""));a.length=0}a.push(String.fromCodePoint(n))}t.push(a.join(""));return t}}class ErrorFont{constructor(e){this.error=e;this.loadedName="g_font_error";this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(){return{error:this.error}}}const xi=2,Ai=3,ki=4,Ci=5,vi=6,Fi=7;class Pattern{constructor(){unreachable("Cannot initialize Pattern.")}static parseShading(e,t,a,r,i,n){const s=e instanceof BaseStream?e.dict:e,o=s.get("ShadingType");try{switch(o){case xi:case Ai:return new RadialAxialShading(s,t,a,r,i,n);case ki:case Ci:case vi:case Fi:return new MeshShading(e,t,a,r,i,n);default:throw new FormatError("Unsupported ShadingType: "+o)}}catch(e){if(e instanceof MissingDataException)throw e;warn(e);return new DummyShading}}}class BaseShading{static SMALL_NUMBER=1e-6;getIR(){unreachable("Abstract method `getIR` called.")}}class RadialAxialShading extends BaseShading{constructor(e,t,a,r,i,n){super();this.shadingType=e.get("ShadingType");let s=0;this.shadingType===xi?s=4:this.shadingType===Ai&&(s=6);this.coordsArr=e.getArray("Coords");if(!isNumberArray(this.coordsArr,s))throw new FormatError("RadialAxialShading: Invalid /Coords array.");const o=ColorSpaceUtils.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:a,pdfFunctionFactory:r,globalColorSpaceCache:i,localColorSpaceCache:n});this.bbox=lookupNormalRect(e.getArray("BBox"),null);let c=0,l=1;const h=e.getArray("Domain");isNumberArray(h,2)&&([c,l]=h);let u=!1,d=!1;const f=e.getArray("Extend");(function isBooleanArray(e,t){return Array.isArray(e)&&(null===t||e.length===t)&&e.every((e=>"boolean"==typeof e))})(f,2)&&([u,d]=f);if(!(this.shadingType!==Ai||u&&d)){const[e,t,a,r,i,n]=this.coordsArr,s=Math.hypot(e-r,t-i);a<=n+s&&n<=a+s&&warn("Unsupported radial gradient.")}this.extendStart=u;this.extendEnd=d;const g=e.getRaw("Function"),p=r.create(g,!0),m=(l-c)/840,b=this.colorStops=[];if(c>=l||m<=0){info("Bad shading domain.");return}const y=new Float32Array(o.numComps),w=new Float32Array(1);let S=0;w[0]=c;p(w,0,y,0);const x=new Uint8ClampedArray(3);o.getRgb(y,0,x);let[k,C,v]=x;b.push([0,Util.makeHexColor(k,C,v)]);let F=1;w[0]=c+m;p(w,0,y,0);o.getRgb(y,0,x);let[O,T,M]=x,D=O-k+1,R=T-C+1,N=M-v+1,E=O-k-1,L=T-C-1,j=M-v-1;for(let e=2;e<840;e++){w[0]=c+e*m;p(w,0,y,0);o.getRgb(y,0,x);const[t,a,r]=x,i=e-S;D=Math.min(D,(t-k+1)/i);R=Math.min(R,(a-C+1)/i);N=Math.min(N,(r-v+1)/i);E=Math.max(E,(t-k-1)/i);L=Math.max(L,(a-C-1)/i);j=Math.max(j,(r-v-1)/i);if(!(E<=D&&L<=R&&j<=N)){const e=Util.makeHexColor(O,T,M);b.push([F/840,e]);D=t-O+1;R=a-T+1;N=r-M+1;E=t-O-1;L=a-T-1;j=r-M-1;S=F;k=O;C=T;v=M}F=e;O=t;T=a;M=r}b.push([1,Util.makeHexColor(O,T,M)]);let _="transparent";e.has("Background")&&(_=o.getRgbHex(e.get("Background"),0));if(!u){b.unshift([0,_]);b[1][0]+=BaseShading.SMALL_NUMBER}if(!d){b.at(-1)[0]-=BaseShading.SMALL_NUMBER;b.push([1,_])}this.colorStops=b}getIR(){const{coordsArr:e,shadingType:t}=this;let a,r,i,n,s;if(t===xi){r=[e[0],e[1]];i=[e[2],e[3]];n=null;s=null;a="axial"}else if(t===Ai){r=[e[0],e[1]];i=[e[3],e[4]];n=e[2];s=e[5];a="radial"}else unreachable(`getPattern type unknown: ${t}`);return["RadialAxial",a,this.bbox,this.colorStops,r,i,n,s]}}class MeshStreamReader{constructor(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;const a=t.numComps;this.tmpCompsBuf=new Float32Array(a);const r=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(r):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos0)return!0;const e=this.stream.getByte();if(e<0)return!1;this.buffer=e;this.bufferLength=8;return!0}readBits(e){const{stream:t}=this;let{buffer:a,bufferLength:r}=this;if(32===e){if(0===r)return t.getInt32()>>>0;a=a<<24|t.getByte()<<16|t.getByte()<<8|t.getByte();const e=t.getByte();this.buffer=e&(1<>r)>>>0}if(8===e&&0===r)return t.getByte();for(;r>r}align(){this.buffer=0;this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const{bitsPerCoordinate:e,decode:t}=this.context,a=this.readBits(e),r=this.readBits(e),i=e<32?1/((1<n?n:e;t=t>s?s:t;a=ae*i[t])):a;let s,o=-2;const c=[];for(const[e,t]of r.map(((e,t)=>[e,t])).sort((([e],[t])=>e-t)))if(-1!==e)if(e===o+1){s.push(n[t]);o+=1}else{o=e;s=[n[t]];c.push(e,s)}return c}(e),a=new Dict(null);a.set("BaseFont",Name.get(e));a.set("Type",Name.get("Font"));a.set("Subtype",Name.get("CIDFontType2"));a.set("Encoding",Name.get("Identity-H"));a.set("CIDToGIDMap",Name.get("Identity"));a.set("W",t);a.set("FirstChar",t[0]);a.set("LastChar",t.at(-2)+t.at(-1).length-1);const r=new Dict(null);a.set("FontDescriptor",r);const i=new Dict(null);i.set("Ordering","Identity");i.set("Registry","Adobe");i.set("Supplement",0);a.set("CIDSystemInfo",i);return a}class PostScriptParser{constructor(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}nextToken(){this.prev=this.token;this.token=this.lexer.getToken()}accept(e){if(this.token.type===e){this.nextToken();return!0}return!1}expect(e){if(this.accept(e))return!0;throw new FormatError(`Unexpected symbol: found ${this.token.type} expected ${e}.`)}parse(){this.nextToken();this.expect(yn.LBRACE);this.parseBlock();this.expect(yn.RBRACE);return this.operators}parseBlock(){for(;;)if(this.accept(yn.NUMBER))this.operators.push(this.prev.value);else if(this.accept(yn.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(yn.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(yn.RBRACE);if(this.accept(yn.IF)){this.operators[e]=this.operators.length;this.operators[e+1]="jz"}else{if(!this.accept(yn.LBRACE))throw new FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const a=this.operators.length;this.parseBlock();this.expect(yn.RBRACE);this.expect(yn.IFELSE);this.operators[t]=this.operators.length;this.operators[t+1]="j";this.operators[e]=a;this.operators[e+1]="jz"}}}}const yn={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class PostScriptToken{static get opCache(){return shadow(this,"opCache",Object.create(null))}constructor(e,t){this.type=e;this.value=t}static getOperator(e){return PostScriptToken.opCache[e]||=new PostScriptToken(yn.OPERATOR,e)}static get LBRACE(){return shadow(this,"LBRACE",new PostScriptToken(yn.LBRACE,"{"))}static get RBRACE(){return shadow(this,"RBRACE",new PostScriptToken(yn.RBRACE,"}"))}static get IF(){return shadow(this,"IF",new PostScriptToken(yn.IF,"IF"))}static get IFELSE(){return shadow(this,"IFELSE",new PostScriptToken(yn.IFELSE,"IFELSE"))}}class PostScriptLexer{constructor(e){this.stream=e;this.nextChar();this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return wa;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!isWhiteSpace(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new PostScriptToken(yn.NUMBER,this.getNumber());case 123:this.nextChar();return PostScriptToken.LBRACE;case 125:this.nextChar();return PostScriptToken.RBRACE}const a=this.strBuf;a.length=0;a[0]=String.fromCharCode(t);for(;(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)a.push(String.fromCharCode(t));const r=a.join("");switch(r.toLowerCase()){case"if":return PostScriptToken.IF;case"ifelse":return PostScriptToken.IFELSE;default:return PostScriptToken.getOperator(r)}}getNumber(){let e=this.currentChar;const t=this.strBuf;t.length=0;t[0]=String.fromCharCode(e);for(;(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const a=parseFloat(t.join(""));if(isNaN(a))throw new FormatError(`Invalid floating point number: ${a}`);return a}}class BaseLocalCache{constructor(e){this._onlyRefs=!0===e?.onlyRefs;if(!this._onlyRefs){this._nameRefMap=new Map;this._imageMap=new Map}this._imageCache=new RefSetCache}getByName(e){this._onlyRefs&&unreachable("Should not call `getByName` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,a){unreachable("Abstract method `set` called.")}}class LocalImageCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalColorSpaceCache extends BaseLocalCache{set(e=null,t=null,a){if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalFunctionCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class LocalGStateCache extends BaseLocalCache{set(e,t=null,a){if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t);this._imageCache.put(t,a)}else this._imageMap.has(e)||this._imageMap.set(e,a)}}class LocalTilingPatternCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class RegionalImageCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('RegionalImageCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}}class GlobalColorSpaceCache extends BaseLocalCache{constructor(e){super({onlyRefs:!0})}set(e=null,t,a){if(!t)throw new Error('GlobalColorSpaceCache.set - expected "ref" argument.');this._imageCache.has(t)||this._imageCache.put(t,a)}clear(){this._imageCache.clear()}}class GlobalImageCache{static NUM_PAGES_THRESHOLD=2;static MIN_IMAGES_TO_CACHE=10;static MAX_BYTE_SIZE=5e7;#H=new RefSet;constructor(){this._refCache=new RefSetCache;this._imageCache=new RefSetCache}get#W(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get#z(){return!(this._imageCache.size+e)):null}class PDFFunction{static getSampleArray(e,t,a,r){let i,n,s=1;for(i=0,n=e.length;i>c)*h;l&=(1<0&&(d=n[u-1]);let f=a[1];u>1,c=r.length>>1,l=new PostScriptEvaluator(s),h=Object.create(null);let u=8192;const d=new Float32Array(c);return function constructPostScriptFn(e,t,a,r){let n,s,f="";const g=d;for(n=0;ne&&(s=e)}m[n]=s}if(u>0){u--;h[f]=m}a.set(m,r)}}}function isPDFFunction(e){let t;if(e instanceof Dict)t=e;else{if(!(e instanceof BaseStream))return!1;t=e.dict}return t.has("FunctionType")}class PostScriptStack{static MAX_STACK_SIZE=100;constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=PostScriptStack.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");const t=this.stack;for(let a=t.length-e,r=e-1;r>=0;r--,a++)t.push(t[a])}index(e){this.push(this.stack[this.stack.length-e-1])}roll(e,t){const a=this.stack,r=a.length-e,i=a.length-1,n=r+(t-Math.floor(t/e)*e);for(let e=r,t=i;e0?t.push(s<>o);break;case"ceiling":s=t.pop();t.push(Math.ceil(s));break;case"copy":s=t.pop();t.copy(s);break;case"cos":s=t.pop();t.push(Math.cos(s%360/180*Math.PI));break;case"cvi":s=0|t.pop();t.push(s);break;case"cvr":break;case"div":o=t.pop();s=t.pop();t.push(s/o);break;case"dup":t.copy(1);break;case"eq":o=t.pop();s=t.pop();t.push(s===o);break;case"exch":t.roll(2,1);break;case"exp":o=t.pop();s=t.pop();t.push(s**o);break;case"false":t.push(!1);break;case"floor":s=t.pop();t.push(Math.floor(s));break;case"ge":o=t.pop();s=t.pop();t.push(s>=o);break;case"gt":o=t.pop();s=t.pop();t.push(s>o);break;case"idiv":o=t.pop();s=t.pop();t.push(s/o|0);break;case"index":s=t.pop();t.index(s);break;case"le":o=t.pop();s=t.pop();t.push(s<=o);break;case"ln":s=t.pop();t.push(Math.log(s));break;case"log":s=t.pop();t.push(Math.log10(s));break;case"lt":o=t.pop();s=t.pop();t.push(s=t?new AstLiteral(t):e.max<=t?e:new AstMin(e,t)}class PostScriptCompiler{compile(e,t,a){const r=[],i=[],n=t.length>>1,s=a.length>>1;let o,c,l,h,u,d,f,g,p=0;for(let e=0;et.min){o.unshift("Math.max(",n,", ");o.push(")")}if(s4){r=!0;t=0}else{r=!1;t=1}const c=[];for(n=0;n=0&&"ET"===An[e];--e)An[e]="EN";for(let e=n+1;e0&&(t=An[n-1]);let a=u;e+1g&&isOdd(g)&&(m=g)}for(g=p;g>=m;--g){let e=-1;for(n=0,s=c.length;n=0){reverseValues(xn,e,n);e=-1}}else e<0&&(e=n);e>=0&&reverseValues(xn,e,c.length)}for(n=0,s=xn.length;n"!==e||(xn[n]="")}return createBidiText(xn.join(""),r)}const kn={style:"normal",weight:"normal"},Cn={style:"normal",weight:"bold"},vn={style:"italic",weight:"normal"},Fn={style:"italic",weight:"bold"},In=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","Linux Libertine O","Libertinus Serif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:kn,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:Cn,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:vn,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:Fn,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:kn,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:Cn,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:vn,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:Fn,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono","Linux Libertine Mono O","Libertinus Mono"],style:kn,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:Cn,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:vn,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:Fn,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:kn,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:Cn,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:vn,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:Fn,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:kn,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:Cn,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:vn,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:Fn,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:kn}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),On=new Map([["Arial-Black","ArialBlack"]]);function getFamilyName(e){const t=new Set(["thin","extralight","ultralight","demilight","semilight","light","book","regular","normal","medium","demibold","semibold","bold","extrabold","ultrabold","black","heavy","extrablack","ultrablack","roman","italic","oblique","ultracondensed","extracondensed","condensed","semicondensed","normal","semiexpanded","expanded","extraexpanded","ultraexpanded","bolditalic"]);return e.split(/[- ,+]+/g).filter((e=>!t.has(e.toLowerCase()))).join(" ")}function generateFont({alias:e,local:t,path:a,fallback:r,style:i,ultimate:n},s,o,c=!0,l=!0,h=""){const u={style:null,ultimate:null};if(t){const e=h?` ${h}`:"";for(const a of t)s.push(`local(${a}${e})`)}if(e){const t=In.get(e),n=h||function getStyleToAppend(e){switch(e){case Cn:return"Bold";case vn:return"Italic";case Fn:return"Bold Italic";default:if("bold"===e?.weight)return"Bold";if("italic"===e?.style)return"Italic"}return""}(i);Object.assign(u,generateFont(t,s,o,c&&!r,l&&!a,n))}i&&(u.style=i);n&&(u.ultimate=n);if(c&&r){const e=In.get(r),{ultimate:t}=generateFont(e,s,o,c,l&&!a,h);u.ultimate||=t}l&&a&&o&&s.push(`url(${o}${a})`);return u}function getFontSubstitution(e,t,a,r,i,n){if(r.startsWith("InvalidPDFjsFont_"))return null;"TrueType"!==n&&"Type1"!==n||!/^[A-Z]{6}\+/.test(r)||(r=r.slice(7));const s=r=normalizeFontName(r);let o=e.get(s);if(o)return o;let c=In.get(r);if(!c)for(const[e,t]of On)if(r.startsWith(e)){r=`${t}${r.substring(e.length)}`;c=In.get(r);break}let l=!1;if(!c){c=In.get(i);l=!0}const h=`${t.getDocId()}_s${t.createFontId()}`;if(!c){if(!validateFontName(r)){warn(`Cannot substitute the font because of its name: ${r}`);e.set(s,null);return null}const t=/bold/gi.test(r),a=/oblique|italic/gi.test(r),i=t&&a&&Fn||t&&Cn||a&&vn||kn;o={css:`"${getFamilyName(r)}",${h}`,guessFallback:!0,loadedName:h,baseFontName:r,src:`local(${r})`,style:i};e.set(s,o);return o}const u=[];l&&validateFontName(r)&&u.push(`local(${r})`);const{style:d,ultimate:f}=generateFont(c,u,a),g=null===f,p=g?"":`,${f}`;o={css:`"${getFamilyName(r)}",${h}${p}`,guessFallback:g,loadedName:h,baseFontName:r,src:u.join(","),style:d};e.set(s,o);return o}const Tn=3285377520,Mn=4294901760,Dn=65535;class MurmurHash3_64{constructor(e){this.h1=e?4294967295&e:Tn;this.h2=e?4294967295&e:Tn}update(e){let t,a;if("string"==typeof e){t=new Uint8Array(2*e.length);a=0;for(let r=0,i=e.length;r>>8;t[a++]=255&i}}}else{if(!ArrayBuffer.isView(e))throw new Error("Invalid data format, must be a string or TypedArray.");t=e.slice();a=t.byteLength}const r=a>>2,i=a-4*r,n=new Uint32Array(t.buffer,0,r);let s=0,o=0,c=this.h1,l=this.h2;const h=3432918353,u=461845907,d=11601,f=13715;for(let e=0;e>>17;s=s*u&Mn|s*f&Dn;c^=s;c=c<<13|c>>>19;c=5*c+3864292196}else{o=n[e];o=o*h&Mn|o*d&Dn;o=o<<15|o>>>17;o=o*u&Mn|o*f&Dn;l^=o;l=l<<13|l>>>19;l=5*l+3864292196}s=0;switch(i){case 3:s^=t[4*r+2]<<16;case 2:s^=t[4*r+1]<<8;case 1:s^=t[4*r];s=s*h&Mn|s*d&Dn;s=s<<15|s>>>17;s=s*u&Mn|s*f&Dn;1&r?c^=s:l^=s}this.h1=c;this.h2=l}hexdigest(){let e=this.h1,t=this.h2;e^=t>>>1;e=3981806797*e&Mn|36045*e&Dn;t=4283543511*t&Mn|(2950163797*(t<<16|e>>>16)&Mn)>>>16;e^=t>>>1;e=444984403*e&Mn|60499*e&Dn;t=3301882366*t&Mn|(3120437893*(t<<16|e>>>16)&Mn)>>>16;e^=t>>>1;return(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}function resizeImageMask(e,t,a,r,i,n){const s=i*n;let o;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);const c=a/i,l=r/n;let h,u,d,f,g=0;const p=new Uint16Array(i),m=a;for(h=0;h0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==f||a.height!==g)){warn("PDFImage - using the Width/Height of the image data, rather than the image dictionary.");f=a.width;g=a.height}else{const e="number"==typeof f&&f>0,t="number"==typeof g&&g>0;if(!e||!t){if(!a.fallbackDims)throw new FormatError(`Invalid image width: ${f} or height: ${g}`);warn("PDFImage - using the Width/Height of the parent image, for SMask/Mask data.");e||(f=a.fallbackDims.width);t||(g=a.fallbackDims.height)}}this.width=f;this.height=g;this.interpolate=h.get("I","Interpolate");this.imageMask=h.get("IM","ImageMask")||!1;this.matte=h.get("Matte")||!1;let p=a.bitsPerComponent;if(!p){p=h.get("BPC","BitsPerComponent");if(!p){if(!this.imageMask)throw new FormatError(`Bits per component missing in image: ${this.imageMask}`);p=1}}this.bpc=p;if(!this.imageMask){let i=h.getRaw("CS")||h.getRaw("ColorSpace");const n=!!i;if(n)this.jpxDecoderOptions?.smaskInData&&(i=Name.get("DeviceRGBA"));else if(this.jpxDecoderOptions)i=Name.get("DeviceRGBA");else switch(a.numComps){case 1:i=Name.get("DeviceGray");break;case 3:i=Name.get("DeviceRGB");break;case 4:i=Name.get("DeviceCMYK");break;default:throw new Error(`Images with ${a.numComps} color components not supported.`)}this.colorSpace=ColorSpaceUtils.parse({cs:i,xref:e,resources:r?t:null,pdfFunctionFactory:o,globalColorSpaceCache:c,localColorSpaceCache:l});this.numComps=this.colorSpace.numComps;if(this.jpxDecoderOptions){this.jpxDecoderOptions.numComponents=n?this.numComps:0;this.jpxDecoderOptions.isIndexedColormap="Indexed"===this.colorSpace.name}}this.decode=h.getArray("D","Decode");this.needsDecode=!1;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,p)||s&&!ColorSpace.isDefaultDecode(this.decode,1))){this.needsDecode=!0;const e=(1<0,c=(r+7>>3)*i,l=e.getBytes(c),h=1===r&&1===i&&o===(0===l.length||!!(128&l[0]));if(h)return{isSingleOpaquePixel:h};if(t){if(ImageResizer.needsToBeResized(r,i)){const e=new Uint8ClampedArray(r*i*4);convertBlackAndWhiteToRGBA({src:l,dest:e,width:r,height:i,nonBlackColor:0,inverseDecode:o});return ImageResizer.createImage({kind:v,data:e,width:r,height:i,interpolate:n})}const e=new OffscreenCanvas(r,i),t=e.getContext("2d"),a=t.createImageData(r,i);convertBlackAndWhiteToRGBA({src:l,dest:a.data,width:r,height:i,nonBlackColor:0,inverseDecode:o});t.putImageData(a,0,0);return{data:null,width:r,height:i,interpolate:n,bitmap:e.transferToImageBitmap()}}const u=l.byteLength;let d;if(e instanceof DecodeStream&&(!o||c===u))d=l;else if(o){d=new Uint8Array(c);d.set(l);d.fill(255,u)}else d=new Uint8Array(l);if(o)for(let e=0;e>7&1;s[d+1]=u>>6&1;s[d+2]=u>>5&1;s[d+3]=u>>4&1;s[d+4]=u>>3&1;s[d+5]=u>>2&1;s[d+6]=u>>1&1;s[d+7]=1&u;d+=8}if(d>=1}}}}else{let a=0;u=0;for(d=0,h=n;d>r;i<0?i=0:i>l&&(i=l);s[d]=i;u&=(1<s[r+1]){t=255;break}}o[h]=t}}}if(o)for(h=0,d=3,u=t*r;h>3,h=t&&ImageResizer.needsToBeResized(a,r);if(!this.smask&&!this.mask&&"DeviceRGBA"===this.colorSpace.name){i.kind=v;const e=i.data=await this.getImageBytes(o*s*4,{});return t?h?ImageResizer.createImage(i,!1):this.createBitmap(v,a,r,e):i}if(!e){let e;"DeviceGray"===this.colorSpace.name&&1===c?e=k:"DeviceRGB"!==this.colorSpace.name||8!==c||this.needsDecode||(e=C);if(e&&!this.smask&&!this.mask&&a===s&&r===o){const n=await this.#$(s,o);if(n)return n;const c=await this.getImageBytes(o*l,{});if(t)return h?ImageResizer.createImage({data:c,kind:e,width:a,height:r,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,s,o,c);i.kind=e;i.data=c;if(this.needsDecode){assert(e===k,"PDFImage.createImageData: The image must be grayscale.");const t=i.data;for(let e=0,a=t.length;e>3,s=await this.getImageBytes(r*n,{internal:!0}),o=this.getComponents(s);let c,l;if(1===i){l=a*r;if(this.needsDecode)for(c=0;c0&&r[0].count++}class TimeSlotManager{static TIME_SLOT_DURATION_MS=20;static CHECK_TIME_EVERY=100;constructor(){this.reset()}check(){if(++this.checkedo){const e="Image exceeded maximum allowed size and was removed.";if(!c)throw new Error(e);warn(e);return}let g;h.has("OC")&&(g=await this.parseMarkedContentProps(h.get("OC"),e));let p,m,b;if(h.get("IM","ImageMask")||!1){p=await PDFImage.createMask({image:t,isOffscreenCanvasSupported:l&&!this.parsingType3Font});if(p.isSingleOpaquePixel){m=ta;b=[];r.addImageOps(m,b,g);if(i){const e={fn:m,args:b,optionalContent:g};n.set(i,u,e);u&&this._regionalImageCache.set(null,u,e)}return}if(this.parsingType3Font){b=function compileType3Glyph({data:e,width:t,height:a}){if(t>1e3||a>1e3)return null;const r=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),i=t+1,n=new Uint8Array(i*(a+1));let s,o,c;const l=t+7&-8,h=new Uint8Array(l*a);let u=0;for(const t of e){let e=128;for(;e>0;){h[u++]=t&e?0:255;e>>=1}}let d=0;u=0;if(0!==h[u]){n[0]=1;++d}for(o=1;o>2)+(h[u+1]?4:0)+(h[u-l+1]?8:0);if(r[e]){n[c+o]=r[e];++d}u++}if(h[u-l]!==h[u]){n[c+o]=h[u]?2:4;++d}if(d>1e3)return null}u=l*(a-1);c=s*i;if(0!==h[u]){n[c]=8;++d}for(o=1;o1e3)return null;const f=new Int32Array([0,i,-1,0,-i,0,0,0,1]),g=[],{a:p,b:m,c:b,d:y,e:w,f:S}=(new DOMMatrix).scaleSelf(1/t,-1/a).translateSelf(0,-a);for(s=0;d&&s<=a;s++){let e=s*i;const a=e+t;for(;e>4;n[e]&=l>>2|l<<2}r=e%i;o=e/i|0;g.push(oa,p*r+b*o+w,m*r+y*o+S);n[e]||--d}while(c!==e);--s}return[na,[new Float32Array(g)],new Float32Array([0,0,t,a])]}(p);if(b){r.addImageOps(aa,b,g);return}warn("Cannot compile Type3 glyph.");r.addImageOps(Vt,[p],g);return}const e=`mask_${this.idFactory.createObjId()}`;r.addDependency(e);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;this._sendImgData(e,p);m=Vt;b=[{data:e,width:p.width,height:p.height,interpolate:p.interpolate,count:1}];r.addImageOps(m,b,g);if(i){const t={objId:e,fn:m,args:b,optionalContent:g};n.set(i,u,t);u&&this._regionalImageCache.set(null,u,t)}return}const y=h.has("SMask")||h.has("Mask");if(a&&d+f<200&&!y){try{const i=new PDFImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s});p=await i.createImageData(!0,!1);r.addImageOps(Yt,[p],g)}catch(e){const t=`Unable to decode inline image: "${e}".`;if(!c)throw new Error(t);warn(t)}return}let w=`img_${this.idFactory.createObjId()}`,S=!1,x=null;if(this.parsingType3Font)w=`${this.idFactory.getDocId()}_type3_${w}`;else if(i&&u){S=this.globalImageCache.shouldCache(u,this.pageIndex);if(S){assert(!a,"Cannot cache an inline image globally.");w=`${this.idFactory.getDocId()}_${w}`}}r.addDependency(w);m=Jt;b=[w,d,f];r.addImageOps(m,b,g,y);if(S){x={objId:w,fn:m,args:b,optionalContent:g,hasMask:y,byteSize:0};if(this.globalImageCache.hasDecodeFailed(u)){this.globalImageCache.setData(u,x);this._sendImgData(w,null,S);return}if(d*f>25e4||y){const e=await this.handler.sendWithPromise("commonobj",[w,"CopyLocalImage",{imageRef:u}]);if(e){this.globalImageCache.setData(u,x);this.globalImageCache.addByteSize(u,e);return}}}PDFImage.buildImage({xref:this.xref,res:e,image:t,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:s}).then((async e=>{p=await e.createImageData(!1,l);p.dataLen=p.bitmap?p.width*p.height*4:p.data.length;p.ref=u;S&&this.globalImageCache.addByteSize(u,p.dataLen);return this._sendImgData(w,p,S)})).catch((e=>{warn(`Unable to decode image "${w}": "${e}".`);u&&this.globalImageCache.addDecodeFailed(u);return this._sendImgData(w,null,S)}));if(i){const e={objId:w,fn:m,args:b,optionalContent:g,hasMask:y};n.set(i,u,e);if(u){this._regionalImageCache.set(null,u,e);if(S){assert(x,"The global cache-data must be available.");this.globalImageCache.setData(u,x)}}}}handleSMask(e,t,a,r,i,n,s){const o=e.get("G"),c={subtype:e.get("S").name,backdrop:e.get("BC")},l=e.get("TR");if(isPDFFunction(l)){const e=this._pdfFunctionFactory.create(l),t=new Uint8Array(256),a=new Float32Array(1);for(let r=0;r<256;r++){a[0]=r/255;e(a,0,a,0);t[r]=255*a[0]|0}c.transferMap=t}return this.buildFormXObject(t,o,c,a,r,i.state.clone({newPath:!0}),n,s)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e;else{if(!isPDFFunction(e))return null;t=[e]}const a=[];let r=0,i=0;for(const e of t){const t=this.xref.fetchIfRef(e);r++;if(isName(t,"Identity")){a.push(null);continue}if(!isPDFFunction(t))return null;const n=this._pdfFunctionFactory.create(t),s=new Uint8Array(256),o=new Float32Array(1);for(let e=0;e<256;e++){o[0]=e/255;n(o,0,o,0);s[e]=255*o[0]|0}a.push(s);i++}return 1!==r&&4!==r||0===i?null:a}handleTilingType(e,t,a,r,i,n,s,o){const c=new OperatorList,l=Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),a]});return this.getOperatorList({stream:r,task:s,resources:l,operatorList:c}).then((function(){const a=c.getIR(),r=getTilingPatternIR(a,i,t);n.addDependencies(c.dependencies);n.addOp(e,r);i.objId&&o.set(null,i.objId,{operatorListIR:a,dict:i})})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`handleTilingType - ignoring pattern: "${e}".`)}}))}async handleSetFont(e,t,a,r,i,n,s=null,o=null){const c=t?.[0]instanceof Name?t[0].name:null,l=await this.loadFont(c,a,e,i,s,o);l.font.isType3Font&&r.addDependencies(l.type3Dependencies);n.font=l.font;l.send(this.handler);return l.loadedName}handleText(e,t){const a=t.font,r=a.charsToGlyphs(e);if(a.data){(!!(t.textRenderingMode&x)||"Pattern"===t.fillColorSpace.name||a.disableFontFace)&&PartialEvaluator.buildFontPaths(a,r,this.handler,this.options)}return r}ensureStateFont(e){if(e.font)return;const t=new FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;warn(`ensureStateFont: "${t}".`)}async setGState({resources:e,gState:t,operatorList:a,cacheKey:r,task:i,stateManager:n,localGStateCache:s,localColorSpaceCache:o,seenRefs:c}){const l=t.objId;let h=!0;const u=[];let d=Promise.resolve();for(const[r,s]of t)switch(r){case"Type":break;case"LW":if("number"!=typeof s){warn(`Invalid LW (line width): ${s}`);break}u.push([r,Math.abs(s)]);break;case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":u.push([r,s]);break;case"Font":h=!1;d=d.then((()=>this.handleSetFont(e,null,s[0],a,i,n.state).then((function(e){a.addDependency(e);u.push([r,[e,s[1]]])}))));break;case"BM":u.push([r,normalizeBlendMode(s)]);break;case"SMask":if(isName(s,"None")){u.push([r,!1]);break}if(s instanceof Dict){h=!1;d=d.then((()=>this.handleSMask(s,e,a,i,n,o,c)));u.push([r,!0])}else warn("Unsupported SMask type");break;case"TR":const t=this.handleTransferFunction(s);u.push([r,t]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":info("graphic state operator "+r);break;default:info("Unknown graphic state operator "+r)}await d;u.length>0&&a.addOp(De,[u]);h&&s.set(r,l,u)}loadFont(e,t,a,r,i=null,n=null){const errorFont=async()=>new TranslatedFont({loadedName:"g_font_error",font:new ErrorFont(`Font "${e}" is not available.`),dict:t});let s;if(t)t instanceof Ref&&(s=t);else{const t=a.get("Font");t&&(s=t.getRaw(e))}if(s){if(this.type3FontRefs?.has(s))return errorFont();if(this.fontCache.has(s))return this.fontCache.get(s);try{t=this.xref.fetchIfRef(s)}catch(e){warn(`loadFont - lookup failed: "${e}".`)}}if(!(t instanceof Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font){warn(`Font "${e}" is not available.`);return errorFont()}warn(`Font "${e}" is not available -- attempting to fallback to a default font.`);t=i||PartialEvaluator.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const{promise:o,resolve:c}=Promise.withResolvers();let l;try{l=this.preEvaluateFont(t);l.cssFontInfo=n}catch(e){warn(`loadFont - preEvaluateFont failed: "${e}".`);return errorFont()}const{descriptor:h,hash:u}=l,d=s instanceof Ref;let f;if(u&&h instanceof Dict){const e=h.fontAliases||=Object.create(null);if(e[u]){const t=e[u].aliasRef;if(d&&t&&this.fontCache.has(t)){this.fontCache.putAlias(s,t);return this.fontCache.get(s)}}else e[u]={fontID:this.idFactory.createFontId()};d&&(e[u].aliasRef=s);f=e[u].fontID}else f=this.idFactory.createFontId();assert(f?.startsWith("f"),'The "fontID" must be (correctly) defined.');if(d)this.fontCache.put(s,o);else{t.cacheKey=`cacheKey_${f}`;this.fontCache.put(t.cacheKey,o)}t.loadedName=`${this.idFactory.getDocId()}_${f}`;this.translateFont(l).then((async e=>{const i=new TranslatedFont({loadedName:t.loadedName,font:e,dict:t});if(e.isType3Font)try{await i.loadType3Data(this,a,r)}catch(e){throw new Error(`Type3 font load error: ${e}`)}c(i)})).catch((e=>{warn(`loadFont - translateFont failed: "${e}".`);c(new TranslatedFont({loadedName:t.loadedName,font:new ErrorFont(e?.message),dict:t}))}));return o}buildPath(e,t,a){const{pathMinMax:r,pathBuffer:i}=a;switch(0|e){case Xe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1],s=t[2],o=t[3],c=e+s,l=n+o;0===s||0===o?i.push(sa,e,n,oa,c,l,la):i.push(sa,e,n,oa,c,n,oa,c,l,oa,e,l,la);Util.rectBoundingBox(e,n,c,l,r);break}case Ee:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(sa,e,n);Util.pointBoundingBox(e,n,r);break}case Pe:{const e=a.currentPointX=t[0],n=a.currentPointY=t[1];i.push(oa,e,n);Util.pointBoundingBox(e,n,r);break}case Le:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l,h,u]=t;a.currentPointX=h;a.currentPointY=u;i.push(ca,s,o,c,l,h,u);Util.bezierBoundingBox(e,n,s,o,c,l,h,u,r);break}case je:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(ca,e,n,s,o,c,l);Util.bezierBoundingBox(e,n,e,n,s,o,c,l,r);break}case _e:{const e=a.currentPointX,n=a.currentPointY,[s,o,c,l]=t;a.currentPointX=c;a.currentPointY=l;i.push(ca,s,o,c,l,c,l);Util.bezierBoundingBox(e,n,s,o,c,l,c,l,r);break}case Ue:i.push(la)}}_getColorSpace(e,t,a){return ColorSpaceUtils.parse({cs:e,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:a,asyncIfNotCached:!0})}async _handleColorSpace(e){try{return await e}catch(e){if(e instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`_handleColorSpace - ignoring ColorSpace: "${e}".`);return null}throw e}}parseShading({shading:e,resources:t,localColorSpaceCache:a,localShadingPatternCache:r}){let i,n=r.get(e);if(n)return n;try{i=Pattern.parseShading(e,this.xref,t,this._pdfFunctionFactory,this.globalColorSpaceCache,a).getIR()}catch(t){if(t instanceof AbortException)return null;if(this.options.ignoreErrors){warn(`parseShading - ignoring shading: "${t}".`);r.set(e,null);return null}throw t}n=`pattern_${this.idFactory.createObjId()}`;this.parsingType3Font&&(n=`${this.idFactory.getDocId()}_type3_${n}`);r.set(e,n);this.parsingType3Font?this.handler.send("commonobj",[n,"Pattern",i]):this.handler.send("obj",[n,this.pageIndex,"Pattern",i]);return n}handleColorN(e,t,a,r,i,n,s,o,c,l){const h=a.pop();if(h instanceof Name){const u=i.getRaw(h.name),d=u instanceof Ref&&c.getByRef(u);if(d)try{const i=r.base?r.base.getRgbHex(a,0):null,n=getTilingPatternIR(d.operatorListIR,d.dict,i);e.addOp(t,n);return}catch{}const f=this.xref.fetchIfRef(u);if(f){const i=f instanceof BaseStream?f.dict:f,h=i.get("PatternType");if(h===Rn){const o=r.base?r.base.getRgbHex(a,0):null;return this.handleTilingType(t,o,n,f,i,e,s,c)}if(h===Nn){const a=i.get("Shading"),r=this.parseShading({shading:a,resources:n,localColorSpaceCache:o,localShadingPatternCache:l});if(r){const a=lookupMatrix(i.getArray("Matrix"),null);e.addOp(t,["Shading",r,a])}return}throw new FormatError(`Unknown PatternType: ${h}`)}}throw new FormatError(`Unknown PatternName: ${h}`)}_parseVisibilityExpression(e,t,a){if(++t>10){warn("Visibility expression is too deeply nested");return}const r=e.length,i=this.xref.fetchIfRef(e[0]);if(!(r<2)&&i instanceof Name){switch(i.name){case"And":case"Or":case"Not":a.push(i.name);break;default:warn(`Invalid operator ${i.name} in visibility expression`);return}for(let i=1;i0)return{type:"OCMD",expression:t}}const t=a.get("OCGs");if(Array.isArray(t)||t instanceof Dict){const e=[];if(Array.isArray(t))for(const a of t)e.push(a.toString());else e.push(t.objId);return{type:r,ids:e,policy:a.get("P")instanceof Name?a.get("P").name:null,expression:null}}if(t instanceof Ref)return{type:r,id:t.toString()}}return null}getOperatorList({stream:e,task:t,resources:a,operatorList:r,initialState:i=null,fallbackFontDict:n=null,prevRefs:s=null}){const o=e.dict?.objId,c=new RefSet(s);if(o){if(s?.has(o))throw new Error(`getOperatorList - ignoring circular reference: ${o}`);c.put(o)}a||=Dict.empty;i||=new EvalState;if(!r)throw new Error('getOperatorList: missing "operatorList" parameter');const l=this,h=this.xref,u=new LocalImageCache,d=new LocalColorSpaceCache,f=new LocalGStateCache,g=new LocalTilingPatternCache,p=new Map,m=a.get("XObject")||Dict.empty,b=a.get("Pattern")||Dict.empty,y=new StateManager(i),w=new EvaluatorPreprocessor(e,h,y),S=new TimeSlotManager;function closePendingRestoreOPS(e){for(let e=0,t=w.savedStatesDepth;e{y.state.fillColorSpace=e||ColorSpaceUtils.gray})));return}case yt:{const t=l._getColorSpace(e[0],a,d);if(t instanceof ColorSpace){y.state.strokeColorSpace=t;continue}next(l._handleColorSpace(t).then((e=>{y.state.strokeColorSpace=e||ColorSpaceUtils.gray})));return}case At:C=y.state.fillColorSpace;e=[C.getRgbHex(e,0)];i=It;break;case St:C=y.state.strokeColorSpace;e=[C.getRgbHex(e,0)];i=Ft;break;case vt:y.state.fillColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=It;break;case Ct:y.state.strokeColorSpace=ColorSpaceUtils.gray;e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=Ft;break;case Tt:y.state.fillColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=It;break;case Ot:y.state.strokeColorSpace=ColorSpaceUtils.cmyk;e=[ColorSpaceUtils.cmyk.getRgbHex(e,0)];i=Ft;break;case It:y.state.fillColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case Ft:y.state.strokeColorSpace=ColorSpaceUtils.rgb;e=[ColorSpaceUtils.rgb.getRgbHex(e,0)];break;case kt:C=y.state.patternFillColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=It;break}e=[];i=ia;break}if("Pattern"===C.name){next(l.handleColorN(r,kt,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=It;break;case xt:C=y.state.patternStrokeColorSpace;if(!C){if(isNumberArray(e,null)){e=[ColorSpaceUtils.gray.getRgbHex(e,0)];i=Ft;break}e=[];i=ra;break}if("Pattern"===C.name){next(l.handleColorN(r,xt,e,C,b,a,t,d,g,p));return}e=[C.getRgbHex(e,0)];i=Ft;break;case Mt:let O;try{const t=a.get("Shading");if(!t)throw new FormatError("No shading resource found");O=t.get(e[0].name);if(!O)throw new FormatError("No shading object found")}catch(e){if(e instanceof AbortException)continue;if(l.options.ignoreErrors){warn(`getOperatorList - ignoring Shading: "${e}".`);continue}throw e}const T=l.parseShading({shading:O,resources:a,localColorSpaceCache:d,localShadingPatternCache:p});if(!T)continue;e=[T];i=Mt;break;case De:F=e[0]instanceof Name;v=e[0].name;if(F){const t=f.getByName(v);if(t){t.length>0&&r.addOp(De,[t]);e=null;continue}}next(new Promise((function(e,i){if(!F)throw new FormatError("GState must be referred to by name.");const n=a.get("ExtGState");if(!(n instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const s=n.get(v);if(!(s instanceof Dict))throw new FormatError("GState should be a dictionary.");l.setGState({resources:a,gState:s,operatorList:r,cacheKey:v,task:t,stateManager:y,localGStateCache:f,localColorSpaceCache:d,seenRefs:c}).then(e,i)})).catch((function(e){if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring ExtGState: "${e}".`)}})));return;case Ce:{const[t]=e;if("number"!=typeof t){warn(`Invalid setLineWidth: ${t}`);continue}e[0]=Math.abs(t);break}case Ee:case Pe:case Le:case je:case _e:case Ue:case Xe:l.buildPath(i,e,y.state);continue;case qe:case He:case We:case ze:case $e:case Ge:case Ve:case Ke:case Je:{const{state:{pathBuffer:e,pathMinMax:t}}=y;i!==He&&i!==Ve&&i!==Ke||e.push(la);if(0===e.length)r.addOp(aa,[i,[null],null]);else{r.addOp(aa,[i,[new Float32Array(e)],t.slice()]);e.length=0;t.set([1/0,1/0,-1/0,-1/0],0)}continue}case ht:r.addOp(i,[new Float32Array(e)]);continue;case Et:case Pt:case Ut:case Xt:continue;case jt:if(!(e[0]instanceof Name)){warn(`Expected name for beginMarkedContentProps arg0=${e[0]}`);r.addOp(jt,["OC",null]);continue}if("OC"===e[0].name){next(l.parseMarkedContentProps(e[1],a).then((e=>{r.addOp(jt,["OC",e])})).catch((e=>{if(!(e instanceof AbortException)){if(!l.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring beginMarkedContentProps: "${e}".`);r.addOp(jt,["OC",null])}})));return}e=[e[0].name,e[1]instanceof Dict?e[1].get("MCID"):null];break;default:if(null!==e){for(x=0,k=e.length;x{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getOperatorList - ignoring errors during "${t.name}" task: "${e}".`);closePendingRestoreOPS()}}))}getTextContent({stream:e,task:a,resources:r,stateManager:i=null,includeMarkedContent:n=!1,sink:s,seenStyles:o=new Set,viewBox:c,lang:l=null,markedContentData:h=null,disableNormalization:u=!1,keepWhiteSpace:d=!1,prevRefs:f=null}){const g=e.dict?.objId,p=new RefSet(f);if(g){if(f?.has(g))throw new Error(`getTextContent - ignoring circular reference: ${g}`);p.put(g)}r||=Dict.empty;i||=new StateManager(new TextState);n&&(h||={level:0});const m={items:[],styles:Object.create(null),lang:l},b={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},y=[" "," "];let w=0;function saveLastChar(e){const t=(w+1)%2,a=" "!==y[w]&&" "===y[t];y[w]=e;w=t;return!d&&a}function shouldAddWhitepsace(){return!d&&" "!==y[w]&&" "===y[(w+1)%2]}function resetLastChars(){y[0]=y[1]=" ";w=0}const S=this,x=this.xref,k=[];let C=null;const v=new LocalImageCache,F=new LocalGStateCache,O=new EvaluatorPreprocessor(e,x,i);let T;function pushWhitespace({width:e=0,height:t=0,transform:a=b.prevTransform,fontName:r=b.fontName}){m.items.push({str:" ",dir:"ltr",width:e,height:t,transform:a,fontName:r,hasEOL:!1})}function getCurrentTextTransform(){const e=T.font,a=[T.fontSize*T.textHScale,0,0,T.fontSize,0,T.textRise];if(e.isType3Font&&(T.fontSize<=1||e.isCharBBox)&&!isArrayEqual(T.fontMatrix,t)){const t=e.bbox[3]-e.bbox[1];t>0&&(a[3]*=t*T.fontMatrix[3])}return Util.transform(T.ctm,Util.transform(T.textMatrix,a))}function ensureTextContentItem(){if(b.initialized)return b;const{font:e,loadedName:t}=T;if(!o.has(t)){o.add(t);m.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical};if(S.options.fontExtraProperties&&e.systemFontInfo){const a=m.styles[t];a.fontSubstitution=e.systemFontInfo.css;a.fontSubstitutionLoadedName=e.systemFontInfo.loadedName}}b.fontName=t;const a=b.transform=getCurrentTextTransform();if(e.vertical){b.width=b.totalWidth=Math.hypot(a[0],a[1]);b.height=b.totalHeight=0;b.vertical=!0}else{b.width=b.totalWidth=0;b.height=b.totalHeight=Math.hypot(a[2],a[3]);b.vertical=!1}const r=Math.hypot(T.textLineMatrix[0],T.textLineMatrix[1]),i=Math.hypot(T.ctm[0],T.ctm[1]);b.textAdvanceScale=i*r;const{fontSize:n}=T;b.trackingSpaceMin=.102*n;b.notASpace=.03*n;b.negativeSpaceMax=-.2*n;b.spaceInFlowMin=.102*n;b.spaceInFlowMax=.6*n;b.hasEOL=!1;b.initialized=!0;return b}function updateAdvanceScale(){if(!b.initialized)return;const e=Math.hypot(T.textLineMatrix[0],T.textLineMatrix[1]),t=Math.hypot(T.ctm[0],T.ctm[1])*e;if(t!==b.textAdvanceScale){if(b.vertical){b.totalHeight+=b.height*b.textAdvanceScale;b.height=0}else{b.totalWidth+=b.width*b.textAdvanceScale;b.width=0}b.textAdvanceScale=t}}function runBidiTransform(e){let t=e.str.join("");u||(t=function normalizeUnicode(e){if(!ma){ma=/([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu;ba=new Map([["ſt","ſt"]])}return e.replaceAll(ma,((e,t,a)=>t?t.normalize("NFKC"):ba.get(a)))}(t));const a=bidi(t,-1,e.vertical);return{str:a.str,dir:a.dir,width:Math.abs(e.totalWidth),height:Math.abs(e.totalHeight),transform:e.transform,fontName:e.fontName,hasEOL:e.hasEOL}}async function handleSetFont(e,i){const n=await S.loadFont(e,i,r,a);T.loadedName=n.loadedName;T.font=n.font;T.fontMatrix=n.font.fontMatrix||t}function applyInverseRotation(e,t,a){const r=Math.hypot(a[0],a[1]);return[(a[0]*e+a[1]*t)/r,(a[2]*e+a[3]*t)/r]}function compareWithLastPosition(e){const t=getCurrentTextTransform();let a=t[4],r=t[5];if(T.font?.vertical){if(ac[2]||r+ec[3])return!1}else if(a+ec[2]||rc[3])return!1;if(!T.font||!b.prevTransform)return!0;let i=b.prevTransform[4],n=b.prevTransform[5];if(i===a&&n===r)return!0;let s=-1;t[0]&&0===t[1]&&0===t[2]?s=t[0]>0?0:180:t[1]&&0===t[0]&&0===t[3]&&(s=t[1]>0?90:270);switch(s){case 0:break;case 90:[a,r]=[r,a];[i,n]=[n,i];break;case 180:[a,r,i,n]=[-a,-r,-i,-n];break;case 270:[a,r]=[-r,-a];[i,n]=[-n,-i];break;default:[a,r]=applyInverseRotation(a,r,t);[i,n]=applyInverseRotation(i,n,b.prevTransform)}if(T.font.vertical){const e=(n-r)/b.textAdvanceScale,t=a-i,s=Math.sign(b.height);if(e.5*b.width){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(t)>b.width){appendEOL();return!0}e<=s*b.notASpace&&resetLastChars();if(e<=s*b.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({height:Math.abs(e)})}else b.height+=e;else if(!addFakeSpaces(e,b.prevTransform,s))if(0===b.str.length){resetLastChars();pushWhitespace({height:Math.abs(e)})}else b.height+=e;Math.abs(t)>.25*b.width&&flushTextContentItem();return!0}const o=(a-i)/b.textAdvanceScale,l=r-n,h=Math.sign(b.width);if(o.5*b.height){appendEOL();return!0}resetLastChars();flushTextContentItem();return!0}if(Math.abs(l)>b.height){appendEOL();return!0}o<=h*b.notASpace&&resetLastChars();if(o<=h*b.trackingSpaceMin)if(shouldAddWhitepsace()){resetLastChars();flushTextContentItem();pushWhitespace({width:Math.abs(o)})}else b.width+=o;else if(!addFakeSpaces(o,b.prevTransform,h))if(0===b.str.length){resetLastChars();pushWhitespace({width:Math.abs(o)})}else b.width+=o;Math.abs(l)>.25*b.height&&flushTextContentItem();return!0}function buildTextContentItem({chars:e,extraSpacing:t}){const a=T.font;if(!e){const e=T.charSpacing+t;e&&(a.vertical?T.translateTextMatrix(0,-e):T.translateTextMatrix(e*T.textHScale,0));d&&compareWithLastPosition(0);return}const r=a.charsToGlyphs(e),i=T.fontMatrix[0]*T.fontSize;for(let e=0,n=r.length;e0){const e=k.join("");k.length=0;buildTextContentItem({chars:e,extraSpacing:0})}break;case dt:if(!i.state.font){S.ensureStateFont(i.state);continue}buildTextContentItem({chars:w[0],extraSpacing:0});break;case gt:if(!i.state.font){S.ensureStateFont(i.state);continue}T.carriageReturn();buildTextContentItem({chars:w[0],extraSpacing:0});break;case pt:if(!i.state.font){S.ensureStateFont(i.state);continue}T.wordSpacing=w[0];T.charSpacing=w[1];T.carriageReturn();buildTextContentItem({chars:w[2],extraSpacing:0});break;case Nt:flushTextContentItem();C??=r.get("XObject")||Dict.empty;y=w[0]instanceof Name;b=w[0].name;if(y&&v.getByName(b))break;next(new Promise((function(e,t){if(!y)throw new FormatError("XObject must be referred to by name.");let f=C.getRaw(b);if(f instanceof Ref){if(v.getByRef(f)){e();return}if(S.globalImageCache.getData(f,S.pageIndex)){e();return}f=x.fetch(f)}if(!(f instanceof BaseStream))throw new FormatError("XObject should be a stream");const{dict:g}=f,m=g.get("Subtype");if(!(m instanceof Name))throw new FormatError("XObject should have a Name subtype");if("Form"!==m.name){v.set(b,g.objId,!0);e();return}const w=i.state.clone(),k=new StateManager(w),F=lookupMatrix(g.getArray("Matrix"),null);F&&k.transform(F);const O=g.get("Resources");enqueueChunk();const T={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0;s.enqueue(e,t)},get desiredSize(){return s.desiredSize},get ready(){return s.ready}};S.getTextContent({stream:f,task:a,resources:O instanceof Dict?O:r,stateManager:k,includeMarkedContent:n,sink:T,seenStyles:o,viewBox:c,lang:l,markedContentData:h,disableNormalization:u,keepWhiteSpace:d,prevRefs:p}).then((function(){T.enqueueInvoked||v.set(b,g.objId,!0);e()}),t)})).catch((function(e){if(!(e instanceof AbortException)){if(!S.options.ignoreErrors)throw e;warn(`getTextContent - ignoring XObject: "${e}".`)}})));return;case De:y=w[0]instanceof Name;b=w[0].name;if(y&&F.getByName(b))break;next(new Promise((function(e,t){if(!y)throw new FormatError("GState must be referred to by name.");const a=r.get("ExtGState");if(!(a instanceof Dict))throw new FormatError("ExtGState should be a dictionary.");const i=a.get(b);if(!(i instanceof Dict))throw new FormatError("GState should be a dictionary.");const n=i.get("Font");if(n){flushTextContentItem();T.fontName=null;T.fontSize=n[1];handleSetFont(null,n[0]).then(e,t)}else{F.set(b,i.objId,!0);e()}})).catch((function(e){if(!(e instanceof AbortException)){if(!S.options.ignoreErrors)throw e;warn(`getTextContent - ignoring ExtGState: "${e}".`)}})));return;case Lt:flushTextContentItem();if(n){h.level++;m.items.push({type:"beginMarkedContent",tag:w[0]instanceof Name?w[0].name:null})}break;case jt:flushTextContentItem();if(n){h.level++;let e=null;w[1]instanceof Dict&&(e=w[1].get("MCID"));m.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?`${S.idFactory.getPageObjId()}_mc${e}`:null,tag:w[0]instanceof Name?w[0].name:null})}break;case _t:flushTextContentItem();if(n){if(0===h.level)break;h.level--;m.items.push({type:"endMarkedContent"})}break;case Re:!e||e.font===T.font&&e.fontSize===T.fontSize&&e.fontName===T.fontName||flushTextContentItem()}if(m.items.length>=s.desiredSize){g=!0;break}}if(g)next(En);else{flushTextContentItem();enqueueChunk();e()}})).catch((e=>{if(!(e instanceof AbortException)){if(!this.options.ignoreErrors)throw e;warn(`getTextContent - ignoring errors during "${a.name}" task: "${e}".`);flushTextContentItem();enqueueChunk()}}))}async extractDataStructures(e,t){const a=this.xref;let r;const i=this.readToUnicode(t.toUnicode);if(t.composite){const a=e.get("CIDSystemInfo");a instanceof Dict&&(t.cidSystemInfo={registry:stringToPDFString(a.get("Registry")),ordering:stringToPDFString(a.get("Ordering")),supplement:a.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof BaseStream&&(r=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;warn(`extractDataStructures - ignoring CIDToGIDMap data: "${e}".`)}}const n=[];let s,o=null;if(e.has("Encoding")){s=e.get("Encoding");if(s instanceof Dict){o=s.get("BaseEncoding");o=o instanceof Name?o.name:null;if(s.has("Differences")){const e=s.get("Differences");let t=0;for(const r of e){const e=a.fetchIfRef(r);if("number"==typeof e)t=e;else{if(!(e instanceof Name))throw new FormatError(`Invalid entry in 'Differences' array: ${e}`);n[t++]=e.name}}}}else if(s instanceof Name)o=s.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new FormatError(e);warn(e)}"MacRomanEncoding"!==o&&"MacExpertEncoding"!==o&&"WinAnsiEncoding"!==o&&(o=null)}const c=!t.file||t.isInternalFont,l=ei()[t.name];o&&c&&l&&(o=null);if(o)t.defaultEncoding=getEncoding(o);else{const e=!!(t.flags&Pr),a=!!(t.flags&Lr);s=Ar;"TrueType"!==t.type||a||(s=kr);if(e||l){s=xr;c&&(/Symbol/i.test(t.name)?s=Cr:/Dingbats/i.test(t.name)?s=vr:/Wingdings/i.test(t.name)&&(s=kr))}t.defaultEncoding=s}t.differences=n;t.baseEncodingName=o;t.hasEncoding=!!o||n.length>0;t.dict=e;t.toUnicode=await i;const h=await this.buildToUnicode(t);t.toUnicode=h;r&&(t.cidToGidMap=this.readCidToGidMap(r,h));return t}_simpleFontToUnicode(e,t=!1){assert(!e.composite,"Must be a simple font.");const a=[],r=e.defaultEncoding.slice(),i=e.baseEncodingName,n=e.differences;for(const e in n){const t=n[e];".notdef"!==t&&(r[e]=t)}const s=Fr();for(const n in r){let o=r[n];if(""===o)continue;let c=s[o];if(void 0!==c){a[n]=String.fromCharCode(c);continue}let l=0;switch(o[0]){case"G":3===o.length&&(l=parseInt(o.substring(1),16));break;case"g":5===o.length&&(l=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){const a=o.substring(1);if(t){l=parseInt(a,16);break}l=+a;if(Number.isNaN(l)&&Number.isInteger(parseInt(a,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":c=getUnicodeForGlyph(o,s);-1!==c&&(l=c);break;default:switch(o){case"f_h":case"f_t":case"T_h":a[n]=o.replaceAll("_","");continue}}if(l>0&&l<=1114111&&Number.isInteger(l)){if(i&&l===+n){const e=getEncoding(i);if(e&&(o=e[n])){a[n]=String.fromCharCode(s[o]);continue}}a[n]=String.fromCodePoint(l)}}return a}async buildToUnicode(e){e.hasIncludedToUnicodeMap=e.toUnicode?.length>0;if(e.hasIncludedToUnicodeMap){!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e));return e.toUnicode}if(!e.composite)return new ToUnicodeMap(this._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof IdentityCMap)||"Adobe"===e.cidSystemInfo?.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:a}=e.cidSystemInfo,r=Name.get(`${t}-${a}-UCS2`),i=await CMapFactory.create({encoding:r,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),n=[],s=[];e.cMap.forEach((function(e,t){if(t>65535)throw new FormatError("Max size of CID is 65,535");const a=i.lookup(t);if(a){s.length=0;for(let e=0,t=a.length;e>1;(0!==i||t.has(n))&&(a[n]=i)}return a}extractWidths(e,t,a){const r=this.xref;let i=[],n=0;const s=[];let o;if(a.composite){const t=e.get("DW");n="number"==typeof t?Math.ceil(t):1e3;const c=e.get("W");if(Array.isArray(c))for(let e=0,t=c.length;e{const t=c.get(e),r=new OperatorList;return n.getOperatorList({stream:t,task:a,resources:l,operatorList:r}).then((()=>{switch(r.fnArray[0]){case bt:this.#K(r,b);break;case mt:b||this.#J(r)}h[e]=r.getIR();for(const e of r.dependencies)i.add(e)})).catch((function(t){warn(`Type3 font resource "${e}" is not available.`);const a=new OperatorList;h[e]=a.getIR()}))}));this.#V=o.then((()=>{r.charProcOperatorList=h;if(this._bbox){r.isCharBBox=!0;r.bbox=this._bbox}}));return this.#V}#K(e,t=NaN){const a=Util.normalizeRect(e.argsArray[0].slice(2)),r=a[2]-a[0],i=a[3]-a[1],n=Math.hypot(r,i);if(0===r||0===i){e.fnArray.splice(0,1);e.argsArray.splice(0,1)}else if(0===t||Math.round(n/t)>=10){this._bbox??=[1/0,1/0,-1/0,-1/0];Util.rectBoundingBox(...a,this._bbox)}let s=0,o=e.length;for(;s=Ee&&n<=Je;if(i.variableArgs)o>s&&info(`Command ${r}: expected [0, ${s}] args, but received ${o} args.`);else{if(o!==s){const e=this.nonProcessedArgs;for(;o>s;){e.push(t.shift());o--}for(;oEvaluatorPreprocessor.MAX_INVALID_PATH_OPS)throw new FormatError(`Invalid ${e}`);warn(`Skipping ${e}`);null!==t&&(t.length=0);continue}}this.preprocessCommand(n,t);e.fn=n;e.args=t;return!0}if(a===wa)return!1;if(null!==a){null===t&&(t=[]);t.push(a);if(t.length>33)throw new FormatError("Too many arguments")}}}preprocessCommand(e,t){switch(0|e){case Be:this.stateManager.save();break;case Re:this.stateManager.restore();break;case Ne:this.stateManager.transform(t)}}}class DefaultAppearanceEvaluator extends EvaluatorPreprocessor{constructor(e){super(new StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;;){e.args.length=0;if(!this.read(e))break;if(0!==this.savedStatesDepth)continue;const{fn:a,args:r}=e;switch(0|a){case nt:const[e,a]=r;e instanceof Name&&(t.fontName=e.name);"number"==typeof a&&a>0&&(t.fontSize=a);break;case It:ColorSpaceUtils.rgb.getRgbItem(r,0,t.fontColor,0);break;case vt:ColorSpaceUtils.gray.getRgbItem(r,0,t.fontColor,0);break;case Tt:ColorSpaceUtils.cmyk.getRgbItem(r,0,t.fontColor,0)}}}catch(e){warn(`parseDefaultAppearance - ignoring errors: "${e}".`)}return t}}function parseDefaultAppearance(e){return new DefaultAppearanceEvaluator(e).parse()}class AppearanceStreamEvaluator extends EvaluatorPreprocessor{constructor(e,t,a,r){super(e);this.stream=e;this.evaluatorOptions=t;this.xref=a;this.globalColorSpaceCache=r;this.resources=e.dict?.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:ColorSpaceUtils.gray},a=!1;const r=[];try{for(;;){e.args.length=0;if(a||!this.read(e))break;const{fn:i,args:n}=e;switch(0|i){case Be:r.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case Re:t=r.pop()||t;break;case ht:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case nt:const[e,i]=n;e instanceof Name&&(t.fontName=e.name);"number"==typeof i&&i>0&&(t.fontSize=i*t.scaleFactor);break;case wt:t.fillColorSpace=ColorSpaceUtils.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,globalColorSpaceCache:this.globalColorSpaceCache,localColorSpaceCache:this._localColorSpaceCache});break;case At:t.fillColorSpace.getRgbItem(n,0,t.fontColor,0);break;case It:ColorSpaceUtils.rgb.getRgbItem(n,0,t.fontColor,0);break;case vt:ColorSpaceUtils.gray.getRgbItem(n,0,t.fontColor,0);break;case Tt:ColorSpaceUtils.cmyk.getRgbItem(n,0,t.fontColor,0);break;case dt:case ft:case gt:case pt:a=!0}}}catch(e){warn(`parseAppearanceStream - ignoring errors: "${e}".`)}this.stream.reset();delete t.scaleFactor;delete t.fillColorSpace;return t}get _localColorSpaceCache(){return shadow(this,"_localColorSpaceCache",new LocalColorSpaceCache)}get _pdfFunctionFactory(){return shadow(this,"_pdfFunctionFactory",new PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported}))}}function getPdfColor(e,t){if(e[0]===e[1]&&e[1]===e[2]){return`${numberToString(e[0]/255)} ${t?"g":"G"}`}return Array.from(e,(e=>numberToString(e/255))).join(" ")+" "+(t?"rg":"RG")}class FakeUnicodeFont{constructor(e,t){this.xref=e;this.widths=null;this.firstChar=1/0;this.lastChar=-1/0;this.fontFamily=t;const a=new OffscreenCanvas(1,1);this.ctxMeasure=a.getContext("2d",{willReadFrequently:!0});FakeUnicodeFont._fontNameId||(FakeUnicodeFont._fontNameId=1);this.fontName=Name.get(`InvalidPDFjsFont_${t}_${FakeUnicodeFont._fontNameId++}`)}get fontDescriptorRef(){if(!FakeUnicodeFont._fontDescriptorRef){const e=new Dict(this.xref);e.set("Type",Name.get("FontDescriptor"));e.set("FontName",this.fontName);e.set("FontFamily","MyriadPro Regular");e.set("FontBBox",[0,0,0,0]);e.set("FontStretch",Name.get("Normal"));e.set("FontWeight",400);e.set("ItalicAngle",0);FakeUnicodeFont._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return FakeUnicodeFont._fontDescriptorRef}get descendantFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("CIDFontType0"));e.set("CIDToGIDMap",Name.get("Identity"));e.set("FirstChar",this.firstChar);e.set("LastChar",this.lastChar);e.set("FontDescriptor",this.fontDescriptorRef);e.set("DW",1e3);const t=[],a=[...this.widths.entries()].sort();let r=null,i=null;for(const[e,n]of a)if(r)if(e===r+i.length)i.push(n);else{t.push(r,i);r=e;i=[n]}else{r=e;i=[n]}r&&t.push(r,i);e.set("W",t);const n=new Dict(this.xref);n.set("Ordering","Identity");n.set("Registry","Adobe");n.set("Supplement",0);e.set("CIDSystemInfo",n);return this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new Dict(this.xref);e.set("BaseFont",this.fontName);e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("Type0"));e.set("Encoding",Name.get("Identity-H"));e.set("DescendantFonts",[this.descendantFontRef]);e.set("ToUnicode",Name.get("Identity-H"));return this.xref.getNewPersistentRef(e)}get resources(){const e=new Dict(this.xref),t=new Dict(this.xref);t.set(this.fontName.name,this.baseFontRef);e.set("Font",t);return e}_createContext(){this.widths=new Map;this.ctxMeasure.font=`1000px ${this.fontFamily}`;return this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const a of e.split(/\r\n?|\n/))for(const e of a.split("")){const a=e.charCodeAt(0);if(this.widths.has(a))continue;const r=t.measureText(e),i=Math.ceil(r.width);this.widths.set(a,i);this.firstChar=Math.min(a,this.firstChar);this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(e,t,i){const[n,s,o,c]=e;let l=o-n,h=c-s;t%180!=0&&([l,h]=[h,l]);const u=a*i;return{coords:[0,h+r*i-u],bbox:[0,0,l,h],matrix:0!==t?getRotationMatrix(t,h,u):void 0}}createAppearance(e,t,i,n,s,o){const c=this._createContext(),l=[];let h=-1/0;for(const t of e.split(/\r\n?|\n/)){l.push(t);const e=c.measureText(t).width;h=Math.max(h,e);for(const e of codePointIter(t)){const t=String.fromCodePoint(e);let a=this.widths.get(e);if(void 0===a){const r=c.measureText(t);a=Math.ceil(r.width);this.widths.set(e,a);this.firstChar=Math.min(e,this.firstChar);this.lastChar=Math.max(e,this.lastChar)}}}h*=n/1e3;const[u,d,f,g]=t;let p=f-u,m=g-d;i%180!=0&&([p,m]=[m,p]);let b=1;h>p&&(b=p/h);let y=1;const w=a*n,S=r*n,x=w*l.length;x>m&&(y=m/x);const k=n*Math.min(b,y),C=["q",`0 0 ${numberToString(p)} ${numberToString(m)} re W n`,"BT",`1 0 0 1 0 ${numberToString(m+S)} Tm 0 Tc ${getPdfColor(s,!0)}`,`/${this.fontName.name} ${numberToString(k)} Tf`],{resources:v}=this;if(1!==(o="number"==typeof o&&o>=0&&o<=1?o:1)){C.push("/R0 gs");const e=new Dict(this.xref),t=new Dict(this.xref);t.set("ca",o);t.set("CA",o);t.set("Type",Name.get("ExtGState"));e.set("R0",t);v.set("ExtGState",e)}const F=numberToString(w);for(const e of l)C.push(`0 -${F} Td <${stringToUTF16HexString(e)}> Tj`);C.push("ET","Q");const O=C.join("\n"),T=new Dict(this.xref);T.set("Subtype",Name.get("Form"));T.set("Type",Name.get("XObject"));T.set("BBox",[0,0,p,m]);T.set("Length",O.length);T.set("Resources",v);if(i){const e=getRotationMatrix(i,p,m);T.set("Matrix",e)}const M=new StringStream(O);M.dict=T;return M}}class NameOrNumberTree{constructor(e,t,a){this.root=e;this.xref=t;this._type=a}getAll(){const e=new Map;if(!this.root)return e;const t=this.xref,a=new RefSet;a.put(this.root);const r=[this.root];for(;r.length>0;){const i=t.fetchIfRef(r.shift());if(!(i instanceof Dict))continue;if(i.has("Kids")){const e=i.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(a.has(t))throw new FormatError(`Duplicate entry in "${this._type}" tree.`);r.push(t);a.put(t)}continue}const n=i.get(this._type);if(Array.isArray(n))for(let a=0,r=n.length;a10){warn(`Search depth limit reached for "${this._type}" tree.`);return null}const i=a.get("Kids");if(!Array.isArray(i))return null;let n=0,s=i.length-1;for(;n<=s;){const r=n+s>>1,o=t.fetchIfRef(i[r]),c=o.get("Limits");if(et.fetchIfRef(c[1]))){a=o;break}n=r+1}}if(n>s)return null}const i=a.get(this._type);if(Array.isArray(i)){let a=0,r=i.length-2;for(;a<=r;){const n=a+r>>1,s=n+(1&n),o=t.fetchIfRef(i[s]);if(eo))return i[s+1];a=s+2}}}return null}get(e){return this.xref.fetchIfRef(this.getRaw(e))}}class NameTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Names")}}class NumberTree extends NameOrNumberTree{constructor(e,t){super(e,t,"Nums")}}function clearGlobalCaches(){!function clearPatternCaches(){Ii=Object.create(null)}();!function clearPrimitiveCaches(){Sa=Object.create(null);xa=Object.create(null);Aa=Object.create(null)}();!function clearUnicodeCaches(){Dr.clear()}();JpxImage.cleanup()}function pickPlatformItem(e){return e instanceof Dict?e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null:null}class FileSpec{#Y=!1;constructor(e,t,a=!1){if(e instanceof Dict){this.xref=t;this.root=e;e.has("FS")&&(this.fs=e.get("FS"));e.has("RF")&&warn("Related file specifications are not supported");a||(e.has("EF")?this.#Y=!0:warn("Non-embedded file specifications are not supported"))}}get filename(){let e="";const t=pickPlatformItem(this.root);t&&"string"==typeof t&&(e=stringToPDFString(t,!0).replaceAll("\\\\","\\").replaceAll("\\/","/").replaceAll("\\","/"));return shadow(this,"filename",e||"unnamed")}get content(){if(!this.#Y)return null;this._contentRef||=pickPlatformItem(this.root?.get("EF"));let e=null;if(this._contentRef){const t=this.xref.fetchIfRef(this._contentRef);t instanceof BaseStream?e=t.getBytes():warn("Embedded file specification points to non-existing/invalid content")}else warn("Embedded file specification does not have any content");return e}get description(){let e="";const t=this.root?.get("Desc");t&&"string"==typeof t&&(e=stringToPDFString(t));return shadow(this,"description",e)}get serializable(){return{rawFilename:this.filename,filename:(e=this.filename,e.substring(e.lastIndexOf("/")+1)),content:this.content,description:this.description};var e}}const Pn=0,Ln=-2,jn=-3,_n=-4,Un=-5,Xn=-6,qn=-9;function isWhitespace(e,t){const a=e[t];return" "===a||"\n"===a||"\r"===a||"\t"===a}class XMLParserBase{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,((e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return this.onResolveEntity(t)}))}_parseContent(e,t){const a=[];let r=t;function skipWs(){for(;r"!==e[r]&&"/"!==e[r];)++r;const i=e.substring(t,r);skipWs();for(;r"!==e[r]&&"/"!==e[r]&&"?"!==e[r];){skipWs();let t="",i="";for(;r"!==e[a]&&"?"!==e[a]&&"/"!==e[a];)++a;const r=e.substring(t,a);!function skipWs(){for(;a"!==e[a+1]);)++a;return{name:r,value:e.substring(i,a),parsed:a-t}}parseXml(e){let t=0;for(;t",a);if(t<0){this.onError(qn);return}this.onEndElement(e.substring(a,t));a=t+1;break;case"?":++a;const r=this._parseProcessingInstruction(e,a);if("?>"!==e.substring(a+r.parsed,a+r.parsed+2)){this.onError(jn);return}this.onPi(r.name,r.value);a+=r.parsed+2;break;case"!":if("--"===e.substring(a+1,a+3)){t=e.indexOf("--\x3e",a+3);if(t<0){this.onError(Un);return}this.onComment(e.substring(a+3,t));a=t+3}else if("[CDATA["===e.substring(a+1,a+8)){t=e.indexOf("]]>",a+8);if(t<0){this.onError(Ln);return}this.onCdata(e.substring(a+8,t));a=t+3}else{if("DOCTYPE"!==e.substring(a+1,a+8)){this.onError(Xn);return}{const r=e.indexOf("[",a+8);let i=!1;t=e.indexOf(">",a+8);if(t<0){this.onError(_n);return}if(r>0&&t>r){t=e.indexOf("]>",a+8);if(t<0){this.onError(_n);return}i=!0}const n=e.substring(a+8,t+(i?1:0));this.onDoctype(n);a=t+(i?2:1)}}break;default:const i=this._parseContent(e,a);if(null===i){this.onError(Xn);return}let n=!1;if("/>"===e.substring(a+i.parsed,a+i.parsed+2))n=!0;else if(">"!==e.substring(a+i.parsed,a+i.parsed+1)){this.onError(qn);return}this.onBeginElement(i.name,i.attributes,n);a+=i.parsed+(n?2:1)}}else{for(;ae.textContent)).join(""):this.nodeValue||""}get children(){return this.childNodes||[]}hasChildNodes(){return this.childNodes?.length>0}searchNode(e,t){if(t>=e.length)return this;const a=e[t];if(a.name.startsWith("#")&&t0){r.push([i,0]);i=i.childNodes[0]}else{if(0===r.length)return null;for(;0!==r.length;){const[e,t]=r.pop(),a=t+1;if(a");for(const t of this.childNodes)t.dump(e);e.push(``)}else this.nodeValue?e.push(`>${encodeToXmlString(this.nodeValue)}`):e.push("/>")}else e.push(encodeToXmlString(this.nodeValue))}}class SimpleXMLParser extends XMLParserBase{constructor({hasAttributes:e=!1,lowerCaseName:t=!1}){super();this._currentFragment=null;this._stack=null;this._errorCode=Pn;this._hasAttributes=e;this._lowerCaseName=t}parseFromString(e){this._currentFragment=[];this._stack=[];this._errorCode=Pn;this.parseXml(e);if(this._errorCode!==Pn)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function isWhitespaceString(e){for(let t=0,a=e.length;t\\376\\377([^<]+)/g,(function(e,t){const a=t.replaceAll(/\\([0-3])([0-7])([0-7])/g,(function(e,t,a,r){return String.fromCharCode(64*t+8*a+1*r)})).replaceAll(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error(`_repair: ${t} isn't defined.`)})),r=[">"];for(let e=0,t=a.length;e=32&&t<127&&60!==t&&62!==t&&38!==t?r.push(String.fromCharCode(t)):r.push("&#x"+(65536+t).toString(16).substring(1)+";")}return r.join("")}))}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((e=>"rdf:li"===e.nodeName))}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,a=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,a.map((e=>e.textContent.trim())))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName){t=t.firstChild;for(;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling}if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}const Hn=1,Wn=2,zn=3,$n=4,Gn=5;class StructTreeRoot{constructor(e,t,a){this.xref=e;this.dict=t;this.ref=a instanceof Ref?a:null;this.roleMap=new Map;this.structParentIds=null}init(){this.readRoleMap()}#Z(e,t,a){if(!(e instanceof Ref)||t<0)return;this.structParentIds||=new RefSetCache;let r=this.structParentIds.get(e);if(!r){r=[];this.structParentIds.put(e,r)}r.push([t,a])}addAnnotationIdToPage(e,t){this.#Z(e,t,$n)}readRoleMap(){const e=this.dict.get("RoleMap");if(e instanceof Dict)for(const[t,a]of e)a instanceof Name&&this.roleMap.set(t,a.name)}static async canCreateStructureTree({catalogRef:e,pdfManager:t,newAnnotationsByPage:a}){if(!(e instanceof Ref)){warn("Cannot save the struct tree: no catalog reference.");return!1}let r=0,i=!0;for(const[e,n]of a){const{ref:a}=await t.getPage(e);if(!(a instanceof Ref)){warn(`Cannot save the struct tree: page ${e} has no ref.`);i=!0;break}for(const e of n)if(e.accessibilityData?.type){e.parentTreeId=r++;i=!1}}if(i){for(const e of a.values())for(const t of e)delete t.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:e,xref:t,catalogRef:a,pdfManager:r,changes:i}){const n=await r.ensureCatalog("cloneDict"),s=new RefSetCache;s.put(a,n);const o=t.getNewTemporaryRef();n.set("StructTreeRoot",o);const c=new Dict(t);c.set("Type",Name.get("StructTreeRoot"));const l=t.getNewTemporaryRef();c.set("ParentTree",l);const h=[];c.set("K",h);s.put(o,c);const u=new Dict(t),d=[];u.set("Nums",d);const f=await this.#Q({newAnnotationsByPage:e,structTreeRootRef:o,structTreeRoot:null,kids:h,nums:d,xref:t,pdfManager:r,changes:i,cache:s});c.set("ParentTreeNextKey",f);s.put(l,u);for(const[e,t]of s.items())i.put(e,{data:t})}async canUpdateStructTree({pdfManager:e,newAnnotationsByPage:t}){if(!this.ref){warn("Cannot update the struct tree: no root reference.");return!1}let a=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(a)||a<0){warn("Cannot update the struct tree: invalid next key.");return!1}const r=this.dict.get("ParentTree");if(!(r instanceof Dict)){warn("Cannot update the struct tree: ParentTree isn't a dict.");return!1}const i=r.get("Nums");if(!Array.isArray(i)){warn("Cannot update the struct tree: nums isn't an array.");return!1}const n=new NumberTree(r,this.xref);for(const a of t.keys()){const{pageDict:t}=await e.getPage(a);if(!t.has("StructParents"))continue;const r=t.get("StructParents");if(!Number.isInteger(r)||!Array.isArray(n.get(r))){warn(`Cannot save the struct tree: page ${a} has a wrong id.`);return!1}}let s=!0;for(const[r,i]of t){const{pageDict:t}=await e.getPage(r);StructTreeRoot.#ee({elements:i,xref:this.xref,pageDict:t,numberTree:n});for(const e of i)if(e.accessibilityData?.type){e.accessibilityData.structParent>=0||(e.parentTreeId=a++);s=!1}}if(s){for(const e of t.values())for(const t of e){delete t.parentTreeId;delete t.structTreeParent}return!1}return!0}async updateStructureTree({newAnnotationsByPage:e,pdfManager:t,changes:a}){const{ref:r,xref:i}=this,n=this.dict.clone(),s=new RefSetCache;s.put(r,n);let o,c=n.getRaw("ParentTree");if(c instanceof Ref)o=i.fetch(c);else{o=c;c=i.getNewTemporaryRef();n.set("ParentTree",c)}o=o.clone();s.put(c,o);let l=o.getRaw("Nums"),h=null;if(l instanceof Ref){h=l;l=i.fetch(h)}l=l.slice();h||o.set("Nums",l);const u=await StructTreeRoot.#Q({newAnnotationsByPage:e,structTreeRootRef:r,structTreeRoot:this,kids:null,nums:l,xref:i,pdfManager:t,changes:a,cache:s});if(-1!==u){n.set("ParentTreeNextKey",u);h&&s.put(h,l);for(const[e,t]of s.items())a.put(e,{data:t})}}static async#Q({newAnnotationsByPage:e,structTreeRootRef:t,structTreeRoot:a,kids:r,nums:i,xref:n,pdfManager:s,changes:o,cache:c}){const l=Name.get("OBJR");let h,u=-1;for(const[d,f]of e){const e=await s.getPage(d),{ref:g}=e,p=g instanceof Ref;for(const{accessibilityData:s,ref:m,parentTreeId:b,structTreeParent:y}of f){if(!s?.type)continue;const{structParent:f}=s;if(a&&Number.isInteger(f)&&f>=0){let t=(h||=new Map).get(d);if(void 0===t){t=new StructTreePage(a,e.pageDict).collectObjects(g);h.set(d,t)}const r=t?.get(f);if(r){const e=n.fetch(r).clone();StructTreeRoot.#te(e,s);o.put(r,{data:e});continue}}u=Math.max(u,b);const w=n.getNewTemporaryRef(),S=new Dict(n);StructTreeRoot.#te(S,s);await this.#ae({structTreeParent:y,tagDict:S,newTagRef:w,structTreeRootRef:t,fallbackKids:r,xref:n,cache:c});const x=new Dict(n);S.set("K",x);x.set("Type",l);p&&x.set("Pg",g);x.set("Obj",m);c.put(w,S);i.push(b,w)}}return u+1}static#te(e,{type:t,title:a,lang:r,alt:i,expanded:n,actualText:s}){e.set("S",Name.get(t));a&&e.set("T",stringToAsciiOrUTF16BE(a));r&&e.set("Lang",stringToAsciiOrUTF16BE(r));i&&e.set("Alt",stringToAsciiOrUTF16BE(i));n&&e.set("E",stringToAsciiOrUTF16BE(n));s&&e.set("ActualText",stringToAsciiOrUTF16BE(s))}static#ee({elements:e,xref:t,pageDict:a,numberTree:r}){const i=new Map;for(const t of e)if(t.structTreeParentId){const e=parseInt(t.structTreeParentId.split("_mc")[1],10);let a=i.get(e);if(!a){a=[];i.set(e,a)}a.push(t)}const n=a.get("StructParents");if(!Number.isInteger(n))return;const s=r.get(n),updateElement=(e,a,r)=>{const n=i.get(e);if(n){const e=a.getRaw("P"),i=t.fetchIfRef(e);if(e instanceof Ref&&i instanceof Dict){const e={ref:r,dict:a};for(const t of n)t.structTreeParent=e}return!0}return!1};for(const e of s){if(!(e instanceof Ref))continue;const a=t.fetch(e),r=a.get("K");if(Number.isInteger(r))updateElement(r,a,e);else if(Array.isArray(r))for(let i of r){i=t.fetchIfRef(i);if(Number.isInteger(i)&&updateElement(i,a,e))break;if(!(i instanceof Dict))continue;if(!isName(i.get("Type"),"MCR"))break;const r=i.get("MCID");if(Number.isInteger(r)&&updateElement(r,a,e))break}}}static async#ae({structTreeParent:e,tagDict:t,newTagRef:a,structTreeRootRef:r,fallbackKids:i,xref:n,cache:s}){let o,c=null;if(e){({ref:c}=e);o=e.dict.getRaw("P")||r}else o=r;t.set("P",o);const l=n.fetchIfRef(o);if(!l){i.push(a);return}let h=s.get(o);if(!h){h=l.clone();s.put(o,h)}const u=h.getRaw("K");let d=u instanceof Ref?s.get(u):null;if(!d){d=n.fetchIfRef(u);d=Array.isArray(d)?d.slice():[u];const e=n.getNewTemporaryRef();h.set("K",e);s.put(e,d)}const f=d.indexOf(c);d.splice(f>=0?f+1:d.length,0,a)}}class StructElementNode{constructor(e,t){this.tree=e;this.xref=e.xref;this.dict=t;this.kids=[];this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof Name?e.name:"",{root:a}=this.tree;return a.roleMap.get(t)??t}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof Ref&&(e=t.toString());const a=this.dict.get("K");if(Array.isArray(a))for(const t of a){const a=this.parseKid(e,this.xref.fetchIfRef(t));a&&this.kids.push(a)}else{const t=this.parseKid(e,a);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new StructElement({type:Hn,mcid:t,pageObjId:e});if(!(t instanceof Dict))return null;const a=t.getRaw("Pg");a instanceof Ref&&(e=a.toString());const r=t.get("Type")instanceof Name?t.get("Type").name:null;if("MCR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Stm");return new StructElement({type:Wn,refObjId:a instanceof Ref?a.toString():null,pageObjId:e,mcid:t.get("MCID")})}if("OBJR"===r){if(this.tree.pageDict.objId!==e)return null;const a=t.getRaw("Obj");return new StructElement({type:zn,refObjId:a instanceof Ref?a.toString():null,pageObjId:e})}return new StructElement({type:Gn,dict:t})}}class StructElement{constructor({type:e,dict:t=null,mcid:a=null,pageObjId:r=null,refObjId:i=null}){this.type=e;this.dict=t;this.mcid=a;this.pageObjId=r;this.refObjId=i;this.parentNode=null}}class StructTreePage{constructor(e,t){this.root=e;this.xref=e?.xref??null;this.rootDict=e?.dict??null;this.pageDict=t;this.nodes=[]}collectObjects(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return null;const t=this.rootDict.get("ParentTree");if(!t)return null;const a=this.root.structParentIds?.get(e);if(!a)return null;const r=new Map,i=new NumberTree(t,this.xref);for(const[e]of a){const t=i.getRaw(e);t instanceof Ref&&r.set(e,t)}return r}parse(e){if(!(this.root&&this.rootDict&&e instanceof Ref))return;const t=this.rootDict.get("ParentTree");if(!t)return;const a=this.pageDict.get("StructParents"),r=this.root.structParentIds?.get(e);if(!Number.isInteger(a)&&!r)return;const i=new Map,n=new NumberTree(t,this.xref);if(Number.isInteger(a)){const e=n.get(a);if(Array.isArray(e))for(const t of e)t instanceof Ref&&this.addNode(this.xref.fetch(t),i)}if(r)for(const[e,t]of r){const a=n.get(e);if(a){const e=this.addNode(this.xref.fetchIfRef(a),i);1===e?.kids?.length&&e.kids[0].type===zn&&(e.kids[0].type=t)}}}addNode(e,t,a=0){if(a>40){warn("StructTree MAX_DEPTH reached.");return null}if(!(e instanceof Dict))return null;if(t.has(e))return t.get(e);const r=new StructElementNode(this,e);t.set(e,r);const i=e.get("P");if(!(i instanceof Dict)||isName(i.get("Type"),"StructTreeRoot")){this.addTopLevelNode(e,r)||t.delete(e);return r}const n=this.addNode(i,t,a+1);if(!n)return r;let s=!1;for(const t of n.kids)if(t.type===Gn&&t.dict===e){t.parentNode=r;s=!0}s||t.delete(e);return r}addTopLevelNode(e,t){const a=this.rootDict.get("K");if(!a)return!1;if(a instanceof Dict){if(a.objId!==e.objId)return!1;this.nodes[0]=t;return!0}if(!Array.isArray(a))return!0;let r=!1;for(let i=0;i40){warn("StructTree too deep to be fully serialized.");return}const r=Object.create(null);r.role=e.role;r.children=[];t.children.push(r);let i=e.dict.get("Alt");"string"!=typeof i&&(i=e.dict.get("ActualText"));"string"==typeof i&&(r.alt=stringToPDFString(i));const n=e.dict.get("A");if(n instanceof Dict){const e=lookupNormalRect(n.getArray("BBox"),null);if(e)r.bbox=e;else{const e=n.get("Width"),t=n.get("Height");"number"==typeof e&&e>0&&"number"==typeof t&&t>0&&(r.bbox=[0,0,e,t])}}const s=e.dict.get("Lang");"string"==typeof s&&(r.lang=stringToPDFString(s));for(const t of e.kids){const e=t.type===Gn?t.parentNode:null;e?nodeToSerializable(e,r,a+1):t.type===Hn||t.type===Wn?r.children.push({type:"content",id:`p${t.pageObjId}_mc${t.mcid}`}):t.type===zn?r.children.push({type:"object",id:t.refObjId}):t.type===$n&&r.children.push({type:"annotation",id:`pdfjs_internal_id_${t.refObjId}`})}}const e=Object.create(null);e.children=[];e.role="Root";for(const t of this.nodes)t&&nodeToSerializable(t,e);return e}}const Vn=function _isValidExplicitDest(e,t,a){if(!Array.isArray(a)||a.length<2)return!1;const[r,i,...n]=a;if(!e(r)&&!Number.isInteger(r))return!1;if(!t(i))return!1;const s=n.length;let o=!0;switch(i.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return 0===s;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(4!==s)return!1;o=!1;break;default:return!1}for(const e of n)if(!("number"==typeof e||o&&null===e))return!1;return!0}.bind(null,(e=>e instanceof Ref),isName);function fetchDest(e){e instanceof Dict&&(e=e.get("D"));return Vn(e)?e:null}function fetchRemoteDest(e){let t=e.get("D");if(t){t instanceof Name&&(t=t.name);if("string"==typeof t)return stringToPDFString(t,!0);if(Vn(t))return JSON.stringify(t)}return null}class Catalog{#re=null;#ie=null;builtInCMapCache=new Map;fontCache=new RefSetCache;globalColorSpaceCache=new GlobalColorSpaceCache;globalImageCache=new GlobalImageCache;nonBlendModesSet=new RefSet;pageDictCache=new RefSetCache;pageIndexCache=new RefSetCache;pageKidsCountCache=new RefSetCache;standardFontDataCache=new Map;systemFontCache=new Map;constructor(e,t){this.pdfManager=e;this.xref=t;this.#ie=t.getCatalogObj();if(!(this.#ie instanceof Dict))throw new FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict}cloneDict(){return this.#ie.clone()}get version(){const e=this.#ie.get("Version");if(e instanceof Name){if(Ca.test(e.name))return shadow(this,"version",e.name);warn(`Invalid PDF catalog version: ${e.name}`)}return shadow(this,"version",null)}get lang(){const e=this.#ie.get("Lang");return shadow(this,"lang",e&&"string"==typeof e?stringToPDFString(e):null)}get needsRendering(){const e=this.#ie.get("NeedsRendering");return shadow(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this.#ie.get("Collection");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch Collection entry; assuming no collection is present.")}return shadow(this,"collection",e)}get acroForm(){let e=null;try{const t=this.#ie.get("AcroForm");t instanceof Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof MissingDataException)throw e;info("Cannot fetch AcroForm entry; assuming no forms are present.")}return shadow(this,"acroForm",e)}get acroFormRef(){const e=this.#ie.getRaw("AcroForm");return shadow(this,"acroFormRef",e instanceof Ref?e:null)}get metadata(){const e=this.#ie.getRaw("Metadata");if(!(e instanceof Ref))return shadow(this,"metadata",null);let t=null;try{const a=this.xref.fetch(e,!this.xref.encrypt?.encryptMetadata);if(a instanceof BaseStream&&a.dict instanceof Dict){const e=a.dict.get("Type"),r=a.dict.get("Subtype");if(isName(e,"Metadata")&&isName(r,"XML")){const e=stringToUTF8String(a.getString());e&&(t=new MetadataParser(e).serializable)}}}catch(e){if(e instanceof MissingDataException)throw e;info(`Skipping invalid Metadata: "${e}".`)}return shadow(this,"metadata",t)}get markInfo(){let e=null;try{e=this.#ne()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read mark info.")}return shadow(this,"markInfo",e)}#ne(){const e=this.#ie.get("MarkInfo");if(!(e instanceof Dict))return null;const t={Marked:!1,UserProperties:!1,Suspects:!1};for(const a in t){const r=e.get(a);"boolean"==typeof r&&(t[a]=r)}return t}get structTreeRoot(){let e=null;try{e=this.#se()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable read to structTreeRoot info.")}return shadow(this,"structTreeRoot",e)}#se(){const e=this.#ie.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(e);if(!(t instanceof Dict))return null;const a=new StructTreeRoot(this.xref,t,e);a.init();return a}get toplevelPagesDict(){const e=this.#ie.get("Pages");if(!(e instanceof Dict))throw new FormatError("Invalid top-level pages dictionary.");return shadow(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this.#oe()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read document outline.")}return shadow(this,"documentOutline",e)}#oe(){let e=this.#ie.get("Outlines");if(!(e instanceof Dict))return null;e=e.getRaw("First");if(!(e instanceof Ref))return null;const t={items:[]},a=[{obj:e,parent:t}],r=new RefSet;r.put(e);const i=this.xref,n=new Uint8ClampedArray(3);for(;a.length>0;){const t=a.shift(),s=i.fetchIfRef(t.obj);if(null===s)continue;s.has("Title")||warn("Invalid outline item encountered.");const o={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:s,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});const c=s.get("Title"),l=s.get("F")||0,h=s.getArray("C"),u=s.get("Count");let d=n;!isNumberArray(h,3)||0===h[0]&&0===h[1]&&0===h[2]||(d=ColorSpaceUtils.rgb.getRgb(h,0));const f={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.setOCGState,title:"string"==typeof c?stringToPDFString(c):"",color:d,count:Number.isInteger(u)?u:void 0,bold:!!(2&l),italic:!!(1&l),items:[]};t.parent.items.push(f);e=s.getRaw("First");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:f});r.put(e)}e=s.getRaw("Next");if(e instanceof Ref&&!r.has(e)){a.push({obj:e,parent:t.parent});r.put(e)}}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this.#ce()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read permissions.")}return shadow(this,"permissions",e)}#ce(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const a=[];for(const e in w){const r=w[e];t&r&&a.push(r)}return a}get optionalContentConfig(){let e=null;try{const t=this.#ie.get("OCProperties");if(!t)return shadow(this,"optionalContentConfig",null);const a=t.get("D");if(!a)return shadow(this,"optionalContentConfig",null);const r=t.get("OCGs");if(!Array.isArray(r))return shadow(this,"optionalContentConfig",null);const i=new RefSetCache;for(const e of r)e instanceof Ref&&!i.has(e)&&i.put(e,this.#le(e));e=this.#he(a,i)}catch(e){if(e instanceof MissingDataException)throw e;warn(`Unable to read optional content config: ${e}`)}return shadow(this,"optionalContentConfig",e)}#le(e){const t=this.xref.fetch(e),a={id:e.toString(),name:null,intent:null,usage:{print:null,view:null},rbGroups:[]},r=t.get("Name");"string"==typeof r&&(a.name=stringToPDFString(r));let i=t.getArray("Intent");Array.isArray(i)||(i=[i]);i.every((e=>e instanceof Name))&&(a.intent=i.map((e=>e.name)));const n=t.get("Usage");if(!(n instanceof Dict))return a;const s=a.usage,o=n.get("Print");if(o instanceof Dict){const e=o.get("PrintState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.print={printState:e.name}}}const c=n.get("View");if(c instanceof Dict){const e=c.get("ViewState");if(e instanceof Name)switch(e.name){case"ON":case"OFF":s.view={viewState:e.name}}}return a}#he(e,t){function parseOnOff(e){const a=[];if(Array.isArray(e))for(const r of e)r instanceof Ref&&t.has(r)&&a.push(r.toString());return a}function parseOrder(e,a=0){if(!Array.isArray(e))return null;const i=[];for(const n of e){if(n instanceof Ref&&t.has(n)){r.put(n);i.push(n.toString());continue}const e=parseNestedOrder(n,a);e&&i.push(e)}if(a>0)return i;const n=[];for(const[e]of t.items())r.has(e)||n.push(e.toString());n.length&&i.push({name:null,order:n});return i}function parseNestedOrder(e,t){if(++t>i){warn("parseNestedOrder - reached MAX_NESTED_LEVELS.");return null}const r=a.fetchIfRef(e);if(!Array.isArray(r))return null;const n=a.fetchIfRef(r[0]);if("string"!=typeof n)return null;const s=parseOrder(r.slice(1),t);return s?.length?{name:stringToPDFString(n),order:s}:null}const a=this.xref,r=new RefSet,i=10;!function parseRBGroups(e){if(Array.isArray(e))for(const r of e){const e=a.fetchIfRef(r);if(!Array.isArray(e)||!e.length)continue;const i=new Set;for(const a of e)if(a instanceof Ref&&t.has(a)&&!i.has(a.toString())){i.add(a.toString());t.get(a).rbGroups.push(i)}}}(e.get("RBGroups"));return{name:"string"==typeof e.get("Name")?stringToPDFString(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?stringToPDFString(e.get("Creator")):null,baseState:e.get("BaseState")instanceof Name?e.get("BaseState").name:null,on:parseOnOff(e.get("ON")),off:parseOnOff(e.get("OFF")),order:parseOrder(e.get("Order")),groups:[...t]}}setActualNumPages(e=null){this.#re=e}get hasActualNumPages(){return null!==this.#re}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new FormatError("Page count in top-level pages dictionary is not an integer.");return shadow(this,"_pagesCount",e)}get numPages(){return this.#re??this._pagesCount}get destinations(){const e=this.#ue(),t=Object.create(null);for(const a of e)if(a instanceof NameTree)for(const[e,r]of a.getAll()){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]=a)}else if(a instanceof Dict)for(const[e,r]of a){const a=fetchDest(r);a&&(t[stringToPDFString(e,!0)]||=a)}return shadow(this,"destinations",t)}getDestination(e){if(this.hasOwnProperty("destinations"))return this.destinations[e]??null;const t=this.#ue();for(const a of t)if(a instanceof NameTree||a instanceof Dict){const t=fetchDest(a.get(e));if(t)return t}if(t.length){const t=this.destinations[e];if(t)return t}return null}#ue(){const e=this.#ie.get("Names"),t=[];e?.has("Dests")&&t.push(new NameTree(e.getRaw("Dests"),this.xref));this.#ie.has("Dests")&&t.push(this.#ie.get("Dests"));return t}get pageLabels(){let e=null;try{e=this.#de()}catch(e){if(e instanceof MissingDataException)throw e;warn("Unable to read page labels.")}return shadow(this,"pageLabels",e)}#de(){const e=this.#ie.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let a=null,r="";const i=new NumberTree(e,this.xref).getAll();let n="",s=1;for(let e=0,o=this.numPages;e=1))throw new FormatError("Invalid start in PageLabel dictionary.");s=e}else s=1}switch(a){case"D":n=s;break;case"R":case"r":n=toRomanNumerals(s,"r"===a);break;case"A":case"a":const e=26,t="a"===a?97:65,r=s-1;n=String.fromCharCode(t+r%e).repeat(Math.floor(r/e)+1);break;default:if(a)throw new FormatError(`Invalid style "${a}" in PageLabel dictionary.`);n=""}t[e]=r+n;s++}return t}get pageLayout(){const e=this.#ie.get("PageLayout");let t="";if(e instanceof Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return shadow(this,"pageLayout",t)}get pageMode(){const e=this.#ie.get("PageMode");let t="UseNone";if(e instanceof Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return shadow(this,"pageMode",t)}get viewerPreferences(){const e=this.#ie.get("ViewerPreferences");if(!(e instanceof Dict))return shadow(this,"viewerPreferences",null);let t=null;for(const[a,r]of e){let e;switch(a){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof r&&(e=r);break;case"NonFullScreenPageMode":if(r instanceof Name)switch(r.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":e=r.name;break;default:e="UseNone"}break;case"Direction":if(r instanceof Name)switch(r.name){case"L2R":case"R2L":e=r.name;break;default:e="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(r instanceof Name)switch(r.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":e=r.name;break;default:e="CropBox"}break;case"PrintScaling":if(r instanceof Name)switch(r.name){case"None":case"AppDefault":e=r.name;break;default:e="AppDefault"}break;case"Duplex":if(r instanceof Name)switch(r.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":e=r.name;break;default:e="None"}break;case"PrintPageRange":if(Array.isArray(r)&&r.length%2==0){r.every(((e,t,a)=>Number.isInteger(e)&&e>0&&(0===t||e>=a[t-1])&&e<=this.numPages))&&(e=r)}break;case"NumCopies":Number.isInteger(r)&&r>0&&(e=r);break;default:warn(`Ignoring non-standard key in ViewerPreferences: ${a}.`);continue}if(void 0!==e){t??=Object.create(null);t[a]=e}else warn(`Bad value, for key "${a}", in ViewerPreferences: ${r}.`)}return shadow(this,"viewerPreferences",t)}get openAction(){const e=this.#ie.get("OpenAction"),t=Object.create(null);if(e instanceof Dict){const a=new Dict(this.xref);a.set("A",e);const r={url:null,dest:null,action:null};Catalog.parseDestDictionary({destDict:a,resultObj:r});Array.isArray(r.dest)?t.dest=r.dest:r.action&&(t.action=r.action)}else Vn(e)&&(t.dest=e);return shadow(this,"openAction",objectSize(t)>0?t:null)}get attachments(){const e=this.#ie.get("Names");let t=null;if(e instanceof Dict&&e.has("EmbeddedFiles")){const a=new NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,r]of a.getAll()){const a=new FileSpec(r,this.xref);t??=Object.create(null);t[stringToPDFString(e,!0)]=a.serializable}}return shadow(this,"attachments",t)}get xfaImages(){const e=this.#ie.get("Names");let t=null;if(e instanceof Dict&&e.has("XFAImages")){const a=new NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,r]of a.getAll())if(r instanceof BaseStream){t??=new Map;t.set(stringToPDFString(e,!0),r.getBytes())}}return shadow(this,"xfaImages",t)}#fe(){const e=this.#ie.get("Names");let t=null;function appendIfJavaScriptDict(e,a){if(!(a instanceof Dict))return;if(!isName(a.get("S"),"JavaScript"))return;let r=a.get("JS");if(r instanceof BaseStream)r=r.getString();else if("string"!=typeof r)return;r=stringToPDFString(r,!0).replaceAll("\0","");r&&(t||=new Map).set(e,r)}if(e instanceof Dict&&e.has("JavaScript")){const t=new NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,a]of t.getAll())appendIfJavaScriptDict(stringToPDFString(e,!0),a)}const a=this.#ie.get("OpenAction");a&&appendIfJavaScriptDict("OpenAction",a);return t}get jsActions(){const e=this.#fe();let t=collectActions(this.xref,this.#ie,we);if(e){t||=Object.create(null);for(const[a,r]of e)a in t?t[a].push(r):t[a]=[r]}return shadow(this,"jsActions",t)}async cleanup(e=!1){clearGlobalCaches();this.globalColorSpaceCache.clear();this.globalImageCache.clear(e);this.pageKidsCountCache.clear();this.pageIndexCache.clear();this.pageDictCache.clear();this.nonBlendModesSet.clear();for(const{dict:e}of await Promise.all(this.fontCache))delete e.cacheKey;this.fontCache.clear();this.builtInCMapCache.clear();this.standardFontDataCache.clear();this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],a=new RefSet,r=this.#ie.getRaw("Pages");r instanceof Ref&&a.put(r);const i=this.xref,n=this.pageKidsCountCache,s=this.pageIndexCache,o=this.pageDictCache;let c=0;for(;t.length;){const r=t.pop();if(r instanceof Ref){const l=n.get(r);if(l>=0&&c+l<=e){c+=l;continue}if(a.has(r))throw new FormatError("Pages tree contains circular reference.");a.put(r);const h=await(o.get(r)||i.fetchAsync(r));if(h instanceof Dict){let t=h.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!h.has("Kids")){n.has(r)||n.put(r,1);s.has(r)||s.put(r,c);if(c===e)return[h,r];c++;continue}}t.push(h);continue}if(!(r instanceof Dict))throw new FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:l}=r;let h=r.getRaw("Count");h instanceof Ref&&(h=await i.fetchAsync(h));if(Number.isInteger(h)&&h>=0){l&&!n.has(l)&&n.put(l,h);if(c+h<=e){c+=h;continue}}let u=r.getRaw("Kids");u instanceof Ref&&(u=await i.fetchAsync(u));if(!Array.isArray(u)){let t=r.getRaw("Type");t instanceof Ref&&(t=await i.fetchAsync(t));if(isName(t,"Page")||!r.has("Kids")){if(c===e)return[r,null];c++;continue}throw new FormatError("Page dictionary kids object is not an array.")}for(let e=u.length-1;e>=0;e--){const a=u[e];t.push(a);r===this.toplevelPagesDict&&a instanceof Ref&&!o.has(a)&&o.put(a,i.fetchAsync(a))}}throw new Error(`Page index ${e} not found.`)}async getAllPageDicts(e=!1){const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,a=[{currentNode:this.toplevelPagesDict,posInKids:0}],r=new RefSet,i=this.#ie.getRaw("Pages");i instanceof Ref&&r.put(i);const n=new Map,s=this.xref,o=this.pageIndexCache;let c=0;function addPageDict(e,t){t&&!o.has(t)&&o.put(t,c);n.set(c++,[e,t])}function addPageError(a){if(a instanceof XRefEntryException&&!e)throw a;if(e&&t&&0===c){warn(`getAllPageDicts - Skipping invalid first page: "${a}".`);a=Dict.empty}n.set(c++,[a,null])}for(;a.length>0;){const e=a.at(-1),{currentNode:t,posInKids:i}=e;let n=t.getRaw("Kids");if(n instanceof Ref)try{n=await s.fetchAsync(n)}catch(e){addPageError(e);break}if(!Array.isArray(n)){addPageError(new FormatError("Page dictionary kids object is not an array."));break}if(i>=n.length){a.pop();continue}const o=n[i];let c;if(o instanceof Ref){if(r.has(o)){addPageError(new FormatError("Pages tree contains circular reference."));break}r.put(o);try{c=await s.fetchAsync(o)}catch(e){addPageError(e);break}}else c=o;if(!(c instanceof Dict)){addPageError(new FormatError("Page dictionary kid reference points to wrong type of object."));break}let l=c.getRaw("Type");if(l instanceof Ref)try{l=await s.fetchAsync(l)}catch(e){addPageError(e);break}isName(l,"Page")||!c.has("Kids")?addPageDict(c,o instanceof Ref?o:null):a.push({currentNode:c,posInKids:0});e.posInKids++}return n}getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const a=this.xref;let r=0;const next=t=>function pagesBeforeRef(t){let r,i=0;return a.fetchAsync(t).then((function(a){if(isRefsEqual(t,e)&&!isDict(a,"Page")&&!(a instanceof Dict&&!a.has("Type")&&a.has("Contents")))throw new FormatError("The reference does not point to a /Page dictionary.");if(!a)return null;if(!(a instanceof Dict))throw new FormatError("Node must be a dictionary.");r=a.getRaw("Parent");return a.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof Dict))throw new FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const n=[];let s=!1;for(const r of e){if(!(r instanceof Ref))throw new FormatError("Kid must be a reference.");if(isRefsEqual(r,t)){s=!0;break}n.push(a.fetchAsync(r).then((function(e){if(!(e instanceof Dict))throw new FormatError("Kid node must be a dictionary.");e.has("Count")?i+=e.get("Count"):i++})))}if(!s)throw new FormatError("Kid reference not found in parent's kids.");return Promise.all(n).then((()=>[i,r]))}))}(t).then((t=>{if(!t){this.pageIndexCache.put(e,r);return r}const[a,i]=t;r+=a;return next(i)}));return next(e)}get baseUrl(){const e=this.#ie.get("URI");if(e instanceof Dict){const t=e.get("Base");if("string"==typeof t){const e=createValidAbsoluteUrl(t,null,{tryConvertEncoding:!0});if(e)return shadow(this,"baseUrl",e.href)}}return shadow(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:e,resultObj:t,docBaseUrl:a=null,docAttachments:r=null}){if(!(e instanceof Dict)){warn("parseDestDictionary: `destDict` must be a dictionary.");return}let i,n,s=e.get("A");if(!(s instanceof Dict))if(e.has("Dest"))s=e.get("Dest");else{s=e.get("AA");s instanceof Dict&&(s.has("D")?s=s.get("D"):s.has("U")&&(s=s.get("U")))}if(s instanceof Dict){const e=s.get("S");if(!(e instanceof Name)){warn("parseDestDictionary: Invalid type in Action dictionary.");return}const a=e.name;switch(a){case"ResetForm":const e=s.get("Flags"),o=!(1&("number"==typeof e?e:0)),c=[],l=[];for(const e of s.get("Fields")||[])e instanceof Ref?l.push(e.toString()):"string"==typeof e&&c.push(stringToPDFString(e));t.resetForm={fields:c,refs:l,include:o};break;case"URI":i=s.get("URI");i instanceof Name&&(i="/"+i.name);break;case"GoTo":n=s.get("D");break;case"Launch":case"GoToR":const h=s.get("F");if(h instanceof Dict){const e=new FileSpec(h,null,!0),{rawFilename:t}=e.serializable;i=t}else"string"==typeof h&&(i=h);const u=fetchRemoteDest(s);u&&"string"==typeof i&&(i=i.split("#",1)[0]+"#"+u);const d=s.get("NewWindow");"boolean"==typeof d&&(t.newWindow=d);break;case"GoToE":const f=s.get("T");let g;if(r&&f instanceof Dict){const e=f.get("R"),t=f.get("N");isName(e,"C")&&"string"==typeof t&&(g=r[stringToPDFString(t,!0)])}if(g){t.attachment=g;const e=fetchRemoteDest(s);e&&(t.attachmentDest=e)}else warn('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":const p=s.get("N");p instanceof Name&&(t.action=p.name);break;case"SetOCGState":const m=s.get("State"),b=s.get("PreserveRB");if(!Array.isArray(m)||0===m.length)break;const y=[];for(const e of m)if(e instanceof Name)switch(e.name){case"ON":case"OFF":case"Toggle":y.push(e.name)}else e instanceof Ref&&y.push(e.toString());if(y.length!==m.length)break;t.setOCGState={state:y,preserveRB:"boolean"!=typeof b||b};break;case"JavaScript":const w=s.get("JS");let S;w instanceof BaseStream?S=w.getString():"string"==typeof w&&(S=w);const x=S&&recoverJsURL(stringToPDFString(S,!0));if(x){i=x.url;t.newWindow=x.newWindow;break}default:if("JavaScript"===a||"SubmitForm"===a)break;warn(`parseDestDictionary - unsupported action: "${a}".`)}}else e.has("Dest")&&(n=e.get("Dest"));if("string"==typeof i){const e=createValidAbsoluteUrl(i,a,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(t.url=e.href);t.unsafeUrl=i}if(n){n instanceof Name&&(n=n.name);"string"==typeof n?t.dest=stringToPDFString(n,!0):Vn(n)&&(t.dest=n)}}}function addChildren(e,t){if(e instanceof Dict)e=e.getRawValues();else if(e instanceof BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const r of e)((a=r)instanceof Ref||a instanceof Dict||a instanceof BaseStream||Array.isArray(a))&&t.push(r);var a}class ObjectLoader{refSet=new RefSet;constructor(e,t,a){this.dict=e;this.keys=t;this.xref=a}async load(){const{keys:e,dict:t}=this,a=[];for(const r of e){const e=t.getRaw(r);void 0!==e&&a.push(e)}await this.#ge(a);this.refSet=null}async#ge(e){const t=[],a=[];for(;e.length;){let r=e.pop();if(r instanceof Ref){if(this.refSet.has(r))continue;try{this.refSet.put(r);r=this.xref.fetch(r)}catch(e){if(!(e instanceof MissingDataException)){warn(`ObjectLoader.#walk - requesting all data: "${e}".`);await this.xref.stream.manager.requestAllChunks();return}t.push(r);a.push({begin:e.begin,end:e.end})}}if(r instanceof BaseStream){const e=r.getBaseStreams();if(e){let i=!1;for(const t of e)if(!t.isDataLoaded){i=!0;a.push({begin:t.start,end:t.end})}i&&t.push(r)}}addChildren(r,e)}if(a.length){await this.xref.stream.manager.requestRanges(a);for(const e of t)e instanceof Ref&&this.refSet.remove(e);await this.#ge(t)}}static async load(e,t,a){if(a.stream.isDataLoaded)return;const r=new ObjectLoader(e,t,a);await r.load()}}const Kn=Symbol(),Jn=Symbol(),Yn=Symbol(),Zn=Symbol(),Qn=Symbol(),es=Symbol(),ts=Symbol(),as=Symbol(),rs=Symbol(),is=Symbol("content"),ns=Symbol("data"),ss=Symbol(),os=Symbol("extra"),cs=Symbol(),ls=Symbol(),hs=Symbol(),us=Symbol(),ds=Symbol(),fs=Symbol(),gs=Symbol(),ps=Symbol(),ms=Symbol(),bs=Symbol(),ys=Symbol(),ws=Symbol(),Ss=Symbol(),xs=Symbol(),As=Symbol(),ks=Symbol(),Cs=Symbol(),vs=Symbol(),Fs=Symbol(),Is=Symbol(),Os=Symbol(),Ts=Symbol(),Ms=Symbol(),Ds=Symbol(),Bs=Symbol(),Rs=Symbol(),Ns=Symbol(),Es=Symbol(),Ls=Symbol(),js=Symbol(),_s=Symbol(),Us=Symbol(),Xs=Symbol("namespaceId"),qs=Symbol("nodeName"),Hs=Symbol(),Ws=Symbol(),zs=Symbol(),$s=Symbol(),Gs=Symbol(),Vs=Symbol(),Ks=Symbol(),Js=Symbol(),Ys=Symbol("root"),Zs=Symbol(),Qs=Symbol(),eo=Symbol(),to=Symbol(),ao=Symbol(),ro=Symbol(),io=Symbol(),no=Symbol(),so=Symbol(),oo=Symbol(),co=Symbol(),lo=Symbol("uid"),ho=Symbol(),uo={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}},fo={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},go=/([+-]?\d+\.?\d*)(.*)/;function stripQuotes(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,-1):e}function getInteger({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseInt(e,10);return!isNaN(r)&&a(r)?r:t}function getFloat({data:e,defaultValue:t,validate:a}){if(!e)return t;e=e.trim();const r=parseFloat(e);return!isNaN(r)&&a(r)?r:t}function getKeyword({data:e,defaultValue:t,validate:a}){return e&&a(e=e.trim())?e:t}function getStringOption(e,t){return getKeyword({data:e,defaultValue:t[0],validate:e=>t.includes(e)})}function getMeasurement(e,t="0"){t||="0";if(!e)return getMeasurement(t);const a=e.trim().match(go);if(!a)return getMeasurement(t);const[,r,i]=a,n=parseFloat(r);if(isNaN(n))return getMeasurement(t);if(0===n)return 0;const s=fo[i];return s?s(n):n}function getRatio(e){if(!e)return{num:1,den:1};const t=e.split(":",2).map((e=>parseFloat(e.trim()))).filter((e=>!isNaN(e)));1===t.length&&t.push(1);if(0===t.length)return{num:1,den:1};const[a,r]=t;return{num:a,den:r}}function getRelevant(e){return e?e.trim().split(/\s+/).map((e=>({excluded:"-"===e[0],viewname:e.substring(1)}))):[]}class HTMLResult{static get FAILURE(){return shadow(this,"FAILURE",new HTMLResult(!1,null,null,null))}static get EMPTY(){return shadow(this,"EMPTY",new HTMLResult(!0,null,null,null))}constructor(e,t,a,r){this.success=e;this.html=t;this.bbox=a;this.breakNode=r}isBreak(){return!!this.breakNode}static breakNode(e){return new HTMLResult(!1,null,null,e)}static success(e,t=null){return new HTMLResult(!0,e,t,null)}}class FontFinder{constructor(e){this.fonts=new Map;this.cache=new Map;this.warned=new Set;this.defaultFont=null;this.add(e)}add(e,t=null){for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const a=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,a)}addPdfFont(e){const t=e.cssFontInfo,a=t.fontFamily;let r=this.fonts.get(a);if(!r){r=Object.create(null);this.fonts.set(a,r);this.defaultFont||(this.defaultFont=r)}let i="";const n=parseFloat(t.fontWeight);0!==parseFloat(t.italicAngle)?i=n>=700?"bolditalic":"italic":n>=700&&(i="bold");if(!i){(e.name.includes("Bold")||e.psName?.includes("Bold"))&&(i="bold");(e.name.includes("Italic")||e.name.endsWith("It")||e.psName?.includes("Italic")||e.psName?.endsWith("It"))&&(i+="italic")}i||(i="regular");r[i]=e}getDefault(){return this.defaultFont}find(e,t=!0){let a=this.fonts.get(e)||this.cache.get(e);if(a)return a;const r=/,|-|_| |bolditalic|bold|italic|regular|it/gi;let i=e.replaceAll(r,"");a=this.fonts.get(i);if(a){this.cache.set(e,a);return a}i=i.toLowerCase();const n=[];for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t);if(0===n.length)for(const[,e]of this.fonts.entries())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(0===n.length){i=i.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(t)}if(0===n.length)for(const e of this.fonts.values())e.regular.name?.replaceAll(r,"").toLowerCase().startsWith(i)&&n.push(e);if(n.length>=1){1!==n.length&&t&&warn(`XFA - Too many choices to guess the correct font: ${e}`);this.cache.set(e,n[0]);return n[0]}if(t&&!this.warned.has(e)){this.warned.add(e);warn(`XFA - Cannot find the font: ${e}`)}return null}}function selectFont(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}class FontInfo{constructor(e,t,a,r){this.lineHeight=a;this.paraMargin=t||{top:0,bottom:0,left:0,right:0};if(!e){[this.pdfFont,this.xfaFont]=this.defaultFont(r);return}this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const i=r.find(e.typeface);if(i){this.pdfFont=selectFont(e,i);this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(r))}else[this.pdfFont,this.xfaFont]=this.defaultFont(r)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(t?.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class FontSelector{constructor(e,t,a,r){this.fontFinder=r;this.stack=[new FontInfo(e,t,a,r)]}pushData(e,t,a){const r=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=r.xfaFont[t]);for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=r.paraMargin[e]);const i=new FontInfo(e,t,a||r.lineHeight,this.fontFinder);i.pdfFont||(i.pdfFont=r.pdfFont);this.stack.push(i)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}class TextMeasure{constructor(e,t,a,r){this.glyphs=[];this.fontSelector=new FontSelector(e,t,a,r);this.extraHeight=0}pushData(e,t,a){this.fontSelector.pushData(e,t,a)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),a=t.xfaFont.size;if(t.pdfFont){const r=t.xfaFont.letterSpacing,i=t.pdfFont,n=i.lineHeight||1.2,s=t.lineHeight||Math.max(1.2,n)*a,o=n-(void 0===i.lineGap?.2:i.lineGap),c=Math.max(1,o)*a,l=a/1e3,h=i.defaultWidth||i.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\u2029\n]/)){const e=i.encodeString(t).join(""),a=i.charsToGlyphs(e);for(const e of a){const t=e.width||h;this.glyphs.push([t*l+r,s,c,e.unicode,!1])}this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}else{for(const t of e.split(/[\u2029\n]/)){for(const e of t.split(""))this.glyphs.push([a,1.2*a,a,e,!1]);this.glyphs.push([0,0,0,"\n",!0])}this.glyphs.pop()}}compute(e){let t=-1,a=0,r=0,i=0,n=0,s=0,o=!1,c=!0;for(let l=0,h=this.glyphs.length;le){r=Math.max(r,n);n=0;i+=s;s=m;t=-1;a=0;o=!0;c=!1}else{s=Math.max(m,s);a=n;n+=h;t=l}else if(n+h>e){i+=s;s=m;if(-1!==t){l=t;r=Math.max(r,a);n=0;t=-1;a=0}else{r=Math.max(r,n);n=h}o=!0;c=!1}else{n+=h;s=Math.max(m,s)}}r=Math.max(r,n);i+=s+this.extraHeight;return{width:1.02*r,height:i,isBroken:o}}}const po=/^[^.[]+/,mo=/^[^\]]+/,bo=0,yo=1,wo=2,So=3,xo=4,Ao=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[ws]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),ko=new WeakMap;function parseExpression(e,t,a=!0){let r=e.match(po);if(!r)return null;let[i]=r;const n=[{name:i,cacheName:"."+i,index:0,js:null,formCalc:null,operator:bo}];let s=i.length;for(;s0&&h.push(e)}if(0!==h.length||o||0!==c)e=isFinite(l)?h.filter((e=>le[l])):h.flat();else{const a=t[ks]();if(!(t=a))return null;c=-1;e=[t]}}return 0===e.length?null:e}function createDataNode(e,t,a){const r=parseExpression(a);if(!r)return null;if(r.some((e=>e.operator===yo)))return null;const i=Ao.get(r[0].name);let n=0;if(i){e=i(e,t);n=1}else e=t||e;for(let t=r.length;ne[io]())).join("")}get[Fo](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof XFAObject||this[e]instanceof XFAObjectArray)break;t.add(e)}}return shadow(this,Fo,e._attributes)}[Rs](e){let t=this;for(;t;){if(t===e)return!0;t=t[ks]()}return!1}[ks](){return this[jo]}[As](){return this[ks]()}[ws](e=null){return e?this[e]:this[Io]}[ss](){const e=Object.create(null);this[is]&&(e.$content=this[is]);for(const t of Object.getOwnPropertyNames(this)){const a=this[t];null!==a&&(a instanceof XFAObject?e[t]=a[ss]():a instanceof XFAObjectArray?a.isEmpty()||(e[t]=a.dump()):e[t]=a)}return e}[co](){return null}[so](){return HTMLResult.EMPTY}*[Ss](){for(const e of this[ws]())yield e}*[Bo](e,t){for(const a of this[Ss]())if(!e||t===e.has(a[qs])){const e=this[ds](),t=a[so](e);t.success||(this[os].failingNode=a);yield t}}[ls](){return null}[Jn](e,t){this[os].children.push(e)}[ds](){}[Zn]({filter:e=null,include:t=!0}){if(this[os].generator){const e=this[ds](),t=this[os].failingNode[so](e);if(!t.success)return t;t.html&&this[Jn](t.html,t.bbox);delete this[os].failingNode}else this[os].generator=this[Bo](e,t);for(;;){const e=this[os].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[Jn](t.html,t.bbox)}this[os].generator=null;return HTMLResult.EMPTY}[to](e){this[Uo]=new Set(Object.keys(e))}[No](e){const t=this[Fo],a=this[Uo];return[...e].filter((e=>t.has(e)&&!a.has(e)))}[Zs](e,t=new Set){for(const a of this[Io])a[_o](e,t)}[_o](e,t){const a=this[Ro](e,t);a?this[Co](a,e,t):this[Zs](e,t)}[Ro](e,t){const{use:a,usehref:r}=this;if(!a&&!r)return null;let i=null,n=null,s=null,o=a;if(r){o=r;r.startsWith("#som(")&&r.endsWith(")")?n=r.slice(5,-1):r.startsWith(".#som(")&&r.endsWith(")")?n=r.slice(6,-1):r.startsWith("#")?s=r.slice(1):r.startsWith(".#")&&(s=r.slice(2))}else a.startsWith("#")?s=a.slice(1):n=a;this.use=this.usehref="";if(s)i=e.get(s);else{i=searchNode(e.get(Ys),this,n,!0,!1);i&&(i=i[0])}if(!i){warn(`XFA - Invalid prototype reference: ${o}.`);return null}if(i[qs]!==this[qs]){warn(`XFA - Incompatible prototype: ${i[qs]} !== ${this[qs]}.`);return null}if(t.has(i)){warn("XFA - Cycle detected in prototypes use.");return null}t.add(i);const c=i[Ro](e,t);c&&i[Co](c,e,t);i[Zs](e,t);t.delete(i);return i}[Co](e,t,a){if(a.has(e)){warn("XFA - Cycle detected in prototypes use.");return}!this[is]&&e[is]&&(this[is]=e[is]);new Set(a).add(e);for(const t of this[No](e[Uo])){this[t]=e[t];this[Uo]&&this[Uo].add(t)}for(const r of Object.getOwnPropertyNames(this)){if(this[Fo].has(r))continue;const i=this[r],n=e[r];if(i instanceof XFAObjectArray){for(const e of i[Io])e[_o](t,a);for(let r=i[Io].length,s=n[Io].length;rXFAObject[Oo](e))):"object"==typeof e&&null!==e?Object.assign({},e):e}[as](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch{shadow(e,t,this[t])}e[lo]=`${e[qs]}${qo++}`;e[Io]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[Fo].has(t)){e[t]=XFAObject[Oo](this[t]);continue}const a=this[t];e[t]=a instanceof XFAObjectArray?new XFAObjectArray(a[Po]):null}for(const t of this[Io]){const a=t[qs],r=t[as]();e[Io].push(r);r[jo]=e;null===e[a]?e[a]=r:e[a][Io].push(r)}return e}[ws](e=null){return e?this[Io].filter((t=>t[qs]===e)):this[Io]}[fs](e){return this[e]}[gs](e,t,a=!0){return Array.from(this[ps](e,t,a))}*[ps](e,t,a=!0){if("parent"!==e){for(const a of this[Io]){a[qs]===e&&(yield a);a.name===e&&(yield a);(t||a[js]())&&(yield*a[ps](e,t,!1))}a&&this[Fo].has(e)&&(yield new XFAAttribute(this,e,this[e]))}else yield this[jo]}}class XFAObjectArray{constructor(e=1/0){this[Po]=e;this[Io]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){if(this[Io].length<=this[Po]){this[Io].push(e);return!0}warn(`XFA - node "${e[qs]}" accepts no more than ${this[Po]} children`);return!1}isEmpty(){return 0===this[Io].length}dump(){return 1===this[Io].length?this[Io][0][ss]():this[Io].map((e=>e[ss]()))}[as](){const e=new XFAObjectArray(this[Po]);e[Io]=this[Io].map((e=>e[as]()));return e}get children(){return this[Io]}clear(){this[Io].length=0}}class XFAAttribute{constructor(e,t,a){this[jo]=e;this[qs]=t;this[is]=a;this[rs]=!1;this[lo]="attribute"+qo++}[ks](){return this[jo]}[Bs](){return!0}[ms](){return this[is].trim()}[ao](e){e=e.value||"";this[is]=e.toString()}[io](){return this[is]}[Rs](e){return this[jo]===e||this[jo][Rs](e)}}class XmlObject extends XFAObject{constructor(e,t,a={}){super(e,t);this[is]="";this[Mo]=null;if("#text"!==t){const e=new Map;this[vo]=e;for(const[t,r]of Object.entries(a))e.set(t,new XFAAttribute(this,t,r));if(a.hasOwnProperty(Hs)){const e=a[Hs].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[Mo]=!1:"dataValue"===e&&(this[Mo]=!0))}}this[rs]=!1}[oo](e){const t=this[qs];if("#text"===t){e.push(encodeToXmlString(this[is]));return}const a=utf8StringToString(t),r=this[Xs]===Ho?"xfa:":"";e.push(`<${r}${a}`);for(const[t,a]of this[vo].entries()){const r=utf8StringToString(t);e.push(` ${r}="${encodeToXmlString(a[is])}"`)}null!==this[Mo]&&(this[Mo]?e.push(' xfa:dataNode="dataValue"'):e.push(' xfa:dataNode="dataGroup"'));if(this[is]||0!==this[Io].length){e.push(">");if(this[is])"string"==typeof this[is]?e.push(encodeToXmlString(this[is])):this[is][oo](e);else for(const t of this[Io])t[oo](e);e.push(``)}else e.push("/>")}[Ws](e){if(this[is]){const e=new XmlObject(this[Xs],"#text");this[Yn](e);e[is]=this[is];this[is]=""}this[Yn](e);return!0}[$s](e){this[is]+=e}[cs](){if(this[is]&&this[Io].length>0){const e=new XmlObject(this[Xs],"#text");this[Yn](e);e[is]=this[is];delete this[is]}}[so](){return"#text"===this[qs]?HTMLResult.success({name:"#text",value:this[is]}):HTMLResult.EMPTY}[ws](e=null){return e?this[Io].filter((t=>t[qs]===e)):this[Io]}[us](){return this[vo]}[fs](e){const t=this[vo].get(e);return void 0!==t?t:this[ws](e)}*[ps](e,t){const a=this[vo].get(e);a&&(yield a);for(const a of this[Io]){a[qs]===e&&(yield a);t&&(yield*a[ps](e,t))}}*[hs](e,t){const a=this[vo].get(e);!a||t&&a[rs]||(yield a);for(const a of this[Io])yield*a[hs](e,t)}*[ys](e,t,a){for(const r of this[Io]){r[qs]!==e||a&&r[rs]||(yield r);t&&(yield*r[ys](e,t,a))}}[Bs](){return null===this[Mo]?0===this[Io].length||this[Io][0][Xs]===uo.xhtml.id:this[Mo]}[ms](){return null===this[Mo]?0===this[Io].length?this[is].trim():this[Io][0][Xs]===uo.xhtml.id?this[Io][0][io]().trim():null:this[is].trim()}[ao](e){e=e.value||"";this[is]=e.toString()}[ss](e=!1){const t=Object.create(null);e&&(t.$ns=this[Xs]);this[is]&&(t.$content=this[is]);t.$name=this[qs];t.children=[];for(const a of this[Io])t.children.push(a[ss](e));t.attributes=Object.create(null);for(const[e,a]of this[vo])t.attributes[e]=a[is];return t}}class ContentObject extends XFAObject{constructor(e,t){super(e,t);this[is]=""}[$s](e){this[is]+=e}[cs](){}}class OptionObject extends ContentObject{constructor(e,t,a){super(e,t);this[Lo]=a}[cs](){this[is]=getKeyword({data:this[is],defaultValue:this[Lo][0],validate:e=>this[Lo].includes(e)})}[Qn](e){super[Qn](e);delete this[Lo]}}class StringObject extends ContentObject{[cs](){this[is]=this[is].trim()}}class IntegerObject extends ContentObject{constructor(e,t,a,r){super(e,t);this[Do]=a;this[Xo]=r}[cs](){this[is]=getInteger({data:this[is],defaultValue:this[Do],validate:this[Xo]})}[Qn](e){super[Qn](e);delete this[Do];delete this[Xo]}}class Option01 extends IntegerObject{constructor(e,t){super(e,t,0,(e=>1===e))}}class Option10 extends IntegerObject{constructor(e,t){super(e,t,1,(e=>0===e))}}function measureToString(e){return"string"==typeof e?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}const Wo={anchorType(e,t){const a=e[As]();if(a&&(!a.layout||"position"===a.layout)){"transform"in t||(t.transform="");switch(e.anchorType){case"bottomCenter":t.transform+="translate(-50%, -100%)";break;case"bottomLeft":t.transform+="translate(0,-100%)";break;case"bottomRight":t.transform+="translate(-100%,-100%)";break;case"middleCenter":t.transform+="translate(-50%,-50%)";break;case"middleLeft":t.transform+="translate(0,-50%)";break;case"middleRight":t.transform+="translate(-100%,-50%)";break;case"topCenter":t.transform+="translate(-50%,0)";break;case"topRight":t.transform+="translate(-100%,0)"}}},dimensions(e,t){const a=e[As]();let r=e.w;const i=e.h;if(a.layout?.includes("row")){const t=a[os],i=e.colSpan;let n;if(-1===i){n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn));t.currentColumn=0}else{n=Math.sumPrecise(t.columnWidths.slice(t.currentColumn,t.currentColumn+i));t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length}isNaN(n)||(r=e.w=n)}t.width=""!==r?measureToString(r):"auto";t.height=""!==i?measureToString(i):"auto"},position(e,t){const a=e[As]();if(!a?.layout||"position"===a.layout){t.position="absolute";t.left=measureToString(e.x);t.top=measureToString(e.y)}},rotate(e,t){if(e.rotate){"transform"in t||(t.transform="");t.transform+=`rotate(-${e.rotate}deg)`;t.transformOrigin="top left"}},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[qs])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[co]().margin)}};function setMinMaxDimensions(e,t){if("position"===e[As]().layout){e.minW>0&&(t.minWidth=measureToString(e.minW));e.maxW>0&&(t.maxWidth=measureToString(e.maxW));e.minH>0&&(t.minHeight=measureToString(e.minH));e.maxH>0&&(t.maxHeight=measureToString(e.maxH))}}function layoutText(e,t,a,r,i,n){const s=new TextMeasure(t,a,r,i);"string"==typeof e?s.addString(e):e[Gs](s);return s.compute(n)}function layoutNode(e,t){let a=null,r=null,i=!1;if((!e.w||!e.h)&&e.value){let n=0,s=0;if(e.margin){n=e.margin.leftInset+e.margin.rightInset;s=e.margin.topInset+e.margin.bottomInset}let o=null,c=null;if(e.para){c=Object.create(null);o=""===e.para.lineHeight?null:e.para.lineHeight;c.top=""===e.para.spaceAbove?0:e.para.spaceAbove;c.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow;c.left=""===e.para.marginLeft?0:e.para.marginLeft;c.right=""===e.para.marginRight?0:e.para.marginRight}let l=e.font;if(!l){const t=e[Cs]();let a=e[ks]();for(;a&&a!==t;){if(a.font){l=a.font;break}a=a[ks]()}}const h=(e.w||t.width)-n,u=e[vs].fontFinder;if(e.value.exData&&e.value.exData[is]&&"text/html"===e.value.exData.contentType){const t=layoutText(e.value.exData[is],l,c,o,u,h);r=t.width;a=t.height;i=t.isBroken}else{const t=e.value[io]();if(t){const e=layoutText(t,l,c,o,u,h);r=e.width;a=e.height;i=e.isBroken}}null===r||e.w||(r+=n);null===a||e.h||(a+=s)}return{w:r,h:a,isBroken:i}}function computeBbox(e,t,a){let r;if(""!==e.w&&""!==e.h)r=[e.x,e.y,e.w,e.h];else{if(!a)return null;let i=e.w;if(""===i){if(0===e.maxW){const t=e[As]();i="position"===t.layout&&""!==t.w?0:e.minW}else i=Math.min(e.maxW,a.width);t.attributes.style.width=measureToString(i)}let n=e.h;if(""===n){if(0===e.maxH){const t=e[As]();n="position"===t.layout&&""!==t.h?0:e.minH}else n=Math.min(e.maxH,a.height);t.attributes.style.height=measureToString(n)}r=[e.x,e.y,i,n]}return r}function fixDimensions(e){const t=e[As]();if(t.layout?.includes("row")){const a=t[os],r=e.colSpan;let i;i=-1===r?Math.sumPrecise(a.columnWidths.slice(a.currentColumn)):Math.sumPrecise(a.columnWidths.slice(a.currentColumn,a.currentColumn+r));isNaN(i)||(e.w=i)}t.layout&&"position"!==t.layout&&(e.x=e.y=0);"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=Math.sumPrecise(e.columnWidths))}function layoutClass(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}}function toStyle(e,...t){const a=Object.create(null);for(const r of t){const t=e[r];if(null!==t)if(Wo.hasOwnProperty(r))Wo[r](e,a);else if(t instanceof XFAObject){const e=t[co]();e?Object.assign(a,e):warn(`(DEBUG) - XFA - style for ${r} not implemented yet`)}}return a}function createWrapper(e,t){const{attributes:a}=t,{style:r}=a,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};a.class.push("xfaWrapped");if(e.border){const{widths:a,insets:n}=e.border[os];let s,o,c=n[0],l=n[3];const h=n[0]+n[2],u=n[1]+n[3];switch(e.border.hand){case"even":c-=a[0]/2;l-=a[3]/2;s=`calc(100% + ${(a[1]+a[3])/2-u}px)`;o=`calc(100% + ${(a[0]+a[2])/2-h}px)`;break;case"left":c-=a[0];l-=a[3];s=`calc(100% + ${a[1]+a[3]-u}px)`;o=`calc(100% + ${a[0]+a[2]-h}px)`;break;case"right":s=u?`calc(100% - ${u}px)`:"100%";o=h?`calc(100% - ${h}px)`:"100%"}const d=["xfaBorder"];isPrintOnly(e.border)&&d.push("xfaPrintOnly");const f={name:"div",attributes:{class:d,style:{top:`${c}px`,left:`${l}px`,width:s,height:o}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])if(void 0!==r[e]){f.attributes.style[e]=r[e];delete r[e]}i.children.push(f,t)}else i.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])if(void 0!==r[e]){i.attributes.style[e]=r[e];delete r[e]}i.attributes.style.position="absolute"===r.position?"absolute":"relative";delete r.position;if(r.alignSelf){i.attributes.style.alignSelf=r.alignSelf;delete r.alignSelf}return i}function fixTextIndent(e){const t=getMeasurement(e.textIndent,"0px");if(t>=0)return;const a="padding"+("left"===("right"===e.textAlign?"right":"left")?"Left":"Right"),r=getMeasurement(e[a],"0px");e[a]=r-t+"px"}function setAccess(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}}function isPrintOnly(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function getCurrentPara(e){const t=e[Cs]()[os].paraStack;return t.length?t.at(-1):null}function setPara(e,t,a){if(a.attributes.class?.includes("xfaRich")){if(t){""===e.h&&(t.height="auto");""===e.w&&(t.width="auto")}const r=getCurrentPara(e);if(r){const e=a.attributes.style;e.display="flex";e.flexDirection="column";switch(r.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=r[co]();for(const[a,r]of Object.entries(t))a in e||(e[a]=r)}}}function setFontFamily(e,t,a,r){if(!a){delete r.fontFamily;return}const i=stripQuotes(e.typeface);r.fontFamily=`"${i}"`;const n=a.find(i);if(n){const{fontFamily:a}=n.regular.cssFontInfo;a!==i&&(r.fontFamily=`"${a}"`);const s=getCurrentPara(t);if(s&&""!==s.lineHeight)return;if(r.lineHeight)return;const o=selectFont(e,n);o&&(r.lineHeight=Math.max(1.2,o.lineHeight))}}function fixURL(e){const t=createValidAbsoluteUrl(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null}function createLine(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}function flushHTML(e){if(!e[os])return null;const t={name:"div",attributes:e[os].attributes,children:e[os].children};if(e[os].failingNode){const a=e[os].failingNode[ls]();a&&(e.layout.endsWith("-tb")?t.children.push(createLine(e,[a])):t.children.push(a))}return 0===t.children.length?null:t}function addHTML(e,t,a){const r=e[os],i=r.availableSpace,[n,s,o,c]=a;switch(e.layout){case"position":r.width=Math.max(r.width,n+o);r.height=Math.max(r.height,s+c);r.children.push(t);break;case"lr-tb":case"rl-tb":if(!r.line||1===r.attempt){r.line=createLine(e,[]);r.children.push(r.line);r.numberInLine=0}r.numberInLine+=1;r.line.children.push(t);if(0===r.attempt){r.currentWidth+=o;r.height=Math.max(r.height,r.prevHeight+c)}else{r.currentWidth=o;r.prevHeight=r.height;r.height+=c;r.attempt=0}r.width=Math.max(r.width,r.currentWidth);break;case"rl-row":case"row":{r.children.push(t);r.width+=o;r.height=Math.max(r.height,c);const e=measureToString(r.height);for(const t of r.children)t.attributes.style.height=e;break}case"table":case"tb":r.width=MathClamp(o,r.width,i.width);r.height+=c;r.children.push(t)}}function getAvailableSpace(e){const t=e[os].availableSpace,a=e.margin?e.margin.topInset+e.margin.bottomInset:0,r=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[os].attempt?{width:t.width-r-e[os].currentWidth,height:t.height-a-e[os].prevHeight}:{width:t.width-r,height:t.height-a-e[os].height};case"rl-row":case"row":return{width:Math.sumPrecise(e[os].columnWidths.slice(e[os].currentColumn)),height:t.height-r};case"table":case"tb":return{width:t.width-r,height:t.height-a-e[os].height};default:return t}}function checkDimensions(e,t){if(null===e[Cs]()[os].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const a=e[As](),r=a[os]?.attempt||0,[,i,n,s]=function getTransformedBBox(e){let t,a,r=""===e.w?NaN:e.w,i=""===e.h?NaN:e.h,[n,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[n,s]=[r/2,i];break;case"bottomLeft":[n,s]=[0,i];break;case"bottomRight":[n,s]=[r,i];break;case"middleCenter":[n,s]=[r/2,i/2];break;case"middleLeft":[n,s]=[0,i/2];break;case"middleRight":[n,s]=[r,i/2];break;case"topCenter":[n,s]=[r/2,0];break;case"topRight":[n,s]=[r,0]}switch(e.rotate||0){case 0:[t,a]=[-n,-s];break;case 90:[t,a]=[-s,n];[r,i]=[i,-r];break;case 180:[t,a]=[n,s];[r,i]=[-r,-i];break;case 270:[t,a]=[s,-n];[r,i]=[-i,r]}return[e.x+t+Math.min(0,r),e.y+a+Math.min(0,i),Math.abs(r),Math.abs(i)]}(e);switch(a.layout){case"lr-tb":case"rl-tb":return 0===r?e[Cs]()[os].noLayoutFailure?""!==e.w?Math.round(n-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(s-t.height)>2)&&(""!==e.w?Math.round(n-t.width)<=2||0===a[os].numberInLine&&t.height>2:t.width>2):!!e[Cs]()[os].noLayoutFailure||!(""!==e.h&&Math.round(s-t.height)>2)&&((""===e.w||Math.round(n-t.width)<=2||!a[Ls]())&&t.height>2);case"table":case"tb":return!!e[Cs]()[os].noLayoutFailure||(""===e.h||e[Es]()?(""===e.w||Math.round(n-t.width)<=2||!a[Ls]())&&t.height>2:Math.round(s-t.height)<=2);case"position":if(e[Cs]()[os].noLayoutFailure)return!0;if(""===e.h||Math.round(s+i-t.height)<=2)return!0;return s+i>e[Cs]()[os].currentContentArea.h;case"rl-row":case"row":return!!e[Cs]()[os].noLayoutFailure||(""===e.h||Math.round(s-t.height)<=2);default:return!0}}const zo=uo.template.id,$o="http://www.w3.org/2000/svg",Go=/^H(\d+)$/,Vo=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),Ko=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function getBorderDims(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[bs]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function hasMargin(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function _setValue(e,t){if(!e.value){const t=new Value({});e[Yn](t);e.value=t}e.value[ao](t)}function*getContainedChildren(e){for(const t of e[ws]())t instanceof SubformSet?yield*t[Ss]():yield t}function isRequired(e){return"error"===e.validate?.nullTest}function setTabIndex(e){for(;e;){if(!e.traversal){e[ro]=e[ks]()[ro];return}if(e[ro])return;let t=null;for(const a of e.traversal[ws]())if("next"===a.operation){t=a;break}if(!t||!t.ref){e[ro]=e[ks]()[ro];return}const a=e[Cs]();e[ro]=++a[ro];const r=a[Qs](t.ref,e);if(!r)return;e=r[0]}}function applyAssist(e,t){const a=e.assist;if(a){const e=a[so]();e&&(t.title=e);const r=a.role.match(Go);if(r){const e="heading",a=r[1];t.role=e;t["aria-level"]=a}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{const a=e[ks]();"row"===a.layout&&(t.role="TH"===a.assist?.role?"columnheader":"cell")}}function ariaLabel(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[is]?t.speak[is]:t.toolTip?t.toolTip[is]:null}function valueToHtml(e){return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function setFirstUnsplittable(e){const t=e[Cs]();if(null===t[os].firstUnsplittable){t[os].firstUnsplittable=e;t[os].noLayoutFailure=!0}}function unsetFirstUnsplittable(e){const t=e[Cs]();t[os].firstUnsplittable===e&&(t[os].noLayoutFailure=!1)}function handleBreak(e){if(e[os])return!1;e[os]=Object.create(null);if("auto"===e.targetType)return!1;const t=e[Cs]();let a=null;if(e.target){a=t[Qs](e.target,e[ks]());if(!a)return!1;a=a[0]}const{currentPageArea:r,currentContentArea:i}=t[os];if("pageArea"===e.targetType){a instanceof PageArea||(a=null);if(e.startNew){e[os].target=a||r;return!0}if(a&&a!==r){e[os].target=a;return!0}return!1}a instanceof ContentArea||(a=null);const n=a&&a[ks]();let s,o=n;if(e.startNew)if(a){const e=n.contentArea.children,t=e.indexOf(i),r=e.indexOf(a);-1!==t&&te;r[os].noLayoutFailure=!0;const s=t[so](a);e[Jn](s.html,s.bbox);r[os].noLayoutFailure=i;t[As]=n}class AppearanceFilter extends StringObject{constructor(e){super(zo,"appearanceFilter");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Arc extends XFAObject{constructor(e){super(zo,"arc",!0);this.circular=getInteger({data:e.circular,defaultValue:0,validate:e=>1===e});this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.startAngle=getFloat({data:e.startAngle,defaultValue:0,validate:e=>!0});this.sweepAngle=getFloat({data:e.sweepAngle,defaultValue:360,validate:e=>!0});this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null;this.fill=null}[so](){const e=this.edge||new Edge({}),t=e[co](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[co]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;let r;const i={xmlns:$o,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)r={name:"ellipse",attributes:{xmlns:$o,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:a}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,n=this.sweepAngle>180?1:0,[s,o,c,l]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];r={name:"path",attributes:{xmlns:$o,d:`M ${s} ${o} A 50 50 0 ${n} 0 ${c} ${l}`,vectorEffect:"non-scaling-stroke",style:a}};Object.assign(i,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const n={name:"svg",children:[r],attributes:i};if(hasMargin(this[ks]()[ks]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]});n.attributes.style.position="absolute";return HTMLResult.success(n)}}class Area extends XFAObject{constructor(e){super(zo,"area",!0);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null;this.area=new XFAObjectArray;this.draw=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[Ss](){yield*getContainedChildren(this)}[js](){return!0}[Ds](){return!0}[Jn](e,t){const[a,r,i,n]=t;this[os].width=Math.max(this[os].width,a+i);this[os].height=Math.max(this[os].height,r+n);this[os].children.push(e)}[ds](){return this[os].availableSpace}[so](e){const t=toStyle(this,"position"),a={style:t,id:this[lo],class:["xfaArea"]};isPrintOnly(this)&&a.class.push("xfaPrintOnly");this.name&&(a.xfaName=this.name);const r=[];this[os]={children:r,width:0,height:0,availableSpace:e};const i=this[Zn]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success){if(i.isBreak())return i;delete this[os];return HTMLResult.FAILURE}t.width=measureToString(this[os].width);t.height=measureToString(this[os].height);const n={name:"div",attributes:a,children:r},s=[this.x,this.y,this[os].width,this[os].height];delete this[os];return HTMLResult.success(n,s)}}class Assist extends XFAObject{constructor(e){super(zo,"assist",!0);this.id=e.id||"";this.role=e.role||"";this.use=e.use||"";this.usehref=e.usehref||"";this.speak=null;this.toolTip=null}[so](){return this.toolTip?.[is]||null}}class Barcode extends XFAObject{constructor(e){super(zo,"barcode",!0);this.charEncoding=getKeyword({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.checksum=getStringOption(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]);this.dataColumnCount=getInteger({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0});this.dataLength=getInteger({data:e.dataLength,defaultValue:-1,validate:e=>e>=0});this.dataPrep=getStringOption(e.dataPrep,["none","flateCompress"]);this.dataRowCount=getInteger({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0});this.endChar=e.endChar||"";this.errorCorrectionLevel=getInteger({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8});this.id=e.id||"";this.moduleHeight=getMeasurement(e.moduleHeight,"5mm");this.moduleWidth=getMeasurement(e.moduleWidth,"0.25mm");this.printCheckDigit=getInteger({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e});this.rowColumnRatio=getRatio(e.rowColumnRatio);this.startChar=e.startChar||"";this.textLocation=getStringOption(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]);this.truncate=getInteger({data:e.truncate,defaultValue:0,validate:e=>1===e});this.type=getStringOption(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]);this.upsMode=getStringOption(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]);this.use=e.use||"";this.usehref=e.usehref||"";this.wideNarrowRatio=getRatio(e.wideNarrowRatio);this.encrypt=null;this.extras=null}}class Bind extends XFAObject{constructor(e){super(zo,"bind",!0);this.match=getStringOption(e.match,["once","dataRef","global","none"]);this.ref=e.ref||"";this.picture=null}}class BindItems extends XFAObject{constructor(e){super(zo,"bindItems");this.connection=e.connection||"";this.labelRef=e.labelRef||"";this.ref=e.ref||"";this.valueRef=e.valueRef||""}}class Bookend extends XFAObject{constructor(e){super(zo,"bookend");this.id=e.id||"";this.leader=e.leader||"";this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||""}}class BooleanElement extends Option01{constructor(e){super(zo,"boolean");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[so](e){return valueToHtml(1===this[is]?"1":"0")}}class Border extends XFAObject{constructor(e){super(zo,"border",!0);this.break=getStringOption(e.break,["close","open"]);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.extras=null;this.fill=null;this.margin=null}[bs](){if(!this[os]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new Edge({});for(let a=e.length;a<4;a++)e.push(t)}const t=e.map((e=>e.thickness)),a=[0,0,0,0];if(this.margin){a[0]=this.margin.topInset;a[1]=this.margin.rightInset;a[2]=this.margin.bottomInset;a[3]=this.margin.leftInset}this[os]={widths:t,insets:a,edges:e}}return this[os]}[co](){const{edges:e}=this[bs](),t=e.map((e=>{const t=e[co]();t.color||="#000000";return t})),a=Object.create(null);this.margin&&Object.assign(a,this.margin[co]());"visible"===this.fill?.presence&&Object.assign(a,this.fill[co]());if(this.corner.children.some((e=>0!==e.radius))){const e=this.corner.children.map((e=>e[co]()));if(2===e.length||3===e.length){const t=e.at(-1);for(let a=e.length;a<4;a++)e.push(t)}a.borderRadius=e.map((e=>e.radius)).join(" ")}switch(this.presence){case"invisible":case"hidden":a.borderStyle="";break;case"inactive":a.borderStyle="none";break;default:a.borderStyle=t.map((e=>e.style)).join(" ")}a.borderWidth=t.map((e=>e.width)).join(" ");a.borderColor=t.map((e=>e.color)).join(" ");return a}}class Break extends XFAObject{constructor(e){super(zo,"break",!0);this.after=getStringOption(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.afterTarget=e.afterTarget||"";this.before=getStringOption(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]);this.beforeTarget=e.beforeTarget||"";this.bookendLeader=e.bookendLeader||"";this.bookendTrailer=e.bookendTrailer||"";this.id=e.id||"";this.overflowLeader=e.overflowLeader||"";this.overflowTarget=e.overflowTarget||"";this.overflowTrailer=e.overflowTrailer||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class BreakAfter extends XFAObject{constructor(e){super(zo,"breakAfter",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}}class BreakBefore extends XFAObject{constructor(e){super(zo,"breakBefore",!0);this.id=e.id||"";this.leader=e.leader||"";this.startNew=getInteger({data:e.startNew,defaultValue:0,validate:e=>1===e});this.target=e.target||"";this.targetType=getStringOption(e.targetType,["auto","contentArea","pageArea"]);this.trailer=e.trailer||"";this.use=e.use||"";this.usehref=e.usehref||"";this.script=null}[so](e){this[os]={};return HTMLResult.FAILURE}}class Button extends XFAObject{constructor(e){super(zo,"button",!0);this.highlight=getStringOption(e.highlight,["inverted","none","outline","push"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[so](e){const t=this[ks]()[ks](),a={name:"button",attributes:{id:this[lo],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=recoverJsURL(e.script[is]);if(!t)continue;const r=fixURL(t.url);r&&a.children.push({name:"a",attributes:{id:"link"+this[lo],href:r,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return HTMLResult.success(a)}}class Calculate extends XFAObject{constructor(e){super(zo,"calculate",!0);this.id=e.id||"";this.override=getStringOption(e.override,["disabled","error","ignore","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.script=null}}class Caption extends XFAObject{constructor(e){super(zo,"caption",!0);this.id=e.id||"";this.placement=getStringOption(e.placement,["left","bottom","inline","right","top"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.reserve=Math.ceil(getMeasurement(e.reserve));this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.font=null;this.margin=null;this.para=null;this.value=null}[ao](e){_setValue(this,e)}[bs](e){if(!this[os]){let{width:t,height:a}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":a=this.reserve<=0?a:this.reserve}this[os]=layoutNode(this,{width:t,height:a})}return this[os]}[so](e){if(!this.value)return HTMLResult.EMPTY;this[Ks]();const t=this.value[so](e).html;if(!t){this[Vs]();return HTMLResult.EMPTY}const a=this.reserve;if(this.reserve<=0){const{w:t,h:a}=this[bs](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=a}}const r=[];"string"==typeof t?r.push({name:"#text",value:t}):r.push(t);const i=toStyle(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(i.width=measureToString(this.reserve));break;case"top":case"bottom":this.reserve>0&&(i.height=measureToString(this.reserve))}setPara(this,null,t);this[Vs]();this.reserve=a;return HTMLResult.success({name:"div",attributes:{style:i,class:["xfaCaption"]},children:r})}}class Certificate extends StringObject{constructor(e){super(zo,"certificate");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Certificates extends XFAObject{constructor(e){super(zo,"certificates",!0);this.credentialServerPolicy=getStringOption(e.credentialServerPolicy,["optional","required"]);this.id=e.id||"";this.url=e.url||"";this.urlPolicy=e.urlPolicy||"";this.use=e.use||"";this.usehref=e.usehref||"";this.encryption=null;this.issuers=null;this.keyUsage=null;this.oids=null;this.signing=null;this.subjectDNs=null}}class CheckButton extends XFAObject{constructor(e){super(zo,"checkButton",!0);this.id=e.id||"";this.mark=getStringOption(e.mark,["default","check","circle","cross","diamond","square","star"]);this.shape=getStringOption(e.shape,["square","round"]);this.size=getMeasurement(e.size,"10pt");this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[so](e){const t=toStyle(this,"margin"),a=measureToString(this.size);t.width=t.height=a;let r,i,n;const s=this[ks]()[ks](),o=s.items.children.length&&s.items.children[0][so]().html||[],c={on:(void 0!==o[0]?o[0]:"on").toString(),off:(void 0!==o[1]?o[1]:"off").toString()},l=(s.value?.[io]()||"off")===c.on||void 0,h=s[As](),u=s[lo];let d;if(h instanceof ExclGroup){n=h[lo];r="radio";i="xfaRadio";d=h[ns]?.[lo]||h[lo]}else{r="checkbox";i="xfaCheckbox";d=s[ns]?.[lo]||s[lo]}const f={name:"input",attributes:{class:[i],style:t,fieldId:u,dataId:d,type:r,checked:l,xfaOn:c.on,xfaOff:c.off,"aria-label":ariaLabel(s),"aria-required":!1}};n&&(f.attributes.name=n);if(isRequired(s)){f.attributes["aria-required"]=!0;f.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[f]})}}class ChoiceList extends XFAObject{constructor(e){super(zo,"choiceList",!0);this.commitOn=getStringOption(e.commitOn,["select","exit"]);this.id=e.id||"";this.open=getStringOption(e.open,["userControl","always","multiSelect","onEntry"]);this.textEntry=getInteger({data:e.textEntry,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[so](e){const t=toStyle(this,"border","margin"),a=this[ks]()[ks](),r={fontSize:`calc(${a.font?.size||10}px * var(--total-scale-factor))`},i=[];if(a.items.children.length>0){const e=a.items;let t=0,n=0;if(2===e.children.length){t=e.children[0].save;n=1-t}const s=e.children[t][so]().html,o=e.children[n][so]().html;let c=!1;const l=a.value?.[io]()||"";for(let e=0,t=s.length;eMathClamp(parseInt(e.trim(),10),0,255))).map((e=>isNaN(e)?0:e));if(n.length<3)return{r:a,g:r,b:i};[a,r,i]=n;return{r:a,g:r,b:i}}(e.value):"";this.extras=null}[Fs](){return!1}[co](){return this.value?Util.makeHexColor(this.value.r,this.value.g,this.value.b):null}}class Comb extends XFAObject{constructor(e){super(zo,"comb");this.id=e.id||"";this.numberOfCells=getInteger({data:e.numberOfCells,defaultValue:0,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||""}}class Connect extends XFAObject{constructor(e){super(zo,"connect",!0);this.connection=e.connection||"";this.id=e.id||"";this.ref=e.ref||"";this.usage=getStringOption(e.usage,["exportAndImport","exportOnly","importOnly"]);this.use=e.use||"";this.usehref=e.usehref||"";this.picture=null}}class ContentArea extends XFAObject{constructor(e){super(zo,"contentArea",!0);this.h=getMeasurement(e.h);this.id=e.id||"";this.name=e.name||"";this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=getMeasurement(e.w);this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.desc=null;this.extras=null}[so](e){const t={left:measureToString(this.x),top:measureToString(this.y),width:measureToString(this.w),height:measureToString(this.h)},a=["xfaContentarea"];isPrintOnly(this)&&a.push("xfaPrintOnly");return HTMLResult.success({name:"div",children:[],attributes:{style:t,class:a,id:this[lo]}})}}class Corner extends XFAObject{constructor(e){super(zo,"corner",!0);this.id=e.id||"";this.inverted=getInteger({data:e.inverted,defaultValue:0,validate:e=>1===e});this.join=getStringOption(e.join,["square","round"]);this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.radius=getMeasurement(e.radius);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[co](){const e=toStyle(this,"visibility");e.radius=measureToString("square"===this.join?0:this.radius);return e}}class DateElement extends ContentObject{constructor(e){super(zo,"date");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){const e=this[is].trim();this[is]=e?new Date(e):null}[so](e){return valueToHtml(this[is]?this[is].toString():"")}}class DateTime extends ContentObject{constructor(e){super(zo,"dateTime");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){const e=this[is].trim();this[is]=e?new Date(e):null}[so](e){return valueToHtml(this[is]?this[is].toString():"")}}class DateTimeEdit extends XFAObject{constructor(e){super(zo,"dateTimeEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.picker=getStringOption(e.picker,["host","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[so](e){const t=toStyle(this,"border","font","margin"),a=this[ks]()[ks](),r={name:"input",attributes:{type:"text",fieldId:a[lo],dataId:a[ns]?.[lo]||a[lo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Decimal extends ContentObject{constructor(e){super(zo,"decimal");this.fracDigits=getInteger({data:e.fracDigits,defaultValue:2,validate:e=>!0});this.id=e.id||"";this.leadDigits=getInteger({data:e.leadDigits,defaultValue:-1,validate:e=>!0});this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){const e=parseFloat(this[is].trim());this[is]=isNaN(e)?null:e}[so](e){return valueToHtml(null!==this[is]?this[is].toString():"")}}class DefaultUi extends XFAObject{constructor(e){super(zo,"defaultUi",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class Desc extends XFAObject{constructor(e){super(zo,"desc",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class DigestMethod extends OptionObject{constructor(e){super(zo,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class DigestMethods extends XFAObject{constructor(e){super(zo,"digestMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.digestMethod=new XFAObjectArray}}class Draw extends XFAObject{constructor(e){super(zo,"draw",!0);this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.border=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.value=null;this.setProperty=new XFAObjectArray}[ao](e){_setValue(this,e)}[so](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;fixDimensions(this);this[Ks]();const t=this.w,a=this.h,{w:r,h:i,isBroken:n}=layoutNode(this,e);if(r&&""===this.w){if(n&&this[As]()[Ls]()){this[Vs]();return HTMLResult.FAILURE}this.w=r}i&&""===this.h&&(this.h=i);setFirstUnsplittable(this);if(!checkDimensions(this,e)){this.w=t;this.h=a;this[Vs]();return HTMLResult.FAILURE}unsetFirstUnsplittable(this);const s=toStyle(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");setMinMaxDimensions(this,s);if(s.margin){s.padding=s.margin;delete s.margin}const o=["xfaDraw"];this.font&&o.push("xfaFont");isPrintOnly(this)&&o.push("xfaPrintOnly");const c={style:s,id:this[lo],class:o};this.name&&(c.xfaName=this.name);const l={name:"div",attributes:c,children:[]};applyAssist(this,c);const h=computeBbox(this,l,e),u=this.value?this.value[so](e).html:null;if(null===u){this.w=t;this.h=a;this[Vs]();return HTMLResult.success(createWrapper(this,l),h)}l.children.push(u);setPara(this,s,u);this.w=t;this.h=a;this[Vs]();return HTMLResult.success(createWrapper(this,l),h)}}class Edge extends XFAObject{constructor(e){super(zo,"edge",!0);this.cap=getStringOption(e.cap,["square","butt","round"]);this.id=e.id||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.stroke=getStringOption(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]);this.thickness=getMeasurement(e.thickness,"0.5pt");this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[co](){const e=toStyle(this,"visibility");Object.assign(e,{linecap:this.cap,width:measureToString(this.thickness),color:this.color?this.color[co]():"#000000",style:""});if("visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class Encoding extends OptionObject{constructor(e){super(zo,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Encodings extends XFAObject{constructor(e){super(zo,"encodings",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encoding=new XFAObjectArray}}class Encrypt extends XFAObject{constructor(e){super(zo,"encrypt",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=null}}class EncryptData extends XFAObject{constructor(e){super(zo,"encryptData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["encrypt","decrypt"]);this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Encryption extends XFAObject{constructor(e){super(zo,"encryption",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class EncryptionMethod extends OptionObject{constructor(e){super(zo,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EncryptionMethods extends XFAObject{constructor(e){super(zo,"encryptionMethods",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.encryptionMethod=new XFAObjectArray}}class Event extends XFAObject{constructor(e){super(zo,"event",!0);this.activity=getStringOption(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]);this.id=e.id||"";this.listen=getStringOption(e.listen,["refOnly","refAndDescendents"]);this.name=e.name||"";this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.encryptData=null;this.execute=null;this.script=null;this.signData=null;this.submit=null}}class ExData extends ContentObject{constructor(e){super(zo,"exData");this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.maxLength=getInteger({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1});this.name=e.name||"";this.rid=e.rid||"";this.transferEncoding=getStringOption(e.transferEncoding,["none","base64","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[Ms](){return"text/html"===this.contentType}[Ws](e){if("text/html"===this.contentType&&e[Xs]===uo.xhtml.id){this[is]=e;return!0}if("text/xml"===this.contentType){this[is]=e;return!0}return!1}[so](e){return"text/html"===this.contentType&&this[is]?this[is][so](e):HTMLResult.EMPTY}}class ExObject extends XFAObject{constructor(e){super(zo,"exObject",!0);this.archive=e.archive||"";this.classId=e.classId||"";this.codeBase=e.codeBase||"";this.codeType=e.codeType||"";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}}class ExclGroup extends XFAObject{constructor(e){super(zo,"exclGroup",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.accessKey=e.accessKey||"";this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.margin=null;this.para=null;this.traversal=null;this.validate=null;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.field=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Ds](){return!0}[Fs](){return!0}[ao](e){for(const t of this.field.children){if(!t.value){const e=new Value({});t[Yn](e);t.value=e}t.value[ao](e)}}[Ls](){return this.layout.endsWith("-tb")&&0===this[os].attempt&&this[os].numberInLine>0||this[ks]()[Ls]()}[Es](){const e=this[As]();if(!e[Es]())return!1;if(void 0!==this[os]._isSplittable)return this[os]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[os]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[os].numberInLine)return!1;this[os]._isSplittable=!0;return!0}[ls](){return flushHTML(this)}[Jn](e,t){addHTML(this,e,t)}[ds](){return getAvailableSpace(this)}[so](e){setTabIndex(this);if("hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[lo],class:[]};setAccess(this,a.class);this[os]||=Object.create(null);Object.assign(this[os],{children:t,attributes:a,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[Es]();r||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const i=new Set(["field"]);if(this.layout.includes("row")){const e=this[As]().columnWidths;if(Array.isArray(e)&&e.length>0){this[os].columnWidths=e;this[os].currentColumn=0}}const n=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),s=["xfaExclgroup"],o=layoutClass(this);o&&s.push(o);isPrintOnly(this)&&s.push("xfaPrintOnly");a.style=n;a.class=s;this.name&&(a.xfaName=this.name);this[Ks]();const c="lr-tb"===this.layout||"rl-tb"===this.layout,l=c?2:1;for(;this[os].attempte>=1||-1===e});this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.rotate=getInteger({data:e.rotate,defaultValue:0,validate:e=>e%90==0});this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.border=null;this.calculate=null;this.caption=null;this.desc=null;this.extras=null;this.font=null;this.format=null;this.items=new XFAObjectArray(2);this.keep=null;this.margin=null;this.para=null;this.traversal=null;this.ui=null;this.validate=null;this.value=null;this.bindItems=new XFAObjectArray;this.connect=new XFAObjectArray;this.event=new XFAObjectArray;this.setProperty=new XFAObjectArray}[Ds](){return!0}[ao](e){_setValue(this,e)}[so](e){setTabIndex(this);if(!this.ui){this.ui=new Ui({});this.ui[vs]=this[vs];this[Yn](this.ui);let e;switch(this.items.children.length){case 0:e=new TextEdit({});this.ui.textEdit=e;break;case 1:e=new CheckButton({});this.ui.checkButton=e;break;case 2:e=new ChoiceList({});this.ui.choiceList=e}this.ui[Yn](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return HTMLResult.EMPTY;this.caption&&delete this.caption[os];this[Ks]();const t=this.caption?this.caption[so](e).html:null,a=this.w,r=this.h;let i=0,n=0;if(this.margin){i=this.margin.leftInset+this.margin.rightInset;n=this.margin.topInset+this.margin.bottomInset}let s=null;if(""===this.w||""===this.h){let t=null,a=null,r=0,o=0;if(this.ui.checkButton)r=o=this.ui.checkButton.size;else{const{w:t,h:a}=layoutNode(this,e);if(null!==t){r=t;o=a}else o=function fonts_getMetrics(e,t=!1){let a=null;if(e){const t=stripQuotes(e.typeface),r=e[vs].fontFinder.find(t);a=selectFont(e,r)}if(!a)return{lineHeight:12,lineGap:2,lineNoGap:10};const r=e.size||10,i=a.lineHeight?Math.max(t?0:1.2,a.lineHeight):1.2,n=void 0===a.lineGap?.2:a.lineGap;return{lineHeight:i*r,lineGap:n*r,lineNoGap:Math.max(1,i-n)*r}}(this.font,!0).lineNoGap}s=getBorderDims(this.ui[bs]());r+=s.w;o+=s.h;if(this.caption){const{w:i,h:n,isBroken:s}=this.caption[bs](e);if(s&&this[As]()[Ls]()){this[Vs]();return HTMLResult.FAILURE}t=i;a=n;switch(this.caption.placement){case"left":case"right":case"inline":t+=r;break;case"top":case"bottom":a+=o}}else{t=r;a=o}if(t&&""===this.w){t+=i;this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1e>=1&&e<=5});this.appearanceFilter=null;this.certificates=null;this.digestMethods=null;this.encodings=null;this.encryptionMethods=null;this.handler=null;this.lockDocument=null;this.mdp=null;this.reasons=null;this.timeStamp=null}}class Float extends ContentObject{constructor(e){super(zo,"float");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){const e=parseFloat(this[is].trim());this[is]=isNaN(e)?null:e}[so](e){return valueToHtml(null!==this[is]?this[is].toString():"")}}class template_Font extends XFAObject{constructor(e){super(zo,"font",!0);this.baselineShift=getMeasurement(e.baselineShift);this.fontHorizontalScale=getFloat({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0});this.fontVerticalScale=getFloat({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0});this.id=e.id||"";this.kerningMode=getStringOption(e.kerningMode,["none","pair"]);this.letterSpacing=getMeasurement(e.letterSpacing,"0");this.lineThrough=getInteger({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e});this.lineThroughPeriod=getStringOption(e.lineThroughPeriod,["all","word"]);this.overline=getInteger({data:e.overline,defaultValue:0,validate:e=>1===e||2===e});this.overlinePeriod=getStringOption(e.overlinePeriod,["all","word"]);this.posture=getStringOption(e.posture,["normal","italic"]);this.size=getMeasurement(e.size,"10pt");this.typeface=e.typeface||"Courier";this.underline=getInteger({data:e.underline,defaultValue:0,validate:e=>1===e||2===e});this.underlinePeriod=getStringOption(e.underlinePeriod,["all","word"]);this.use=e.use||"";this.usehref=e.usehref||"";this.weight=getStringOption(e.weight,["normal","bold"]);this.extras=null;this.fill=null}[Qn](e){super[Qn](e);this[vs].usedTypefaces.add(this.typeface)}[co](){const e=toStyle(this,"fill"),t=e.color;if(t)if("#000000"===t)delete e.color;else if(!t.startsWith("#")){e.background=t;e.backgroundClip="text";e.color="transparent"}this.baselineShift&&(e.verticalAlign=measureToString(this.baselineShift));e.fontKerning="none"===this.kerningMode?"none":"normal";e.letterSpacing=measureToString(this.letterSpacing);if(0!==this.lineThrough){e.textDecoration="line-through";2===this.lineThrough&&(e.textDecorationStyle="double")}if(0!==this.overline){e.textDecoration="overline";2===this.overline&&(e.textDecorationStyle="double")}e.fontStyle=this.posture;e.fontSize=measureToString(.99*this.size);setFontFamily(this,this,this[vs].fontFinder,e);if(0!==this.underline){e.textDecoration="underline";2===this.underline&&(e.textDecorationStyle="double")}e.fontWeight=this.weight;return e}}class Format extends XFAObject{constructor(e){super(zo,"format",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null}}class Handler extends StringObject{constructor(e){super(zo,"handler");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Hyphenation extends XFAObject{constructor(e){super(zo,"hyphenation");this.excludeAllCaps=getInteger({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e});this.excludeInitialCap=getInteger({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e});this.hyphenate=getInteger({data:e.hyphenate,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.pushCharacterCount=getInteger({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0});this.remainCharacterCount=getInteger({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0});this.use=e.use||"";this.usehref=e.usehref||"";this.wordCharacterCount=getInteger({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Image extends StringObject{constructor(e){super(zo,"image");this.aspect=getStringOption(e.aspect,["fit","actual","height","none","width"]);this.contentType=e.contentType||"";this.href=e.href||"";this.id=e.id||"";this.name=e.name||"";this.transferEncoding=getStringOption(e.transferEncoding,["base64","none","package"]);this.use=e.use||"";this.usehref=e.usehref||""}[so](){if(this.contentType&&!Vo.has(this.contentType.toLowerCase()))return HTMLResult.EMPTY;let e=this[vs].images?.get(this.href);if(!e&&(this.href||!this[is]))return HTMLResult.EMPTY;e||"base64"!==this.transferEncoding||(e=function fromBase64Util(e){return Uint8Array.fromBase64?Uint8Array.fromBase64(e):stringToBytes(atob(e))}(this[is]));if(!e)return HTMLResult.EMPTY;if(!this.contentType){for(const[t,a]of Ko)if(e.length>t.length&&t.every(((t,a)=>t===e[a]))){this.contentType=a;break}if(!this.contentType)return HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let a;switch(this.aspect){case"fit":case"actual":break;case"height":a={height:"100%",objectFit:"fill"};break;case"none":a={width:"100%",height:"100%",objectFit:"fill"};break;case"width":a={width:"100%",objectFit:"fill"}}const r=this[ks]();return HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:a,src:URL.createObjectURL(t),alt:r?ariaLabel(r[ks]()):null}})}}class ImageEdit extends XFAObject{constructor(e){super(zo,"imageEdit",!0);this.data=getStringOption(e.data,["link","embed"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}[so](e){return"embed"===this.data?HTMLResult.success({name:"div",children:[],attributes:{}}):HTMLResult.EMPTY}}class Integer extends ContentObject{constructor(e){super(zo,"integer");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){const e=parseInt(this[is].trim(),10);this[is]=isNaN(e)?null:e}[so](e){return valueToHtml(null!==this[is]?this[is].toString():"")}}class Issuers extends XFAObject{constructor(e){super(zo,"issuers",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Items extends XFAObject{constructor(e){super(zo,"items",!0);this.id=e.id||"";this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.ref=e.ref||"";this.save=getInteger({data:e.save,defaultValue:0,validate:e=>1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[so](){const e=[];for(const t of this[ws]())e.push(t[io]());return HTMLResult.success(e)}}class Keep extends XFAObject{constructor(e){super(zo,"keep",!0);this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=getStringOption(e.intact,t);this.next=getStringOption(e.next,t);this.previous=getStringOption(e.previous,t);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}}class KeyUsage extends XFAObject{constructor(e){super(zo,"keyUsage");const t=["","yes","no"];this.crlSign=getStringOption(e.crlSign,t);this.dataEncipherment=getStringOption(e.dataEncipherment,t);this.decipherOnly=getStringOption(e.decipherOnly,t);this.digitalSignature=getStringOption(e.digitalSignature,t);this.encipherOnly=getStringOption(e.encipherOnly,t);this.id=e.id||"";this.keyAgreement=getStringOption(e.keyAgreement,t);this.keyCertSign=getStringOption(e.keyCertSign,t);this.keyEncipherment=getStringOption(e.keyEncipherment,t);this.nonRepudiation=getStringOption(e.nonRepudiation,t);this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Line extends XFAObject{constructor(e){super(zo,"line",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.slope=getStringOption(e.slope,["\\","/"]);this.use=e.use||"";this.usehref=e.usehref||"";this.edge=null}[so](){const e=this[ks]()[ks](),t=this.edge||new Edge({}),a=t[co](),r=Object.create(null),i="visible"===t.presence?t.thickness:0;r.strokeWidth=measureToString(i);r.stroke=a.color;let n,s,o,c,l="100%",h="100%";if(e.w<=i){[n,s,o,c]=["50%",0,"50%","100%"];l=r.strokeWidth}else if(e.h<=i){[n,s,o,c]=[0,"50%","100%","50%"];h=r.strokeWidth}else"\\"===this.slope?[n,s,o,c]=[0,0,"100%","100%"]:[n,s,o,c]=[0,"100%","100%",0];const u={name:"svg",children:[{name:"line",attributes:{xmlns:$o,x1:n,y1:s,x2:o,y2:c,style:r}}],attributes:{xmlns:$o,width:l,height:h,style:{overflow:"visible"}}};if(hasMargin(e))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[u]});u.attributes.style.position="absolute";return HTMLResult.success(u)}}class Linear extends XFAObject{constructor(e){super(zo,"linear",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toRight","toBottom","toLeft","toTop"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[co](e){e=e?e[co]():"#FFFFFF";return`linear-gradient(${this.type.replace(/([RBLT])/," $1").toLowerCase()}, ${e}, ${this.color?this.color[co]():"#000000"})`}}class LockDocument extends ContentObject{constructor(e){super(zo,"lockDocument");this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}[cs](){this[is]=getStringOption(this[is],["auto","0","1"])}}class Manifest extends XFAObject{constructor(e){super(zo,"manifest",!0);this.action=getStringOption(e.action,["include","all","exclude"]);this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.ref=new XFAObjectArray}}class Margin extends XFAObject{constructor(e){super(zo,"margin",!0);this.bottomInset=getMeasurement(e.bottomInset,"0");this.id=e.id||"";this.leftInset=getMeasurement(e.leftInset,"0");this.rightInset=getMeasurement(e.rightInset,"0");this.topInset=getMeasurement(e.topInset,"0");this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[co](){return{margin:measureToString(this.topInset)+" "+measureToString(this.rightInset)+" "+measureToString(this.bottomInset)+" "+measureToString(this.leftInset)}}}class Mdp extends XFAObject{constructor(e){super(zo,"mdp");this.id=e.id||"";this.permissions=getInteger({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e});this.signatureType=getStringOption(e.signatureType,["filler","author"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Medium extends XFAObject{constructor(e){super(zo,"medium");this.id=e.id||"";this.imagingBBox=function getBBox(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const a=e.split(",",4).map((e=>getMeasurement(e.trim(),"-1")));if(a.length<4||a[2]<0||a[3]<0)return{x:t,y:t,width:t,height:t};const[r,i,n,s]=a;return{x:r,y:i,width:n,height:s}}(e.imagingBBox);this.long=getMeasurement(e.long);this.orientation=getStringOption(e.orientation,["portrait","landscape"]);this.short=getMeasurement(e.short);this.stock=e.stock||"";this.trayIn=getStringOption(e.trayIn,["auto","delegate","pageFront"]);this.trayOut=getStringOption(e.trayOut,["auto","delegate"]);this.use=e.use||"";this.usehref=e.usehref||""}}class Message extends XFAObject{constructor(e){super(zo,"message",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.text=new XFAObjectArray}}class NumericEdit extends XFAObject{constructor(e){super(zo,"numericEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.comb=null;this.extras=null;this.margin=null}[so](e){const t=toStyle(this,"border","font","margin"),a=this[ks]()[ks](),r={name:"input",attributes:{type:"text",fieldId:a[lo],dataId:a[ns]?.[lo]||a[lo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(a),"aria-required":!1}};if(isRequired(a)){r.attributes["aria-required"]=!0;r.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[r]})}}class Occur extends XFAObject{constructor(e){super(zo,"occur",!0);this.id=e.id||"";this.initial=""!==e.initial?getInteger({data:e.initial,defaultValue:"",validate:e=>!0}):"";this.max=""!==e.max?getInteger({data:e.max,defaultValue:1,validate:e=>!0}):"";this.min=""!==e.min?getInteger({data:e.min,defaultValue:1,validate:e=>!0}):"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[Qn](){const e=this[ks](),t=this.min;""===this.min&&(this.min=e instanceof PageArea||e instanceof PageSet?0:1);""===this.max&&(this.max=""===t?e instanceof PageArea||e instanceof PageSet?-1:1:this.min);-1!==this.max&&this.max!0});this.name=e.name||"";this.numbered=getInteger({data:e.numbered,defaultValue:1,validate:e=>!0});this.oddOrEven=getStringOption(e.oddOrEven,["any","even","odd"]);this.pagePosition=getStringOption(e.pagePosition,["any","first","last","only","rest"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.desc=null;this.extras=null;this.medium=null;this.occur=null;this.area=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.draw=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.subform=new XFAObjectArray}[_s](){if(!this[os]){this[os]={numberOfUse:0};return!0}return!this.occur||-1===this.occur.max||this[os].numberOfUsee.oddOrEven===t&&e.pagePosition===a));if(r)return r;r=this.pageArea.children.find((e=>"any"===e.oddOrEven&&e.pagePosition===a));if(r)return r;r=this.pageArea.children.find((e=>"any"===e.oddOrEven&&"any"===e.pagePosition));return r||this.pageArea.children[0]}}class Para extends XFAObject{constructor(e){super(zo,"para",!0);this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.lineHeight=e.lineHeight?getMeasurement(e.lineHeight,"0pt"):"";this.marginLeft=e.marginLeft?getMeasurement(e.marginLeft,"0pt"):"";this.marginRight=e.marginRight?getMeasurement(e.marginRight,"0pt"):"";this.orphans=getInteger({data:e.orphans,defaultValue:0,validate:e=>e>=0});this.preserve=e.preserve||"";this.radixOffset=e.radixOffset?getMeasurement(e.radixOffset,"0pt"):"";this.spaceAbove=e.spaceAbove?getMeasurement(e.spaceAbove,"0pt"):"";this.spaceBelow=e.spaceBelow?getMeasurement(e.spaceBelow,"0pt"):"";this.tabDefault=e.tabDefault?getMeasurement(this.tabDefault):"";this.tabStops=(e.tabStops||"").trim().split(/\s+/).map(((e,t)=>t%2==1?getMeasurement(e):e));this.textIndent=e.textIndent?getMeasurement(e.textIndent,"0pt"):"";this.use=e.use||"";this.usehref=e.usehref||"";this.vAlign=getStringOption(e.vAlign,["top","bottom","middle"]);this.widows=getInteger({data:e.widows,defaultValue:0,validate:e=>e>=0});this.hyphenation=null}[co](){const e=toStyle(this,"hAlign");""!==this.marginLeft&&(e.paddingLeft=measureToString(this.marginLeft));""!==this.marginRight&&(e.paddingRight=measureToString(this.marginRight));""!==this.spaceAbove&&(e.paddingTop=measureToString(this.spaceAbove));""!==this.spaceBelow&&(e.paddingBottom=measureToString(this.spaceBelow));if(""!==this.textIndent){e.textIndent=measureToString(this.textIndent);fixTextIndent(e)}this.lineHeight>0&&(e.lineHeight=measureToString(this.lineHeight));""!==this.tabDefault&&(e.tabSize=measureToString(this.tabDefault));this.tabStops.length;this.hyphenatation&&Object.assign(e,this.hyphenatation[co]());return e}}class PasswordEdit extends XFAObject{constructor(e){super(zo,"passwordEdit",!0);this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.passwordChar=e.passwordChar||"*";this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.margin=null}}class template_Pattern extends XFAObject{constructor(e){super(zo,"pattern",!0);this.id=e.id||"";this.type=getStringOption(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[co](e){e=e?e[co]():"#FFFFFF";const t=this.color?this.color[co]():"#000000",a="repeating-linear-gradient",r=`${e},${e} 5px,${t} 5px,${t} 10px`;switch(this.type){case"crossHatch":return`${a}(to top,${r}) ${a}(to right,${r})`;case"crossDiagonal":return`${a}(45deg,${r}) ${a}(-45deg,${r})`;case"diagonalLeft":return`${a}(45deg,${r})`;case"diagonalRight":return`${a}(-45deg,${r})`;case"horizontal":return`${a}(to top,${r})`;case"vertical":return`${a}(to right,${r})`}return""}}class Picture extends StringObject{constructor(e){super(zo,"picture");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Proto extends XFAObject{constructor(e){super(zo,"proto",!0);this.appearanceFilter=new XFAObjectArray;this.arc=new XFAObjectArray;this.area=new XFAObjectArray;this.assist=new XFAObjectArray;this.barcode=new XFAObjectArray;this.bindItems=new XFAObjectArray;this.bookend=new XFAObjectArray;this.boolean=new XFAObjectArray;this.border=new XFAObjectArray;this.break=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.button=new XFAObjectArray;this.calculate=new XFAObjectArray;this.caption=new XFAObjectArray;this.certificate=new XFAObjectArray;this.certificates=new XFAObjectArray;this.checkButton=new XFAObjectArray;this.choiceList=new XFAObjectArray;this.color=new XFAObjectArray;this.comb=new XFAObjectArray;this.connect=new XFAObjectArray;this.contentArea=new XFAObjectArray;this.corner=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.dateTimeEdit=new XFAObjectArray;this.decimal=new XFAObjectArray;this.defaultUi=new XFAObjectArray;this.desc=new XFAObjectArray;this.digestMethod=new XFAObjectArray;this.digestMethods=new XFAObjectArray;this.draw=new XFAObjectArray;this.edge=new XFAObjectArray;this.encoding=new XFAObjectArray;this.encodings=new XFAObjectArray;this.encrypt=new XFAObjectArray;this.encryptData=new XFAObjectArray;this.encryption=new XFAObjectArray;this.encryptionMethod=new XFAObjectArray;this.encryptionMethods=new XFAObjectArray;this.event=new XFAObjectArray;this.exData=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.execute=new XFAObjectArray;this.extras=new XFAObjectArray;this.field=new XFAObjectArray;this.fill=new XFAObjectArray;this.filter=new XFAObjectArray;this.float=new XFAObjectArray;this.font=new XFAObjectArray;this.format=new XFAObjectArray;this.handler=new XFAObjectArray;this.hyphenation=new XFAObjectArray;this.image=new XFAObjectArray;this.imageEdit=new XFAObjectArray;this.integer=new XFAObjectArray;this.issuers=new XFAObjectArray;this.items=new XFAObjectArray;this.keep=new XFAObjectArray;this.keyUsage=new XFAObjectArray;this.line=new XFAObjectArray;this.linear=new XFAObjectArray;this.lockDocument=new XFAObjectArray;this.manifest=new XFAObjectArray;this.margin=new XFAObjectArray;this.mdp=new XFAObjectArray;this.medium=new XFAObjectArray;this.message=new XFAObjectArray;this.numericEdit=new XFAObjectArray;this.occur=new XFAObjectArray;this.oid=new XFAObjectArray;this.oids=new XFAObjectArray;this.overflow=new XFAObjectArray;this.pageArea=new XFAObjectArray;this.pageSet=new XFAObjectArray;this.para=new XFAObjectArray;this.passwordEdit=new XFAObjectArray;this.pattern=new XFAObjectArray;this.picture=new XFAObjectArray;this.radial=new XFAObjectArray;this.reason=new XFAObjectArray;this.reasons=new XFAObjectArray;this.rectangle=new XFAObjectArray;this.ref=new XFAObjectArray;this.script=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.signData=new XFAObjectArray;this.signature=new XFAObjectArray;this.signing=new XFAObjectArray;this.solid=new XFAObjectArray;this.speak=new XFAObjectArray;this.stipple=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray;this.subjectDN=new XFAObjectArray;this.subjectDNs=new XFAObjectArray;this.submit=new XFAObjectArray;this.text=new XFAObjectArray;this.textEdit=new XFAObjectArray;this.time=new XFAObjectArray;this.timeStamp=new XFAObjectArray;this.toolTip=new XFAObjectArray;this.traversal=new XFAObjectArray;this.traverse=new XFAObjectArray;this.ui=new XFAObjectArray;this.validate=new XFAObjectArray;this.value=new XFAObjectArray;this.variables=new XFAObjectArray}}class Radial extends XFAObject{constructor(e){super(zo,"radial",!0);this.id=e.id||"";this.type=getStringOption(e.type,["toEdge","toCenter"]);this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[co](e){e=e?e[co]():"#FFFFFF";const t=this.color?this.color[co]():"#000000";return`radial-gradient(circle at center, ${"toEdge"===this.type?`${e},${t}`:`${t},${e}`})`}}class Reason extends StringObject{constructor(e){super(zo,"reason");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Reasons extends XFAObject{constructor(e){super(zo,"reasons",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.reason=new XFAObjectArray}}class Rectangle extends XFAObject{constructor(e){super(zo,"rectangle",!0);this.hand=getStringOption(e.hand,["even","left","right"]);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.corner=new XFAObjectArray(4);this.edge=new XFAObjectArray(4);this.fill=null}[so](){const e=this.edge.children.length?this.edge.children[0]:new Edge({}),t=e[co](),a=Object.create(null);"visible"===this.fill?.presence?Object.assign(a,this.fill[co]()):a.fill="transparent";a.strokeWidth=measureToString("visible"===e.presence?e.thickness:0);a.stroke=t.color;const r=(this.corner.children.length?this.corner.children[0]:new Corner({}))[co](),i={name:"svg",children:[{name:"rect",attributes:{xmlns:$o,width:"100%",height:"100%",x:0,y:0,rx:r.radius,ry:r.radius,style:a}}],attributes:{xmlns:$o,style:{overflow:"visible"},width:"100%",height:"100%"}};if(hasMargin(this[ks]()[ks]()))return HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[i]});i.attributes.style.position="absolute";return HTMLResult.success(i)}}class RefElement extends StringObject{constructor(e){super(zo,"ref");this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Script extends StringObject{constructor(e){super(zo,"script");this.binding=e.binding||"";this.contentType=e.contentType||"";this.id=e.id||"";this.name=e.name||"";this.runAt=getStringOption(e.runAt,["client","both","server"]);this.use=e.use||"";this.usehref=e.usehref||""}}class SetProperty extends XFAObject{constructor(e){super(zo,"setProperty");this.connection=e.connection||"";this.ref=e.ref||"";this.target=e.target||""}}class SignData extends XFAObject{constructor(e){super(zo,"signData",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["sign","clear","verify"]);this.ref=e.ref||"";this.target=e.target||"";this.use=e.use||"";this.usehref=e.usehref||"";this.filter=null;this.manifest=null}}class Signature extends XFAObject{constructor(e){super(zo,"signature",!0);this.id=e.id||"";this.type=getStringOption(e.type,["PDF1.3","PDF1.6"]);this.use=e.use||"";this.usehref=e.usehref||"";this.border=null;this.extras=null;this.filter=null;this.manifest=null;this.margin=null}}class Signing extends XFAObject{constructor(e){super(zo,"signing",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.certificate=new XFAObjectArray}}class Solid extends XFAObject{constructor(e){super(zo,"solid",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null}[co](e){return e?e[co]():"#FFFFFF"}}class Speak extends StringObject{constructor(e){super(zo,"speak");this.disable=getInteger({data:e.disable,defaultValue:0,validate:e=>1===e});this.id=e.id||"";this.priority=getStringOption(e.priority,["custom","caption","name","toolTip"]);this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Stipple extends XFAObject{constructor(e){super(zo,"stipple",!0);this.id=e.id||"";this.rate=getInteger({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100});this.use=e.use||"";this.usehref=e.usehref||"";this.color=null;this.extras=null}[co](e){const t=this.rate/100;return Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class Subform extends XFAObject{constructor(e){super(zo,"subform",!0);this.access=getStringOption(e.access,["open","nonInteractive","protected","readOnly"]);this.allowMacro=getInteger({data:e.allowMacro,defaultValue:0,validate:e=>1===e});this.anchorType=getStringOption(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]);this.colSpan=getInteger({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e});this.columnWidths=(e.columnWidths||"").trim().split(/\s+/).map((e=>"-1"===e?-1:getMeasurement(e)));this.h=e.h?getMeasurement(e.h):"";this.hAlign=getStringOption(e.hAlign,["left","center","justify","justifyAll","radix","right"]);this.id=e.id||"";this.layout=getStringOption(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]);this.locale=e.locale||"";this.maxH=getMeasurement(e.maxH,"0pt");this.maxW=getMeasurement(e.maxW,"0pt");this.mergeMode=getStringOption(e.mergeMode,["consumeData","matchTemplate"]);this.minH=getMeasurement(e.minH,"0pt");this.minW=getMeasurement(e.minW,"0pt");this.name=e.name||"";this.presence=getStringOption(e.presence,["visible","hidden","inactive","invisible"]);this.relevant=getRelevant(e.relevant);this.restoreState=getStringOption(e.restoreState,["manual","auto"]);this.scope=getStringOption(e.scope,["name","none"]);this.use=e.use||"";this.usehref=e.usehref||"";this.w=e.w?getMeasurement(e.w):"";this.x=getMeasurement(e.x,"0pt");this.y=getMeasurement(e.y,"0pt");this.assist=null;this.bind=null;this.bookend=null;this.border=null;this.break=null;this.calculate=null;this.desc=null;this.extras=null;this.keep=null;this.margin=null;this.occur=null;this.overflow=null;this.pageSet=null;this.para=null;this.traversal=null;this.validate=null;this.variables=null;this.area=new XFAObjectArray;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.connect=new XFAObjectArray;this.draw=new XFAObjectArray;this.event=new XFAObjectArray;this.exObject=new XFAObjectArray;this.exclGroup=new XFAObjectArray;this.field=new XFAObjectArray;this.proto=new XFAObjectArray;this.setProperty=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}[As](){const e=this[ks]();return e instanceof SubformSet?e[As]():e}[Ds](){return!0}[Ls](){return this.layout.endsWith("-tb")&&0===this[os].attempt&&this[os].numberInLine>0||this[ks]()[Ls]()}*[Ss](){yield*getContainedChildren(this)}[ls](){return flushHTML(this)}[Jn](e,t){addHTML(this,e,t)}[ds](){return getAvailableSpace(this)}[Es](){const e=this[As]();if(!e[Es]())return!1;if(void 0!==this[os]._isSplittable)return this[os]._isSplittable;if("position"===this.layout||this.layout.includes("row")){this[os]._isSplittable=!1;return!1}if(this.keep&&"none"!==this.keep.intact){this[os]._isSplittable=!1;return!1}if(e.layout?.endsWith("-tb")&&0!==e[os].numberInLine)return!1;this[os]._isSplittable=!0;return!0}[so](e){setTabIndex(this);if(this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new BreakAfter({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[vs]=this[vs];this[Yn](e);this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new BreakBefore({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[vs]=this[vs];this[Yn](e);this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Overflow({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[vs]=this[vs];this[Yn](e);this.overflow.push(e)}this[Js](this.break);this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return HTMLResult.EMPTY;(this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&warn("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");if(this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(handleBreak(e))return HTMLResult.breakNode(e)}if(this[os]?.afterBreakAfter)return HTMLResult.EMPTY;fixDimensions(this);const t=[],a={id:this[lo],class:[]};setAccess(this,a.class);this[os]||=Object.create(null);Object.assign(this[os],{children:t,line:null,attributes:a,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const r=this[Cs](),i=r[os].noLayoutFailure,n=this[Es]();n||setFirstUnsplittable(this);if(!checkDimensions(this,e))return HTMLResult.FAILURE;const s=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[As]().columnWidths;if(Array.isArray(e)&&e.length>0){this[os].columnWidths=e;this[os].currentColumn=0}}const o=toStyle(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),c=["xfaSubform"],l=layoutClass(this);l&&c.push(l);a.style=o;a.class=c;this.name&&(a.xfaName=this.name);if(this.overflow){const t=this.overflow[bs]();if(t.addLeader){t.addLeader=!1;handleOverflow(this,t.leader,e)}}this[Ks]();const h="lr-tb"===this.layout||"rl-tb"===this.layout,u=h?2:1;for(;this[os].attempt=1){const e=this.breakAfter.children[0];if(handleBreak(e)){this[os].afterBreakAfter=y;return HTMLResult.breakNode(e)}}delete this[os];return y}}class SubformSet extends XFAObject{constructor(e){super(zo,"subformSet",!0);this.id=e.id||"";this.name=e.name||"";this.relation=getStringOption(e.relation,["ordered","choice","unordered"]);this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.bookend=null;this.break=null;this.desc=null;this.extras=null;this.occur=null;this.overflow=null;this.breakAfter=new XFAObjectArray;this.breakBefore=new XFAObjectArray;this.subform=new XFAObjectArray;this.subformSet=new XFAObjectArray}*[Ss](){yield*getContainedChildren(this)}[As](){let e=this[ks]();for(;!(e instanceof Subform);)e=e[ks]();return e}[Ds](){return!0}}class SubjectDN extends ContentObject{constructor(e){super(zo,"subjectDN");this.delimiter=e.delimiter||",";this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){this[is]=new Map(this[is].split(this.delimiter).map((e=>{(e=e.split("=",2))[0]=e[0].trim();return e})))}}class SubjectDNs extends XFAObject{constructor(e){super(zo,"subjectDNs",!0);this.id=e.id||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||"";this.subjectDN=new XFAObjectArray}}class Submit extends XFAObject{constructor(e){super(zo,"submit",!0);this.embedPDF=getInteger({data:e.embedPDF,defaultValue:0,validate:e=>1===e});this.format=getStringOption(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]);this.id=e.id||"";this.target=e.target||"";this.textEncoding=getKeyword({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\d{2}/)});this.use=e.use||"";this.usehref=e.usehref||"";this.xdpContent=e.xdpContent||"";this.encrypt=null;this.encryptData=new XFAObjectArray;this.signData=new XFAObjectArray}}class Template extends XFAObject{constructor(e){super(zo,"template",!0);this.baseProfile=getStringOption(e.baseProfile,["full","interactiveForms"]);this.extras=null;this.subform=new XFAObjectArray}[cs](){0===this.subform.children.length&&warn("XFA - No subforms in template node.");this.subform.children.length>=2&&warn("XFA - Several subforms in template node: please file a bug.");this[ro]=5e3}[Es](){return!0}[Qs](e,t){return e.startsWith("#")?[this[Is].get(e.slice(1))]:searchNode(this,t,e,!0,!0)}*[no](){if(!this.subform.children.length)return HTMLResult.success({name:"div",children:[]});this[os]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const e=this.subform.children[0];e.pageSet[es]();const t=e.pageSet.pageArea.children,a={name:"div",children:[]};let r=null,i=null,n=null;if(e.breakBefore.children.length>=1){i=e.breakBefore.children[0];n=i.target}else if(e.subform.children.length>=1&&e.subform.children[0].breakBefore.children.length>=1){i=e.subform.children[0].breakBefore.children[0];n=i.target}else if(e.break?.beforeTarget){i=e.break;n=i.beforeTarget}else if(e.subform.children.length>=1&&e.subform.children[0].break?.beforeTarget){i=e.subform.children[0].break;n=i.beforeTarget}if(i){const e=this[Qs](n,i[ks]());if(e instanceof PageArea){r=e;i[os]={}}}r||=t[0];r[os]={numberOfUse:1};const s=r[ks]();s[os]={numberOfUse:1,pageIndex:s.pageArea.children.indexOf(r),pageSetIndex:0};let o,c=null,l=null,h=!0,u=0,d=0;for(;;){if(h)u=0;else{a.children.pop();if(3==++u){warn("XFA - Something goes wrong: please file a bug.");return a}}o=null;this[os].currentPageArea=r;const t=r[so]().html;a.children.push(t);if(c){this[os].noLayoutFailure=!0;t.children.push(c[so](r[os].space).html);c=null}if(l){this[os].noLayoutFailure=!0;t.children.push(l[so](r[os].space).html);l=null}const i=r.contentArea.children,n=t.children.filter((e=>e.attributes.class.includes("xfaContentarea")));h=!1;this[os].firstUnsplittable=null;this[os].noLayoutFailure=!1;const flush=t=>{const a=e[ls]();if(a){h||=a.children?.length>0;n[t].children.push(a)}};for(let t=d,r=i.length;t0;n[t].children.push(u.html)}else!h&&a.children.length>1&&a.children.pop();return a}if(u.isBreak()){const e=u.breakNode;flush(t);if("auto"===e.targetType)continue;if(e.leader){c=this[Qs](e.leader,e[ks]());c=c?c[0]:null}if(e.trailer){l=this[Qs](e.trailer,e[ks]());l=l?l[0]:null}if("pageArea"===e.targetType){o=e[os].target;t=1/0}else if(e[os].target){o=e[os].target;d=e[os].index+1;t=1/0}else t=e[os].index}else if(this[os].overflowNode){const e=this[os].overflowNode;this[os].overflowNode=null;const a=e[bs](),r=a.target;a.addLeader=null!==a.leader;a.addTrailer=null!==a.trailer;flush(t);const n=t;t=1/0;if(r instanceof PageArea)o=r;else if(r instanceof ContentArea){const e=i.indexOf(r);if(-1!==e)e>n?t=e-1:d=e;else{o=r[ks]();d=o.contentArea.children.indexOf(r)}}}else flush(t)}this[os].pageNumber+=1;o&&(o[_s]()?o[os].numberOfUse+=1:o=null);r=o||r[xs]();yield null}}}class Text extends ContentObject{constructor(e){super(zo,"text");this.id=e.id||"";this.maxChars=getInteger({data:e.maxChars,defaultValue:0,validate:e=>e>=0});this.name=e.name||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}[Kn](){return!0}[Ws](e){if(e[Xs]===uo.xhtml.id){this[is]=e;return!0}warn(`XFA - Invalid content in Text: ${e[qs]}.`);return!1}[$s](e){this[is]instanceof XFAObject||super[$s](e)}[cs](){"string"==typeof this[is]&&(this[is]=this[is].replaceAll("\r\n","\n"))}[bs](){return"string"==typeof this[is]?this[is].split(/[\u2029\u2028\n]/).filter((e=>!!e)).join("\n"):this[is][io]()}[so](e){if("string"==typeof this[is]){const e=valueToHtml(this[is]).html;if(this[is].includes("\u2029")){e.name="div";e.children=[];this[is].split("\u2029").map((e=>e.split(/[\u2028\n]/).flatMap((e=>[{name:"span",value:e},{name:"br"}])))).forEach((t=>{e.children.push({name:"p",children:t})}))}else if(/[\u2028\n]/.test(this[is])){e.name="div";e.children=[];this[is].split(/[\u2028\n]/).forEach((t=>{e.children.push({name:"span",value:t},{name:"br"})}))}return HTMLResult.success(e)}return this[is][so](e)}}class TextEdit extends XFAObject{constructor(e){super(zo,"textEdit",!0);this.allowRichText=getInteger({data:e.allowRichText,defaultValue:0,validate:e=>1===e});this.hScrollPolicy=getStringOption(e.hScrollPolicy,["auto","off","on"]);this.id=e.id||"";this.multiLine=getInteger({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e});this.use=e.use||"";this.usehref=e.usehref||"";this.vScrollPolicy=getStringOption(e.vScrollPolicy,["auto","off","on"]);this.border=null;this.comb=null;this.extras=null;this.margin=null}[so](e){const t=toStyle(this,"border","font","margin");let a;const r=this[ks]()[ks]();""===this.multiLine&&(this.multiLine=r instanceof Draw?1:0);a=1===this.multiLine?{name:"textarea",attributes:{dataId:r[ns]?.[lo]||r[lo],fieldId:r[lo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:r[ns]?.[lo]||r[lo],fieldId:r[lo],class:["xfaTextfield"],style:t,"aria-label":ariaLabel(r),"aria-required":!1}};if(isRequired(r)){a.attributes["aria-required"]=!0;a.attributes.required=!0}return HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[a]})}}class Time extends StringObject{constructor(e){super(zo,"time");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}[cs](){const e=this[is].trim();this[is]=e?new Date(e):null}[so](e){return valueToHtml(this[is]?this[is].toString():"")}}class TimeStamp extends XFAObject{constructor(e){super(zo,"timeStamp");this.id=e.id||"";this.server=e.server||"";this.type=getStringOption(e.type,["optional","required"]);this.use=e.use||"";this.usehref=e.usehref||""}}class ToolTip extends StringObject{constructor(e){super(zo,"toolTip");this.id=e.id||"";this.rid=e.rid||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Traversal extends XFAObject{constructor(e){super(zo,"traversal",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.traverse=new XFAObjectArray}}class Traverse extends XFAObject{constructor(e){super(zo,"traverse",!0);this.id=e.id||"";this.operation=getStringOption(e.operation,["next","back","down","first","left","right","up"]);this.ref=e.ref||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.script=null}get name(){return this.operation}[js](){return!1}}class Ui extends XFAObject{constructor(e){super(zo,"ui",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.picture=null;this.barcode=null;this.button=null;this.checkButton=null;this.choiceList=null;this.dateTimeEdit=null;this.defaultUi=null;this.imageEdit=null;this.numericEdit=null;this.passwordEdit=null;this.signature=null;this.textEdit=null}[bs](){if(void 0===this[os]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof XFAObject){this[os]=t;return t}}this[os]=null}return this[os]}[so](e){const t=this[bs]();return t?t[so](e):HTMLResult.EMPTY}}class Validate extends XFAObject{constructor(e){super(zo,"validate",!0);this.formatTest=getStringOption(e.formatTest,["warning","disabled","error"]);this.id=e.id||"";this.nullTest=getStringOption(e.nullTest,["disabled","error","warning"]);this.scriptTest=getStringOption(e.scriptTest,["error","disabled","warning"]);this.use=e.use||"";this.usehref=e.usehref||"";this.extras=null;this.message=null;this.picture=null;this.script=null}}class Value extends XFAObject{constructor(e){super(zo,"value",!0);this.id=e.id||"";this.override=getInteger({data:e.override,defaultValue:0,validate:e=>1===e});this.relevant=getRelevant(e.relevant);this.use=e.use||"";this.usehref=e.usehref||"";this.arc=null;this.boolean=null;this.date=null;this.dateTime=null;this.decimal=null;this.exData=null;this.float=null;this.image=null;this.integer=null;this.line=null;this.rectangle=null;this.text=null;this.time=null}[ao](e){const t=this[ks]();if(t instanceof Field&&t.ui?.imageEdit){if(!this.image){this.image=new Image({});this[Yn](this.image)}this.image[is]=e[is];return}const a=e[qs];if(null===this[a]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];if(t instanceof XFAObject){this[e]=null;this[Js](t)}}this[e[qs]]=e;this[Yn](e)}else this[a][is]=e[is]}[io](){if(this.exData)return"string"==typeof this.exData[is]?this.exData[is].trim():this.exData[is][io]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof XFAObject)return(t[is]||"").toString().trim()}return null}[so](e){for(const t of Object.getOwnPropertyNames(this)){const a=this[t];if(a instanceof XFAObject)return a[so](e)}return HTMLResult.EMPTY}}class Variables extends XFAObject{constructor(e){super(zo,"variables",!0);this.id=e.id||"";this.use=e.use||"";this.usehref=e.usehref||"";this.boolean=new XFAObjectArray;this.date=new XFAObjectArray;this.dateTime=new XFAObjectArray;this.decimal=new XFAObjectArray;this.exData=new XFAObjectArray;this.float=new XFAObjectArray;this.image=new XFAObjectArray;this.integer=new XFAObjectArray;this.manifest=new XFAObjectArray;this.script=new XFAObjectArray;this.text=new XFAObjectArray;this.time=new XFAObjectArray}[js](){return!0}}class TemplateNamespace{static[ho](e,t){if(TemplateNamespace.hasOwnProperty(e)){const a=TemplateNamespace[e](t);a[to](t);return a}}static appearanceFilter(e){return new AppearanceFilter(e)}static arc(e){return new Arc(e)}static area(e){return new Area(e)}static assist(e){return new Assist(e)}static barcode(e){return new Barcode(e)}static bind(e){return new Bind(e)}static bindItems(e){return new BindItems(e)}static bookend(e){return new Bookend(e)}static boolean(e){return new BooleanElement(e)}static border(e){return new Border(e)}static break(e){return new Break(e)}static breakAfter(e){return new BreakAfter(e)}static breakBefore(e){return new BreakBefore(e)}static button(e){return new Button(e)}static calculate(e){return new Calculate(e)}static caption(e){return new Caption(e)}static certificate(e){return new Certificate(e)}static certificates(e){return new Certificates(e)}static checkButton(e){return new CheckButton(e)}static choiceList(e){return new ChoiceList(e)}static color(e){return new Color(e)}static comb(e){return new Comb(e)}static connect(e){return new Connect(e)}static contentArea(e){return new ContentArea(e)}static corner(e){return new Corner(e)}static date(e){return new DateElement(e)}static dateTime(e){return new DateTime(e)}static dateTimeEdit(e){return new DateTimeEdit(e)}static decimal(e){return new Decimal(e)}static defaultUi(e){return new DefaultUi(e)}static desc(e){return new Desc(e)}static digestMethod(e){return new DigestMethod(e)}static digestMethods(e){return new DigestMethods(e)}static draw(e){return new Draw(e)}static edge(e){return new Edge(e)}static encoding(e){return new Encoding(e)}static encodings(e){return new Encodings(e)}static encrypt(e){return new Encrypt(e)}static encryptData(e){return new EncryptData(e)}static encryption(e){return new Encryption(e)}static encryptionMethod(e){return new EncryptionMethod(e)}static encryptionMethods(e){return new EncryptionMethods(e)}static event(e){return new Event(e)}static exData(e){return new ExData(e)}static exObject(e){return new ExObject(e)}static exclGroup(e){return new ExclGroup(e)}static execute(e){return new Execute(e)}static extras(e){return new Extras(e)}static field(e){return new Field(e)}static fill(e){return new Fill(e)}static filter(e){return new Filter(e)}static float(e){return new Float(e)}static font(e){return new template_Font(e)}static format(e){return new Format(e)}static handler(e){return new Handler(e)}static hyphenation(e){return new Hyphenation(e)}static image(e){return new Image(e)}static imageEdit(e){return new ImageEdit(e)}static integer(e){return new Integer(e)}static issuers(e){return new Issuers(e)}static items(e){return new Items(e)}static keep(e){return new Keep(e)}static keyUsage(e){return new KeyUsage(e)}static line(e){return new Line(e)}static linear(e){return new Linear(e)}static lockDocument(e){return new LockDocument(e)}static manifest(e){return new Manifest(e)}static margin(e){return new Margin(e)}static mdp(e){return new Mdp(e)}static medium(e){return new Medium(e)}static message(e){return new Message(e)}static numericEdit(e){return new NumericEdit(e)}static occur(e){return new Occur(e)}static oid(e){return new Oid(e)}static oids(e){return new Oids(e)}static overflow(e){return new Overflow(e)}static pageArea(e){return new PageArea(e)}static pageSet(e){return new PageSet(e)}static para(e){return new Para(e)}static passwordEdit(e){return new PasswordEdit(e)}static pattern(e){return new template_Pattern(e)}static picture(e){return new Picture(e)}static proto(e){return new Proto(e)}static radial(e){return new Radial(e)}static reason(e){return new Reason(e)}static reasons(e){return new Reasons(e)}static rectangle(e){return new Rectangle(e)}static ref(e){return new RefElement(e)}static script(e){return new Script(e)}static setProperty(e){return new SetProperty(e)}static signData(e){return new SignData(e)}static signature(e){return new Signature(e)}static signing(e){return new Signing(e)}static solid(e){return new Solid(e)}static speak(e){return new Speak(e)}static stipple(e){return new Stipple(e)}static subform(e){return new Subform(e)}static subformSet(e){return new SubformSet(e)}static subjectDN(e){return new SubjectDN(e)}static subjectDNs(e){return new SubjectDNs(e)}static submit(e){return new Submit(e)}static template(e){return new Template(e)}static text(e){return new Text(e)}static textEdit(e){return new TextEdit(e)}static time(e){return new Time(e)}static timeStamp(e){return new TimeStamp(e)}static toolTip(e){return new ToolTip(e)}static traversal(e){return new Traversal(e)}static traverse(e){return new Traverse(e)}static ui(e){return new Ui(e)}static validate(e){return new Validate(e)}static value(e){return new Value(e)}static variables(e){return new Variables(e)}}const Jo=uo.datasets.id;function createText(e){const t=new Text({});t[is]=e;return t}class Binder{constructor(e){this.root=e;this.datasets=e.datasets;this.data=e.datasets?.data||new XmlObject(uo.datasets.id,"data");this.emptyMerge=0===this.data[ws]().length;this.root.form=this.form=e.template[as]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){this._bindElement(this.form,this.data);return this.form}getData(){return this.data}_bindValue(e,t,a){e[ns]=t;if(e[Fs]())if(t[Bs]()){const a=t[ms]();e[ao](createText(a))}else if(e instanceof Field&&"multiSelect"===e.ui?.choiceList?.open){const a=t[ws]().map((e=>e[is].trim())).join("\n");e[ao](createText(a))}else this._isConsumeData()&&warn("XFA - Nodes haven't the same type.");else!t[Bs]()||this._isMatchTemplate()?this._bindElement(e,t):warn("XFA - Nodes haven't the same type.")}_findDataByNameToConsume(e,t,a,r){if(!e)return null;let i,n;for(let r=0;r<3;r++){i=a[ys](e,!1,!0);for(;;){n=i.next().value;if(!n)break;if(t===n[Bs]())return n}if(a[Xs]===uo.datasets.id&&"data"===a[qs])break;a=a[ks]()}if(!r)return null;i=this.data[ys](e,!0,!1);n=i.next().value;if(n)return n;i=this.data[hs](e,!0);n=i.next().value;return n?.[Bs]()?n:null}_setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:a,target:r,connection:i}of e.setProperty.children){if(i)continue;if(!a)continue;const n=searchNode(this.root,t,a,!1,!1);if(!n){warn(`XFA - Invalid reference: ${a}.`);continue}const[s]=n;if(!s[Rs](this.data)){warn("XFA - Invalid node: must be a data node.");continue}const o=searchNode(this.root,e,r,!1,!1);if(!o){warn(`XFA - Invalid target: ${r}.`);continue}const[c]=o;if(!c[Rs](e)){warn("XFA - Invalid target: must be a property or subproperty.");continue}const l=c[ks]();if(c instanceof SetProperty||l instanceof SetProperty){warn("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(c instanceof BindItems||l instanceof BindItems){warn("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const h=s[io](),u=c[qs];if(c instanceof XFAAttribute){const e=Object.create(null);e[u]=h;const t=Reflect.construct(Object.getPrototypeOf(l).constructor,[e]);l[u]=t[u]}else if(c.hasOwnProperty(is)){c[ns]=s;c[is]=h;c[cs]()}else warn("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[Js](t);e.items.clear();const a=new Items({}),r=new Items({});e[Yn](a);e.items.push(a);e[Yn](r);e.items.push(r);for(const{ref:i,labelRef:n,valueRef:s,connection:o}of e.bindItems.children){if(o)continue;if(!i)continue;const e=searchNode(this.root,t,i,!1,!1);if(e)for(const t of e){if(!t[Rs](this.datasets)){warn(`XFA - Invalid ref (${i}): must be a datasets child.`);continue}const e=searchNode(this.root,t,n,!0,!1);if(!e){warn(`XFA - Invalid label: ${n}.`);continue}const[o]=e;if(!o[Rs](this.datasets)){warn("XFA - Invalid label: must be a datasets child.");continue}const c=searchNode(this.root,t,s,!0,!1);if(!c){warn(`XFA - Invalid value: ${s}.`);continue}const[l]=c;if(!l[Rs](this.datasets)){warn("XFA - Invalid value: must be a datasets child.");continue}const h=createText(o[io]()),u=createText(l[io]());a[Yn](h);a.text.push(h);r[Yn](u);r.text.push(u)}else warn(`XFA - Invalid reference: ${i}.`)}}_bindOccurrences(e,t,a){let r;if(t.length>1){r=e[as]();r[Js](r.occur);r.occur=null}this._bindValue(e,t[0],a);this._setProperties(e,t[0]);this._bindItems(e,t[0]);if(1===t.length)return;const i=e[ks](),n=e[qs],s=i[Os](e);for(let e=1,o=t.length;et.name===e.name)).length:a[r].children.length;const n=a[Os](e)+1,s=t.initial-i;if(s){const t=e[as]();t[Js](t.occur);t.occur=null;a[r].push(t);a[Ts](n,t);for(let e=1;e0)this._bindOccurrences(r,[e[0]],null);else if(this.emptyMerge){const e=t[Xs]===Jo?-1:t[Xs],a=r[ns]=new XmlObject(e,r.name||"root");t[Yn](a);this._bindElement(r,a)}continue}if(!r[Ds]())continue;let e=!1,i=null,n=null,s=null;if(r.bind){switch(r.bind.match){case"none":this._setAndBind(r,t);continue;case"global":e=!0;break;case"dataRef":if(!r.bind.ref){warn(`XFA - ref is empty in node ${r[qs]}.`);this._setAndBind(r,t);continue}n=r.bind.ref}r.bind.picture&&(i=r.bind.picture[is])}const[o,c]=this._getOccurInfo(r);if(n){s=searchNode(this.root,t,n,!0,!1);if(null===s){s=createDataNode(this.data,t,n);if(!s)continue;this._isConsumeData()&&(s[rs]=!0);this._setAndBind(r,s);continue}this._isConsumeData()&&(s=s.filter((e=>!e[rs])));s.length>c?s=s.slice(0,c):0===s.length&&(s=null);s&&this._isConsumeData()&&s.forEach((e=>{e[rs]=!0}))}else{if(!r.name){this._setAndBind(r,t);continue}if(this._isConsumeData()){const a=[];for(;a.length0?a:null}else{s=t[ys](r.name,!1,this.emptyMerge).next().value;if(!s){if(0===o){a.push(r);continue}const e=t[Xs]===Jo?-1:t[Xs];s=r[ns]=new XmlObject(e,r.name);this.emptyMerge&&(s[rs]=!0);t[Yn](s);this._setAndBind(r,s);continue}this.emptyMerge&&(s[rs]=!0);s=[s]}}s?this._bindOccurrences(r,s,i):o>0?this._setAndBind(r,t):a.push(r)}a.forEach((e=>e[ks]()[Js](e)))}}class DataHandler{constructor(e,t){this.data=t;this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[ws]()]];for(;t.length>0;){const a=t.at(-1),[r,i]=a;if(r+1===i.length){t.pop();continue}const n=i[++a[0]],s=e.get(n[lo]);if(s)n[ao](s);else{const t=n[us]();for(const a of t.values()){const t=e.get(a[lo]);if(t){a[ao](t);break}}}const o=n[ws]();o.length>0&&t.push([-1,o])}const a=[''];if(this.dataset)for(const e of this.dataset[ws]())"data"!==e[qs]&&e[oo](a);this.data[oo](a);a.push("");return a.join("")}}const Yo=uo.config.id;class Acrobat extends XFAObject{constructor(e){super(Yo,"acrobat",!0);this.acrobat7=null;this.autoSave=null;this.common=null;this.validate=null;this.validateApprovalSignatures=null;this.submitUrl=new XFAObjectArray}}class Acrobat7 extends XFAObject{constructor(e){super(Yo,"acrobat7",!0);this.dynamicRender=null}}class ADBE_JSConsole extends OptionObject{constructor(e){super(Yo,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class ADBE_JSDebugger extends OptionObject{constructor(e){super(Yo,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class AddSilentPrint extends Option01{constructor(e){super(Yo,"addSilentPrint")}}class AddViewerPreferences extends Option01{constructor(e){super(Yo,"addViewerPreferences")}}class AdjustData extends Option10{constructor(e){super(Yo,"adjustData")}}class AdobeExtensionLevel extends IntegerObject{constructor(e){super(Yo,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))}}class Agent extends XFAObject{constructor(e){super(Yo,"agent",!0);this.name=e.name?e.name.trim():"";this.common=new XFAObjectArray}}class AlwaysEmbed extends ContentObject{constructor(e){super(Yo,"alwaysEmbed")}}class Amd extends StringObject{constructor(e){super(Yo,"amd")}}class config_Area extends XFAObject{constructor(e){super(Yo,"area");this.level=getInteger({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3});this.name=getStringOption(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class Attributes extends OptionObject{constructor(e){super(Yo,"attributes",["preserve","delegate","ignore"])}}class AutoSave extends OptionObject{constructor(e){super(Yo,"autoSave",["disabled","enabled"])}}class Base extends StringObject{constructor(e){super(Yo,"base")}}class BatchOutput extends XFAObject{constructor(e){super(Yo,"batchOutput");this.format=getStringOption(e.format,["none","concat","zip","zipCompress"])}}class BehaviorOverride extends ContentObject{constructor(e){super(Yo,"behaviorOverride")}[cs](){this[is]=new Map(this[is].trim().split(/\s+/).filter((e=>e.includes(":"))).map((e=>e.split(":",2))))}}class Cache extends XFAObject{constructor(e){super(Yo,"cache",!0);this.templateCache=null}}class Change extends Option01{constructor(e){super(Yo,"change")}}class Common extends XFAObject{constructor(e){super(Yo,"common",!0);this.data=null;this.locale=null;this.localeSet=null;this.messaging=null;this.suppressBanner=null;this.template=null;this.validationMessaging=null;this.versionControl=null;this.log=new XFAObjectArray}}class Compress extends XFAObject{constructor(e){super(Yo,"compress");this.scope=getStringOption(e.scope,["imageOnly","document"])}}class CompressLogicalStructure extends Option01{constructor(e){super(Yo,"compressLogicalStructure")}}class CompressObjectStream extends Option10{constructor(e){super(Yo,"compressObjectStream")}}class Compression extends XFAObject{constructor(e){super(Yo,"compression",!0);this.compressLogicalStructure=null;this.compressObjectStream=null;this.level=null;this.type=null}}class Config extends XFAObject{constructor(e){super(Yo,"config",!0);this.acrobat=null;this.present=null;this.trace=null;this.agent=new XFAObjectArray}}class Conformance extends OptionObject{constructor(e){super(Yo,"conformance",["A","B"])}}class ContentCopy extends Option01{constructor(e){super(Yo,"contentCopy")}}class Copies extends IntegerObject{constructor(e){super(Yo,"copies",1,(e=>e>=1))}}class Creator extends StringObject{constructor(e){super(Yo,"creator")}}class CurrentPage extends IntegerObject{constructor(e){super(Yo,"currentPage",0,(e=>e>=0))}}class Data extends XFAObject{constructor(e){super(Yo,"data",!0);this.adjustData=null;this.attributes=null;this.incrementalLoad=null;this.outputXSL=null;this.range=null;this.record=null;this.startNode=null;this.uri=null;this.window=null;this.xsl=null;this.excludeNS=new XFAObjectArray;this.transform=new XFAObjectArray}}class Debug extends XFAObject{constructor(e){super(Yo,"debug",!0);this.uri=null}}class DefaultTypeface extends ContentObject{constructor(e){super(Yo,"defaultTypeface");this.writingScript=getStringOption(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class Destination extends OptionObject{constructor(e){super(Yo,"destination",["pdf","pcl","ps","webClient","zpl"])}}class DocumentAssembly extends Option01{constructor(e){super(Yo,"documentAssembly")}}class Driver extends XFAObject{constructor(e){super(Yo,"driver",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class DuplexOption extends OptionObject{constructor(e){super(Yo,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class DynamicRender extends OptionObject{constructor(e){super(Yo,"dynamicRender",["forbidden","required"])}}class Embed extends Option01{constructor(e){super(Yo,"embed")}}class config_Encrypt extends Option01{constructor(e){super(Yo,"encrypt")}}class config_Encryption extends XFAObject{constructor(e){super(Yo,"encryption",!0);this.encrypt=null;this.encryptionLevel=null;this.permissions=null}}class EncryptionLevel extends OptionObject{constructor(e){super(Yo,"encryptionLevel",["40bit","128bit"])}}class Enforce extends StringObject{constructor(e){super(Yo,"enforce")}}class Equate extends XFAObject{constructor(e){super(Yo,"equate");this.force=getInteger({data:e.force,defaultValue:1,validate:e=>0===e});this.from=e.from||"";this.to=e.to||""}}class EquateRange extends XFAObject{constructor(e){super(Yo,"equateRange");this.from=e.from||"";this.to=e.to||"";this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\+([0-9a-fA-F]+)/,a=this._unicodeRange;for(let r of a.split(",").map((e=>e.trim())).filter((e=>!!e))){r=r.split("-",2).map((e=>{const a=e.match(t);return a?parseInt(a[1],16):0}));1===r.length&&r.push(r[0]);e.push(r)}return shadow(this,"unicodeRange",e)}}class Exclude extends ContentObject{constructor(e){super(Yo,"exclude")}[cs](){this[is]=this[is].trim().split(/\s+/).filter((e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)))}}class ExcludeNS extends StringObject{constructor(e){super(Yo,"excludeNS")}}class FlipLabel extends OptionObject{constructor(e){super(Yo,"flipLabel",["usePrinterSetting","on","off"])}}class config_FontInfo extends XFAObject{constructor(e){super(Yo,"fontInfo",!0);this.embed=null;this.map=null;this.subsetBelow=null;this.alwaysEmbed=new XFAObjectArray;this.defaultTypeface=new XFAObjectArray;this.neverEmbed=new XFAObjectArray}}class FormFieldFilling extends Option01{constructor(e){super(Yo,"formFieldFilling")}}class GroupParent extends StringObject{constructor(e){super(Yo,"groupParent")}}class IfEmpty extends OptionObject{constructor(e){super(Yo,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class IncludeXDPContent extends StringObject{constructor(e){super(Yo,"includeXDPContent")}}class IncrementalLoad extends OptionObject{constructor(e){super(Yo,"incrementalLoad",["none","forwardOnly"])}}class IncrementalMerge extends Option01{constructor(e){super(Yo,"incrementalMerge")}}class Interactive extends Option01{constructor(e){super(Yo,"interactive")}}class Jog extends OptionObject{constructor(e){super(Yo,"jog",["usePrinterSetting","none","pageSet"])}}class LabelPrinter extends XFAObject{constructor(e){super(Yo,"labelPrinter",!0);this.name=getStringOption(e.name,["zpl","dpl","ipl","tcpl"]);this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class Layout extends OptionObject{constructor(e){super(Yo,"layout",["paginate","panel"])}}class Level extends IntegerObject{constructor(e){super(Yo,"level",0,(e=>e>0))}}class Linearized extends Option01{constructor(e){super(Yo,"linearized")}}class Locale extends StringObject{constructor(e){super(Yo,"locale")}}class LocaleSet extends StringObject{constructor(e){super(Yo,"localeSet")}}class Log extends XFAObject{constructor(e){super(Yo,"log",!0);this.mode=null;this.threshold=null;this.to=null;this.uri=null}}class MapElement extends XFAObject{constructor(e){super(Yo,"map",!0);this.equate=new XFAObjectArray;this.equateRange=new XFAObjectArray}}class MediumInfo extends XFAObject{constructor(e){super(Yo,"mediumInfo",!0);this.map=null}}class config_Message extends XFAObject{constructor(e){super(Yo,"message",!0);this.msgId=null;this.severity=null}}class Messaging extends XFAObject{constructor(e){super(Yo,"messaging",!0);this.message=new XFAObjectArray}}class Mode extends OptionObject{constructor(e){super(Yo,"mode",["append","overwrite"])}}class ModifyAnnots extends Option01{constructor(e){super(Yo,"modifyAnnots")}}class MsgId extends IntegerObject{constructor(e){super(Yo,"msgId",1,(e=>e>=1))}}class NameAttr extends StringObject{constructor(e){super(Yo,"nameAttr")}}class NeverEmbed extends ContentObject{constructor(e){super(Yo,"neverEmbed")}}class NumberOfCopies extends IntegerObject{constructor(e){super(Yo,"numberOfCopies",null,(e=>e>=2&&e<=5))}}class OpenAction extends XFAObject{constructor(e){super(Yo,"openAction",!0);this.destination=null}}class Output extends XFAObject{constructor(e){super(Yo,"output",!0);this.to=null;this.type=null;this.uri=null}}class OutputBin extends StringObject{constructor(e){super(Yo,"outputBin")}}class OutputXSL extends XFAObject{constructor(e){super(Yo,"outputXSL",!0);this.uri=null}}class Overprint extends OptionObject{constructor(e){super(Yo,"overprint",["none","both","draw","field"])}}class Packets extends StringObject{constructor(e){super(Yo,"packets")}[cs](){"*"!==this[is]&&(this[is]=this[is].trim().split(/\s+/).filter((e=>["config","datasets","template","xfdf","xslt"].includes(e))))}}class PageOffset extends XFAObject{constructor(e){super(Yo,"pageOffset");this.x=getInteger({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0});this.y=getInteger({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class PageRange extends StringObject{constructor(e){super(Yo,"pageRange")}[cs](){const e=this[is].trim().split(/\s+/).map((e=>parseInt(e,10))),t=[];for(let a=0,r=e.length;a!1))}}class Pcl extends XFAObject{constructor(e){super(Yo,"pcl",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.pageOffset=null;this.staple=null;this.xdc=null}}class Pdf extends XFAObject{constructor(e){super(Yo,"pdf",!0);this.name=e.name||"";this.adobeExtensionLevel=null;this.batchOutput=null;this.compression=null;this.creator=null;this.encryption=null;this.fontInfo=null;this.interactive=null;this.linearized=null;this.openAction=null;this.pdfa=null;this.producer=null;this.renderPolicy=null;this.scriptModel=null;this.silentPrint=null;this.submitFormat=null;this.tagged=null;this.version=null;this.viewerPreferences=null;this.xdc=null}}class Pdfa extends XFAObject{constructor(e){super(Yo,"pdfa",!0);this.amd=null;this.conformance=null;this.includeXDPContent=null;this.part=null}}class Permissions extends XFAObject{constructor(e){super(Yo,"permissions",!0);this.accessibleContent=null;this.change=null;this.contentCopy=null;this.documentAssembly=null;this.formFieldFilling=null;this.modifyAnnots=null;this.plaintextMetadata=null;this.print=null;this.printHighQuality=null}}class PickTrayByPDFSize extends Option01{constructor(e){super(Yo,"pickTrayByPDFSize")}}class config_Picture extends StringObject{constructor(e){super(Yo,"picture")}}class PlaintextMetadata extends Option01{constructor(e){super(Yo,"plaintextMetadata")}}class Presence extends OptionObject{constructor(e){super(Yo,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Present extends XFAObject{constructor(e){super(Yo,"present",!0);this.behaviorOverride=null;this.cache=null;this.common=null;this.copies=null;this.destination=null;this.incrementalMerge=null;this.layout=null;this.output=null;this.overprint=null;this.pagination=null;this.paginationOverride=null;this.script=null;this.validate=null;this.xdp=null;this.driver=new XFAObjectArray;this.labelPrinter=new XFAObjectArray;this.pcl=new XFAObjectArray;this.pdf=new XFAObjectArray;this.ps=new XFAObjectArray;this.submitUrl=new XFAObjectArray;this.webClient=new XFAObjectArray;this.zpl=new XFAObjectArray}}class Print extends Option01{constructor(e){super(Yo,"print")}}class PrintHighQuality extends Option01{constructor(e){super(Yo,"printHighQuality")}}class PrintScaling extends OptionObject{constructor(e){super(Yo,"printScaling",["appdefault","noScaling"])}}class PrinterName extends StringObject{constructor(e){super(Yo,"printerName")}}class Producer extends StringObject{constructor(e){super(Yo,"producer")}}class Ps extends XFAObject{constructor(e){super(Yo,"ps",!0);this.name=e.name||"";this.batchOutput=null;this.fontInfo=null;this.jog=null;this.mediumInfo=null;this.outputBin=null;this.staple=null;this.xdc=null}}class Range extends ContentObject{constructor(e){super(Yo,"range")}[cs](){this[is]=this[is].split(",",2).map((e=>e.split("-").map((e=>parseInt(e.trim(),10))))).filter((e=>e.every((e=>!isNaN(e))))).map((e=>{1===e.length&&e.push(e[0]);return e}))}}class Record extends ContentObject{constructor(e){super(Yo,"record")}[cs](){this[is]=this[is].trim();const e=parseInt(this[is],10);!isNaN(e)&&e>=0&&(this[is]=e)}}class Relevant extends ContentObject{constructor(e){super(Yo,"relevant")}[cs](){this[is]=this[is].trim().split(/\s+/)}}class Rename extends ContentObject{constructor(e){super(Yo,"rename")}[cs](){this[is]=this[is].trim();(this[is].toLowerCase().startsWith("xml")||new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*","u").test(this[is]))&&warn("XFA - Rename: invalid XFA name")}}class RenderPolicy extends OptionObject{constructor(e){super(Yo,"renderPolicy",["server","client"])}}class RunScripts extends OptionObject{constructor(e){super(Yo,"runScripts",["both","client","none","server"])}}class config_Script extends XFAObject{constructor(e){super(Yo,"script",!0);this.currentPage=null;this.exclude=null;this.runScripts=null}}class ScriptModel extends OptionObject{constructor(e){super(Yo,"scriptModel",["XFA","none"])}}class Severity extends OptionObject{constructor(e){super(Yo,"severity",["ignore","error","information","trace","warning"])}}class SilentPrint extends XFAObject{constructor(e){super(Yo,"silentPrint",!0);this.addSilentPrint=null;this.printerName=null}}class Staple extends XFAObject{constructor(e){super(Yo,"staple");this.mode=getStringOption(e.mode,["usePrinterSetting","on","off"])}}class StartNode extends StringObject{constructor(e){super(Yo,"startNode")}}class StartPage extends IntegerObject{constructor(e){super(Yo,"startPage",0,(e=>!0))}}class SubmitFormat extends OptionObject{constructor(e){super(Yo,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class SubmitUrl extends StringObject{constructor(e){super(Yo,"submitUrl")}}class SubsetBelow extends IntegerObject{constructor(e){super(Yo,"subsetBelow",100,(e=>e>=0&&e<=100))}}class SuppressBanner extends Option01{constructor(e){super(Yo,"suppressBanner")}}class Tagged extends Option01{constructor(e){super(Yo,"tagged")}}class config_Template extends XFAObject{constructor(e){super(Yo,"template",!0);this.base=null;this.relevant=null;this.startPage=null;this.uri=null;this.xsl=null}}class Threshold extends OptionObject{constructor(e){super(Yo,"threshold",["trace","error","information","warning"])}}class To extends OptionObject{constructor(e){super(Yo,"to",["null","memory","stderr","stdout","system","uri"])}}class TemplateCache extends XFAObject{constructor(e){super(Yo,"templateCache");this.maxEntries=getInteger({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class Trace extends XFAObject{constructor(e){super(Yo,"trace",!0);this.area=new XFAObjectArray}}class Transform extends XFAObject{constructor(e){super(Yo,"transform",!0);this.groupParent=null;this.ifEmpty=null;this.nameAttr=null;this.picture=null;this.presence=null;this.rename=null;this.whitespace=null}}class Type extends OptionObject{constructor(e){super(Yo,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Uri extends StringObject{constructor(e){super(Yo,"uri")}}class config_Validate extends OptionObject{constructor(e){super(Yo,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class ValidateApprovalSignatures extends ContentObject{constructor(e){super(Yo,"validateApprovalSignatures")}[cs](){this[is]=this[is].trim().split(/\s+/).filter((e=>["docReady","postSign"].includes(e)))}}class ValidationMessaging extends OptionObject{constructor(e){super(Yo,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Version extends OptionObject{constructor(e){super(Yo,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class VersionControl extends XFAObject{constructor(e){super(Yo,"VersionControl");this.outputBelow=getStringOption(e.outputBelow,["warn","error","update"]);this.sourceAbove=getStringOption(e.sourceAbove,["warn","error"]);this.sourceBelow=getStringOption(e.sourceBelow,["update","maintain"])}}class ViewerPreferences extends XFAObject{constructor(e){super(Yo,"viewerPreferences",!0);this.ADBE_JSConsole=null;this.ADBE_JSDebugger=null;this.addViewerPreferences=null;this.duplexOption=null;this.enforce=null;this.numberOfCopies=null;this.pageRange=null;this.pickTrayByPDFSize=null;this.printScaling=null}}class WebClient extends XFAObject{constructor(e){super(Yo,"webClient",!0);this.name=e.name?e.name.trim():"";this.fontInfo=null;this.xdc=null}}class Whitespace extends OptionObject{constructor(e){super(Yo,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Window extends ContentObject{constructor(e){super(Yo,"window")}[cs](){const e=this[is].split(",",2).map((e=>parseInt(e.trim(),10)));if(e.some((e=>isNaN(e))))this[is]=[0,0];else{1===e.length&&e.push(e[0]);this[is]=e}}}class Xdc extends XFAObject{constructor(e){super(Yo,"xdc",!0);this.uri=new XFAObjectArray;this.xsl=new XFAObjectArray}}class Xdp extends XFAObject{constructor(e){super(Yo,"xdp",!0);this.packets=null}}class Xsl extends XFAObject{constructor(e){super(Yo,"xsl",!0);this.debug=null;this.uri=null}}class Zpl extends XFAObject{constructor(e){super(Yo,"zpl",!0);this.name=e.name?e.name.trim():"";this.batchOutput=null;this.flipLabel=null;this.fontInfo=null;this.xdc=null}}class ConfigNamespace{static[ho](e,t){if(ConfigNamespace.hasOwnProperty(e))return ConfigNamespace[e](t)}static acrobat(e){return new Acrobat(e)}static acrobat7(e){return new Acrobat7(e)}static ADBE_JSConsole(e){return new ADBE_JSConsole(e)}static ADBE_JSDebugger(e){return new ADBE_JSDebugger(e)}static addSilentPrint(e){return new AddSilentPrint(e)}static addViewerPreferences(e){return new AddViewerPreferences(e)}static adjustData(e){return new AdjustData(e)}static adobeExtensionLevel(e){return new AdobeExtensionLevel(e)}static agent(e){return new Agent(e)}static alwaysEmbed(e){return new AlwaysEmbed(e)}static amd(e){return new Amd(e)}static area(e){return new config_Area(e)}static attributes(e){return new Attributes(e)}static autoSave(e){return new AutoSave(e)}static base(e){return new Base(e)}static batchOutput(e){return new BatchOutput(e)}static behaviorOverride(e){return new BehaviorOverride(e)}static cache(e){return new Cache(e)}static change(e){return new Change(e)}static common(e){return new Common(e)}static compress(e){return new Compress(e)}static compressLogicalStructure(e){return new CompressLogicalStructure(e)}static compressObjectStream(e){return new CompressObjectStream(e)}static compression(e){return new Compression(e)}static config(e){return new Config(e)}static conformance(e){return new Conformance(e)}static contentCopy(e){return new ContentCopy(e)}static copies(e){return new Copies(e)}static creator(e){return new Creator(e)}static currentPage(e){return new CurrentPage(e)}static data(e){return new Data(e)}static debug(e){return new Debug(e)}static defaultTypeface(e){return new DefaultTypeface(e)}static destination(e){return new Destination(e)}static documentAssembly(e){return new DocumentAssembly(e)}static driver(e){return new Driver(e)}static duplexOption(e){return new DuplexOption(e)}static dynamicRender(e){return new DynamicRender(e)}static embed(e){return new Embed(e)}static encrypt(e){return new config_Encrypt(e)}static encryption(e){return new config_Encryption(e)}static encryptionLevel(e){return new EncryptionLevel(e)}static enforce(e){return new Enforce(e)}static equate(e){return new Equate(e)}static equateRange(e){return new EquateRange(e)}static exclude(e){return new Exclude(e)}static excludeNS(e){return new ExcludeNS(e)}static flipLabel(e){return new FlipLabel(e)}static fontInfo(e){return new config_FontInfo(e)}static formFieldFilling(e){return new FormFieldFilling(e)}static groupParent(e){return new GroupParent(e)}static ifEmpty(e){return new IfEmpty(e)}static includeXDPContent(e){return new IncludeXDPContent(e)}static incrementalLoad(e){return new IncrementalLoad(e)}static incrementalMerge(e){return new IncrementalMerge(e)}static interactive(e){return new Interactive(e)}static jog(e){return new Jog(e)}static labelPrinter(e){return new LabelPrinter(e)}static layout(e){return new Layout(e)}static level(e){return new Level(e)}static linearized(e){return new Linearized(e)}static locale(e){return new Locale(e)}static localeSet(e){return new LocaleSet(e)}static log(e){return new Log(e)}static map(e){return new MapElement(e)}static mediumInfo(e){return new MediumInfo(e)}static message(e){return new config_Message(e)}static messaging(e){return new Messaging(e)}static mode(e){return new Mode(e)}static modifyAnnots(e){return new ModifyAnnots(e)}static msgId(e){return new MsgId(e)}static nameAttr(e){return new NameAttr(e)}static neverEmbed(e){return new NeverEmbed(e)}static numberOfCopies(e){return new NumberOfCopies(e)}static openAction(e){return new OpenAction(e)}static output(e){return new Output(e)}static outputBin(e){return new OutputBin(e)}static outputXSL(e){return new OutputXSL(e)}static overprint(e){return new Overprint(e)}static packets(e){return new Packets(e)}static pageOffset(e){return new PageOffset(e)}static pageRange(e){return new PageRange(e)}static pagination(e){return new Pagination(e)}static paginationOverride(e){return new PaginationOverride(e)}static part(e){return new Part(e)}static pcl(e){return new Pcl(e)}static pdf(e){return new Pdf(e)}static pdfa(e){return new Pdfa(e)}static permissions(e){return new Permissions(e)}static pickTrayByPDFSize(e){return new PickTrayByPDFSize(e)}static picture(e){return new config_Picture(e)}static plaintextMetadata(e){return new PlaintextMetadata(e)}static presence(e){return new Presence(e)}static present(e){return new Present(e)}static print(e){return new Print(e)}static printHighQuality(e){return new PrintHighQuality(e)}static printScaling(e){return new PrintScaling(e)}static printerName(e){return new PrinterName(e)}static producer(e){return new Producer(e)}static ps(e){return new Ps(e)}static range(e){return new Range(e)}static record(e){return new Record(e)}static relevant(e){return new Relevant(e)}static rename(e){return new Rename(e)}static renderPolicy(e){return new RenderPolicy(e)}static runScripts(e){return new RunScripts(e)}static script(e){return new config_Script(e)}static scriptModel(e){return new ScriptModel(e)}static severity(e){return new Severity(e)}static silentPrint(e){return new SilentPrint(e)}static staple(e){return new Staple(e)}static startNode(e){return new StartNode(e)}static startPage(e){return new StartPage(e)}static submitFormat(e){return new SubmitFormat(e)}static submitUrl(e){return new SubmitUrl(e)}static subsetBelow(e){return new SubsetBelow(e)}static suppressBanner(e){return new SuppressBanner(e)}static tagged(e){return new Tagged(e)}static template(e){return new config_Template(e)}static templateCache(e){return new TemplateCache(e)}static threshold(e){return new Threshold(e)}static to(e){return new To(e)}static trace(e){return new Trace(e)}static transform(e){return new Transform(e)}static type(e){return new Type(e)}static uri(e){return new Uri(e)}static validate(e){return new config_Validate(e)}static validateApprovalSignatures(e){return new ValidateApprovalSignatures(e)}static validationMessaging(e){return new ValidationMessaging(e)}static version(e){return new Version(e)}static versionControl(e){return new VersionControl(e)}static viewerPreferences(e){return new ViewerPreferences(e)}static webClient(e){return new WebClient(e)}static whitespace(e){return new Whitespace(e)}static window(e){return new Window(e)}static xdc(e){return new Xdc(e)}static xdp(e){return new Xdp(e)}static xsl(e){return new Xsl(e)}static zpl(e){return new Zpl(e)}}const Zo=uo.connectionSet.id;class ConnectionSet extends XFAObject{constructor(e){super(Zo,"connectionSet",!0);this.wsdlConnection=new XFAObjectArray;this.xmlConnection=new XFAObjectArray;this.xsdConnection=new XFAObjectArray}}class EffectiveInputPolicy extends XFAObject{constructor(e){super(Zo,"effectiveInputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class EffectiveOutputPolicy extends XFAObject{constructor(e){super(Zo,"effectiveOutputPolicy");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class Operation extends StringObject{constructor(e){super(Zo,"operation");this.id=e.id||"";this.input=e.input||"";this.name=e.name||"";this.output=e.output||"";this.use=e.use||"";this.usehref=e.usehref||""}}class RootElement extends StringObject{constructor(e){super(Zo,"rootElement");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAction extends StringObject{constructor(e){super(Zo,"soapAction");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class SoapAddress extends StringObject{constructor(e){super(Zo,"soapAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class connection_set_Uri extends StringObject{constructor(e){super(Zo,"uri");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlAddress extends StringObject{constructor(e){super(Zo,"wsdlAddress");this.id=e.id||"";this.name=e.name||"";this.use=e.use||"";this.usehref=e.usehref||""}}class WsdlConnection extends XFAObject{constructor(e){super(Zo,"wsdlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.effectiveInputPolicy=null;this.effectiveOutputPolicy=null;this.operation=null;this.soapAction=null;this.soapAddress=null;this.wsdlAddress=null}}class XmlConnection extends XFAObject{constructor(e){super(Zo,"xmlConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.uri=null}}class XsdConnection extends XFAObject{constructor(e){super(Zo,"xsdConnection",!0);this.dataDescription=e.dataDescription||"";this.name=e.name||"";this.rootElement=null;this.uri=null}}class ConnectionSetNamespace{static[ho](e,t){if(ConnectionSetNamespace.hasOwnProperty(e))return ConnectionSetNamespace[e](t)}static connectionSet(e){return new ConnectionSet(e)}static effectiveInputPolicy(e){return new EffectiveInputPolicy(e)}static effectiveOutputPolicy(e){return new EffectiveOutputPolicy(e)}static operation(e){return new Operation(e)}static rootElement(e){return new RootElement(e)}static soapAction(e){return new SoapAction(e)}static soapAddress(e){return new SoapAddress(e)}static uri(e){return new connection_set_Uri(e)}static wsdlAddress(e){return new WsdlAddress(e)}static wsdlConnection(e){return new WsdlConnection(e)}static xmlConnection(e){return new XmlConnection(e)}static xsdConnection(e){return new XsdConnection(e)}}const Qo=uo.datasets.id;class datasets_Data extends XmlObject{constructor(e){super(Qo,"data",e)}[Ns](){return!0}}class Datasets extends XFAObject{constructor(e){super(Qo,"datasets",!0);this.data=null;this.Signature=null}[Ws](e){const t=e[qs];("data"===t&&e[Xs]===Qo||"Signature"===t&&e[Xs]===uo.signature.id)&&(this[t]=e);this[Yn](e)}}class DatasetsNamespace{static[ho](e,t){if(DatasetsNamespace.hasOwnProperty(e))return DatasetsNamespace[e](t)}static datasets(e){return new Datasets(e)}static data(e){return new datasets_Data(e)}}const ec=uo.localeSet.id;class CalendarSymbols extends XFAObject{constructor(e){super(ec,"calendarSymbols",!0);this.name="gregorian";this.dayNames=new XFAObjectArray(2);this.eraNames=null;this.meridiemNames=null;this.monthNames=new XFAObjectArray(2)}}class CurrencySymbol extends StringObject{constructor(e){super(ec,"currencySymbol");this.name=getStringOption(e.name,["symbol","isoname","decimal"])}}class CurrencySymbols extends XFAObject{constructor(e){super(ec,"currencySymbols",!0);this.currencySymbol=new XFAObjectArray(3)}}class DatePattern extends StringObject{constructor(e){super(ec,"datePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class DatePatterns extends XFAObject{constructor(e){super(ec,"datePatterns",!0);this.datePattern=new XFAObjectArray(4)}}class DateTimeSymbols extends ContentObject{constructor(e){super(ec,"dateTimeSymbols")}}class Day extends StringObject{constructor(e){super(ec,"day")}}class DayNames extends XFAObject{constructor(e){super(ec,"dayNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.day=new XFAObjectArray(7)}}class Era extends StringObject{constructor(e){super(ec,"era")}}class EraNames extends XFAObject{constructor(e){super(ec,"eraNames",!0);this.era=new XFAObjectArray(2)}}class locale_set_Locale extends XFAObject{constructor(e){super(ec,"locale",!0);this.desc=e.desc||"";this.name="isoname";this.calendarSymbols=null;this.currencySymbols=null;this.datePatterns=null;this.dateTimeSymbols=null;this.numberPatterns=null;this.numberSymbols=null;this.timePatterns=null;this.typeFaces=null}}class locale_set_LocaleSet extends XFAObject{constructor(e){super(ec,"localeSet",!0);this.locale=new XFAObjectArray}}class Meridiem extends StringObject{constructor(e){super(ec,"meridiem")}}class MeridiemNames extends XFAObject{constructor(e){super(ec,"meridiemNames",!0);this.meridiem=new XFAObjectArray(2)}}class Month extends StringObject{constructor(e){super(ec,"month")}}class MonthNames extends XFAObject{constructor(e){super(ec,"monthNames",!0);this.abbr=getInteger({data:e.abbr,defaultValue:0,validate:e=>1===e});this.month=new XFAObjectArray(12)}}class NumberPattern extends StringObject{constructor(e){super(ec,"numberPattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class NumberPatterns extends XFAObject{constructor(e){super(ec,"numberPatterns",!0);this.numberPattern=new XFAObjectArray(4)}}class NumberSymbol extends StringObject{constructor(e){super(ec,"numberSymbol");this.name=getStringOption(e.name,["decimal","grouping","percent","minus","zero"])}}class NumberSymbols extends XFAObject{constructor(e){super(ec,"numberSymbols",!0);this.numberSymbol=new XFAObjectArray(5)}}class TimePattern extends StringObject{constructor(e){super(ec,"timePattern");this.name=getStringOption(e.name,["full","long","med","short"])}}class TimePatterns extends XFAObject{constructor(e){super(ec,"timePatterns",!0);this.timePattern=new XFAObjectArray(4)}}class TypeFace extends XFAObject{constructor(e){super(ec,"typeFace",!0);this.name=""|e.name}}class TypeFaces extends XFAObject{constructor(e){super(ec,"typeFaces",!0);this.typeFace=new XFAObjectArray}}class LocaleSetNamespace{static[ho](e,t){if(LocaleSetNamespace.hasOwnProperty(e))return LocaleSetNamespace[e](t)}static calendarSymbols(e){return new CalendarSymbols(e)}static currencySymbol(e){return new CurrencySymbol(e)}static currencySymbols(e){return new CurrencySymbols(e)}static datePattern(e){return new DatePattern(e)}static datePatterns(e){return new DatePatterns(e)}static dateTimeSymbols(e){return new DateTimeSymbols(e)}static day(e){return new Day(e)}static dayNames(e){return new DayNames(e)}static era(e){return new Era(e)}static eraNames(e){return new EraNames(e)}static locale(e){return new locale_set_Locale(e)}static localeSet(e){return new locale_set_LocaleSet(e)}static meridiem(e){return new Meridiem(e)}static meridiemNames(e){return new MeridiemNames(e)}static month(e){return new Month(e)}static monthNames(e){return new MonthNames(e)}static numberPattern(e){return new NumberPattern(e)}static numberPatterns(e){return new NumberPatterns(e)}static numberSymbol(e){return new NumberSymbol(e)}static numberSymbols(e){return new NumberSymbols(e)}static timePattern(e){return new TimePattern(e)}static timePatterns(e){return new TimePatterns(e)}static typeFace(e){return new TypeFace(e)}static typeFaces(e){return new TypeFaces(e)}}const tc=uo.signature.id;class signature_Signature extends XFAObject{constructor(e){super(tc,"signature",!0)}}class SignatureNamespace{static[ho](e,t){if(SignatureNamespace.hasOwnProperty(e))return SignatureNamespace[e](t)}static signature(e){return new signature_Signature(e)}}const ac=uo.stylesheet.id;class Stylesheet extends XFAObject{constructor(e){super(ac,"stylesheet",!0)}}class StylesheetNamespace{static[ho](e,t){if(StylesheetNamespace.hasOwnProperty(e))return StylesheetNamespace[e](t)}static stylesheet(e){return new Stylesheet(e)}}const rc=uo.xdp.id;class xdp_Xdp extends XFAObject{constructor(e){super(rc,"xdp",!0);this.uuid=e.uuid||"";this.timeStamp=e.timeStamp||"";this.config=null;this.connectionSet=null;this.datasets=null;this.localeSet=null;this.stylesheet=new XFAObjectArray;this.template=null}[zs](e){const t=uo[e[qs]];return t&&e[Xs]===t.id}}class XdpNamespace{static[ho](e,t){if(XdpNamespace.hasOwnProperty(e))return XdpNamespace[e](t)}static xdp(e){return new xdp_Xdp(e)}}const ic=uo.xhtml.id,nc=Symbol(),sc=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),oc=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,parseInt(e)/100).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>measureToString(.99*(e=t.fontSize=Math.abs(getMeasurement(e))))],["letter-spacing",e=>measureToString(getMeasurement(e))],["line-height",e=>measureToString(getMeasurement(e))],["margin",e=>measureToString(getMeasurement(e))],["margin-bottom",e=>measureToString(getMeasurement(e))],["margin-left",e=>measureToString(getMeasurement(e))],["margin-right",e=>measureToString(getMeasurement(e))],["margin-top",e=>measureToString(getMeasurement(e))],["text-indent",e=>measureToString(getMeasurement(e))],["font-family",e=>e],["vertical-align",e=>measureToString(getMeasurement(e))]]),cc=/\s+/g,lc=/[\r\n]+/g,hc=/\r\n?/g;function mapStyle(e,t,a){const r=Object.create(null);if(!e)return r;const i=Object.create(null);for(const[t,a]of e.split(";").map((e=>e.split(":",2)))){const e=oc.get(t);if(""===e)continue;let n=a;e&&(n="string"==typeof e?e:e(a,i));t.endsWith("scale")?r.transform=r.transform?`${r[t]} ${n}`:n:r[t.replaceAll(/-([a-zA-Z])/g,((e,t)=>t.toUpperCase()))]=n}r.fontFamily&&setFontFamily({typeface:r.fontFamily,weight:r.fontWeight||"normal",posture:r.fontStyle||"normal",size:i.fontSize||0},t,t[vs].fontFinder,r);if(a&&r.verticalAlign&&"0px"!==r.verticalAlign&&r.fontSize){const e=.583,t=.333,a=getMeasurement(r.fontSize);r.fontSize=measureToString(a*e);r.verticalAlign=measureToString(Math.sign(getMeasurement(r.verticalAlign))*a*t)}a&&r.fontSize&&(r.fontSize=`calc(${r.fontSize} * var(--total-scale-factor))`);fixTextIndent(r);return r}const uc=new Set(["body","html"]);class XhtmlObject extends XmlObject{constructor(e,t){super(ic,t);this[nc]=!1;this.style=e.style||""}[Qn](e){super[Qn](e);this.style=function checkStyle(e){return e.style?e.style.split(";").filter((e=>!!e.trim())).map((e=>e.split(":",2).map((e=>e.trim())))).filter((([t,a])=>{"font-family"===t&&e[vs].usedTypefaces.add(a);return sc.has(t)})).map((e=>e.join(":"))).join(";"):""}(this)}[Kn](){return!uc.has(this[qs])}[$s](e,t=!1){if(t)this[nc]=!0;else{e=e.replaceAll(lc,"");this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(cc," "))}e&&(this[is]+=e)}[Gs](e,t=!0){const a=Object.create(null),r={top:NaN,bottom:NaN,left:NaN,right:NaN};let i=null;for(const[e,t]of this.style.split(";").map((e=>e.split(":",2))))switch(e){case"font-family":a.typeface=stripQuotes(t);break;case"font-size":a.size=getMeasurement(t);break;case"font-weight":a.weight=t;break;case"font-style":a.posture=t;break;case"letter-spacing":a.letterSpacing=getMeasurement(t);break;case"margin":const e=t.split(/ \t/).map((e=>getMeasurement(e)));switch(e.length){case 1:r.top=r.bottom=r.left=r.right=e[0];break;case 2:r.top=r.bottom=e[0];r.left=r.right=e[1];break;case 3:r.top=e[0];r.bottom=e[2];r.left=r.right=e[1];break;case 4:r.top=e[0];r.left=e[1];r.bottom=e[2];r.right=e[3]}break;case"margin-top":r.top=getMeasurement(t);break;case"margin-bottom":r.bottom=getMeasurement(t);break;case"margin-left":r.left=getMeasurement(t);break;case"margin-right":r.right=getMeasurement(t);break;case"line-height":i=getMeasurement(t)}e.pushData(a,r,i);if(this[is])e.addString(this[is]);else for(const t of this[ws]())"#text"!==t[qs]?t[Gs](e):e.addString(t[is]);t&&e.popFont()}[so](e){const t=[];this[os]={children:t};this[Zn]({});if(0===t.length&&!this[is])return HTMLResult.EMPTY;let a;a=this[nc]?this[is]?this[is].replaceAll(hc,"\n"):void 0:this[is]||void 0;return HTMLResult.success({name:this[qs],attributes:{href:this.href,style:mapStyle(this.style,this,this[nc])},children:t,value:a})}}class A extends XhtmlObject{constructor(e){super(e,"a");this.href=fixURL(e.href)||""}}class B extends XhtmlObject{constructor(e){super(e,"b")}[Gs](e){e.pushFont({weight:"bold"});super[Gs](e);e.popFont()}}class Body extends XhtmlObject{constructor(e){super(e,"body")}[so](e){const t=super[so](e),{html:a}=t;if(!a)return HTMLResult.EMPTY;a.name="div";a.attributes.class=["xfaRich"];return t}}class Br extends XhtmlObject{constructor(e){super(e,"br")}[io](){return"\n"}[Gs](e){e.addString("\n")}[so](e){return HTMLResult.success({name:"br"})}}class Html extends XhtmlObject{constructor(e){super(e,"html")}[so](e){const t=[];this[os]={children:t};this[Zn]({});if(0===t.length)return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[is]||""});if(1===t.length){const e=t[0];if(e.attributes?.class.includes("xfaRich"))return HTMLResult.success(e)}return HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class I extends XhtmlObject{constructor(e){super(e,"i")}[Gs](e){e.pushFont({posture:"italic"});super[Gs](e);e.popFont()}}class Li extends XhtmlObject{constructor(e){super(e,"li")}}class Ol extends XhtmlObject{constructor(e){super(e,"ol")}}class P extends XhtmlObject{constructor(e){super(e,"p")}[Gs](e){super[Gs](e,!1);e.addString("\n");e.addPara();e.popFont()}[io](){return this[ks]()[ws]().at(-1)===this?super[io]():super[io]()+"\n"}}class Span extends XhtmlObject{constructor(e){super(e,"span")}}class Sub extends XhtmlObject{constructor(e){super(e,"sub")}}class Sup extends XhtmlObject{constructor(e){super(e,"sup")}}class Ul extends XhtmlObject{constructor(e){super(e,"ul")}}class XhtmlNamespace{static[ho](e,t){if(XhtmlNamespace.hasOwnProperty(e))return XhtmlNamespace[e](t)}static a(e){return new A(e)}static b(e){return new B(e)}static body(e){return new Body(e)}static br(e){return new Br(e)}static html(e){return new Html(e)}static i(e){return new I(e)}static li(e){return new Li(e)}static ol(e){return new Ol(e)}static p(e){return new P(e)}static span(e){return new Span(e)}static sub(e){return new Sub(e)}static sup(e){return new Sup(e)}static ul(e){return new Ul(e)}}const dc={config:ConfigNamespace,connection:ConnectionSetNamespace,datasets:DatasetsNamespace,localeSet:LocaleSetNamespace,signature:SignatureNamespace,stylesheet:StylesheetNamespace,template:TemplateNamespace,xdp:XdpNamespace,xhtml:XhtmlNamespace};class UnknownNamespace{constructor(e){this.namespaceId=e}[ho](e,t){return new XmlObject(this.namespaceId,e,t)}}class Root extends XFAObject{constructor(e){super(-1,"root",Object.create(null));this.element=null;this[Is]=e}[Ws](e){this.element=e;return!0}[cs](){super[cs]();if(this.element.template instanceof Template){this[Is].set(Ys,this.element);this.element.template[Zs](this[Is]);this.element.template[Is]=this[Is]}}}class Empty extends XFAObject{constructor(){super(-1,"",Object.create(null))}[Ws](e){return!1}}class Builder{constructor(e=null){this._namespaceStack=[];this._nsAgnosticLevel=0;this._namespacePrefixes=new Map;this._namespaces=new Map;this._nextNsId=Math.max(...Object.values(uo).map((({id:e})=>e)));this._currentNamespace=e||new UnknownNamespace(++this._nextNsId)}buildRoot(e){return new Root(e)}build({nsPrefix:e,name:t,attributes:a,namespace:r,prefixes:i}){const n=null!==r;if(n){this._namespaceStack.push(this._currentNamespace);this._currentNamespace=this._searchNamespace(r)}i&&this._addNamespacePrefix(i);if(a.hasOwnProperty(Hs)){const e=dc.datasets,t=a[Hs];let r=null;for(const[a,i]of Object.entries(t)){if(this._getNamespaceToUse(a)===e){r={xfa:i};break}}r?a[Hs]=r:delete a[Hs]}const s=this._getNamespaceToUse(e),o=s?.[ho](t,a)||new Empty;o[Ns]()&&this._nsAgnosticLevel++;(n||i||o[Ns]())&&(o[ts]={hasNamespace:n,prefixes:i,nsAgnostic:o[Ns]()});return o}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[a,{check:r}]of Object.entries(uo))if(r(e)){t=dc[a];if(t){this._namespaces.set(e,t);return t}break}t=new UnknownNamespace(++this._nextNsId);this._namespaces.set(e,t);return t}_addNamespacePrefix(e){for(const{prefix:t,value:a}of e){const e=this._searchNamespace(a);let r=this._namespacePrefixes.get(t);if(!r){r=[];this._namespacePrefixes.set(t,r)}r.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);if(t?.length>0)return t.at(-1);warn(`Unknown namespace prefix: ${e}.`);return null}clean(e){const{hasNamespace:t,prefixes:a,nsAgnostic:r}=e;t&&(this._currentNamespace=this._namespaceStack.pop());a&&a.forEach((({prefix:e})=>{this._namespacePrefixes.get(e).pop()}));r&&this._nsAgnosticLevel--}}class XFAParser extends XMLParserBase{constructor(e=null,t=!1){super();this._builder=new Builder(e);this._stack=[];this._globalData={usedTypefaces:new Set};this._ids=new Map;this._current=this._builder.buildRoot(this._ids);this._errorCode=Pn;this._whiteRegex=/^\s+$/;this._nbsps=/\xa0+/g;this._richText=t}parse(e){this.parseXml(e);if(this._errorCode===Pn){this._current[cs]();return this._current.element}}onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" "));this._richText||this._current[Kn]()?this._current[$s](e,this._richText):this._whiteRegex.test(e)||this._current[$s](e.trim())}onCdata(e){this._current[$s](e)}_mkAttributes(e,t){let a=null,r=null;const i=Object.create({});for(const{name:n,value:s}of e)if("xmlns"===n)a?warn(`XFA - multiple namespace definition in <${t}>`):a=s;else if(n.startsWith("xmlns:")){const e=n.substring(6);r??=[];r.push({prefix:e,value:s})}else{const e=n.indexOf(":");if(-1===e)i[n]=s;else{const t=i[Hs]??=Object.create(null),[a,r]=[n.slice(0,e),n.slice(e+1)];(t[a]||=Object.create(null))[r]=s}}return[a,r,i]}_getNameAndPrefix(e,t){const a=e.indexOf(":");return-1===a?[e,null]:[e.substring(a+1),t?"":e.substring(0,a)]}onBeginElement(e,t,a){const[r,i,n]=this._mkAttributes(t,e),[s,o]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),c=this._builder.build({nsPrefix:o,name:s,attributes:n,namespace:r,prefixes:i});c[vs]=this._globalData;if(a){c[cs]();this._current[Ws](c)&&c[eo](this._ids);c[Qn](this._builder)}else{this._stack.push(this._current);this._current=c}}onEndElement(e){const t=this._current;if(t[Ms]()&&"string"==typeof t[is]){const e=new XFAParser;e._globalData=this._globalData;const a=e.parse(t[is]);t[is]=null;t[Ws](a)}t[cs]();this._current=this._stack.pop();this._current[Ws](t)&&t[eo](this._ids);t[Qn](this._builder)}onError(e){this._errorCode=e}}class XFAFactory{constructor(e){try{this.root=(new XFAParser).parse(XFAFactory._createDocument(e));const t=new Binder(this.root);this.form=t.bind();this.dataHandler=new DataHandler(this.root,t.getData());this.form[vs].template=this.form}catch(e){warn(`XFA - an error occurred during parsing and binding: ${e}`)}}isValid(){return!(!this.root||!this.form)}_createPagesHelper(){const e=this.form[no]();return new Promise(((t,a)=>{const nextIteration=()=>{try{const a=e.next();a.done?t(a.value):setTimeout(nextIteration,0)}catch(e){a(e)}};setTimeout(nextIteration,0)}))}async _createPages(){try{this.pages=await this._createPagesHelper();this.dims=this.pages.children.map((e=>{const{width:t,height:a}=e.attributes.style;return[0,0,parseInt(t),parseInt(a)]}))}catch(e){warn(`XFA - an error occurred during layout: ${e}`)}}getBoundingBox(e){return this.dims[e]}async getNumPages(){this.pages||await this._createPages();return this.dims.length}setImages(e){this.form[vs].images=e}setFonts(e){this.form[vs].fontFinder=new FontFinder(e);const t=[];for(let e of this.form[vs].usedTypefaces){e=stripQuotes(e);this.form[vs].fontFinder.find(e)||t.push(e)}return t.length>0?t:null}appendFonts(e,t){this.form[vs].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;this.pages=null;return e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new XFAParser(XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[qs])){const e=XhtmlNamespace.body({});e[Yn](t);t=e}const a=t[so]();if(!a.success)return null;const{html:r}=a,{attributes:i}=r;if(i){i.class&&(i.class=i.class.filter((e=>!e.startsWith("xfa"))));i.dir="auto"}return{html:r,str:t[io]()}}catch(e){warn(`XFA - an error occurred during parsing of rich text: ${e}`)}return null}}class AnnotationFactory{static createGlobals(e){return Promise.all([e.ensureCatalog("acroForm"),e.ensureDoc("xfaDatasets"),e.ensureCatalog("structTreeRoot"),e.ensureCatalog("baseUrl"),e.ensureCatalog("attachments"),e.ensureCatalog("globalColorSpaceCache")]).then((([t,a,r,i,n,s])=>({pdfManager:e,acroForm:t instanceof Dict?t:Dict.empty,xfaDatasets:a,structTreeRoot:r,baseUrl:i,attachments:n,globalColorSpaceCache:s})),(e=>{warn(`createGlobals: "${e}".`);return null}))}static async create(e,t,a,r,i,n,s){const o=i?await this._getPageIndex(e,t,a.pdfManager):null;return a.pdfManager.ensure(this,"_create",[e,t,a,r,i,n,o,s])}static _create(e,t,a,r,i=!1,n=null,s=null,o=null){const c=e.fetchIfRef(t);if(!(c instanceof Dict))return;const{acroForm:l,pdfManager:h}=a,u=t instanceof Ref?t.toString():`annot_${r.createObjId()}`;let d=c.get("Subtype");d=d instanceof Name?d.name:null;const f={xref:e,ref:t,dict:c,subtype:d,id:u,annotationGlobals:a,collectFields:i,orphanFields:n,needAppearances:!i&&!0===l.get("NeedAppearances"),pageIndex:s,evaluatorOptions:h.evaluatorOptions,pageRef:o};switch(d){case"Link":return new LinkAnnotation(f);case"Text":return new TextAnnotation(f);case"Widget":let e=getInheritableProperty({dict:c,key:"FT"});e=e instanceof Name?e.name:null;switch(e){case"Tx":return new TextWidgetAnnotation(f);case"Btn":return new ButtonWidgetAnnotation(f);case"Ch":return new ChoiceWidgetAnnotation(f);case"Sig":return new SignatureWidgetAnnotation(f)}warn(`Unimplemented widget field type "${e}", falling back to base field type.`);return new WidgetAnnotation(f);case"Popup":return new PopupAnnotation(f);case"FreeText":return new FreeTextAnnotation(f);case"Line":return new LineAnnotation(f);case"Square":return new SquareAnnotation(f);case"Circle":return new CircleAnnotation(f);case"PolyLine":return new PolylineAnnotation(f);case"Polygon":return new PolygonAnnotation(f);case"Caret":return new CaretAnnotation(f);case"Ink":return new InkAnnotation(f);case"Highlight":return new HighlightAnnotation(f);case"Underline":return new UnderlineAnnotation(f);case"Squiggly":return new SquigglyAnnotation(f);case"StrikeOut":return new StrikeOutAnnotation(f);case"Stamp":return new StampAnnotation(f);case"FileAttachment":return new FileAttachmentAnnotation(f);default:i||warn(d?`Unimplemented annotation type "${d}", falling back to base annotation.`:"Annotation is missing the required /Subtype.");return new Annotation(f)}}static async _getPageIndex(e,t,a){try{const r=await e.fetchIfRefAsync(t);if(!(r instanceof Dict))return-1;const i=r.getRaw("P");if(i instanceof Ref)try{return await a.ensureCatalog("getPageIndex",[i])}catch(e){info(`_getPageIndex -- not a valid page reference: "${e}".`)}if(r.has("Kids"))return-1;const n=await a.ensureDoc("numPages");for(let e=0;ee/255))}function getQuadPoints(e,t){const a=e.getArray("QuadPoints");if(!isNumberArray(a,null)||0===a.length||a.length%8>0)return null;const r=new Float32Array(a.length);for(let e=0,i=a.length;et[2]||gt[3]))return null;r.set([d,p,f,p,d,g,f,g],e)}return r}function getTransformMatrix(e,t,a){const r=new Float32Array([1/0,1/0,-1/0,-1/0]);Util.axialAlignedBoundingBox(t,a,r);const[i,n,s,o]=r;if(i===s||n===o)return[1,0,0,1,e[0],e[1]];const c=(e[2]-e[0])/(s-i),l=(e[3]-e[1])/(o-n);return[c,0,0,l,e[0]-i*c,e[1]-n*l]}class Annotation{constructor(e){const{dict:t,xref:a,annotationGlobals:r,ref:i,orphanFields:n}=e,s=n?.get(i);s&&t.set("Parent",s);this.setTitle(t.get("T"));this.setContents(t.get("Contents"));this.setModificationDate(t.get("M"));this.setFlags(t.get("F"));this.setRectangle(t.getArray("Rect"));this.setColor(t.getArray("C"));this.setBorderStyle(t);this.setAppearance(t);this.setOptionalContent(t);const o=t.get("MK");this.setBorderAndBackgroundColors(o);this.setRotation(o,t);this.ref=e.ref instanceof Ref?e.ref:null;this._streams=[];this.appearance&&this._streams.push(this.appearance);const c=!!(this.flags&ee),l=!!(this.flags&te);this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&Z),noHTML:c&&l,isEditable:!1,structParent:-1};if(r.structTreeRoot){let a=t.get("StructParent");this.data.structParent=a=Number.isInteger(a)&&a>=0?a:-1;r.structTreeRoot.addAnnotationIdToPage(e.pageRef,a)}if(e.collectFields){const r=t.get("Kids");if(Array.isArray(r)){const e=[];for(const t of r)t instanceof Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=collectActions(a,t,ye);this.data.fieldName=this._constructFieldName(t);this.data.pageIndex=e.pageIndex}const h=t.get("IT");h instanceof Name&&(this.data.it=h.name);this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported;this._fallbackFontDict=null;this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_buildFlags(e,t){let{flags:a}=this;if(void 0===e){if(void 0===t)return;return t?a&~Y:a&~J|Y}if(e){a|=Y;return t?a&~Q|J:a&~J|Q}a&=~(J|Q);return t?a&~Y:a|Y}_isViewable(e){return!this._hasFlag(e,K)&&!this._hasFlag(e,Q)}_isPrintable(e){return this._hasFlag(e,Y)&&!this._hasFlag(e,J)&&!this._hasFlag(e,K)}mustBeViewed(e,t){const a=e?.get(this.data.id)?.noView;return void 0!==a?!a:this.viewable&&!this._hasFlag(this.flags,J)}mustBePrinted(e){const t=e?.get(this.data.id)?.noPrint;return void 0!==t?!t:this.printable}mustBeViewedWhenEditing(e,t=null){return e?!this.data.isEditable:!t?.has(this.data.id)}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&(0!==this.flags&&this._isPrintable(this.flags))}_parseStringHelper(e){const t="string"==typeof e?stringToPDFString(e):"";return{str:t,dir:t&&"rtl"===bidi(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const{dict:t,annotationGlobals:a}=e,r=getInheritableProperty({dict:t,key:"DA"})||a.acroForm.get("DA");this._defaultAppearance="string"==typeof r?r:"";this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0;this.flags&K&&"Annotation"!==this.constructor.name&&(this.flags^=K)}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=lookupNormalRect(e,[0,0,0,0])}setColor(e){this.color=getRgbColor(e)}setLineEndings(e){this.lineEndings=["None","None"];if(Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const a=e[t];if(a instanceof Name)switch(a.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=a.name;continue}warn(`Ignoring invalid lineEnding: ${a}`)}}setRotation(e,t){this.rotation=0;let a=e instanceof Dict?e.get("R")||0:t.get("Rotate")||0;if(Number.isInteger(a)&&0!==a){a%=360;a<0&&(a+=360);a%90==0&&(this.rotation=a)}}setBorderAndBackgroundColors(e){if(e instanceof Dict){this.borderColor=getRgbColor(e.getArray("BC"),null);this.backgroundColor=getRgbColor(e.getArray("BG"),null)}else this.borderColor=this.backgroundColor=null}setBorderStyle(e){this.borderStyle=new AnnotationBorderStyle;if(e instanceof Dict)if(e.has("BS")){const t=e.get("BS");if(t instanceof Dict){const e=t.get("Type");if(!e||isName(e,"Border")){this.borderStyle.setWidth(t.get("W"),this.rectangle);this.borderStyle.setStyle(t.get("S"));this.borderStyle.setDashArray(t.getArray("D"))}}}else if(e.has("Border")){const t=e.getArray("Border");if(Array.isArray(t)&&t.length>=3){this.borderStyle.setHorizontalCornerRadius(t[0]);this.borderStyle.setVerticalCornerRadius(t[1]);this.borderStyle.setWidth(t[2],this.rectangle);4===t.length&&this.borderStyle.setDashArray(t[3],!0)}}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(a instanceof BaseStream){this.appearance=a;return}if(!(a instanceof Dict))return;const r=e.get("AS");if(!(r instanceof Name&&a.has(r.name)))return;const i=a.get(r.name);i instanceof BaseStream&&(this.appearance=i)}setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof Name?warn("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof Dict&&(this.oc=t)}async loadResources(e,t){const a=await t.dict.getAsync("Resources");a&&await ObjectLoader.load(a,e,a.xref);return a}async getOperatorList(e,t,a,r){const{hasOwnCanvas:i,id:n,rect:o}=this.data;let c=this.appearance;const l=!!(i&&a&s);if(l&&(0===this.width||0===this.height)){this.data.hasOwnCanvas=!1;return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}if(!c){if(!l)return{opList:new OperatorList,separateForm:!1,separateCanvas:!1};c=new StringStream("");c.dict=new Dict}const h=c.dict,u=await this.loadResources(Ia,c),d=lookupRect(h.getArray("BBox"),[0,0,1,1]),f=lookupMatrix(h.getArray("Matrix"),Fa),g=getTransformMatrix(o,d,f),p=new OperatorList;let m;this.oc&&(m=await e.parseMarkedContentProps(this.oc,null));void 0!==m&&p.addOp(jt,["OC",m]);p.addOp($t,[n,o,g,f,l]);await e.getOperatorList({stream:c,task:t,resources:u,operatorList:p,fallbackFontDict:this._fallbackFontDict});p.addOp(Gt,[]);void 0!==m&&p.addOp(_t,[]);this.reset();return{opList:p,separateForm:!1,separateCanvas:l}}async save(e,t,a,r){return null}get hasTextContent(){return!1}async extractTextContent(e,t,a){if(!this.appearance)return;const r=await this.loadResources(Oa,this.appearance),i=[],n=[];let s=null;const o={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)if(void 0!==t.str){s||=t.transform.slice(-2);n.push(t.str);if(t.hasEOL){i.push(n.join("").trimEnd());n.length=0}}}};await e.getTextContent({stream:this.appearance,task:t,resources:r,includeMarkedContent:!0,keepWhiteSpace:!0,sink:o,viewBox:a});this.reset();n.length&&i.push(n.join("").trimEnd());if(i.length>1||i[0]){const e=this.appearance.dict,t=lookupRect(e.getArray("BBox"),null),a=lookupMatrix(e.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(s,t,a);this.data.textContent=i}}_transformPoint(e,t,a){const{rect:r}=this.data;t||=[0,0,1,1];a||=[1,0,0,1,0,0];const i=getTransformMatrix(r,t,a);i[4]-=r[0];i[5]-=r[1];const n=e.slice();Util.applyTransform(n,i);Util.applyTransform(n,a);return n}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent")){warn("Unknown field name, falling back to empty field name.");return""}if(!e.has("Parent"))return stringToPDFString(e.get("T"));const t=[];e.has("T")&&t.unshift(stringToPDFString(e.get("T")));let a=e;const r=new RefSet;e.objId&&r.put(e.objId);for(;a.has("Parent");){a=a.get("Parent");if(!(a instanceof Dict)||a.objId&&r.has(a.objId))break;a.objId&&r.put(a.objId);a.has("T")&&t.unshift(stringToPDFString(a.get("T")))}return t.join(".")}get width(){return this.data.rect[2]-this.data.rect[0]}get height(){return this.data.rect[3]-this.data.rect[1]}}class AnnotationBorderStyle{constructor(){this.width=1;this.rawWidth=1;this.style=fe;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}setWidth(e,t=[0,0,0,0]){if(e instanceof Name)this.width=0;else if("number"==typeof e){if(e>0){this.rawWidth=e;const a=(t[2]-t[0])/2,r=(t[3]-t[1])/2;if(a>0&&r>0&&(e>a||e>r)){warn(`AnnotationBorderStyle.setWidth - ignoring width: ${e}`);e=1}}this.width=e}}setStyle(e){if(e instanceof Name)switch(e.name){case"S":this.style=fe;break;case"D":this.style=ge;break;case"B":this.style=pe;break;case"I":this.style=me;break;case"U":this.style=be}}setDashArray(e,t=!1){if(Array.isArray(e)){let a=!0,r=!0;for(const t of e){if(!(+t>=0)){a=!1;break}t>0&&(r=!1)}if(0===e.length||a&&!r){this.dashArray=e;t&&this.setStyle(Name.get("D"))}else this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}class MarkupAnnotation extends Annotation{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof Ref?e.toString():null;const a=t.get("RT");this.data.replyType=a instanceof Name?a.name:V}let a=null;if(this.data.replyType===G){const e=t.get("IRT");this.setTitle(e.get("T"));this.data.titleObj=this._title;this.setContents(e.get("Contents"));this.data.contentsObj=this._contents;if(e.has("CreationDate")){this.setCreationDate(e.get("CreationDate"));this.data.creationDate=this.creationDate}else this.data.creationDate=null;if(e.has("M")){this.setModificationDate(e.get("M"));this.data.modificationDate=this.modificationDate}else this.data.modificationDate=null;a=e.getRaw("Popup");if(e.has("C")){this.setColor(e.getArray("C"));this.data.color=this.color}else this.data.color=null}else{this.data.titleObj=this._title;this.setCreationDate(t.get("CreationDate"));this.data.creationDate=this.creationDate;a=t.getRaw("Popup");t.has("C")||(this.data.color=null)}this.data.popupRef=a instanceof Ref?a.toString():null;t.has("RC")&&(this.data.richText=XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance({xref:e,extra:t,strokeColor:a,fillColor:r,blendMode:i,strokeAlpha:n,fillAlpha:s,pointsCallback:o}){const c=this.data.rect=[1/0,1/0,-1/0,-1/0],l=["q"];t&&l.push(t);a&&l.push(`${a[0]} ${a[1]} ${a[2]} RG`);r&&l.push(`${r[0]} ${r[1]} ${r[2]} rg`);const h=this.data.quadPoints||Float32Array.from([this.rectangle[0],this.rectangle[3],this.rectangle[2],this.rectangle[3],this.rectangle[0],this.rectangle[1],this.rectangle[2],this.rectangle[1]]);for(let e=0,t=h.length;e"string"==typeof e)).map((e=>stringToPDFString(e))):e instanceof Name?stringToPDFString(e.name):"string"==typeof e?stringToPDFString(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}_isViewable(e){return!0}mustBeViewed(e,t){return t?this.viewable:super.mustBeViewed(e,t)&&!this._hasFlag(this.flags,Q)}getRotationMatrix(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);return 0===t?Fa:getRotationMatrix(t,this.width,this.height)}getBorderAndBackgroundAppearances(e){let t=e?.get(this.data.id)?.rotation;void 0===t&&(t=this.rotation);if(!this.backgroundColor&&!this.borderColor)return"";const a=0===t||180===t?`0 0 ${this.width} ${this.height} re`:`0 0 ${this.height} ${this.width} re`;let r="";this.backgroundColor&&(r=`${getPdfColor(this.backgroundColor,!0)} ${a} f `);if(this.borderColor){r+=`${this.borderStyle.width||1} w ${getPdfColor(this.borderColor,!1)} ${a} S `}return r}async getOperatorList(e,t,a,r){if(a&l&&!(this instanceof SignatureWidgetAnnotation)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new OperatorList,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(e,t,a,r);const i=await this._getAppearance(e,t,a,r);if(this.appearance&&null===i)return super.getOperatorList(e,t,a,r);const n=new OperatorList;if(!this._defaultAppearance||null===i)return{opList:n,separateForm:!1,separateCanvas:!1};const o=!!(this.data.hasOwnCanvas&&a&s),c=[0,0,this.width,this.height],h=getTransformMatrix(this.data.rect,c,[1,0,0,1,0,0]);let u;this.oc&&(u=await e.parseMarkedContentProps(this.oc,null));void 0!==u&&n.addOp(jt,["OC",u]);n.addOp($t,[this.data.id,this.data.rect,h,this.getRotationMatrix(r),o]);const d=new StringStream(i);await e.getOperatorList({stream:d,task:t,resources:this._fieldResources.mergedResources,operatorList:n});n.addOp(Gt,[]);void 0!==u&&n.addOp(_t,[]);return{opList:n,separateForm:!1,separateCanvas:o}}_getMKDict(e){const t=new Dict(null);e&&t.set("R",e);this.borderColor&&t.set("BC",getPdfColorArray(this.borderColor));this.backgroundColor&&t.set("BG",getPdfColorArray(this.backgroundColor));return t.size>0?t:null}amendSavedDict(e,t){}setValue(e,t,a,r){const{dict:i,ref:n}=function getParentToUpdate(e,t,a){const r=new RefSet,i=e,n={dict:null,ref:null};for(;e instanceof Dict&&!r.has(t);){r.put(t);if(e.has("T"))break;if(!((t=e.getRaw("Parent"))instanceof Ref))return n;e=a.fetch(t)}if(e instanceof Dict&&e!==i){n.dict=e;n.ref=t}return n}(e,this.ref,a);if(i){if(!r.has(n)){const e=i.clone();e.set("V",t);r.put(n,{data:e});return e}}else e.set("V",t);return null}async save(e,t,a,r){const i=a?.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.value,o=i?.rotation;if(s===this.data.fieldValue||void 0===s){if(!this._hasValueFromXFA&&void 0===o&&void 0===n)return;s||=this.data.fieldValue}if(void 0===o&&!this._hasValueFromXFA&&Array.isArray(s)&&Array.isArray(this.data.fieldValue)&&isArrayEqual(s,this.data.fieldValue)&&void 0===n)return;void 0===o&&(o=this.rotation);let l=null;if(!this._needAppearances){l=await this._getAppearance(e,t,c,a);if(null===l&&void 0===n)return}let h=!1;if(l?.needAppearances){h=!0;l=null}const{xref:u}=e,d=u.fetchIfRef(this.ref);if(!(d instanceof Dict))return;const f=new Dict(u);for(const e of d.getKeys())"AP"!==e&&f.set(e,d.getRaw(e));if(void 0!==n){f.set("F",n);if(null===l&&!h){const e=d.getRaw("AP");e&&f.set("AP",e)}}const g={path:this.data.fieldName,value:s},p=this.setValue(f,Array.isArray(s)?s.map(stringToAsciiOrUTF16BE):stringToAsciiOrUTF16BE(s),u,r);this.amendSavedDict(a,p||f);const m=this._getMKDict(o);m&&f.set("MK",m);r.put(this.ref,{data:f,xfa:g,needAppearances:h});if(null!==l){const e=u.getNewTemporaryRef(),t=new Dict(u);f.set("AP",t);t.set("N",e);const i=this._getSaveFieldResources(u),n=new StringStream(l),s=n.dict=new Dict(u);s.set("Subtype",Name.get("Form"));s.set("Resources",i);const c=o%180==0?[0,0,this.width,this.height]:[0,0,this.height,this.width];s.set("BBox",c);const h=this.getRotationMatrix(a);h!==Fa&&s.set("Matrix",h);r.put(e,{data:n,xfa:null,needAppearances:!1})}f.set("M",`D:${getModificationDate()}`)}async _getAppearance(e,t,a,r){if(this.data.password)return null;const n=r?.get(this.data.id);let s,o;if(n){s=n.formattedValue||n.value;o=n.rotation}if(void 0===o&&void 0===s&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const l=this.getBorderAndBackgroundAppearances(r);if(void 0===s){s=this.data.fieldValue;if(!s)return`/Tx BMC q ${l}Q EMC`}Array.isArray(s)&&1===s.length&&(s=s[0]);assert("string"==typeof s,"Expected `value` to be a string.");s=s.trimEnd();if(this.data.combo){const e=this.data.options.find((({exportValue:e})=>s===e));s=e?.displayValue||s}if(""===s)return`/Tx BMC q ${l}Q EMC`;void 0===o&&(o=this.rotation);let h,u=-1;if(this.data.multiLine){h=s.split(/\r\n?|\n/).map((e=>e.normalize("NFC")));u=h.length}else h=[s.replace(/\r\n?|\n/,"").normalize("NFC")];let{width:d,height:f}=this;90!==o&&270!==o||([d,f]=[f,d]);this._defaultAppearance||(this.data.defaultAppearanceData=parseDefaultAppearance(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let g,p,m,b=await WidgetAnnotation._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const y=[];let w=!1;for(const e of h){const t=b.encodeString(e);t.length>1&&(w=!0);y.push(t.join(""))}if(w&&a&c)return{needAppearances:!0};if(w&&this._isOffscreenCanvasSupported){const a=this.data.comb?"monospace":"sans-serif",r=new FakeUnicodeFont(e.xref,a),i=r.createFontResources(h.join("")),n=i.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const t of n.getKeys())e.set(t,n.getRaw(t))}else this._fieldResources.mergedResources.set("Font",n);const o=r.fontName.name;b=await WidgetAnnotation._getFontData(e,t,{fontName:o,fontSize:0},i);for(let e=0,t=y.length;e2)return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 ${numberToString(2)} ${numberToString(C)} Tm (${escapeString(y[0])}) Tj ET Q EMC`;return`/Tx BMC q ${l}BT `+g+` 1 0 0 1 0 0 Tm ${this._renderText(y[0],b,p,d,k,{shift:0},2,C)} ET Q EMC`}static async _getFontData(e,t,a,r){const i=new OperatorList,n={font:null,clone(){return this}},{fontName:s,fontSize:o}=a;await e.handleSetFont(r,[s&&Name.get(s),o],null,i,t,n,null);return n.font}_getTextWidth(e,t){return Math.sumPrecise(t.charsToGlyphs(e).map((e=>e.width)))/1e3}_computeFontSize(e,t,r,i,n){let{fontSize:s}=this.data.defaultAppearanceData,o=(s||12)*a,c=Math.round(e/o);if(!s){const roundWithTwoDigits=e=>Math.floor(100*e)/100;if(-1===n){const n=this._getTextWidth(r,i);s=roundWithTwoDigits(Math.min(e/a,t/n));c=1}else{const l=r.split(/\r\n?|\n/),h=[];for(const e of l){const t=i.encodeString(e).join(""),a=i.charsToGlyphs(t),r=i.getCharPositions(t);h.push({line:t,glyphs:a,positions:r})}const isTooBig=a=>{let r=0;for(const n of h){r+=this._splitLine(null,i,a,t,n).length*a;if(r>e)return!0}return!1};c=Math.max(c,n);for(;;){o=e/c;s=roundWithTwoDigits(o/a);if(!isTooBig(s))break;c++}}const{fontName:l,fontColor:h}=this.data.defaultAppearanceData;this._defaultAppearance=function createDefaultAppearance({fontSize:e,fontName:t,fontColor:a}){return`/${escapePDFName(t)} ${e} Tf ${getPdfColor(a,!0)}`}({fontSize:s,fontName:l,fontColor:h})}return[this._defaultAppearance,s,e/c]}_renderText(e,t,a,r,i,n,s,o){let c;if(1===i){c=(r-this._getTextWidth(e,t)*a)/2}else if(2===i){c=r-this._getTextWidth(e,t)*a-s}else c=s;const l=numberToString(c-n.shift);n.shift=c;return`${l} ${o=numberToString(o)} Td (${escapeString(e)}) Tj`}_getSaveFieldResources(e){const{localResources:t,appearanceResources:a,acroFormResources:r}=this._fieldResources,i=this.data.defaultAppearanceData?.fontName;if(!i)return t||Dict.empty;for(const e of[t,a])if(e instanceof Dict){const t=e.get("Font");if(t instanceof Dict&&t.has(i))return e}if(r instanceof Dict){const a=r.get("Font");if(a instanceof Dict&&a.has(i)){const r=new Dict(e);r.set(i,a.getRaw(i));const n=new Dict(e);n.set("Font",r);return Dict.merge({xref:e,dictArray:[n,t],mergeSubDicts:!0})}}return t||Dict.empty}getFieldObject(){return null}}class TextWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t}=e;if(t.has("PMD")){this.flags|=J;this.data.hidden=!0;warn("Barcodes are not supported")}this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML;this._hasText=!0;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");let a=getInheritableProperty({dict:t,key:"Q"});(!Number.isInteger(a)||a<0||a>2)&&(a=null);this.data.textAlignment=a;let r=getInheritableProperty({dict:t,key:"MaxLen"});(!Number.isInteger(r)||r<0)&&(r=0);this.data.maxLen=r;this.data.multiLine=this.hasFieldFlag(ie);this.data.comb=this.hasFieldFlag(de)&&!this.data.multiLine&&!this.data.password&&!this.hasFieldFlag(le)&&0!==this.data.maxLen;this.data.doNotScroll=this.hasFieldFlag(ue)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,a,r,i,n,s,o,c,l,h){const u=i/this.data.maxLen,d=this.getBorderAndBackgroundAppearances(h),f=[],g=t.getCharPositions(a);for(const[e,t]of g)f.push(`(${escapeString(a.substring(e,t))}) Tj`);const p=f.join(` ${numberToString(u)} 0 Td `);return`/Tx BMC q ${d}BT `+e+` 1 0 0 1 ${numberToString(s)} ${numberToString(o+c)} Tm ${p} ET Q EMC`}_getMultilineAppearance(e,t,a,r,i,n,s,o,c,l,h,u){const d=[],f=i-2*o,g={shift:0};for(let e=0,n=t.length;er){c.push(e.substring(d,a));d=a;f=p;l=-1;u=-1}else{f+=p;l=a;h=i;u=t}else if(f+p>r)if(-1!==l){c.push(e.substring(d,h));d=h;t=u+1;l=-1;f=0}else{c.push(e.substring(d,a));d=a;f=p}else f+=p}dt?`\\${t}`:"\\s+"));new RegExp(`^\\s*${n}\\s*$`).test(this.data.fieldValue)&&(this.data.textContent=this.data.fieldValue.split("\n"))}getFieldObject(){return{id:this.data.id,value:this.data.fieldValue,defaultValue:this.data.defaultFieldValue||"",multiline:this.data.multiLine,password:this.data.password,charLimit:this.data.maxLen,comb:this.data.comb,editable:!this.data.readOnly,hidden:this.data.hidden,name:this.data.fieldName,rect:this.data.rect,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:"text"}}}class ButtonWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);this.checkedAppearance=null;this.uncheckedAppearance=null;const t=this.hasFieldFlag(se),a=this.hasFieldFlag(oe);this.data.checkBox=!t&&!a;this.data.radioButton=t&&!a;this.data.pushButton=a;this.data.isTooltipOnly=!1;if(this.data.checkBox)this._processCheckBox(e);else if(this.data.radioButton)this._processRadioButton(e);else if(this.data.pushButton){this.data.hasOwnCanvas=!0;this.data.noHTML=!1;this._processPushButton(e)}else warn("Invalid field flags for button widget annotation")}async getOperatorList(e,t,a,r){if(this.data.pushButton)return super.getOperatorList(e,t,a,!1,r);let i=null,n=null;if(r){const e=r.get(this.data.id);i=e?e.value:null;n=e?e.rotation:null}if(null===i&&this.appearance)return super.getOperatorList(e,t,a,r);null==i&&(i=this.data.checkBox?this.data.fieldValue===this.data.exportValue:this.data.fieldValue===this.data.buttonValue);const s=i?this.checkedAppearance:this.uncheckedAppearance;if(s){const i=this.appearance,o=lookupMatrix(s.dict.getArray("Matrix"),Fa);n&&s.dict.set("Matrix",this.getRotationMatrix(r));this.appearance=s;const c=super.getOperatorList(e,t,a,r);this.appearance=i;s.dict.set("Matrix",o);return c}return{opList:new OperatorList,separateForm:!1,separateCanvas:!1}}async save(e,t,a,r){this.data.checkBox?this._saveCheckbox(e,t,a,r):this.data.radioButton&&this._saveRadioButton(e,t,a,r)}async _saveCheckbox(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.exportValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===s&&(s=this.rotation);void 0===o&&(o=this.data.fieldValue===this.data.exportValue);const l={path:this.data.fieldName,value:o?this.data.exportValue:""},h=Name.get(o?this.data.exportValue:"Off");this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}async _saveRadioButton(e,t,a,r){if(!a)return;const i=a.get(this.data.id),n=this._buildFlags(i?.noView,i?.noPrint);let s=i?.rotation,o=i?.value;if(void 0===s&&void 0===n){if(void 0===o)return;if(this.data.fieldValue===this.data.buttonValue===o)return}let c=e.xref.fetchIfRef(this.ref);if(!(c instanceof Dict))return;c=c.clone();void 0===o&&(o=this.data.fieldValue===this.data.buttonValue);void 0===s&&(s=this.rotation);const l={path:this.data.fieldName,value:o?this.data.buttonValue:""},h=Name.get(o?this.data.buttonValue:"Off");o&&this.setValue(c,h,e.xref,r);c.set("AS",h);c.set("M",`D:${getModificationDate()}`);void 0!==n&&c.set("F",n);const u=this._getMKDict(s);u&&c.set("MK",u);r.put(this.ref,{data:c,xfa:l,needAppearances:!1})}_getDefaultCheckedAppearance(e,t){const{width:a,height:r}=this,i=[0,0,a,r],n=.8*Math.min(a,r);let s,o;if("check"===t){s={width:.755*n,height:.705*n};o="3"}else if("disc"===t){s={width:.791*n,height:.705*n};o="l"}else unreachable(`_getDefaultCheckedAppearance - unsupported type: ${t}`);const c=`q BT /PdfJsZaDb ${n} Tf 0 g ${numberToString((a-s.width)/2)} ${numberToString((r-s.height)/2)} Td (${o}) Tj ET Q`,l=new Dict(e.xref);l.set("FormType",1);l.set("Subtype",Name.get("Form"));l.set("Type",Name.get("XObject"));l.set("BBox",i);l.set("Matrix",[1,0,0,1,0,0]);l.set("Length",c.length);const h=new Dict(e.xref),u=new Dict(e.xref);u.set("PdfJsZaDb",this.fallbackFontDict);h.set("Font",u);l.set("Resources",h);this.checkedAppearance=new StringStream(c);this.checkedAppearance.dict=l;this._streams.push(this.checkedAppearance)}_processCheckBox(e){const t=e.dict.get("AP");if(!(t instanceof Dict))return;const a=t.get("N");if(!(a instanceof Dict))return;const r=this._decodeFormValue(e.dict.get("AS"));"string"==typeof r&&(this.data.fieldValue=r);const i=null!==this.data.fieldValue&&"Off"!==this.data.fieldValue?this.data.fieldValue:"Yes",n=this._decodeFormValue(a.getKeys());if(0===n.length)n.push("Off",i);else if(1===n.length)"Off"===n[0]?n.push(i):n.unshift("Off");else if(n.includes(i)){n.length=0;n.push("Off",i)}else{const e=n.find((e=>"Off"!==e));n.length=0;n.push("Off",e)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off");this.data.exportValue=n[1];const s=a.get(this.data.exportValue);this.checkedAppearance=s instanceof BaseStream?s:null;const o=a.get("Off");this.uncheckedAppearance=o instanceof BaseStream?o:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processRadioButton(e){this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof Dict){this.parent=e.dict.getRaw("Parent");const a=t.get("V");a instanceof Name&&(this.data.fieldValue=this._decodeFormValue(a))}const a=e.dict.get("AP");if(!(a instanceof Dict))return;const r=a.get("N");if(!(r instanceof Dict))return;for(const e of r.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}const i=r.get(this.data.buttonValue);this.checkedAppearance=i instanceof BaseStream?i:null;const n=r.get("Off");this.uncheckedAppearance=n instanceof BaseStream?n:null;this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc");this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance);this._fallbackFontDict=this.fallbackFontDict;null===this.data.defaultFieldValue&&(this.data.defaultFieldValue="Off")}_processPushButton(e){const{dict:t,annotationGlobals:a}=e;if(t.has("A")||t.has("AA")||this.data.alternativeText){this.data.isTooltipOnly=!t.has("A")&&!t.has("AA");Catalog.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:a.baseUrl,docAttachments:a.attachments})}else warn("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";if(this.data.checkBox){t="checkbox";e=this.data.exportValue}else if(this.data.radioButton){t="radiobutton";e=this.data.buttonValue}return{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new Dict;e.set("BaseFont",Name.get("ZapfDingbats"));e.set("Type",Name.get("FallbackType"));e.set("Subtype",Name.get("FallbackType"));e.set("Encoding",Name.get("ZapfDingbatsEncoding"));return shadow(this,"fallbackFontDict",e)}}class ChoiceWidgetAnnotation extends WidgetAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.indices=t.getArray("I");this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0;this.data.options=[];const r=getInheritableProperty({dict:t,key:"Opt"});if(Array.isArray(r))for(let e=0,t=r.length;e=0&&t0&&(this.data.options=this.data.fieldValue.map((e=>({exportValue:e,displayValue:e}))));this.data.combo=this.hasFieldFlag(ce);this.data.multiSelect=this.hasFieldFlag(he);this._hasText=!0}getFieldObject(){const e=this.data.combo?"combobox":"listbox",t=this.data.fieldValue.length>0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){if(!this.hasIndices)return;let a=e?.get(this.data.id)?.value;Array.isArray(a)||(a=[a]);const r=[],{options:i}=this.data;for(let e=0,t=0,n=i.length;ea){a=r;t=e}}[f,g]=this._computeFontSize(e,c-4,t,d,-1)}const p=g*a,m=(p-g)/2,b=Math.floor(l/p);let y=0;if(u.length>0){const e=Math.min(...u),t=Math.max(...u);y=Math.max(0,t-b+1);y>e&&(y=e)}const w=Math.min(y+b+1,h),S=["/Tx BMC q",`1 1 ${c} ${l} re W n`];if(u.length){S.push("0.600006 0.756866 0.854904 rg");for(const e of u)y<=e&&ee.trimEnd()));const{coords:e,bbox:t,matrix:r}=FakeUnicodeFont.getFirstPositionInfo(this.rectangle,this.rotation,a);this.data.textPosition=this._transformPoint(e,t,r)}if(this._isOffscreenCanvasSupported){const i=e.dict.get("CA"),n=new FakeUnicodeFont(r,"sans-serif");this.appearance=n.createAppearance(this._contents.str,this.rectangle,this.rotation,a,t,i);this._streams.push(this.appearance)}else warn("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,fontSize:n,oldAnnotation:s,rect:o,rotation:c,user:l,value:h}=e,u=s||new Dict(t);u.set("Type",Name.get("Annot"));u.set("Subtype",Name.get("FreeText"));if(s){u.set("M",`D:${getModificationDate()}`);u.delete("RC")}else u.set("CreationDate",`D:${getModificationDate()}`);u.set("Rect",o);const d=`/Helv ${n} Tf ${getPdfColor(i,!0)}`;u.set("DA",d);u.set("Contents",stringToAsciiOrUTF16BE(h));u.set("F",4);u.set("Border",[0,0,0]);u.set("Rotate",c);l&&u.set("T",stringToAsciiOrUTF16BE(l));if(a||r){const e=new Dict(t);u.set("AP",e);a?e.set("N",a):e.set("N",r)}return u}static async createNewAppearanceStream(e,t,r){const{baseFontRef:i,evaluator:n,task:s}=r,{color:o,fontSize:c,rect:l,rotation:h,value:u}=e,d=new Dict(t),f=new Dict(t);if(i)f.set("Helv",i);else{const e=new Dict(t);e.set("BaseFont",Name.get("Helvetica"));e.set("Type",Name.get("Font"));e.set("Subtype",Name.get("Type1"));e.set("Encoding",Name.get("WinAnsiEncoding"));f.set("Helv",e)}d.set("Font",f);const g=await WidgetAnnotation._getFontData(n,s,{fontName:"Helv",fontSize:c},d),[p,m,b,y]=l;let w=b-p,S=y-m;h%180!=0&&([w,S]=[S,w]);const x=u.split("\n"),k=c/1e3;let C=-1/0;const v=[];for(let e of x){const t=g.encodeString(e);if(t.length>1)return null;e=t.join("");v.push(e);let a=0;const r=g.charsToGlyphs(e);for(const e of r)a+=e.width*k;C=Math.max(C,a)}let F=1;C>w&&(F=w/C);let O=1;const T=a*c,M=1*c,D=T*x.length;D>S&&(O=S/D);const R=c*Math.min(F,O);let N,E,L;switch(h){case 0:L=[1,0,0,1];E=[l[0],l[1],w,S];N=[l[0],l[3]-M];break;case 90:L=[0,1,-1,0];E=[l[1],-l[2],w,S];N=[l[1],-l[0]-M];break;case 180:L=[-1,0,0,-1];E=[-l[2],-l[3],w,S];N=[-l[2],-l[1]-M];break;case 270:L=[0,-1,1,0];E=[-l[3],l[0],w,S];N=[-l[3],l[2]-M]}const j=["q",`${L.join(" ")} 0 0 cm`,`${E.join(" ")} re W n`,"BT",`${getPdfColor(o,!0)}`,`0 Tc /Helv ${numberToString(R)} Tf`];j.push(`${N.join(" ")} Td (${escapeString(v[0])}) Tj`);const _=numberToString(T);for(let e=1,t=v.length;e{e.push(`${r[0]} ${r[1]} m`,`${r[2]} ${r[3]} l`,"S");return[t[0]-c,t[7]-c,t[2]+c,t[3]+c]}})}}}class SquareAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=D;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],r=t.get("CA"),i=getRgbColor(t.getArray("IC"),null),n=i?getPdfColorArray(i):null,s=n?r:null;if(0===this.borderStyle.width&&!n)return;this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:n,strokeAlpha:r,fillAlpha:s,pointsCallback:(e,t)=>{const a=t[4]+this.borderStyle.width/2,r=t[5]+this.borderStyle.width/2,i=t[6]-t[4]-this.borderStyle.width,s=t[3]-t[7]-this.borderStyle.width;e.push(`${a} ${r} ${i} ${s} re`);n?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class CircleAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=R;if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],r=t.get("CA"),i=getRgbColor(t.getArray("IC"),null),n=i?getPdfColorArray(i):null,s=n?r:null;if(0===this.borderStyle.width&&!n)return;const o=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:a,extra:`${this.borderStyle.width} w`,strokeColor:e,fillColor:n,strokeAlpha:r,fillAlpha:s,pointsCallback:(e,t)=>{const a=t[0]+this.borderStyle.width/2,r=t[1]-this.borderStyle.width/2,i=t[6]-this.borderStyle.width/2,s=t[7]+this.borderStyle.width/2,c=a+(i-a)/2,l=r+(s-r)/2,h=(i-a)/2*o,u=(s-r)/2*o;e.push(`${c} ${s} m`,`${c+h} ${s} ${i} ${l+u} ${i} ${l} c`,`${i} ${l-u} ${c+h} ${r} ${c} ${r} c`,`${c-h} ${r} ${a} ${l-u} ${a} ${l} c`,`${a} ${l+u} ${c-h} ${s} ${c} ${s} c`,"h");n?e.push("B"):e.push("S");return[t[0],t[7],t[2],t[3]]}})}}}class PolylineAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=E;this.data.hasOwnCanvas=this.data.noRotate;this.data.noHTML=!1;this.data.vertices=null;if(!(this instanceof PolygonAnnotation)){this.setLineEndings(t.getArray("LE"));this.data.lineEndings=this.lineEndings}const r=t.getArray("Vertices");if(!isNumberArray(r,null))return;const i=this.data.vertices=Float32Array.from(r);if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],r=t.get("CA"),n=this.borderStyle.width||1,s=2*n,o=[1/0,1/0,-1/0,-1/0];for(let e=0,t=i.length;e{for(let t=0,a=i.length;t{for(const t of this.data.inkLists){for(let a=0,r=t.length;a{e.push(`${t[0]} ${t[1]} m`,`${t[2]} ${t[3]} l`,`${t[6]} ${t[7]} l`,`${t[4]} ${t[5]} l`,"f");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}static createNewDict(e,t,{apRef:a,ap:r}){const{color:i,oldAnnotation:n,opacity:s,rect:o,rotation:c,user:l,quadPoints:h}=e,u=n||new Dict(t);u.set("Type",Name.get("Annot"));u.set("Subtype",Name.get("Highlight"));u.set(n?"M":"CreationDate",`D:${getModificationDate()}`);u.set("CreationDate",`D:${getModificationDate()}`);u.set("Rect",o);u.set("F",4);u.set("Border",[0,0,0]);u.set("Rotate",c);u.set("QuadPoints",h);u.set("C",getPdfColorArray(i));u.set("CA",s);l&&u.set("T",stringToAsciiOrUTF16BE(l));if(a||r){const e=new Dict(t);u.set("AP",e);e.set("N",a||r)}return u}static async createNewAppearanceStream(e,t,a){const{color:r,rect:i,outlines:n,opacity:s}=e,o=[`${getPdfColor(r,!0)}`,"/R0 gs"],c=[];for(const e of n){c.length=0;c.push(`${numberToString(e[0])} ${numberToString(e[1])} m`);for(let t=2,a=e.length;t{e.push(`${t[4]} ${t[5]+1.3} m`,`${t[6]} ${t[7]+1.3} l`,"S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}}class SquigglyAnnotation extends MarkupAnnotation{constructor(e){super(e);const{dict:t,xref:a}=e;this.data.annotationType=_;if(this.data.quadPoints=getQuadPoints(t,null)){if(!this.appearance){const e=this.color?getPdfColorArray(this.color):[0,0,0],r=t.get("CA");this._setDefaultAppearance({xref:a,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:r,pointsCallback:(e,t)=>{const a=(t[1]-t[5])/6;let r=a,i=t[4];const n=t[5],s=t[6];e.push(`${i} ${n+r} m`);do{i+=2;r=0===r?a:0;e.push(`${i} ${n+r} l`)}while(i{e.push((t[0]+t[4])/2+" "+(t[1]+t[5])/2+" m",(t[2]+t[6])/2+" "+(t[3]+t[7])/2+" l","S");return[t[0],t[7],t[2],t[3]]}})}}else this.data.popupRef=null}}class StampAnnotation extends MarkupAnnotation{#pe=null;constructor(e){super(e);this.data.annotationType=X;this.data.hasOwnCanvas=this.data.noRotate;this.data.isEditable=!this.data.noHTML;this.data.noHTML=!1}mustBeViewedWhenEditing(e,t=null){if(e){if(!this.data.isEditable)return!0;this.#pe??=this.data.hasOwnCanvas;this.data.hasOwnCanvas=!0;return!0}if(null!==this.#pe){this.data.hasOwnCanvas=this.#pe;this.#pe=null}return!t?.has(this.data.id)}static async createImage(e,t){const{width:a,height:r}=e,i=new OffscreenCanvas(a,r),n=i.getContext("2d",{alpha:!0});n.drawImage(e,0,0);const s=n.getImageData(0,0,a,r).data,o=new Uint32Array(s.buffer),c=o.some(FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>!!(255&~e));if(c){n.fillStyle="white";n.fillRect(0,0,a,r);n.drawImage(e,0,0)}const l=i.convertToBlob({type:"image/jpeg",quality:1}).then((e=>e.arrayBuffer())),h=Name.get("XObject"),u=Name.get("Image"),d=new Dict(t);d.set("Type",h);d.set("Subtype",u);d.set("BitsPerComponent",8);d.set("ColorSpace",Name.get("DeviceRGB"));d.set("Filter",Name.get("DCTDecode"));d.set("BBox",[0,0,a,r]);d.set("Width",a);d.set("Height",r);let f=null;if(c){const e=new Uint8Array(o.length);if(FeatureTest.isLittleEndian)for(let t=0,a=o.length;t>>24;else for(let t=0,a=o.length;t=0&&n<=1?n:null}}const fc={get r(){return shadow(this,"r",new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]))},get k(){return shadow(this,"k",new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]))}};function calculateMD5(e,t,a){let r=1732584193,i=-271733879,n=-1732584194,s=271733878;const o=a+72&-64,c=new Uint8Array(o);let l,h;for(l=0;l>5&255;c[l++]=a>>13&255;c[l++]=a>>21&255;c[l++]=a>>>29&255;l+=3;const d=new Int32Array(16),{k:f,r:g}=fc;for(l=0;l>>32-n)|0;a=r}r=r+a|0;i=i+o|0;n=n+u|0;s=s+p|0}return new Uint8Array([255&r,r>>8&255,r>>16&255,r>>>24&255,255&i,i>>8&255,i>>16&255,i>>>24&255,255&n,n>>8&255,n>>16&255,n>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255])}function decodeString(e){try{return stringToUTF8String(e)}catch(t){warn(`UTF-8 decoding failed: "${t}".`);return e}}class DatasetXMLParser extends SimpleXMLParser{constructor(e){super(e);this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e){this.node=t;throw new Error("Aborting DatasetXMLParser.")}}}class DatasetReader{constructor(e){if(e.datasets)this.node=new SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new DatasetXMLParser({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch{}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode(parseXFAPath(e),0);if(!t)return"";const a=t.firstChild;return"value"===a?.nodeName?t.children.map((e=>decodeString(e.textContent))):decodeString(t.textContent)}}class Word64{constructor(e,t){this.high=0|e;this.low=0|t}and(e){this.high&=e.high;this.low&=e.low}xor(e){this.high^=e.high;this.low^=e.low}shiftRight(e){if(e>=32){this.low=this.high>>>e-32|0;this.high=0}else{this.low=this.low>>>e|this.high<<32-e;this.high=this.high>>>e|0}}rotateRight(e){let t,a;if(32&e){a=this.low;t=this.high}else{t=this.low;a=this.high}e&=31;this.low=t>>>e|a<<32-e;this.high=a>>>e|t<<32-e}not(){this.high=~this.high;this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let a=(this.high>>>0)+(e.high>>>0);t>4294967295&&(a+=1);this.low=0|t;this.high=0|a}copyTo(e,t){e[t]=this.high>>>24&255;e[t+1]=this.high>>16&255;e[t+2]=this.high>>8&255;e[t+3]=255&this.high;e[t+4]=this.low>>>24&255;e[t+5]=this.low>>16&255;e[t+6]=this.low>>8&255;e[t+7]=255&this.low}assign(e){this.high=e.high;this.low=e.low}}const gc={get k(){return shadow(this,"k",[new Word64(1116352408,3609767458),new Word64(1899447441,602891725),new Word64(3049323471,3964484399),new Word64(3921009573,2173295548),new Word64(961987163,4081628472),new Word64(1508970993,3053834265),new Word64(2453635748,2937671579),new Word64(2870763221,3664609560),new Word64(3624381080,2734883394),new Word64(310598401,1164996542),new Word64(607225278,1323610764),new Word64(1426881987,3590304994),new Word64(1925078388,4068182383),new Word64(2162078206,991336113),new Word64(2614888103,633803317),new Word64(3248222580,3479774868),new Word64(3835390401,2666613458),new Word64(4022224774,944711139),new Word64(264347078,2341262773),new Word64(604807628,2007800933),new Word64(770255983,1495990901),new Word64(1249150122,1856431235),new Word64(1555081692,3175218132),new Word64(1996064986,2198950837),new Word64(2554220882,3999719339),new Word64(2821834349,766784016),new Word64(2952996808,2566594879),new Word64(3210313671,3203337956),new Word64(3336571891,1034457026),new Word64(3584528711,2466948901),new Word64(113926993,3758326383),new Word64(338241895,168717936),new Word64(666307205,1188179964),new Word64(773529912,1546045734),new Word64(1294757372,1522805485),new Word64(1396182291,2643833823),new Word64(1695183700,2343527390),new Word64(1986661051,1014477480),new Word64(2177026350,1206759142),new Word64(2456956037,344077627),new Word64(2730485921,1290863460),new Word64(2820302411,3158454273),new Word64(3259730800,3505952657),new Word64(3345764771,106217008),new Word64(3516065817,3606008344),new Word64(3600352804,1432725776),new Word64(4094571909,1467031594),new Word64(275423344,851169720),new Word64(430227734,3100823752),new Word64(506948616,1363258195),new Word64(659060556,3750685593),new Word64(883997877,3785050280),new Word64(958139571,3318307427),new Word64(1322822218,3812723403),new Word64(1537002063,2003034995),new Word64(1747873779,3602036899),new Word64(1955562222,1575990012),new Word64(2024104815,1125592928),new Word64(2227730452,2716904306),new Word64(2361852424,442776044),new Word64(2428436474,593698344),new Word64(2756734187,3733110249),new Word64(3204031479,2999351573),new Word64(3329325298,3815920427),new Word64(3391569614,3928383900),new Word64(3515267271,566280711),new Word64(3940187606,3454069534),new Word64(4118630271,4000239992),new Word64(116418474,1914138554),new Word64(174292421,2731055270),new Word64(289380356,3203993006),new Word64(460393269,320620315),new Word64(685471733,587496836),new Word64(852142971,1086792851),new Word64(1017036298,365543100),new Word64(1126000580,2618297676),new Word64(1288033470,3409855158),new Word64(1501505948,4234509866),new Word64(1607167915,987167468),new Word64(1816402316,1246189591)])}};function ch(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.not();i.and(r);e.xor(i)}function maj(e,t,a,r,i){e.assign(t);e.and(a);i.assign(t);i.and(r);e.xor(i);i.assign(a);i.and(r);e.xor(i)}function sigma(e,t,a){e.assign(t);e.rotateRight(28);a.assign(t);a.rotateRight(34);e.xor(a);a.assign(t);a.rotateRight(39);e.xor(a)}function sigmaPrime(e,t,a){e.assign(t);e.rotateRight(14);a.assign(t);a.rotateRight(18);e.xor(a);a.assign(t);a.rotateRight(41);e.xor(a)}function littleSigma(e,t,a){e.assign(t);e.rotateRight(1);a.assign(t);a.rotateRight(8);e.xor(a);a.assign(t);a.shiftRight(7);e.xor(a)}function littleSigmaPrime(e,t,a){e.assign(t);e.rotateRight(19);a.assign(t);a.rotateRight(61);e.xor(a);a.assign(t);a.shiftRight(6);e.xor(a)}function calculateSHA512(e,t,a,r=!1){let i,n,s,o,c,l,h,u;if(r){i=new Word64(3418070365,3238371032);n=new Word64(1654270250,914150663);s=new Word64(2438529370,812702999);o=new Word64(355462360,4144912697);c=new Word64(1731405415,4290775857);l=new Word64(2394180231,1750603025);h=new Word64(3675008525,1694076839);u=new Word64(1203062813,3204075428)}else{i=new Word64(1779033703,4089235720);n=new Word64(3144134277,2227873595);s=new Word64(1013904242,4271175723);o=new Word64(2773480762,1595750129);c=new Word64(1359893119,2917565137);l=new Word64(2600822924,725511199);h=new Word64(528734635,4215389547);u=new Word64(1541459225,327033209)}const d=128*Math.ceil((a+17)/128),f=new Uint8Array(d);let g,p;for(g=0;g>>29&255;f[g++]=a>>21&255;f[g++]=a>>13&255;f[g++]=a>>5&255;f[g++]=a<<3&255;const b=new Array(80);for(g=0;g<80;g++)b[g]=new Word64(0,0);const{k:y}=gc;let w=new Word64(0,0),S=new Word64(0,0),x=new Word64(0,0),k=new Word64(0,0),C=new Word64(0,0),v=new Word64(0,0),F=new Word64(0,0),O=new Word64(0,0);const T=new Word64(0,0),M=new Word64(0,0),D=new Word64(0,0),R=new Word64(0,0);let N,E;for(g=0;g>>t|e<<32-t}function calculate_sha256_ch(e,t,a){return e&t^~e&a}function calculate_sha256_maj(e,t,a){return e&t^e&a^t&a}function calculate_sha256_sigma(e){return rotr(e,2)^rotr(e,13)^rotr(e,22)}function calculate_sha256_sigmaPrime(e){return rotr(e,6)^rotr(e,11)^rotr(e,25)}function calculate_sha256_littleSigma(e){return rotr(e,7)^rotr(e,18)^e>>>3}function calculateSHA256(e,t,a){let r=1779033703,i=3144134277,n=1013904242,s=2773480762,o=1359893119,c=2600822924,l=528734635,h=1541459225;const u=64*Math.ceil((a+9)/64),d=new Uint8Array(u);let f,g;for(f=0;f>>29&255;d[f++]=a>>21&255;d[f++]=a>>13&255;d[f++]=a>>5&255;d[f++]=a<<3&255;const m=new Uint32Array(64),{k:b}=pc;for(f=0;f>>10)+m[g-7]+calculate_sha256_littleSigma(m[g-15])+m[g-16]|0;let e,t,a=r,u=i,p=n,w=s,S=o,x=c,k=l,C=h;for(g=0;g<64;++g){e=C+calculate_sha256_sigmaPrime(S)+calculate_sha256_ch(S,x,k)+b[g]+m[g];t=calculate_sha256_sigma(a)+calculate_sha256_maj(a,u,p);C=k;k=x;x=S;S=w+e|0;w=p;p=u;u=a;a=e+t|0}r=r+a|0;i=i+u|0;n=n+p|0;s=s+w|0;o=o+S|0;c=c+x|0;l=l+k|0;h=h+C|0}var y;return new Uint8Array([r>>24&255,r>>16&255,r>>8&255,255&r,i>>24&255,i>>16&255,i>>8&255,255&i,n>>24&255,n>>16&255,n>>8&255,255&n,s>>24&255,s>>16&255,s>>8&255,255&s,o>>24&255,o>>16&255,o>>8&255,255&o,c>>24&255,c>>16&255,c>>8&255,255&c,l>>24&255,l>>16&255,l>>8&255,255&l,h>>24&255,h>>16&255,h>>8&255,255&h])}class DecryptStream extends DecodeStream{constructor(e,t,a){super(t);this.str=e;this.dict=e.dict;this.decrypt=a;this.nextChunk=null;this.initialized=!1}readBlock(){let e;if(this.initialized)e=this.nextChunk;else{e=this.str.getBytes(512);this.initialized=!0}if(!e?.length){this.eof=!0;return}this.nextChunk=this.str.getBytes(512);const t=this.nextChunk?.length>0;e=(0,this.decrypt)(e,!t);const a=this.bufferLength,r=a+e.length;this.ensureBuffer(r).set(e,a);this.bufferLength=r}}class ARCFourCipher{constructor(e){this.a=0;this.b=0;const t=new Uint8Array(256),a=e.length;for(let e=0;e<256;++e)t[e]=e;for(let r=0,i=0;r<256;++r){const n=t[r];i=i+n+e[r%a]&255;t[r]=t[i];t[i]=n}this.s=t}encryptBlock(e){let t=this.a,a=this.b;const r=this.s,i=e.length,n=new Uint8Array(i);for(let s=0;st<128?t<<1:t<<1^27));constructor(){this.buffer=new Uint8Array(16);this.bufferPosition=0}_expandKey(e){unreachable("Cannot call `_expandKey` on the base class")}_decrypt(e,t){let a,r,i;const n=new Uint8Array(16);n.set(e);for(let e=0,a=this._keySize;e<16;++e,++a)n[e]^=t[a];for(let e=this._cyclesOfRepetition-1;e>=1;--e){a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e)n[e]=this._inv_s[n[e]];for(let a=0,r=16*e;a<16;++a,++r)n[a]^=t[r];for(let e=0;e<16;e+=4){const t=this._mix[n[e]],r=this._mix[n[e+1]],i=this._mix[n[e+2]],s=this._mix[n[e+3]];a=t^r>>>8^r<<24^i>>>16^i<<16^s>>>24^s<<8;n[e]=a>>>24&255;n[e+1]=a>>16&255;n[e+2]=a>>8&255;n[e+3]=255&a}}a=n[13];n[13]=n[9];n[9]=n[5];n[5]=n[1];n[1]=a;a=n[14];r=n[10];n[14]=n[6];n[10]=n[2];n[6]=a;n[2]=r;a=n[15];r=n[11];i=n[7];n[15]=n[3];n[11]=a;n[7]=r;n[3]=i;for(let e=0;e<16;++e){n[e]=this._inv_s[n[e]];n[e]^=t[e]}return n}_encrypt(e,t){const a=this._s;let r,i,n;const s=new Uint8Array(16);s.set(e);for(let e=0;e<16;++e)s[e]^=t[e];for(let e=1;e=r;--a)if(e[a]!==t){t=0;break}o-=t;n[n.length-1]=e.subarray(0,16-t)}}const c=new Uint8Array(o);for(let e=0,t=0,a=n.length;e=256&&(o=255&(27^o))}for(let t=0;t<4;++t){a[e]=r^=a[e-32];e++;a[e]=i^=a[e-32];e++;a[e]=n^=a[e-32];e++;a[e]=s^=a[e-32];e++}}return a}}class PDFBase{_hash(e,t,a){unreachable("Abstract method `_hash` called")}checkOwnerPassword(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);return isArrayEqual(this._hash(e,i,a),r)}checkUserPassword(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);return isArrayEqual(this._hash(e,r,[]),a)}getOwnerKey(e,t,a,r){const i=new Uint8Array(e.length+56);i.set(e,0);i.set(t,e.length);i.set(a,e.length+t.length);const n=this._hash(e,i,a);return new AES256Cipher(n).decryptBlock(r,!1,new Uint8Array(16))}getUserKey(e,t,a){const r=new Uint8Array(e.length+8);r.set(e,0);r.set(t,e.length);const i=this._hash(e,r,[]);return new AES256Cipher(i).decryptBlock(a,!1,new Uint8Array(16))}}class PDF17 extends PDFBase{_hash(e,t,a){return calculateSHA256(t,0,t.length)}}class PDF20 extends PDFBase{_hash(e,t,a){let r=calculateSHA256(t,0,t.length).subarray(0,32),i=[0],n=0;for(;n<64||i.at(-1)>n-32;){const t=e.length+r.length+a.length,l=new Uint8Array(t);let h=0;l.set(e,h);h+=e.length;l.set(r,h);h+=r.length;l.set(a,h);const u=new Uint8Array(64*t);for(let e=0,a=0;e<64;e++,a+=t)u.set(l,a);i=new AES128Cipher(r.subarray(0,16)).encrypt(u,r.subarray(16,32));const d=Math.sumPrecise(i.slice(0,16))%3;0===d?r=calculateSHA256(i,0,i.length):1===d?r=(s=i,o=0,c=i.length,calculateSHA512(s,o,c,!0)):2===d&&(r=calculateSHA512(i,0,i.length));n++}var s,o,c;return r.subarray(0,32)}}class CipherTransform{constructor(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}createStream(e,t){const a=new this.StreamCipherConstructor;return new DecryptStream(e,t,(function cipherTransformDecryptStream(e,t){return a.decryptBlock(e,t)}))}decryptString(e){const t=new this.StringCipherConstructor;let a=stringToBytes(e);a=t.decryptBlock(a,!0);return bytesToString(a)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof AESBaseCipher){const a=16-e.length%16;e+=String.fromCharCode(a).repeat(a);const r=new Uint8Array(16);crypto.getRandomValues(r);let i=stringToBytes(e);i=t.encrypt(i,r);const n=new Uint8Array(16+i.length);n.set(r);n.set(i,16);return bytesToString(n)}let a=stringToBytes(e);a=t.encrypt(a);return bytesToString(a)}}class CipherTransformFactory{static get _defaultPasswordBytes(){return shadow(this,"_defaultPasswordBytes",new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]))}#be(e,t,a,r,i,n,s,o,c,l,h,u){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const d=6===e?new PDF20:new PDF17;return d.checkUserPassword(t,o,s)?d.getUserKey(t,c,h):t.length&&d.checkOwnerPassword(t,r,n,a)?d.getOwnerKey(t,i,n,l):null}#ye(e,t,a,r,i,n,s,o){const c=40+a.length+e.length,l=new Uint8Array(c);let h,u,d=0;if(t){u=Math.min(32,t.length);for(;d>8&255;l[d++]=i>>16&255;l[d++]=i>>>24&255;l.set(e,d);d+=e.length;if(n>=4&&!o){l.fill(255,d,d+4);d+=4}let f=calculateMD5(l,0,d);const g=s>>3;if(n>=3)for(h=0;h<50;++h)f=calculateMD5(f,0,g);const p=f.subarray(0,g);let m,b;if(n>=3){d=0;l.set(CipherTransformFactory._defaultPasswordBytes,d);d+=32;l.set(e,d);d+=e.length;m=new ARCFourCipher(p);b=m.encryptBlock(calculateMD5(l,0,d));u=p.length;const t=new Uint8Array(u);for(h=1;h<=19;++h){for(let e=0;er[t]===e))?p:null}#we(e,t,a,r){const i=new Uint8Array(32);let n=0;const s=Math.min(32,e.length);for(;n>3;if(a>=3)for(o=0;o<50;++o)c=calculateMD5(c,0,c.length);let h,u;if(a>=3){u=t;const e=new Uint8Array(l);for(o=19;o>=0;o--){for(let t=0;t>8&255;n[s++]=e>>16&255;n[s++]=255&t;n[s++]=t>>8&255;if(r){n[s++]=115;n[s++]=65;n[s++]=108;n[s++]=84}return calculateMD5(n,0,s).subarray(0,Math.min(i+5,16))}#xe(e,t,a,r,i){if(!(t instanceof Name))throw new FormatError("Invalid crypt filter name.");const n=this,s=e.get(t.name),o=s?.get("CFM");if(!o||"None"===o.name)return function(){return new NullCipher};if("V2"===o.name)return function(){return new ARCFourCipher(n.#Se(a,r,i,!1))};if("AESV2"===o.name)return function(){return new AES128Cipher(n.#Se(a,r,i,!0))};if("AESV3"===o.name)return function(){return new AES256Cipher(i)};throw new FormatError("Unknown crypto method")}constructor(e,t,a){const r=e.get("Filter");if(!isName(r,"Standard"))throw new FormatError("unknown encryption method");this.filterName=r.name;this.dict=e;const i=e.get("V");if(!Number.isInteger(i)||1!==i&&2!==i&&4!==i&&5!==i)throw new FormatError("unsupported encryption algorithm");this.algorithm=i;let n=e.get("Length");if(!n)if(i<=3)n=40;else{const t=e.get("CF"),a=e.get("StmF");if(t instanceof Dict&&a instanceof Name){t.suppressEncryption=!0;const e=t.get(a.name);n=e?.get("Length")||128;n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!=0)throw new FormatError("invalid key length");const s=stringToBytes(e.get("O")),o=stringToBytes(e.get("U")),c=s.subarray(0,32),l=o.subarray(0,32),h=e.get("P"),u=e.get("R"),d=(4===i||5===i)&&!1!==e.get("EncryptMetadata");this.encryptMetadata=d;const f=stringToBytes(t);let g,p;if(a){if(6===u)try{a=utf8StringToString(a)}catch{warn("CipherTransformFactory: Unable to convert UTF8 encoded password.")}g=stringToBytes(a)}if(5!==i)p=this.#ye(f,g,c,l,h,u,n,d);else{const t=s.subarray(32,40),a=s.subarray(40,48),r=o.subarray(0,48),i=o.subarray(32,40),n=o.subarray(40,48),h=stringToBytes(e.get("OE")),d=stringToBytes(e.get("UE")),f=stringToBytes(e.get("Perms"));p=this.#be(u,g,c,t,a,r,l,i,n,h,d,f)}if(!p){if(!a)throw new PasswordException("No password given",ha);const e=this.#we(g,c,u,n);p=this.#ye(f,e,c,l,h,u,n,d)}if(!p)throw new PasswordException("Incorrect Password",ua);if(4===i&&p.length<16){this.encryptionKey=new Uint8Array(16);this.encryptionKey.set(p)}else this.encryptionKey=p;if(i>=4){const t=e.get("CF");t instanceof Dict&&(t.suppressEncryption=!0);this.cf=t;this.stmf=e.get("StmF")||Name.get("Identity");this.strf=e.get("StrF")||Name.get("Identity");this.eff=e.get("EFF")||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new CipherTransform(this.#xe(this.cf,this.strf,e,t,this.encryptionKey),this.#xe(this.cf,this.stmf,e,t,this.encryptionKey));const a=this.#Se(e,t,this.encryptionKey,!1),cipherConstructor=function(){return new ARCFourCipher(a)};return new CipherTransform(cipherConstructor,cipherConstructor)}}class XRef{#Ae=null;constructor(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this._xrefStms=new Set;this._cacheMap=new Map;this._pendingRefs=new RefSet;this._newPersistentRefNum=null;this._newTemporaryRefNum=null;this._persistentRefsCache=null}getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;this._cacheMap.set(t,e);return Ref.get(t,0)}getNewTemporaryRef(){if(null===this._newTemporaryRefNum){this._newTemporaryRefNum=this.entries.length||1;if(this._newPersistentRefNum){this._persistentRefsCache=new Map;for(let e=this._newTemporaryRefNum;e0;){const[s,o]=n;if(!Number.isInteger(s)||!Number.isInteger(o))throw new FormatError(`Invalid XRef range fields: ${s}, ${o}`);if(!Number.isInteger(a)||!Number.isInteger(r)||!Number.isInteger(i))throw new FormatError(`Invalid XRef entry fields length: ${s}, ${o}`);for(let n=t.entryNum;n=e.length);){a+=String.fromCharCode(r);r=e[t]}return a}function skipUntil(e,t,a){const r=a.length,i=e.length;let n=0;for(;t=r)break;t++;n++}return n}const e=/\b(endobj|\d+\s+\d+\s+obj|xref|trailer\s*<<)\b/g,t=/\b(startxref|\d+\s+\d+\s+obj)\b/g,a=/^(\d+)\s+(\d+)\s+obj\b/,r=new Uint8Array([116,114,97,105,108,101,114]),i=new Uint8Array([115,116,97,114,116,120,114,101,102]),n=new Uint8Array([47,88,82,101,102]);this.entries.length=0;this._cacheMap.clear();const s=this.stream;s.pos=0;const o=s.getBytes(),c=bytesToString(o),l=o.length;let h=s.start;const u=[],d=[];for(;h=l)break;f=o[h]}while(10!==f&&13!==f);continue}const g=readToken(o,h);let p;if(g.startsWith("xref")&&(4===g.length||/\s/.test(g[4]))){h+=skipUntil(o,h,r);u.push(h);h+=skipUntil(o,h,i)}else if(p=a.exec(g)){const t=0|p[1],a=0|p[2],r=h+g.length;let i,u=!1;if(this.entries[t]){if(this.entries[t].gen===a)try{new Parser({lexer:new Lexer(s.makeSubStream(r))}).getObj();u=!0}catch(e){e instanceof ParserEOFException?warn(`indexObjects -- checking object (${g}): "${e}".`):u=!0}}else u=!0;u&&(this.entries[t]={offset:h-s.start,gen:a,uncompressed:!0});e.lastIndex=r;const f=e.exec(c);if(f){i=e.lastIndex+1-h;if("endobj"!==f[1]){warn(`indexObjects: Found "${f[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`);i-=f[1].length+1}}else i=l-h;const m=o.subarray(h,h+i),b=skipUntil(m,0,n);if(b0?Math.max(...this._xrefStms):null)}getEntry(e){const t=this.entries[e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e,t=!1){return e instanceof Ref?this.fetch(e,t):e}fetch(e,t=!1){if(!(e instanceof Ref))throw new Error("ref object is not a reference");const a=e.num,r=this._cacheMap.get(a);if(void 0!==r){r instanceof Dict&&!r.objId&&(r.objId=e.toString());return r}let i=this.getEntry(a);if(null===i)return i;if(this._pendingRefs.has(e)){this._pendingRefs.remove(e);warn(`Ignoring circular reference: ${e}.`);return ya}this._pendingRefs.put(e);try{i=i.uncompressed?this.fetchUncompressed(e,i,t):this.fetchCompressed(e,i,t);this._pendingRefs.remove(e)}catch(t){this._pendingRefs.remove(e);throw t}i instanceof Dict?i.objId=e.toString():i instanceof BaseStream&&(i.dict.objId=e.toString());return i}fetchUncompressed(e,t,a=!1){const r=e.gen;let i=e.num;if(t.gen!==r){const n=`Inconsistent generation in XRef: ${e}`;if(this._generationFallback&&t.gen0&&t[3]-t[1]>0)return t;warn(`Empty, or invalid, /${e} entry.`)}return null}get mediaBox(){return shadow(this,"mediaBox",this.#Fe("MediaBox")||mc)}get cropBox(){return shadow(this,"cropBox",this.#Fe("CropBox")||this.mediaBox)}get userUnit(){const e=this.pageDict.get("UserUnit");return shadow(this,"userUnit","number"==typeof e&&e>0?e:1)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!isArrayEqual(e,t)){const a=Util.intersect(e,t);if(a&&a[2]-a[0]>0&&a[3]-a[1]>0)return shadow(this,"view",a);warn("Empty /CropBox and /MediaBox intersection.")}return shadow(this,"view",t)}get rotate(){let e=this.#ve("Rotate")||0;e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360);return shadow(this,"rotate",e)}#Ie(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;warn(`getContentStream - ignoring sub-stream (${t}): "${e}".`)}async getContentStream(){const e=await this.pdfManager.ensure(this,"content");return e instanceof BaseStream?e:Array.isArray(e)?new StreamsSequenceStream(e,this.#Ie.bind(this)):new NullStream}get xfaData(){return shadow(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async#Oe(e,t,a){const r=[];for(const i of e)if(i.id){const e=Ref.fromString(i.id);if(!e){warn(`A non-linked annotation cannot be modified: ${i.id}`);continue}if(i.deleted){t.put(e,e);if(i.popupRef){const e=Ref.fromString(i.popupRef);e&&t.put(e,e)}continue}a?.put(e);i.ref=e;r.push(this.xref.fetchAsync(e).then((e=>{e instanceof Dict&&(i.oldAnnotation=e.clone())}),(()=>{warn(`Cannot fetch \`oldAnnotation\` for: ${e}.`)})));delete i.id}await Promise.all(r)}async saveNewAnnotations(e,t,a,r,i){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const n=this.#Ce(e),s=new RefSetCache,o=new RefSet;await this.#Oe(a,s,o);const c=this.pageDict,l=this.annotations.filter((e=>!(e instanceof Ref&&s.has(e)))),h=await AnnotationFactory.saveNewAnnotations(n,t,a,r,i);for(const{ref:e}of h.annotations)e instanceof Ref&&!o.has(e)&&l.push(e);const u=c.clone();u.set("Annots",l);i.put(this.ref,{data:u});for(const e of s)i.put(e,{data:null})}async save(e,t,a,r){const i=this.#Ce(e),n=await this._parsedAnnotations,s=[];for(const e of n)s.push(e.save(i,t,a,r).catch((function(e){warn(`save - ignoring annotation data during "${t.name}" task: "${e}".`);return null})));return Promise.all(s)}async loadResources(e){await(this.#ke??=this.pdfManager.ensure(this,"resources"));await ObjectLoader.load(this.resources,e,this.xref)}async#Te(e,t){const a=e?.get("Resources");if(!(a instanceof Dict&&a.size))return this.resources;await ObjectLoader.load(a,t,this.xref);return Dict.merge({xref:this.xref,dictArray:[a,this.resources],mergeSubDicts:!0})}async getOperatorList({handler:e,sink:t,task:a,intent:r,cacheKey:i,annotationStorage:c=null,modifiedIds:d=null}){const g=this.getContentStream(),p=this.loadResources(Ia),m=this.#Ce(e),b=this.xfaFactory?null:getNewAnnotationsMap(c),y=b?.get(this.pageIndex);let w=Promise.resolve(null),S=null;if(y){const e=this.pdfManager.ensureDoc("annotationGlobals");let t;const r=new Set;for(const{bitmapId:e,bitmap:t}of y)!e||t||r.has(e)||r.add(e);const{isOffscreenCanvasSupported:i}=this.evaluatorOptions;if(r.size>0){const e=y.slice();for(const[t,a]of c)t.startsWith(f)&&a.bitmap&&r.has(a.bitmapId)&&e.push(a);t=AnnotationFactory.generateImages(e,this.xref,i)}else t=AnnotationFactory.generateImages(y,this.xref,i);S=new RefSet;w=Promise.all([e,this.#Oe(y,S,null)]).then((([e])=>e?AnnotationFactory.printNewAnnotations(e,m,a,y,t):null))}const x=Promise.all([g,p]).then((async([n])=>{const s=await this.#Te(n.dict,Ia),o=new OperatorList(r,t);e.send("StartRenderPage",{transparency:m.hasBlendModes(s,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:i});await m.getOperatorList({stream:n,task:a,resources:s,operatorList:o});return o}));let[k,C,v]=await Promise.all([x,this._parsedAnnotations,w]);if(v){C=C.filter((e=>!(e.ref&&S.has(e.ref))));for(let e=0,t=v.length;ee.ref&&isRefsEqual(e.ref,a.refToReplace)));if(r>=0){C.splice(r,1,a);v.splice(e--,1);t--}}}C=C.concat(v)}if(0===C.length||r&h){k.flush(!0);return{length:k.totalLength}}const F=!!(r&l),O=!!(r&u),T=!!(r&n),M=!!(r&s),D=!!(r&o),R=[];for(const e of C)(T||M&&e.mustBeViewed(c,F)&&e.mustBeViewedWhenEditing(O,d)||D&&e.mustBePrinted(c))&&R.push(e.getOperatorList(m,a,r,c).catch((function(e){warn(`getOperatorList - ignoring annotation data during "${a.name}" task: "${e}".`);return{opList:null,separateForm:!1,separateCanvas:!1}})));const N=await Promise.all(R);let E=!1,L=!1;for(const{opList:e,separateForm:t,separateCanvas:a}of N){k.addOpList(e);E||=t;L||=a}k.flush(!0,{form:E,canvas:L});return{length:k.totalLength}}async extractTextContent({handler:e,task:t,includeMarkedContent:a,disableNormalization:r,sink:i}){const n=this.getContentStream(),s=this.loadResources(Oa),o=this.pdfManager.ensureCatalog("lang"),[c,,l]=await Promise.all([n,s,o]),h=await this.#Te(c.dict,Oa);return this.#Ce(e).getTextContent({stream:c,task:t,resources:h,includeMarkedContent:a,disableNormalization:r,sink:i,viewBox:this.view,lang:l})}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");if(!e)return null;await this._parsedAnnotations;try{const t=await this.pdfManager.ensure(this,"_parseStructTree",[e]);return await this.pdfManager.ensure(t,"serializable")}catch(e){warn(`getStructTree: "${e}".`);return null}}_parseStructTree(e){const t=new StructTreePage(e,this.pageDict);t.parse(this.ref);return t}async getAnnotationsData(e,t,a){const r=await this._parsedAnnotations;if(0===r.length)return r;const i=[],c=[];let l;const h=!!(a&n),u=!!(a&s),d=!!(a&o);for(const a of r){const r=h||u&&a.viewable;(r||d&&a.printable)&&i.push(a.data);if(a.hasTextContent&&r){l??=this.#Ce(e);c.push(a.extractTextContent(l,t,[-1/0,-1/0,1/0,1/0]).catch((function(e){warn(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${e}".`)})))}}await Promise.all(c);return i}get annotations(){const e=this.#ve("Annots");return shadow(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){return shadow(this,"_parsedAnnotations",this.pdfManager.ensure(this,"annotations").then((async e=>{if(0===e.length)return e;const[t,a]=await Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureDoc("fieldObjects")]);if(!t)return[];const r=a?.orphanFields,i=[];for(const a of e)i.push(AnnotationFactory.create(this.xref,a,t,this._localIdFactory,!1,r,this.ref).catch((function(e){warn(`_parsedAnnotations: "${e}".`);return null})));const n=[];let s,o;for(const e of await Promise.all(i))e&&(e instanceof WidgetAnnotation?(o||=[]).push(e):e instanceof PopupAnnotation?(s||=[]).push(e):n.push(e));o&&n.push(...o);s&&n.push(...s);return n})))}get jsActions(){return shadow(this,"jsActions",collectActions(this.xref,this.pageDict,Se))}}const bc=new Uint8Array([37,80,68,70,45]),yc=new Uint8Array([115,116,97,114,116,120,114,101,102]),wc=new Uint8Array([101,110,100,111,98,106]);function find(e,t,a=1024,r=!1){const i=t.length,n=e.peekBytes(a),s=n.length-i;if(s<=0)return!1;if(r){const a=i-1;let r=n.length-1;for(;r>=a;){let s=0;for(;s=i){e.pos+=r-a;return!0}r--}}else{let a=0;for(;a<=s;){let r=0;for(;r=i){e.pos+=a;return!0}a++}}return!1}class PDFDocument{#Me=new Map;#De=null;constructor(e,t){if(t.length<=0)throw new InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e;this.stream=t;this.xref=new XRef(t,e);const a={font:0};this._globalIdFactory=class{static getDocId(){return`g_${e.docId}`}static createFontId(){return"f"+ ++a.font}static createObjId(){unreachable("Abstract method `createObjId` called.")}static getPageObjId(){unreachable("Abstract method `getPageObjId` called.")}}}parse(e){this.xref.parse(e);this.catalog=new Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=Linearization.create(this.stream)}catch(e){if(e instanceof MissingDataException)throw e;info(e)}return shadow(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization){e.reset();if(find(e,wc)){e.skip(6);let a=e.peekByte();for(;isWhiteSpace(a);){e.pos++;a=e.peekByte()}t=e.pos-e.start}}else{const a=1024,r=yc.length;let i=!1,n=e.end;for(;!i&&n>0;){n-=a-r;n<0&&(n=0);e.pos=n;i=find(e,yc,a,!0)}if(i){e.skip(9);let a;do{a=e.getByte()}while(isWhiteSpace(a));let r="";for(;a>=32&&a<=57;){r+=String.fromCharCode(a);a=e.getByte()}t=parseInt(r,10);isNaN(t)&&(t=0)}}return shadow(this,"startXRef",t)}checkHeader(){const e=this.stream;e.reset();if(!find(e,bc))return;e.moveStart();e.skip(bc.length);let t,a="";for(;(t=e.getByte())>32&&a.length<7;)a+=String.fromCharCode(t);Ca.test(a)?this.#De=a:warn(`Invalid PDF header version: ${a}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages;return shadow(this,"numPages",e)}#Be(e,t=0){return!!Array.isArray(e)&&e.every((e=>{if(!((e=this.xref.fetchIfRef(e))instanceof Dict))return!1;if(e.has("Kids")){if(++t>10){warn("#hasOnlyDocumentSignatures: maximum recursion depth reached");return!1}return this.#Be(e.get("Kids"),t)}const a=isName(e.get("FT"),"Sig"),r=e.get("Rect"),i=Array.isArray(r)&&r.every((e=>0===e));return a&&i}))}get _xfaStreams(){const{acroForm:e}=this.catalog;if(!e)return null;const t=e.get("XFA"),a=new Map(["xdp:xdp","template","datasets","config","connectionSet","localeSet","stylesheet","/xdp:xdp"].map((e=>[e,null])));if(t instanceof BaseStream&&!t.isEmpty){a.set("xdp:xdp",t);return a}if(!Array.isArray(t)||0===t.length)return null;for(let e=0,r=t.length;el.handleSetFont(r,[Name.get(e),1],null,h,t,d,a,i).catch((e=>{warn(`loadXfaFonts: "${e}".`);return null})),f=[];for(const[e,t]of i){const a=t.get("FontDescriptor");if(!(a instanceof Dict))continue;let r=a.get("FontFamily");r=r.replaceAll(/[ ]+(\d)/g,"$1");const i={fontFamily:r,fontWeight:a.get("FontWeight"),italicAngle:-a.get("ItalicAngle")};validateCSSFont(i)&&f.push(parseFont(e,null,i))}await Promise.all(f);const g=this.xfaFactory.setFonts(u);if(!g)return;n.ignoreErrors=!0;f.length=0;u.length=0;const p=new Set;for(const e of g)getXfaFontName(`${e}-Regular`)||p.add(e);p.size&&g.push("PdfJS-Fallback");for(const e of g)if(!p.has(e))for(const t of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const a=`${e}-${t.name}`;f.push(parseFont(a,getXfaFontDict(a),{fontFamily:e,fontWeight:t.fontWeight,italicAngle:t.italicAngle}))}await Promise.all(f);this.xfaFactory.appendFonts(u,p)}loadXfaResources(e,t){return Promise.all([this.#Ne(e,t).catch((()=>{})),this.#Re()])}serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this.#De}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},{acroForm:t}=this.catalog;if(!t)return shadow(this,"formInfo",e);try{const a=t.get("Fields"),r=Array.isArray(a)&&a.length>0;e.hasFields=r;const i=t.get("XFA");e.hasXfa=Array.isArray(i)&&i.length>0||i instanceof BaseStream&&!i.isEmpty;const n=!!(1&t.get("SigFlags")),s=n&&this.#Be(a);e.hasAcroForm=r&&!s;e.hasSignatures=n}catch(e){if(e instanceof MissingDataException)throw e;warn(`Cannot fetch form information: "${e}".`)}return shadow(this,"formInfo",e)}get documentInfo(){const{catalog:e,formInfo:t,xref:a}=this,r={PDFFormatVersion:this.version,Language:e.lang,EncryptFilterName:a.encrypt?.filterName??null,IsLinearized:!!this.linearization,IsAcroFormPresent:t.hasAcroForm,IsXFAPresent:t.hasXfa,IsCollectionPresent:!!e.collection,IsSignaturesPresent:t.hasSignatures};let i;try{i=a.trailer.get("Info")}catch(e){if(e instanceof MissingDataException)throw e;info("The document information dictionary is invalid.")}if(!(i instanceof Dict))return shadow(this,"documentInfo",r);for(const[e,t]of i){switch(e){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof t){r[e]=stringToPDFString(t);continue}break;case"Trapped":if(t instanceof Name){r[e]=t;continue}break;default:let a;switch(typeof t){case"string":a=stringToPDFString(t);break;case"number":case"boolean":a=t;break;default:t instanceof Name&&(a=t)}if(void 0===a){warn(`Bad value, for custom key "${e}", in Info: ${t}.`);continue}r.Custom??=Object.create(null);r.Custom[e]=a;continue}warn(`Bad value, for key "${e}", in Info: ${t}.`)}return shadow(this,"documentInfo",r)}get fingerprints(){const e="\0".repeat(16);function validate(t){return"string"==typeof t&&16===t.length&&t!==e}const t=this.xref.trailer.get("ID");let a,r;if(Array.isArray(t)&&validate(t[0])){a=stringToBytes(t[0]);t[1]!==t[0]&&validate(t[1])&&(r=stringToBytes(t[1]))}else a=calculateMD5(this.stream.getByteRange(0,1024),0,1024);return shadow(this,"fingerprints",[toHexUtil(a),r?toHexUtil(r):null])}async#Ee(e){const{catalog:t,linearization:a,xref:r}=this,i=Ref.get(a.objectNumberFirst,0);try{const e=await r.fetchAsync(i);if(e instanceof Dict){let a=e.getRaw("Type");a instanceof Ref&&(a=await r.fetchAsync(a));if(isName(a,"Page")||!e.has("Type")&&!e.has("Kids")&&e.has("Contents")){t.pageKidsCountCache.has(i)||t.pageKidsCountCache.put(i,1);t.pageIndexCache.has(i)||t.pageIndexCache.put(i,0);return[e,i]}}throw new FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}catch(a){warn(`_getLinearizationPage: "${a.message}".`);return t.getPageDict(e)}}getPage(e){const t=this.#Me.get(e);if(t)return t;const{catalog:a,linearization:r,xfaFactory:i}=this;let n;n=i?Promise.resolve([Dict.empty,null]):r?.pageFirst===e?this.#Ee(e):a.getPageDict(e);n=n.then((([t,r])=>new Page({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:t,ref:r,globalIdFactory:this._globalIdFactory,fontCache:a.fontCache,builtInCMapCache:a.builtInCMapCache,standardFontDataCache:a.standardFontDataCache,globalColorSpaceCache:a.globalColorSpaceCache,globalImageCache:a.globalImageCache,systemFontCache:a.systemFontCache,nonBlendModesSet:a.nonBlendModesSet,xfaFactory:i})));this.#Me.set(e,n);return n}async checkFirstPage(e=!1){if(!e)try{await this.getPage(0)}catch(e){if(e instanceof XRefEntryException){this.#Me.delete(0);await this.cleanup();throw new XRefParseException}}}async checkLastPage(e=!1){const{catalog:t,pdfManager:a}=this;t.setActualNumPages();let r;try{await Promise.all([a.ensureDoc("xfaFactory"),a.ensureDoc("linearization"),a.ensureCatalog("numPages")]);if(this.xfaFactory)return;r=this.linearization?this.linearization.numPages:t.numPages;if(!Number.isInteger(r))throw new FormatError("Page count is not an integer.");if(r<=1)return;await this.getPage(r-1)}catch(i){this.#Me.delete(r-1);await this.cleanup();if(i instanceof XRefEntryException&&!e)throw new XRefParseException;warn(`checkLastPage - invalid /Pages tree /Count: ${r}.`);let n;try{n=await t.getAllPageDicts(e)}catch(a){if(a instanceof XRefEntryException&&!e)throw new XRefParseException;t.setActualNumPages(1);return}for(const[e,[r,i]]of n){let n;if(r instanceof Error){n=Promise.reject(r);n.catch((()=>{}))}else n=Promise.resolve(new Page({pdfManager:a,xref:this.xref,pageIndex:e,pageDict:r,ref:i,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalColorSpaceCache:this.globalColorSpaceCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null}));this.#Me.set(e,n)}t.setActualNumPages(n.size)}}async fontFallback(e,t){const{catalog:a,pdfManager:r}=this;for(const i of await Promise.all(a.fontCache))if(i.loadedName===e){i.fallback(t,r.evaluatorOptions);return}}async cleanup(e=!1){return this.catalog?this.catalog.cleanup(e):clearGlobalCaches()}async#Pe(e,t,a,r,i,n,s){const{xref:o}=this;if(!(a instanceof Ref)||n.has(a))return;n.put(a);const c=await o.fetchAsync(a);if(!(c instanceof Dict))return;let l=await c.getAsync("Subtype");l=l instanceof Name?l.name:null;if("Link"===l)return;if(c.has("T")){const t=stringToPDFString(await c.getAsync("T"));e=""===e?t:`${e}.${t}`}else{let a=c;for(;;){a=a.getRaw("Parent")||t;if(a instanceof Ref){if(n.has(a))break;a=await o.fetchAsync(a)}if(!(a instanceof Dict))break;if(a.has("T")){const t=stringToPDFString(await a.getAsync("T"));e=""===e?t:`${e}.${t}`;break}}}t&&!c.has("Parent")&&isName(c.get("Subtype"),"Widget")&&s.put(a,t);r.has(e)||r.set(e,[]);r.get(e).push(AnnotationFactory.create(o,a,i,null,!0,s,null).then((e=>e?.getFieldObject())).catch((function(e){warn(`#collectFieldObjects: "${e}".`);return null})));if(!c.has("Kids"))return;const h=await c.getAsync("Kids");if(Array.isArray(h))for(const t of h)await this.#Pe(e,a,t,r,i,n,s)}get fieldObjects(){return shadow(this,"fieldObjects",this.pdfManager.ensureDoc("formInfo").then((async e=>{if(!e.hasFields)return null;const t=await this.annotationGlobals;if(!t)return null;const{acroForm:a}=t,r=new RefSet,i=Object.create(null),n=new Map,s=new RefSetCache;for(const e of a.get("Fields"))await this.#Pe("",null,e,n,t,r,s);const o=[];for(const[e,t]of n)o.push(Promise.all(t).then((t=>{(t=t.filter((e=>!!e))).length>0&&(i[e]=t)})));await Promise.all(o);return{allFields:objectSize(i)>0?i:null,orphanFields:s}})))}get hasJSActions(){return shadow(this,"hasJSActions",this.pdfManager.ensureDoc("_parseHasJSActions"))}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return!!e||!!t?.allFields&&Object.values(t.allFields).some((e=>e.some((e=>null!==e.actions))))}get calculationOrderIds(){const e=this.catalog.acroForm?.get("CO");if(!Array.isArray(e)||0===e.length)return shadow(this,"calculationOrderIds",null);const t=[];for(const a of e)a instanceof Ref&&t.push(a.toString());return shadow(this,"calculationOrderIds",t.length?t:null)}get annotationGlobals(){return shadow(this,"annotationGlobals",AnnotationFactory.createGlobals(this.pdfManager))}}class BasePdfManager{constructor({docBaseUrl:e,docId:t,enableXfa:a,evaluatorOptions:r,handler:i,password:n}){this._docBaseUrl=function parseDocBaseUrl(e){if(e){const t=createValidAbsoluteUrl(e);if(t)return t.href;warn(`Invalid absolute docBaseUrl: "${e}".`)}return null}(e);this._docId=t;this._password=n;this.enableXfa=a;r.isOffscreenCanvasSupported&&=FeatureTest.isOffscreenCanvasSupported;r.isImageDecoderSupported&&=FeatureTest.isImageDecoderSupported;this.evaluatorOptions=Object.freeze(r);ImageResizer.setOptions(r);JpegStream.setOptions(r);OperatorList.setOptions(r);const s={...r,handler:i};JpxImage.setOptions(s);IccColorSpace.setOptions(s);CmykICCBasedCS.setOptions(s)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}cleanup(e=!1){return this.pdfDocument.cleanup(e)}async ensure(e,t,a){unreachable("Abstract method `ensure` called")}requestRange(e,t){unreachable("Abstract method `requestRange` called")}requestLoadedStream(e=!1){unreachable("Abstract method `requestLoadedStream` called")}sendProgressiveData(e){unreachable("Abstract method `sendProgressiveData` called")}updatePassword(e){this._password=e}terminate(e){unreachable("Abstract method `terminate` called")}}class LocalPdfManager extends BasePdfManager{constructor(e){super(e);const t=new Stream(e.source);this.pdfDocument=new PDFDocument(this,t);this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,a){const r=e[t];return"function"==typeof r?r.apply(e,a):r}requestRange(e,t){return Promise.resolve()}requestLoadedStream(e=!1){return this._loadedStreamPromise}terminate(e){}}class NetworkPdfManager extends BasePdfManager{constructor(e){super(e);this.streamManager=new ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize});this.pdfDocument=new PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,a){try{const r=e[t];return"function"==typeof r?r.apply(e,a):r}catch(r){if(!(r instanceof MissingDataException))throw r;await this.requestRange(r.begin,r.end);return this.ensure(e,t,a)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(e=!1){return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}const Sc=1,xc=2,Ac=1,kc=2,Cc=3,vc=4,Fc=5,Ic=6,Oc=7,Tc=8;function onFn(){}function wrapReason(e){if(e instanceof AbortException||e instanceof InvalidPDFException||e instanceof PasswordException||e instanceof ResponseException||e instanceof UnknownErrorException)return e;e instanceof Error||"object"==typeof e&&null!==e||unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.');switch(e.name){case"AbortException":return new AbortException(e.message);case"InvalidPDFException":return new InvalidPDFException(e.message);case"PasswordException":return new PasswordException(e.message,e.code);case"ResponseException":return new ResponseException(e.message,e.status,e.missing);case"UnknownErrorException":return new UnknownErrorException(e.message,e.details)}return new UnknownErrorException(e.message,e.toString())}class MessageHandler{#Le=new AbortController;constructor(e,t,a){this.sourceName=e;this.targetName=t;this.comObj=a;this.callbackId=1;this.streamId=1;this.streamSinks=Object.create(null);this.streamControllers=Object.create(null);this.callbackCapabilities=Object.create(null);this.actionHandler=Object.create(null);a.addEventListener("message",this.#je.bind(this),{signal:this.#Le.signal})}#je({data:e}){if(e.targetName!==this.sourceName)return;if(e.stream){this.#_e(e);return}if(e.callback){const t=e.callbackId,a=this.callbackCapabilities[t];if(!a)throw new Error(`Cannot resolve callback ${t}`);delete this.callbackCapabilities[t];if(e.callback===Sc)a.resolve(e.data);else{if(e.callback!==xc)throw new Error("Unexpected callback case");a.reject(wrapReason(e.reason))}return}const t=this.actionHandler[e.action];if(!t)throw new Error(`Unknown action from worker: ${e.action}`);if(e.callbackId){const a=this.sourceName,r=e.sourceName,i=this.comObj;Promise.try(t,e.data).then((function(t){i.postMessage({sourceName:a,targetName:r,callback:Sc,callbackId:e.callbackId,data:t})}),(function(t){i.postMessage({sourceName:a,targetName:r,callback:xc,callbackId:e.callbackId,reason:wrapReason(t)})}))}else e.streamId?this.#Ue(e):t(e.data)}on(e,t){const a=this.actionHandler;if(a[e])throw new Error(`There is already an actionName called "${e}"`);a[e]=t}send(e,t,a){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},a)}sendWithPromise(e,t,a){const r=this.callbackId++,i=Promise.withResolvers();this.callbackCapabilities[r]=i;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:r,data:t},a)}catch(e){i.reject(e)}return i.promise}sendWithStream(e,t,a,r){const i=this.streamId++,n=this.sourceName,s=this.targetName,o=this.comObj;return new ReadableStream({start:a=>{const c=Promise.withResolvers();this.streamControllers[i]={controller:a,startCall:c,pullCall:null,cancelCall:null,isClosed:!1};o.postMessage({sourceName:n,targetName:s,action:e,streamId:i,data:t,desiredSize:a.desiredSize},r);return c.promise},pull:e=>{const t=Promise.withResolvers();this.streamControllers[i].pullCall=t;o.postMessage({sourceName:n,targetName:s,stream:Ic,streamId:i,desiredSize:e.desiredSize});return t.promise},cancel:e=>{assert(e instanceof Error,"cancel must have a valid reason");const t=Promise.withResolvers();this.streamControllers[i].cancelCall=t;this.streamControllers[i].isClosed=!0;o.postMessage({sourceName:n,targetName:s,stream:Ac,streamId:i,reason:wrapReason(e)});return t.promise}},a)}#Ue(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this,s=this.actionHandler[e.action],o={enqueue(e,n=1,s){if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=n;if(o>0&&this.desiredSize<=0){this.sinkCapability=Promise.withResolvers();this.ready=this.sinkCapability.promise}i.postMessage({sourceName:a,targetName:r,stream:vc,streamId:t,chunk:e},s)},close(){if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:Cc,streamId:t});delete n.streamSinks[t]}},error(e){assert(e instanceof Error,"error must have a valid reason");if(!this.isCancelled){this.isCancelled=!0;i.postMessage({sourceName:a,targetName:r,stream:Fc,streamId:t,reason:wrapReason(e)})}},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};o.sinkCapability.resolve();o.ready=o.sinkCapability.promise;this.streamSinks[t]=o;Promise.try(s,e.data,o).then((function(){i.postMessage({sourceName:a,targetName:r,stream:Tc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:Tc,streamId:t,reason:wrapReason(e)})}))}#_e(e){const t=e.streamId,a=this.sourceName,r=e.sourceName,i=this.comObj,n=this.streamControllers[t],s=this.streamSinks[t];switch(e.stream){case Tc:e.success?n.startCall.resolve():n.startCall.reject(wrapReason(e.reason));break;case Oc:e.success?n.pullCall.resolve():n.pullCall.reject(wrapReason(e.reason));break;case Ic:if(!s){i.postMessage({sourceName:a,targetName:r,stream:Oc,streamId:t,success:!0});break}s.desiredSize<=0&&e.desiredSize>0&&s.sinkCapability.resolve();s.desiredSize=e.desiredSize;Promise.try(s.onPull||onFn).then((function(){i.postMessage({sourceName:a,targetName:r,stream:Oc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:Oc,streamId:t,reason:wrapReason(e)})}));break;case vc:assert(n,"enqueue should have stream controller");if(n.isClosed)break;n.controller.enqueue(e.chunk);break;case Cc:assert(n,"close should have stream controller");if(n.isClosed)break;n.isClosed=!0;n.controller.close();this.#Xe(n,t);break;case Fc:assert(n,"error should have stream controller");n.controller.error(wrapReason(e.reason));this.#Xe(n,t);break;case kc:e.success?n.cancelCall.resolve():n.cancelCall.reject(wrapReason(e.reason));this.#Xe(n,t);break;case Ac:if(!s)break;const o=wrapReason(e.reason);Promise.try(s.onCancel||onFn,o).then((function(){i.postMessage({sourceName:a,targetName:r,stream:kc,streamId:t,success:!0})}),(function(e){i.postMessage({sourceName:a,targetName:r,stream:kc,streamId:t,reason:wrapReason(e)})}));s.sinkCapability.reject(o);s.isCancelled=!0;delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async#Xe(e,t){await Promise.allSettled([e.startCall?.promise,e.pullCall?.promise,e.cancelCall?.promise]);delete this.streamControllers[t]}destroy(){this.#Le?.abort();this.#Le=null}}async function writeObject(e,t,a,{encrypt:r=null}){const i=r?.createCipherTransform(e.num,e.gen);a.push(`${e.num} ${e.gen} obj\n`);t instanceof Dict?await writeDict(t,a,i):t instanceof BaseStream?await writeStream(t,a,i):(Array.isArray(t)||ArrayBuffer.isView(t))&&await writeArray(t,a,i);a.push("\nendobj\n")}async function writeDict(e,t,a){t.push("<<");for(const r of e.getKeys()){t.push(` /${escapePDFName(r)} `);await writeValue(e.getRaw(r),t,a)}t.push(">>")}async function writeStream(e,t,a){let r=e.getBytes();const{dict:i}=e,[n,s]=await Promise.all([i.getAsync("Filter"),i.getAsync("DecodeParms")]),o=isName(Array.isArray(n)?await i.xref.fetchIfRefAsync(n[0]):n,"FlateDecode");if(r.length>=256||o)try{const e=new CompressionStream("deflate"),t=e.writable.getWriter();await t.ready;t.write(r).then((async()=>{await t.ready;await t.close()})).catch((()=>{}));const a=await new Response(e.readable).arrayBuffer();r=new Uint8Array(a);let c,l;if(n){if(!o){c=Array.isArray(n)?[Name.get("FlateDecode"),...n]:[Name.get("FlateDecode"),n];s&&(l=Array.isArray(s)?[null,...s]:[null,s])}}else c=Name.get("FlateDecode");c&&i.set("Filter",c);l&&i.set("DecodeParms",l)}catch(e){info(`writeStream - cannot compress data: "${e}".`)}let c=bytesToString(r);a&&(c=a.encryptString(c));i.set("Length",c.length);await writeDict(i,t,a);t.push(" stream\n",c,"\nendstream")}async function writeArray(e,t,a){t.push("[");let r=!0;for(const i of e){r?r=!1:t.push(" ");await writeValue(i,t,a)}t.push("]")}async function writeValue(e,t,a){if(e instanceof Name)t.push(`/${escapePDFName(e.name)}`);else if(e instanceof Ref)t.push(`${e.num} ${e.gen} R`);else if(Array.isArray(e)||ArrayBuffer.isView(e))await writeArray(e,t,a);else if("string"==typeof e){a&&(e=a.encryptString(e));t.push(`(${escapeString(e)})`)}else"number"==typeof e?t.push(numberToString(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof Dict?await writeDict(e,t,a):e instanceof BaseStream?await writeStream(e,t,a):null===e?t.push("null"):warn(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function writeInt(e,t,a,r){for(let i=t+a-1;i>a-1;i--){r[i]=255&e;e>>=8}return a+t}function writeString(e,t,a){const r=e.length;for(let i=0;i1&&(n=a.documentElement.searchNode([i.at(-1)],0));n?n.childNodes=Array.isArray(r)?r.map((e=>new SimpleDOMNode("value",e))):[new SimpleDOMNode("#text",r)]:warn(`Node not found for path: ${t}`)}const r=[];a.documentElement.dump(r);return r.join("")}(r.fetchIfRef(t).getString(),a)}const i=new StringStream(e);i.dict=new Dict(r);i.dict.set("Type",Name.get("EmbeddedFile"));a.put(t,{data:i})}function getIndexes(e){const t=[];for(const{ref:a}of e)a.num===t.at(-2)+t.at(-1)?t[t.length-1]+=1:t.push(a.num,1);return t}function computeIDs(e,t,a){if(Array.isArray(t.fileIds)&&t.fileIds.length>0){const r=function computeMD5(e,t){const a=Math.floor(Date.now()/1e3),r=t.filename||"",i=[a.toString(),r,e.toString(),...t.infoMap.values()],n=Math.sumPrecise(i.map((e=>e.length))),s=new Uint8Array(n);let o=0;for(const e of i)o=writeString(e,o,s);return bytesToString(calculateMD5(s,0,s.length))}(e,t);a.set("ID",[t.fileIds[0],r])}}async function incrementalUpdate({originalData:e,xrefInfo:t,changes:a,xref:r=null,hasXfa:i=!1,xfaDatasetsRef:n=null,hasXfaDatasetsEntry:s=!1,needAppearances:o,acroFormRef:c=null,acroForm:l=null,xfaData:h=null,useXrefStream:u=!1}){await async function updateAcroform({xref:e,acroForm:t,acroFormRef:a,hasXfa:r,hasXfaDatasetsEntry:i,xfaDatasetsRef:n,needAppearances:s,changes:o}){!r||i||n||warn("XFA - Cannot save it");if(!s&&(!r||!n||i))return;const c=t.clone();if(r&&!i){const e=t.get("XFA").slice();e.splice(2,0,"datasets");e.splice(3,0,n);c.set("XFA",e)}s&&c.set("NeedAppearances",!0);o.put(a,{data:c})}({xref:r,acroForm:l,acroFormRef:c,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRef:n,needAppearances:o,changes:a});i&&updateXFA({xfaData:h,xfaDatasetsRef:n,changes:a,xref:r});const d=function getTrailerDict(e,t,a){const r=new Dict(null);r.set("Prev",e.startXRef);const i=e.newRef;if(a){t.put(i,{data:""});r.set("Size",i.num+1);r.set("Type",Name.get("XRef"))}else r.set("Size",i.num);null!==e.rootRef&&r.set("Root",e.rootRef);null!==e.infoRef&&r.set("Info",e.infoRef);null!==e.encryptRef&&r.set("Encrypt",e.encryptRef);return r}(t,a,u),f=[],g=await async function writeChanges(e,t,a=[]){const r=[];for(const[i,{data:n}]of e.items())if(null!==n&&"string"!=typeof n){await writeObject(i,n,a,t);r.push({ref:i,data:a.join("")});a.length=0}else r.push({ref:i,data:n});return r.sort(((e,t)=>e.ref.num-t.ref.num))}(a,r,f);let p=e.length;const m=e.at(-1);if(10!==m&&13!==m){f.push("\n");p+=1}for(const{data:e}of g)null!==e&&f.push(e);await(u?async function getXRefStreamTable(e,t,a,r,i){const n=[];let s=0,o=0;for(const{ref:e,data:r}of a){let a;s=Math.max(s,t);if(null!==r){a=Math.min(e.gen,65535);n.push([1,t,a]);t+=r.length}else{a=Math.min(e.gen+1,65535);n.push([0,0,a])}o=Math.max(o,a)}r.set("Index",getIndexes(a));const c=[1,getSizeInBytes(s),getSizeInBytes(o)];r.set("W",c);computeIDs(t,e,r);const l=Math.sumPrecise(c),h=new Uint8Array(l*n.length),u=new Stream(h);u.dict=r;let d=0;for(const[e,t,a]of n){d=writeInt(e,c[0],d,h);d=writeInt(t,c[1],d,h);d=writeInt(a,c[2],d,h)}await writeObject(e.newRef,u,i,{});i.push("startxref\n",t.toString(),"\n%%EOF\n")}(t,p,g,d,f):async function getXRefTable(e,t,a,r,i){i.push("xref\n");const n=getIndexes(a);let s=0;for(const{ref:e,data:r}of a){if(e.num===n[s]){i.push(`${n[s]} ${n[s+1]}\n`);s+=2}if(null!==r){i.push(`${t.toString().padStart(10,"0")} ${Math.min(e.gen,65535).toString().padStart(5,"0")} n\r\n`);t+=r.length}else i.push(`0000000000 ${Math.min(e.gen+1,65535).toString().padStart(5,"0")} f\r\n`)}computeIDs(t,e,r);i.push("trailer\n");await writeDict(r,i);i.push("\nstartxref\n",t.toString(),"\n%%EOF\n")}(t,p,g,d,f));const b=e.length+Math.sumPrecise(f.map((e=>e.length))),y=new Uint8Array(b);y.set(e);let w=e.length;for(const e of f)w=writeString(e,w,y);return y}class PDFWorkerStream{constructor(e){this._msgHandler=e;this._contentLength=null;this._fullRequestReader=null;this._rangeRequestReaders=[]}getFullReader(){assert(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once.");this._fullRequestReader=new PDFWorkerStreamReader(this._msgHandler);return this._fullRequestReader}getRangeReader(e,t){const a=new PDFWorkerStreamRangeReader(e,t,this._msgHandler);this._rangeRequestReaders.push(a);return a}cancelAllRequests(e){this._fullRequestReader?.cancel(e);for(const t of this._rangeRequestReaders.slice(0))t.cancel(e)}}class PDFWorkerStreamReader{constructor(e){this._msgHandler=e;this.onProgress=null;this._contentLength=null;this._isRangeSupported=!1;this._isStreamingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader();this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((e=>{this._isStreamingSupported=e.isStreamingSupported;this._isRangeSupported=e.isRangeSupported;this._contentLength=e.contentLength}))}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class PDFWorkerStreamRangeReader{constructor(e,t,a){this._msgHandler=a;this.onProgress=null;const r=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=r.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class WorkerTask{constructor(e){this.name=e;this.terminated=!1;this._capability=Promise.withResolvers()}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}class WorkerMessageHandler{static{"undefined"==typeof window&&!e&&"undefined"!=typeof self&&"function"==typeof self.postMessage&&"onmessage"in self&&this.initializeFromPort(self)}static setup(e,t){let a=!1;e.on("test",(t=>{if(!a){a=!0;e.send("test",t instanceof Uint8Array)}}));e.on("configure",(e=>{!function setVerbosityLevel(e){Number.isInteger(e)&&(da=e)}(e.verbosity)}));e.on("GetDocRequest",(e=>this.createDocumentHandler(e,t)))}static createDocumentHandler(e,t){let a,r=!1,i=null;const n=new Set,s=getVerbosityLevel(),{docId:o,apiVersion:c}=e,l="5.3.31";if(c!==l)throw new Error(`The API version "${c}" does not match the Worker version "${l}".`);const buildMsg=(e,t)=>`The \`${e}.prototype\` contains unexpected enumerable property "${t}", thus breaking e.g. \`for...in\` iteration of ${e}s.`;for(const e in{})throw new Error(buildMsg("Object",e));for(const e in[])throw new Error(buildMsg("Array",e));const h=o+"_worker";let u=new MessageHandler(h,o,t);function ensureNotTerminated(){if(r)throw new Error("Worker was terminated")}function startWorkerTask(e){n.add(e)}function finishWorkerTask(e){e.finish();n.delete(e)}async function loadDocument(e){await a.ensureDoc("checkHeader");await a.ensureDoc("parseStartXRef");await a.ensureDoc("parse",[e]);await a.ensureDoc("checkFirstPage",[e]);await a.ensureDoc("checkLastPage",[e]);const t=await a.ensureDoc("isPureXfa");if(t){const e=new WorkerTask("loadXfaResources");startWorkerTask(e);await a.ensureDoc("loadXfaResources",[u,e]);finishWorkerTask(e)}const[r,i]=await Promise.all([a.ensureDoc("numPages"),a.ensureDoc("fingerprints")]);return{numPages:r,fingerprints:i,htmlForXfa:t?await a.ensureDoc("htmlForXfa"):null}}function setupDoc(e){function onSuccess(e){ensureNotTerminated();u.send("GetDoc",{pdfInfo:e})}function onFailure(e){ensureNotTerminated();if(e instanceof PasswordException){const t=new WorkerTask(`PasswordException: response ${e.code}`);startWorkerTask(t);u.sendWithPromise("PasswordRequest",e).then((function({password:e}){finishWorkerTask(t);a.updatePassword(e);pdfManagerReady()})).catch((function(){finishWorkerTask(t);u.send("DocException",e)}))}else u.send("DocException",wrapReason(e))}function pdfManagerReady(){ensureNotTerminated();loadDocument(!1).then(onSuccess,(function(e){ensureNotTerminated();e instanceof XRefParseException?a.requestLoadedStream().then((function(){ensureNotTerminated();loadDocument(!0).then(onSuccess,onFailure)})):onFailure(e)}))}ensureNotTerminated();(async function getPdfManager({data:e,password:t,disableAutoFetch:a,rangeChunkSize:r,length:n,docBaseUrl:s,enableXfa:c,evaluatorOptions:l}){const h={source:null,disableAutoFetch:a,docBaseUrl:s,docId:o,enableXfa:c,evaluatorOptions:l,handler:u,length:n,password:t,rangeChunkSize:r};if(e){h.source=e;return new LocalPdfManager(h)}const d=new PDFWorkerStream(u),f=d.getFullReader(),g=Promise.withResolvers();let p,m=[],b=0;f.headersReady.then((function(){if(f.isRangeSupported){h.source=d;h.length=f.contentLength;h.disableAutoFetch||=f.isStreamingSupported;p=new NetworkPdfManager(h);for(const e of m)p.sendProgressiveData(e);m=[];g.resolve(p);i=null}})).catch((function(e){g.reject(e);i=null}));new Promise((function(e,t){const readChunk=function({value:e,done:a}){try{ensureNotTerminated();if(a){if(!p){const e=arrayBuffersToBytes(m);m=[];n&&e.length!==n&&warn("reported HTTP length is different from actual");h.source=e;p=new LocalPdfManager(h);g.resolve(p)}i=null;return}b+=e.byteLength;f.isStreamingSupported||u.send("DocProgress",{loaded:b,total:Math.max(b,f.contentLength||0)});p?p.sendProgressiveData(e):m.push(e);f.read().then(readChunk,t)}catch(e){t(e)}};f.read().then(readChunk,t)})).catch((function(e){g.reject(e);i=null}));i=e=>{d.cancelAllRequests(e)};return g.promise})(e).then((function(e){if(r){e.terminate(new AbortException("Worker was terminated."));throw new Error("Worker was terminated")}a=e;a.requestLoadedStream(!0).then((e=>{u.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(pdfManagerReady,onFailure)}u.on("GetPage",(function(e){return a.getPage(e.pageIndex).then((function(e){return Promise.all([a.ensure(e,"rotate"),a.ensure(e,"ref"),a.ensure(e,"userUnit"),a.ensure(e,"view")]).then((function([e,t,a,r]){return{rotate:e,ref:t,refStr:t?.toString()??null,userUnit:a,view:r}}))}))}));u.on("GetPageIndex",(function(e){const t=Ref.get(e.num,e.gen);return a.ensureCatalog("getPageIndex",[t])}));u.on("GetDestinations",(function(e){return a.ensureCatalog("destinations")}));u.on("GetDestination",(function(e){return a.ensureCatalog("getDestination",[e.id])}));u.on("GetPageLabels",(function(e){return a.ensureCatalog("pageLabels")}));u.on("GetPageLayout",(function(e){return a.ensureCatalog("pageLayout")}));u.on("GetPageMode",(function(e){return a.ensureCatalog("pageMode")}));u.on("GetViewerPreferences",(function(e){return a.ensureCatalog("viewerPreferences")}));u.on("GetOpenAction",(function(e){return a.ensureCatalog("openAction")}));u.on("GetAttachments",(function(e){return a.ensureCatalog("attachments")}));u.on("GetDocJSActions",(function(e){return a.ensureCatalog("jsActions")}));u.on("GetPageJSActions",(function({pageIndex:e}){return a.getPage(e).then((e=>a.ensure(e,"jsActions")))}));u.on("GetOutline",(function(e){return a.ensureCatalog("documentOutline")}));u.on("GetOptionalContentConfig",(function(e){return a.ensureCatalog("optionalContentConfig")}));u.on("GetPermissions",(function(e){return a.ensureCatalog("permissions")}));u.on("GetMetadata",(function(e){return Promise.all([a.ensureDoc("documentInfo"),a.ensureCatalog("metadata")])}));u.on("GetMarkInfo",(function(e){return a.ensureCatalog("markInfo")}));u.on("GetData",(function(e){return a.requestLoadedStream().then((e=>e.bytes))}));u.on("GetAnnotations",(function({pageIndex:e,intent:t}){return a.getPage(e).then((function(a){const r=new WorkerTask(`GetAnnotations: page ${e}`);startWorkerTask(r);return a.getAnnotationsData(u,r,t).then((e=>{finishWorkerTask(r);return e}),(e=>{finishWorkerTask(r);throw e}))}))}));u.on("GetFieldObjects",(function(e){return a.ensureDoc("fieldObjects").then((e=>e?.allFields||null))}));u.on("HasJSActions",(function(e){return a.ensureDoc("hasJSActions")}));u.on("GetCalculationOrderIds",(function(e){return a.ensureDoc("calculationOrderIds")}));u.on("SaveDocument",(async function({isPureXfa:e,numPages:t,annotationStorage:r,filename:i}){const n=[a.requestLoadedStream(),a.ensureCatalog("acroForm"),a.ensureCatalog("acroFormRef"),a.ensureDoc("startXRef"),a.ensureDoc("xref"),a.ensureDoc("linearization"),a.ensureCatalog("structTreeRoot")],s=new RefSetCache,o=[],c=e?null:getNewAnnotationsMap(r),[l,h,d,f,g,p,m]=await Promise.all(n),b=g.trailer.getRaw("Root")||null;let y;if(c){m?await m.canUpdateStructTree({pdfManager:a,newAnnotationsByPage:c})&&(y=m):await StructTreeRoot.canCreateStructureTree({catalogRef:b,pdfManager:a,newAnnotationsByPage:c})&&(y=null);const e=AnnotationFactory.generateImages(r.values(),g,a.evaluatorOptions.isOffscreenCanvasSupported),t=void 0===y?o:[];for(const[r,i]of c)t.push(a.getPage(r).then((t=>{const a=new WorkerTask(`Save (editor): page ${r}`);startWorkerTask(a);return t.saveNewAnnotations(u,a,i,e,s).finally((function(){finishWorkerTask(a)}))})));null===y?o.push(Promise.all(t).then((async()=>{await StructTreeRoot.createStructureTree({newAnnotationsByPage:c,xref:g,catalogRef:b,pdfManager:a,changes:s})}))):y&&o.push(Promise.all(t).then((async()=>{await y.updateStructureTree({newAnnotationsByPage:c,pdfManager:a,changes:s})})))}if(e)o.push(a.ensureDoc("serializeXfaData",[r]));else for(let e=0;ee.needAppearances)),k=h instanceof Dict&&h.get("XFA")||null;let C=null,v=!1;if(Array.isArray(k)){for(let e=0,t=k.length;e{g.resetNewTemporaryRef()}))}));u.on("GetOperatorList",(function(e,t){const r=e.pageIndex;a.getPage(r).then((function(a){const i=new WorkerTask(`GetOperatorList: page ${r}`);startWorkerTask(i);const n=s>=Ae?Date.now():0;a.getOperatorList({handler:u,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage,modifiedIds:e.modifiedIds}).then((function(e){finishWorkerTask(i);n&&info(`page=${r+1} - getOperatorList: time=${Date.now()-n}ms, len=${e.length}`);t.close()}),(function(e){finishWorkerTask(i);i.terminated||t.error(e)}))}))}));u.on("GetTextContent",(function(e,t){const{pageIndex:r,includeMarkedContent:i,disableNormalization:n}=e;a.getPage(r).then((function(e){const a=new WorkerTask("GetTextContent: page "+r);startWorkerTask(a);const o=s>=Ae?Date.now():0;e.extractTextContent({handler:u,task:a,sink:t,includeMarkedContent:i,disableNormalization:n}).then((function(){finishWorkerTask(a);o&&info(`page=${r+1} - getTextContent: time=`+(Date.now()-o)+"ms");t.close()}),(function(e){finishWorkerTask(a);a.terminated||t.error(e)}))}))}));u.on("GetStructTree",(function(e){return a.getPage(e.pageIndex).then((e=>a.ensure(e,"getStructTree")))}));u.on("FontFallback",(function(e){return a.fontFallback(e.id,u)}));u.on("Cleanup",(function(e){return a.cleanup(!0)}));u.on("Terminate",(function(e){r=!0;const t=[];if(a){a.terminate(new AbortException("Worker was terminated."));const e=a.cleanup();t.push(e);a=null}else clearGlobalCaches();i?.(new AbortException("Worker was terminated."));for(const e of n){t.push(e.finished);e.terminate()}return Promise.all(t).then((function(){u.destroy();u=null}))}));u.on("Ready",(function(t){setupDoc(e);e=null}));return h}static initializeFromPort(e){const t=new MessageHandler("worker","main",e);this.setup(t,e);t.send("ready",null)}}globalThis.pdfjsWorker={WorkerMessageHandler};export{WorkerMessageHandler}; \ No newline at end of file diff --git a/frontend/public/preload.js b/frontend/public/preload.js new file mode 100644 index 0000000..9f69592 --- /dev/null +++ b/frontend/public/preload.js @@ -0,0 +1,19 @@ +const { logger } = require('../../backend/src/config/logger'); +logger.info('[Preload] Script started.'); +const { contextBridge, ipcRenderer } = require('electron'); +contextBridge.exposeInMainWorld( + 'electronAPI', + { + getAppConfig: () => ipcRenderer.invoke('get-app-config'), + onCardDetected: (callback) => { + ipcRenderer.on('card-detected', (event, uid) => callback(uid)); + }, + + removeCardDetectedListeners: () => { + ipcRenderer.removeAllListeners('card-detected'); + } + } +); + +logger.log('[Preload] Script finished. electronAPI exposed.'); +window.dispatchEvent(new Event('electronApiReady')); \ No newline at end of file diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt new file mode 100644 index 0000000..9450c3e --- /dev/null +++ b/frontend/public/robots.txt @@ -0,0 +1,4 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: + diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..74b5e05 --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,38 @@ +.App { + text-align: center; +} + +.App-logo { + height: 40vmin; + pointer-events: none; +} + +@media (prefers-reduced-motion: no-preference) { + .App-logo { + animation: App-logo-spin infinite 20s linear; + } +} + +.App-header { + background-color: #282c34; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: calc(10px + 2vmin); + color: white; +} + +.App-link { + color: #61dafb; +} + +@keyframes App-logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/frontend/src/App.test.tsx b/frontend/src/App.test.tsx new file mode 100644 index 0000000..2a68616 --- /dev/null +++ b/frontend/src/App.test.tsx @@ -0,0 +1,9 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import App from './App'; + +test('renders learn react link', () => { + render(); + const linkElement = screen.getByText(/learn react/i); + expect(linkElement).toBeInTheDocument(); +}); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..1ac0916 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,99 @@ +import React, { useState } from 'react'; +import './styles/main.css'; +import LoginWindow from './components/LoginWindow'; +import EmployeeInfo from './components/EmployeeInfo'; +import GuestMode from './components/GuestMode'; +import PayslipViewer from './components/PayslipViewer'; +import config from './config.json'; + +interface Employee { + id: string; + tnom: string; + famaly: string; + ima: string; + otch: string; + category: string; + organization: string; + identNumber: string; +} + +function App() { + const [isLoggedIn, setIsLoggedIn] = useState(false); + const [isGuestMode, setIsGuestMode] = useState(false); + const [employee, setEmployee] = useState(null); + const [showPayslip, setShowPayslip] = useState(false); + const [selectedPeriod, setSelectedPeriod] = useState(''); + const [loginError, setLoginError] = useState(''); + + const handleLogin = async (id: string) => { + try { + const isCardUid = /^\d{7}$/.test(id); + const url = isCardUid + ? `${config.backendUrl}/api/employee/card/${id}` + : `${config.backendUrl}/api/employee/${id}`; + const response = await fetch(url); + if (response.ok) { + const data = await response.json(); + setEmployee(data); + setIsLoggedIn(true); + setLoginError(''); + } else { + setLoginError('Сотрудник не найден'); + } + } catch (error) { + console.error('Error:', error); + setLoginError('Ошибка при получении данных'); + } + }; + + const handleGuestMode = () => { + setIsGuestMode(true); + }; + + const handleBack = () => { + setIsLoggedIn(false); + setEmployee(null); + setIsGuestMode(false); + setShowPayslip(false); + setSelectedPeriod(''); + }; + + const handleViewPayslip = (period: string) => { + setSelectedPeriod(period); + setShowPayslip(true); + }; + + const handlePayslipBack = () => { + setShowPayslip(false); + setSelectedPeriod(''); + }; + + const getPayslipUrl = (employee: Employee, period: string) => { + const fileName = `${employee.tnom}.pdf`; + + return `${config.backendUrl}/api/payslip/${period}/${fileName}`; + }; + + return ( +

      + ); +} + +export default App; diff --git a/frontend/src/components/EmployeeInfo.tsx b/frontend/src/components/EmployeeInfo.tsx new file mode 100644 index 0000000..ab5f552 --- /dev/null +++ b/frontend/src/components/EmployeeInfo.tsx @@ -0,0 +1,102 @@ +import React, { useState } from 'react'; + +interface Employee { + id: string; + cardNumber?: string; + tnom: string; + famaly: string; + ima: string; + otch: string; + profession?: string; + category?: string; + departmentName?: string; + organization: string; +} + +interface EmployeeInfoProps { + employee: Employee; + onViewPayslip: (period: string) => void; + onBack: () => void; +} + +const EmployeeInfo: React.FC = ({ + employee, + onViewPayslip, + onBack +}) => { + const [selectedPeriod, setSelectedPeriod] = useState(() => { + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); + return `${month}${year}`; + }); + + // Генерируем список периодов за последние 12 месяцев + const generatePeriods = () => { + const periods = []; + const now = new Date(); + + for (let i = 0; i < 12; i++) { + const date = new Date(now.getFullYear(), now.getMonth() - i, 1); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + periods.push(`${month}${year}`); + } + + return periods; + }; + + const periods = generatePeriods(); + const monthNames = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', + 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']; + + return ( +
      +
      + +
      + +
      +
      +
      Фото
      +
      +
      +

      {`${employee.famaly} ${employee.ima} ${employee.otch}`}

      +

      Табельный номер: {employee.tnom}

      + {employee.category?.trim() &&

      Категория: {employee.category}

      } + {employee.departmentName && ( +

      Подразделение: {employee.departmentName}

      + )} +

      Организация: {employee.organization}

      + {employee.profession &&

      Профессия: {employee.profession}

      } +
      +
      + +
      +

      Расчётный лист

      +
      + + +
      + + +
      +
      + ); +}; + +export default EmployeeInfo; \ No newline at end of file diff --git a/frontend/src/components/GuestMode.tsx b/frontend/src/components/GuestMode.tsx new file mode 100644 index 0000000..00d854c --- /dev/null +++ b/frontend/src/components/GuestMode.tsx @@ -0,0 +1,241 @@ +import React, { useState, useEffect } from 'react'; +import config from "../../src/config.json"; +interface GuestModeProps { + onBack: () => void; +} + +function parseHandbookBlocks(html: string) { + const blocks: (string | { type: 'phones', rows: { desc: string, internal: string, city: string }[] })[] = []; + const container = document.createElement('div'); + container.innerHTML = html; + let phoneRows: { desc: string, internal: string, city: string }[] = []; + let lastDesc = ''; + const phoneRegex = /(\d{2,3}-\d{2,3}(?:-\d{2,3})?|\d{4}\s\d{6,7})/g; + const children = Array.from(container.childNodes); + let htmlBuffer = ''; + const flushHtmlBuffer = () => { + if (htmlBuffer) { + blocks.push(htmlBuffer); + htmlBuffer = ''; + } + }; + const flushPhoneRows = () => { + if (phoneRows.length > 1) { + blocks.push({ type: 'phones', rows: phoneRows }); + } else if (phoneRows.length === 1) { + const row = phoneRows[0]; + blocks.push(`

      ${row.desc} ${row.internal}${row.city ? ' ' + row.city : ''}

      `); + } + phoneRows = []; + }; + children.forEach(node => { + if (node.nodeType === 1) { + const tag = (node as HTMLElement).tagName.toLowerCase(); + const text = (node as HTMLElement).textContent?.trim() || ''; + const phones = Array.from(text.matchAll(phoneRegex), m => m[1]); + if ((tag === 'p' || tag === 'li') && phones.length >= 1) { + flushHtmlBuffer(); + if (phones.length === 2) { + const desc = text.replace(phoneRegex, '').trim(); + phoneRows.push({ desc, internal: phones[0], city: phones[1] }); + lastDesc = desc; + } else if (phones.length === 1) { + phoneRows.push({ desc: lastDesc, internal: phones[0], city: '' }); + } else if (text && !phones.length) { + lastDesc = text; + } + } else { + if (phoneRows.length) { + flushPhoneRows(); + } + if ((node as HTMLElement).outerHTML) { + htmlBuffer += (node as HTMLElement).outerHTML; + } else { + htmlBuffer += node.textContent || ''; + } + } + } else if (node.nodeType === 3) { + htmlBuffer += node.textContent; + } + }); + if (phoneRows.length) { + flushPhoneRows(); + } + if (htmlBuffer) { + blocks.push(htmlBuffer); + } + return blocks; +} + +const HandbookBlocks: React.FC<{ html: string }> = ({ html }) => { + const [blocks, setBlocks] = useState<(string | { type: 'phones', rows: { desc: string, internal: string, city: string }[] })[]>([]); + useEffect(() => { + setBlocks(parseHandbookBlocks(html)); + }, [html]); + return ( + <> + {blocks.map((block, i) => { + if (typeof block === 'string') { + return
      ; + } else if (block.type === 'phones') { + return ( + + + + + + + + + + {block.rows.map((row, j) => ( + + + + + + ))} + +
      ОписаниеАТС предприятияГородская АТС
      {row.desc}{row.internal}{row.city}
      + ); + } + return null; + })} + + ); +}; + +const ADMIN_SERVER_URL = config.adminServerUrl; + +function patchMediaSrc(html: string): string { + return html + .replace(/]+)src=["'](\/uploads\/[^"']+)["']/g, `]+)src=["'](\/uploads\/[^"']+)["']/g, ` ( + <> + {blocks.map((block, i) => ( +
      + ))} + +); + +const GuestMode: React.FC = ({ onBack }) => { + const [activeTab, setActiveTab] = useState<'handbook' | 'union' | 'info'>('handbook'); + const [handbookContent, setHandbookContent] = useState(''); + const [loading, setLoading] = useState(false); + const [infoBlocks, setInfoBlocks] = useState([]); + const [unionBlocks, setUnionBlocks] = useState([]); + + useEffect(() => { + if (activeTab === 'handbook') { + loadHandbook(); + } else if (activeTab === 'info') { + loadInfoBlocks(); + } else if (activeTab === 'union') { + loadUnionBlocks(); + } + // eslint-disable-next-line + }, [activeTab]); + + const loadHandbook = async () => { + setLoading(true); + try { + const response = await fetch(`${config.backendUrl}/api/handbook/html`); + const html = await response.text(); + setHandbookContent(html); + } catch (error) { + setHandbookContent('Ошибка загрузки справочника'); + } + setLoading(false); + }; + + const loadInfoBlocks = async () => { + setLoading(true); + try { + const res = await fetch(`${ADMIN_SERVER_URL}/moders/content/info`); + const data = await res.json(); + setInfoBlocks(Array.isArray(data) ? data : []); + } catch (e) { + setInfoBlocks([]); + } + setLoading(false); + }; + + const loadUnionBlocks = async () => { + setLoading(true); + try { + const res = await fetch(`${ADMIN_SERVER_URL}/moders/content/union`); + const data = await res.json(); + setUnionBlocks(Array.isArray(data) ? data : []); + } catch (e) { + setUnionBlocks([]); + } + setLoading(false); + }; + + return ( +
      +
      + +
      +
      +

      Гостевой режим

      +
      + + + +
      +
      + {activeTab === 'handbook' && ( +
      + {loading ? ( +
      Загрузка справочника...
      + ) : ( + + )} +
      + )} + {activeTab === 'union' && ( +
      + {loading ? ( +
      Загрузка...
      + ) : ( + unionBlocks.length ? renderContentBlocks(unionBlocks) :

      Нет информации о профсоюзе.

      + )} +
      + )} + {activeTab === 'info' && ( +
      + {loading ? ( +
      Загрузка...
      + ) : ( + infoBlocks.length ? renderContentBlocks(infoBlocks) :

      Нет общей информации.

      + )} +
      + )} +
      +
      +
      + ); +}; + +export default GuestMode; \ No newline at end of file diff --git a/frontend/src/components/LoginWindow.tsx b/frontend/src/components/LoginWindow.tsx new file mode 100644 index 0000000..0e00134 --- /dev/null +++ b/frontend/src/components/LoginWindow.tsx @@ -0,0 +1,105 @@ +import React, { useEffect, useRef, useState } from 'react'; +interface LoginWindowProps { + onLogin: (id: string) => void; + onGuestMode: () => void; + loginError?: string; +} +const LoginWindow: React.FC = ({ onLogin, onGuestMode, loginError }) => { + const [id, setId] = useState(''); + const inputRef = useRef(null); + + useEffect(() => { + const testConnection = async () => { + try { + const response = await fetch('http://localhost:3001/api/test', { + mode: 'cors', // Явно указываем режим CORS + headers: { + 'Content-Type': 'application/json' + } + }); + + if (response.ok) { + const data = await response.json(); + console.log('Backend response:', data); + } else { + console.error('Backend returned error status:', response.status); + } + } catch (err) { + console.error('Connection test failed:', err); + } + }; + testConnection(); + const setupCardListener = () => { + console.log('[LoginWindow] Setting up card listener...'); + const handleCardDetected = (uid: string) => { + console.log('Card detected in renderer via preload:', uid); + onLogin(uid); + }; + + window.electronAPI.onCardDetected(handleCardDetected); + }; + if (window.electronAPI) { + setupCardListener(); + } else { + console.log('[LoginWindow] electronAPI not ready, waiting for event...'); + window.addEventListener('electronApiReady', setupCardListener, { once: true }); + } + return () => { + console.log('[LoginWindow] Cleaning up listeners.'); + window.removeEventListener('electronApiReady', setupCardListener); + if (window.electronAPI) { + window.electronAPI.removeCardDetectedListeners(); + } + }; + }, [onLogin]); + + useEffect(() => { + if (loginError) { + setId(''); + inputRef.current?.focus(); + } + }, [loginError]); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (id.trim()) { + onLogin(id.trim()); + } + }; + + return ( +
      +

      Вход в систему

      +
      +

      Пожалуйста, приложите вашу карту пропуска к считывателю

      +
      💳
      +
      + +
      +
      + + setId(e.target.value)} + placeholder=" " + autoFocus + /> +
      + {loginError &&
      {loginError}
      } +
      + + +
      +
      +
      + ); +}; + +export default LoginWindow; \ No newline at end of file diff --git a/frontend/src/components/PayslipViewer.tsx b/frontend/src/components/PayslipViewer.tsx new file mode 100644 index 0000000..9979efe --- /dev/null +++ b/frontend/src/components/PayslipViewer.tsx @@ -0,0 +1,45 @@ +import React from 'react'; +import { Document, Page, pdfjs } from 'react-pdf'; + +pdfjs.GlobalWorkerOptions.workerSrc = '/pdf.worker.js'; + +interface PayslipViewerProps { + fileUrl: string; + onBack: () => void; +} + +const PayslipViewer: React.FC = ({ fileUrl, onBack }) => { + const handlePrint = () => { + const win = window.open(fileUrl, '_blank'); + if (win) { + win.focus(); + win.print(); + } + }; + + return ( +
      +
      + + +
      +
      + +
      + +
      +
      +
      +
      + ); +}; + +export default PayslipViewer; \ No newline at end of file diff --git a/frontend/src/config.js b/frontend/src/config.js new file mode 100644 index 0000000..26ebc87 --- /dev/null +++ b/frontend/src/config.js @@ -0,0 +1,6 @@ +const config = { + backendUrl: 'http://localhost:3001', + adminUrl: 'http://localhost:3005' +}; + +export default config; \ No newline at end of file diff --git a/frontend/src/config.json b/frontend/src/config.json new file mode 100644 index 0000000..78579ca --- /dev/null +++ b/frontend/src/config.json @@ -0,0 +1,6 @@ +{ + "backendUrl": "http://localhost:3001", + "adminUrl" : "http://localhost:3005", + "frontUrl" : "http://localhost:3000", + "adminServerUrl": "http://localhost:3005" +} \ No newline at end of file diff --git a/frontend/src/global.d.ts b/frontend/src/global.d.ts new file mode 100644 index 0000000..0d9b540 --- /dev/null +++ b/frontend/src/global.d.ts @@ -0,0 +1,23 @@ +declare module '*.png'; +declare module '*.svg'; +declare module '*.jpg'; +declare module '*.jpeg'; +declare module '*.gif'; +declare module '*.bmp'; +declare module '*.tiff'; + +declare module 'fs'; +declare module 'path'; +declare module 'os'; + +interface Config { + backendUrl: string; +} + +interface Window { + electronAPI: { + getAppConfig: () => Promise; + onCardDetected: (callback: (uid: string) => void) => void; + removeCardDetectedListeners: () => void; + }; +} \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx new file mode 100644 index 0000000..d1f468e --- /dev/null +++ b/frontend/src/index.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import './index.css'; +import App from './App'; +import reportWebVitals from './reportWebVitals'; +declare global { + interface PromiseConstructor { + withResolvers(): { + promise: Promise; + resolve: (value: T | PromiseLike) => void; + reject: (reason?: any) => void; + }; + } +} +if (!Promise.withResolvers) { + Promise.withResolvers = function(): { + promise: Promise; + resolve: (value: T | PromiseLike) => void; + reject: (reason?: any) => void; + } { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: any) => void; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; + }; +} +const root = ReactDOM.createRoot( + document.getElementById('root') as HTMLElement +); + +root.render( + + + +); + +// If you want to start measuring performance in your app, pass a function +// to log results (for example: reportWebVitals(console.log)) +// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals +reportWebVitals(); diff --git a/frontend/src/librgsec.dll b/frontend/src/librgsec.dll new file mode 100644 index 0000000000000000000000000000000000000000..b03cdf3c6296a1323f86f5ad1e612d908afe5f15 GIT binary patch literal 436224 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 R?auLzg8kpG|Brg$-vLxVzbXI# literal 0 HcmV?d00001 diff --git a/frontend/src/logo.svg b/frontend/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/frontend/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/r5usb.js b/frontend/src/r5usb.js new file mode 100644 index 0000000..36c7341 --- /dev/null +++ b/frontend/src/r5usb.js @@ -0,0 +1,154 @@ +const ffi = require('ffi-napi'); +const ref = require('ref-napi'); +const Struct = require('ref-struct-napi'); +const ArrayType = require('ref-array-napi'); + + +const E_RG_ENDPOINT_TYPE = { + ET_UNKNOWN: 0, + ET_USBHID: 1, + ET_SERIAL: 2 +}; +const E_RG_STATUS_TYPE = { + STE_UNKNOWN: 0, + STE_NO_CARD: 1, + STE_CARD: 9, + STE_CARD_NO_AUTH: 10, + STE_CARD_AUTH: 26 +}; +const E_RG_CARD_FAMILY_CODE = { + CF_PIN: 1, + CF_TEMIC: 2, + CF_HID: 4, + CF_EM: 8, + CF_INDALA: 16, + CF_COTAG: 32, + CF_MIFARE: 64, + CF_INDALA_MT: 128, + CF_ALL: 255 +}; +const RG_CARD_AUTH_PARAMS = Struct({ + flags: 'uint8', + classicKey: ArrayType('uint8', 6), + plusKey: ArrayType('uint8', 16) +}); + +const RG_CARD_MEMORY = Struct({ + profile_block: 'uint8', + block_data: ArrayType('uint8', 16) +}); +const E_API_ERROR_CODES = { + EC_OK: 0, + EC_FAIL: 1, + EC_NOT_IMPLEMENTED: 2, + EC_BAD_ARGUMENT: 3, + EC_INVALID_HANDLE: 4, + EC_INVALID_RESOURCE: 5, + EC_INVALID_CONNECTION_TYPE: 6, + EC_INVALID_CONNECTION_ADDRESS: 7, + EC_INVALID_DEVICE_ADDRESS: 8, + EC_DEVICE_OPERATION_UNSUPPORTED: 9, + EC_DEVICE_NOT_CONNECTED: 10, + EC_DEVICE_NO_RESPOND: 11, + EC_DEVICE_COMM_FAILURE: 12, + EC_DEVICE_PROTOCOL_FAILURE: 13, + EC_POLL_NO_EVENTS: 14, + EC_POLL_QUEUE_CLOSED: 15, + EC_CALL_INIT: 16, + EC_DEVICE_INVALID_COMMAND: 17, + EC_DEVICE_INVALID_PARAM: 18, + EC_DEVICE_INVALID_PIN: 19, + EC_DEVICE_COMMAND_TIMEOUT: 20, + EC_DEVICE_NO_CARD: 21, + EC_DEVICE_UOWN_CARD: 22, + EC_DEVICE_INCOMPATIBLE_CARD: 23, + EC_DEVICE_AUTH_FAIL: 24, + EC_DEVICE_PROFILE_FAIL: 25, + EC_DEVICE_RW_FAIL: 26, + EC_IO_OPEN_FAIL: 27, + EC_IO_CLOSE_FAIL: 28, + EC_IO_READ_FAIL: 29, + EC_IO_WRITE_FAIL: 30, + EC_IO_CLOSED: 31, + EC_DEVICE_IN_BOOT: 32, + EC_DEVICE_FW_INVALID_MODEL: 33, + EC_FILE_NOT_FOUND: 34, + EC_FINGERPRINT_UNFOUND: 35 +}; + +const E_RG_DEVICE_EVENT_TYPE = { + DET_UNKNOWN_EVENT: 0, + DET_CARD_PLACED_EVENT: 2, + DET_CARD_REMOVED_EVENT: 4, + DET_RELAY_STATE_CHANGED: 8, + DET_TAMPER_STATE_CHANGED: 16, + DET_BUTTON_STATE_CHANGED: 32, + DET_DOOR_SENSOR_STATE_CHANGED: 64, + DET_POLL_ERROR: 128 +}; + +// Структуры +const RG_ENDPOINT = Struct({ + type: 'uint8', + address: 'string' // const char* +}); +const RG_CARD_INFO = Struct({ + type: 'uint8', + uid: ArrayType('uint8', 7) +}); +const RG_ENDPOINT_INFO = Struct({ + type: 'uint8', + address: ArrayType('char', 64), + friendly_name: ArrayType('char', 128) +}); +const RG_DEVICE_INFO_EXT = Struct({ + address: 'uint8', + serial: 'uint32', + firmwareUpdateLock: 'uint8', + type: 'uint8', + firmware: 'uint16', + capabilities: 'uint32' +}); + +// DLL +const rgsec = ffi.Library('librgsec.dll', { + 'RG_InitializeLib': ['uint32', []], + 'RG_Uninitialize': ['uint32', []], + 'RG_FindEndPoints': ['uint32', ['pointer', 'uint8', 'pointer']], + 'RG_GetFoundEndPointInfo': ['uint32', ['pointer', 'uint32', 'pointer']], + 'RG_InitDevice': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8']], + 'RG_SetCardsMask': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8', 'uint8']], + 'RG_GetStatus': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8', 'pointer', 'pointer', ref.refType(RG_CARD_INFO), 'pointer']], + 'RG_CloseResource': ['uint32', ['pointer']], + 'RG_WriteProfile': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8', 'uint8', 'uint8', ref.refType(RG_CARD_AUTH_PARAMS)]], + 'RG_ReadBlockDirect': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8', ref.refType(RG_CARD_MEMORY), ref.refType(RG_CARD_AUTH_PARAMS)]], + 'RG_Subscribe': ['uint32', ['pointer', ref.refType(RG_ENDPOINT), 'uint8', 'uint32', 'pointer']], + 'RG_PollEvents': ['uint32', ['pointer', 'pointer', 'pointer', 'uint32']], + 'RG_IsolateDevice': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8']], + 'RG_ResetIsolation': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8']], + 'RG_CloseDevice': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8']], + 'RG_GetInfoExt': ['uint32', [ref.refType(RG_ENDPOINT), 'uint8', 'pointer']], + 'RG_Subscribe': ['uint32', ['pointer', ref.refType(RG_ENDPOINT), 'uint8', 'uint32', 'pointer']], + +}); + +function errorToString(code) { + for (const [k, v] of Object.entries(E_API_ERROR_CODES)) { + if (v === code) return k; + } + return `Unknown error (${code})`; +} + +module.exports = { + E_RG_ENDPOINT_TYPE, + E_RG_STATUS_TYPE, + E_RG_CARD_FAMILY_CODE, + E_API_ERROR_CODES, + E_RG_DEVICE_EVENT_TYPE, + RG_DEVICE_INFO_EXT, + RG_ENDPOINT, + RG_CARD_INFO, + RG_ENDPOINT_INFO, + rgsec, + errorToString +}; \ No newline at end of file diff --git a/frontend/src/r5usb_example.js b/frontend/src/r5usb_example.js new file mode 100644 index 0000000..d84bc5b --- /dev/null +++ b/frontend/src/r5usb_example.js @@ -0,0 +1,209 @@ +const ref = require('ref-napi'); +const Struct = require('ref-struct-napi'); +const { + E_RG_ENDPOINT_TYPE, + E_RG_DEVICE_EVENT_TYPE, + E_API_ERROR_CODES, + RG_ENDPOINT, + RG_ENDPOINT_INFO, + RG_CARD_INFO, + RG_DEVICE_INFO_EXT, + rgsec, + errorToString +} = require('./r5usb'); +const axios = require('axios'); + +function readCString(buffer, size) { + const bytes = []; + for (let i = 0; i < size; i++) { + const byte = buffer.readUInt8(i); + if (byte === 0) break; + bytes.push(byte); + } + return Buffer.from(bytes).toString('utf8'); +} + +async function main() { + console.log('Старт программы'); + const initRes = rgsec.RG_InitializeLib(); + console.log('После RG_InitializeLib, код:', initRes); + if (initRes !== E_API_ERROR_CODES.EC_OK) { + console.error('RG_InitializeLib failed:', errorToString(initRes)); + return; + } + + try { + console.log('Поиск устройств...'); + const endpointListPtr = ref.alloc('pointer'); + const countPtr = ref.alloc('uint32'); + const findRes = rgsec.RG_FindEndPoints( + endpointListPtr, + E_RG_ENDPOINT_TYPE.ET_USBHID, + countPtr + ); + console.log('После RG_FindEndPoints, код:', findRes); + + if (findRes !== E_API_ERROR_CODES.EC_OK) { + throw new Error(`RG_FindEndPoints failed: ${errorToString(findRes)}`); + } + + const count = countPtr.deref(); + console.log('Найдено устройств:', count); + if (count === 0) { + throw new Error('USB HID не найден'); + } + const endpointInfo = new RG_ENDPOINT_INFO(); + const infoRes = rgsec.RG_GetFoundEndPointInfo( + endpointListPtr.deref(), + 0, + endpointInfo.ref() + ); + console.log('После RG_GetFoundEndPointInfo, код:', infoRes); + + if (infoRes !== E_API_ERROR_CODES.EC_OK) { + throw new Error(`RG_GetFoundEndPointInfo failed: ${errorToString(infoRes)}`); + } + + const endpoint = new RG_ENDPOINT(); + endpoint.type = endpointInfo.type; + endpoint.address = readCString( + endpointInfo.address.buffer, + endpointInfo.address.length + ); + console.log('Endpoint type:', endpoint.type); + console.log('Endpoint address:', endpoint.address); + + const address = 0; + + const initDevRes = rgsec.RG_InitDevice(endpoint.ref(), address); + console.log('После RG_InitDevice, код:', initDevRes); + + if (initDevRes !== E_API_ERROR_CODES.EC_OK) { + throw new Error(`RG_InitDevice failed: ${errorToString(initDevRes)}`); + } + + console.log('инициализация прошла успешно'); + const deviceInfoExt = new RG_DEVICE_INFO_EXT(); + const infoExtRes = rgsec.RG_GetInfoExt( + endpoint.ref(), + address, + deviceInfoExt.ref() + ); + console.log('После RG_GetInfoExt, код:', infoExtRes); + + if (infoExtRes === E_API_ERROR_CODES.EC_OK) { + console.log('номер:', deviceInfoExt.serial.toString(16)); + console.log('прошивка:', deviceInfoExt.firmware.toString(16)); + } else { + console.warn('Не удалось получить расширенную информацию об устройстве'); + } + + const queuePtr = ref.alloc('pointer'); + console.log('Подписка на события...'); + const subscribeRes = rgsec.RG_Subscribe( + queuePtr, + endpoint.ref(), + address, + E_RG_DEVICE_EVENT_TYPE.DET_CARD_PLACED_EVENT | + E_RG_DEVICE_EVENT_TYPE.DET_CARD_REMOVED_EVENT, + ref.NULL + ); + console.log('После RG_Subscribe, код:', subscribeRes); + + if (subscribeRes !== E_API_ERROR_CODES.EC_OK) { + throw new Error(`RG_Subscribe failed: ${errorToString(subscribeRes)}`); + } + + const eventQueue = queuePtr.deref(); + console.log('Ожидание событий...'); + const eventTypePtr = ref.alloc('uint32'); + const eventDataPtrPtr = ref.alloc('pointer'); + + const pollEvents = () => { + const pollRes = rgsec.RG_PollEvents( + eventQueue, + eventTypePtr, + eventDataPtrPtr, + 1000 + ); + console.log('PollEvents, код:', pollRes); + + switch (pollRes) { + case E_API_ERROR_CODES.EC_OK: + handleEvent(eventTypePtr.deref(), eventDataPtrPtr.deref()); + setImmediate(pollEvents); + break; + + case E_API_ERROR_CODES.EC_POLL_NO_EVENTS: + setImmediate(pollEvents); + break; + + default: + console.error('Ошибка PollEvents:', errorToString(pollRes)); + cleanup(); + process.exit(1); + } + }; + + const handleEvent = (eventType, eventDataPtr) => { + console.log('handleEvent, тип события:', eventType); + switch (eventType) { + case E_RG_DEVICE_EVENT_TYPE.DET_CARD_PLACED_EVENT: + const cardInfo = ref.reinterpret(eventDataPtr, RG_CARD_INFO.size).deref(); + const uid = Array.from(cardInfo.uid).map(b => b.toString(16).padStart(2, '0')); + console.log(`Карта обнаружена: ${uid.join(':')}`); + // Логгируем в admin-server + console.log('[DEBUG] Отправляю событие на admin-server:', { event, uid, timestamp }); + axios.post('http://localhost:3005/api/card-event', { + event: 'CARD_PLACED', + uid: uid.join(''), + timestamp: Date.now() + }).catch(err => { + console.error('[ADMIN][CARD_LOG] Ошибка отправки:', err.message); + }); + break; + + case E_RG_DEVICE_EVENT_TYPE.DET_CARD_REMOVED_EVENT: + console.log('Карта удалена'); + // Логгируем в admin-server + console.log('[DEBUG] Отправляю событие на admin-server:', { event, uid, timestamp }); + axios.post('http://localhost:3005/api/card-event', { + event: 'CARD_REMOVED', + uid: null, + timestamp: Date.now() + }).catch(err => { + console.error('[ADMIN][CARD_LOG] Ошибка отправки:', err.message); + }); + break; + + default: + console.log(`Необработанное событие: ${eventType}`); + } + }; + pollEvents(); + + } catch (err) { + console.error('Ошибка:', err.message); + cleanup(); + } + + process.on('SIGINT', () => { + console.log('\nЗавершение работы...'); + cleanup(); + process.exit(0); + }); + + function cleanup() { + try { + console.log('Очистка ресурсов...'); + rgsec.RG_CloseResource(endpointListPtr?.deref()); + rgsec.RG_CloseDevice(endpoint?.ref(), address); + rgsec.RG_Uninitialize(); + console.log('Ресурсы освобождены.'); + } catch (cleanupErr) { + console.error('Ошибка при очистке:', cleanupErr.message); + } + } +} + +main(); \ No newline at end of file diff --git a/frontend/src/react-app-env.d.ts b/frontend/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/frontend/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/src/reportWebVitals.ts b/frontend/src/reportWebVitals.ts new file mode 100644 index 0000000..49a2a16 --- /dev/null +++ b/frontend/src/reportWebVitals.ts @@ -0,0 +1,15 @@ +import { ReportHandler } from 'web-vitals'; + +const reportWebVitals = (onPerfEntry?: ReportHandler) => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/frontend/src/setupTests.ts b/frontend/src/setupTests.ts new file mode 100644 index 0000000..8f2609b --- /dev/null +++ b/frontend/src/setupTests.ts @@ -0,0 +1,5 @@ +// jest-dom adds custom jest matchers for asserting on DOM nodes. +// allows you to do things like: +// expect(element).toHaveTextContent(/react/i) +// learn more: https://github.com/testing-library/jest-dom +import '@testing-library/jest-dom'; diff --git a/frontend/src/styles/main.css b/frontend/src/styles/main.css new file mode 100644 index 0000000..544c217 --- /dev/null +++ b/frontend/src/styles/main.css @@ -0,0 +1,401 @@ +/* Общие стили */ +body { + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + background-color: #f5f5f5; +} + +/* Окно логина */ +.login-window { + max-width: 400px; + margin: 12% auto; + padding: 20px; + background: white; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + +} + +.login-window h2 { + text-align: center; + color: #333; + margin-bottom: 20px; +} + +.input-group { + margin-bottom: 20px; +} + +.input-group label { + display: block; + margin-bottom: 5px; + color: #666; +} + +.input-group input { + width: 95%; + padding: 10px; + border: 1px solid #b9b9b9; + border-radius: 4px; + font-size: 16px; +} + +.button-group { + display: flex; + gap: 10px; +} + +button { + flex: 1; + padding: 10px; + border: none; + border-radius: 4px; + font-size: 16px; + cursor: pointer; + transition: background-color 0.2s; +} + +button[type="submit"] { + background-color: #007bff; + color: white; +} + +button[type="submit"]:hover { + background-color: #0056b3; +} + +button[type="button"] { + background-color: #6c757d; + color: white; +} + +button[type="button"]:hover { + background-color: #545b62; +} + +button:disabled { + background-color: #cccccc; + cursor: not-allowed; +} + +/* Информация о сотруднике */ +.employee-info { + max-width: 800px; + margin: 20px auto; + padding: 20px; + background: white; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.employee-header { + display: flex; + gap: 20px; + margin-bottom: 20px; +} + +.employee-photo { + width: 200px; + height: 200px; + background: #f0f0f0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; +} + +.photo-placeholder { + color: #999; + font-size: 18px; +} + +.employee-details { + flex: 1; +} + +.employee-details h2 { + margin: 0 0 10px 0; + color: #333; +} + +.employee-details p { + margin: 5px 0; + color: #666; +} + +/* Секция расчётных листов */ +.payslip-section { + margin-top: 30px; + padding: 20px; + background: #f8f9fa; + border-radius: 8px; + border: 1px solid #e9ecef; +} + +.payslip-section h3 { + margin: 0 0 20px 0; + color: #333; + font-size: 18px; +} + +.period-selector { + margin-bottom: 20px; +} + +.period-selector label { + display: block; + margin-bottom: 8px; + color: #555; + font-weight: 500; +} + +.period-selector select { + width: 100%; + padding: 10px; + border: 1px solid #ced4da; + border-radius: 4px; + font-size: 16px; + background-color: white; + cursor: pointer; +} + +.period-selector select:focus { + outline: none; + border-color: #007bff; + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25); +} + +.action-buttons { + display: flex; + gap: 10px; + margin-top: 20px; +} + +.action-buttons button { + background-color: #28a745; + color: white; + flex: 1; +} + +.action-buttons button:hover { + background-color: #218838; +} + +.action-buttons button:first-child { + background-color: #007bff; +} + +.action-buttons button:first-child:hover { + background-color: #0056b3; +} + +/* Верхняя панель с кнопкой назад */ +.top-bar { + margin-bottom: 20px; +} + +.back-button { + background-color: #6c757d; + color: white; + padding: 8px 16px; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + display: flex; + align-items: center; + gap: 5px; + transition: background-color 0.2s; +} + +.back-button:hover { + background-color: #545b62; +} + +/* Делаем кнопку назад компактнее */ +.back-button { + flex: 0 0 auto; + width: auto; +} + +/* Гостевой режим */ +.guest-mode { + max-width: 1200px; + margin: 20px auto; + padding: 20px; + background: white; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.guest-content h2 { + text-align: center; + color: #333; + margin-bottom: 30px; +} + +/* Навигация по табам */ +.tab-navigation { + display: flex; + gap: 10px; + margin-bottom: 20px; + border-bottom: 2px solid #f0f0f0; +} + +.tab-button { + padding: 12px 24px; + border: none; + background: none; + cursor: pointer; + font-size: 16px; + color: #666; + border-bottom: 3px solid transparent; + transition: all 0.3s ease; +} + +.tab-button:hover { + color: #007bff; + background-color: #f8f9fa; +} + +.tab-button.active { + color: #007bff; + border-bottom-color: #007bff; + background-color: #f8f9fa; +} + +/* Контент табов */ +.tab-content { + min-height: 400px; + padding: 20px 0; +} + +.handbook-content, +.union-content, +.info-content { + line-height: 1.6; +} + +.content-text { + white-space: pre-line; + font-size: 14px; + line-height: 1.8; +} + + +.loading { + text-align: center; + color: #666; + font-style: italic; + padding: 40px; +} + +/* Заголовки в контенте */ +.tab-content h3 { + color: #333; + margin-bottom: 15px; + border-bottom: 1px solid #eee; + padding-bottom: 10px; +} + +.tab-content p { + margin-bottom: 15px; + color: #555; +} + +/* --- Handbook Content Styles --- */ +.handbook-content { + max-width: 900px; + margin: 0 auto; + padding: 24px 12px; + background: #fff; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0,0,0,0.04); +} +.handbook-content h1 { + text-align: center; + font-size: 2rem; + margin: 24px 0 16px 0; + color: #1a237e; +} +.handbook-content h2 { + text-align: center; + font-size: 1.5rem; + margin: 20px 0 12px 0; + color: #283593; +} +.handbook-content p { + margin: 10px 0; + font-size: 1.08rem; + line-height: 1.6; +} +.handbook-content ul { + margin: 12px 0 12px 32px; + padding-left: 18px; +} +.handbook-content li { + margin: 6px 0; + font-size: 1.05rem; + line-height: 1.5; +} +.handbook-content strong { + font-weight: bold; + color: #000000; + text-align: center; + +} + +.handbook-content h3 { + font-weight: bold; + color: #000000; + text-align: center; +} +.handbook-content em { + font-style: italic; + color: #555; + text-align: center; +} + +.handbook-content h4 { + font-weight: bold; + color: #000000; + text-align: center; + font-size: 1.1rem; +} + +.handbook-table { + width: 100%; + border-collapse: collapse; + margin-bottom: 24px; +} +.handbook-table th, +.handbook-table td { + border: 1px solid #ccc; + padding: 8px 12px; +} +.handbook-table th { + background: #f5f5f5; +} + +.handbook-content table, +.handbook-content th, +.handbook-content td, +.handbook-content tr { + border: 1px solid #bdbdbd; + border-collapse: collapse; +} + +.handbook-content th, +.handbook-content td { + padding: 8px; +} + +.handbook-content table { + width: 100%; + border-collapse: collapse; +} \ No newline at end of file diff --git a/frontend/src/types/textract.d.ts b/frontend/src/types/textract.d.ts new file mode 100644 index 0000000..98b26bd --- /dev/null +++ b/frontend/src/types/textract.d.ts @@ -0,0 +1,18 @@ +declare module 'textract' { + interface TextractOptions { + preserveLineBreaks?: boolean; + preserveOnlyMultipleLineBreaks?: boolean; + [key: string]: any; + } + + function fromBufferWithMime( + mimeType: string, + buffer: Buffer, + options: TextractOptions, + callback: (error: Error | null, text: string) => void + ): void; + + export = { + fromBufferWithMime + }; +} \ No newline at end of file diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..a974662 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "es6" + ], + "allowJs": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "typeRoots": [ + "./node_modules/@types", + "./src/types" + ] + }, + "include": [ + "src" + ] +}

      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 z zXMJ3cdjk!k#`x28Uf4Ku$q0L1m`&h8pRBb=Uikw@i^CH~2)7Ym2%1h7xX4`P0I@GO zT;R||GxV*?rHK+{>c{AVFx#U_0eJ@oQUp_KiH}1|vHx5N4Z5zXnS+DI<}zC{Dw!=C zfv%3U!m!a7MpyV=FZ#lAdDZy)IB^G-jM4EPGqibAZG#?fVCB{g%JkqTVkJ7E>ul07zL$|baRZPN$LckIwSw!05(W%r}R;OTL zWXa?hq*~G0)V&AKiW>+1yI)VWI4tcmsIH`k5GiFRNp5I3&SovB*Y|#(y$7($DaLKJtlTNQ1ZzuvTmRU_;z6NU;SKmjTKv#Yeg^3)KU7Z z=mWBsxg=D7_Fp*3Xsc#kiVv^I9P4-`k9?dK{?v*+EUURj#;_u@tRYQ=0utr)Qou4mvDdfHr2#RRu3vx_DMYFr%ybORjk-&uv+Ve)WI^c* zT4teLwMduQQTi6ukOo6M*;L+g*B9{cpjWS+cn!OIfj2Q8|8>*2L$xLH%C{{XVmGz; za~F7%P3TcCB6w1B`igYC{=A7xR$&M((9BsZM->4+$!^*GO4VaW?CD?dA_}e|mBBwI zeK^3qFsG)XurPl`Mb@2(f&=O4p&|0_UGY%Xon%C9VN=6Hg@rO-B9LKDBL7Sawf$)$QIJW z(F0j0QzR{11JnU=0nYEr_joSlxd$q#D>gj~NCFHu`k+%3<{oHO;}NIkH>p|b zVIB0%mwxwZ2dUNDL?jI#sAg)~Z&)Lw%dxzxZ>5E3-rM4eA(k~j+Kc6#GhY(3+9ffX zx0)aID4bmAo>zEAVDLiPYRKfII*-3CSuc{9rh{z3JEDH|bA5?yLjx)%RYc$gX*e z2|_nkuGjcnus8(t-FOtx?iU0>0@cJz{)1B&Ol#DIG0G}*5A_FPoK}c7(xb~#^`f;& zEs(Xc^JsU03O^^3a226=#R4FV&7Xf=IbX>5U>A&mVmgpFuePX>%Sj@II&wQ zG4Y1=RsuMfYlXL25j)8jY5%Z8j_j^dp)ZSXb*ORKvVxiVlj07}mUB5@_PY-n`-o6ilw0OQ z*$M4Yg8wyN-F@jJ!=t#_(@PFGkO!8kS4?OTGgT_PX`_^k}u z?t)2Lg0dYT!Kuj0`Im+fj-7w0jx_=UHT<4veUw_opUE#YTuVCYAqaiN`3fm83bk4Y zH~Re5%(CzaLo+Rye*5Ohq!YBVF?6=BgA%$93d4AzV2XCw4L5>ZkdfU%`)~rIS9-Z! z&7}h81@y*+ic8z+&q}BDjA?D$xvuF+ACHR1r|*Jd*Nb+dI0pg0MegnK2sG;a*^@S*|4#`k!aj;YwU@Vs z|8^b5Q6nnEZ zsbDKc04>AM&}U$6SN~Vl|5eEE-pnzx)LaDx4Vo^iGf?REI9q5~U4Q zs~Bf0snHw6FGUziBkHBL_}%gz z6DjqCZ?bIL>G&o>4q{(6R4tk-U}Z}U>I~36&(2tSb6njghc!s&kV@5*KItX;Ig%Ro z3~3BEoHju_U^c|%j8VBxevzQ8t0BQE-mZG)=+-rL%xm0vm1@-6&a;eNJtNs;FN#b2 zSDcBw7ot9EEv~e!vKd_hBAVNHf{ZCo{hKa2ME#5WMwTb}bV3|qP}YZziC;rb_76olyt6i($O#8=l&^6rm(|*v=u@(BJ!mAkoc%+- z674jQ%)gY(tP1&0v~@=K6nUy^h|J*@_0=uXJ4c~e%8jDPe7F7~4rS)l-j=G}*~jE{ z99xK_qRXEa>_u%z}ecpuHTmclE^$kl+nMqgt_5a@^JD9cJAGQq^ByTkeTV?GL@Im9J2-TSdf{7oU#vayGJ6H{gQoEKWr zGO6@jx!zDuLgxQ@PUgtH`JV9GOnlDOvSm6#JLJnR$d+i8)4C7qV5^`~CiRuIF~ zf0w-|>mc*!theCDAcCm8Y^X@6=P@_amOax;%3-3Tkdou16p`||lXCDTodh@e&eJpAf??&i8(1tNNI6W?$s%F zjm&g;-fAbY+DUA1693>NUg0EaVx>IqH%{UdNld}7tbsl^9L8ZU&8B4k64!9c%ujw5I?C+JR!mm zv)GOCr^xv-|8w1amGkieH&>_ncb)6KFh)|_)Gv5Rv{#g^l_rh4SsKORUgK4j=@#fw zcj*GjaGn&nl^3+85-@Xh8Em=>k$!1bgQ zoa5>iouP^hP9j;T$>(%6cEz96RGs09qcUi2tCt#{S10xDLY3*np?3!hRq=I4pB`Re zt{&N^hkX8f-_KW?tFP|=d7b`DkFGLT&+hk0x~rbynsM@}tXPc|9?f?0^ zeLr7guD-JW=jnYvUu&+us{iMSd_J<6IUUZ--IkiUk5z`wFq~3-r*=Uq!#~wKXdSu> zs~5zn0Z|1UDW>)#)uc1Xn)a#Tff{*t^CZ+$I?quH_<-JfZk`v^-Q>yX2*w_e-Dj@W zizy#zP%5UaKdIT0XMN}l4Znv3ez&QouG4U=9@D?uRg7PKYH8)>pgr3oTsEUl&eoXK zUUP8J;t>slovjzlcwMvLK8VNoI;A{}fVdf-&}l2Oi8R2CoXAC8PS(U5V9&2B(>-fy z$O@~*G=>gAy z69L3OA|GQ&jTJ2W0f*WlI0(mq`(p8SIVVc$l`@xeET&$sSibyH}fa}aCJP$B7>PMUVDplzK;UC47qbgdK@m(jnIf)&x1 zB%gSP^}&lP!P!VD0tB9&=y{G7oSahCN6wBx;NZVh=!4>&YxJ=Ip`7<$PD;Cz01rxD*>g??PITbq9i#%1emR)qbM>Ik zq3f5vXzXOgE}fgo@tL}n9PD>YV795hz!a0;KVB{SeY<*wUlWZC&an7DA#r43oqx4%jAl5Nc*+RI)xXQS!|4~@y;WgD{GGP$i~XL z$$4Z`ouArN7Xbq)s*_6&Wn-N(WkCH=n@XpvkFSz(#PkN+$8$yW6)7&8>KR=y`j?|N z)g5fAqe7WzTJXsI6|y6i2}uWO_G!vJesZie;S)$b%b3wE_iemw<){VHICc-Q8`*S+ z!yg^@Ui!`SO@;kJ72txp2276VY@D;AEEMihONExeWv2+<{IO-{`eQ#DXvSu>uR108 zvx(jNaM5RPFK))HX@|;a)}oCjm3~L#z~Z)GY|2(a??O&_Rd@&M-4%$&Z8^I*I5Wz9OOb|)B{Gz zKx}DgAa>_#!PsAQ2qId4nu2r$v6R$JMf!MCyV}W(fLyvu4yjOo%;{3A_@q0ZYsDV) zP(tgCOD3tp-lZG=xz2R_5kTC9oX?Tg?B4z@pnt(womRc4ve><+>iV!Lh+W09Gb@+q zLa{k%lC6}6(Jc4J?%bpExt$a`?nLrYOv>bR#qQlB*+txK?@o16eU8{Cr%Q6kM>qyj zSL&<1TfL^g`(yVWkne&x`>X(M=>9yXGsW)hmOO%9Xf#zvDi8eMJ`D*_y_}J+TTAs? zdVH(f+{^(|)pg{e9ym+A0O2QtEQcNvtEi{oX}XQBPO3>YR@WjmJgW!9>aig5nPOyA zhqv|Z%=7(6Eg9Y>gFfYQT2kj6>VC%_b$7UZ=Ir3`TGUMvMX6a{{S@j#|Std~ZT%KdL z>;c}kIB)Ip_J(@Jc`IS0yglc<2`ETYPs^)q%PcCNQ@zZaI^TJg=}|?_ zv+Q?ul78-GDMU7SotU}KJxMdUMD_0zt8BG&GfY5)G4qKRnz&+3Bjp{v$~gq=aoDE9 z`%IriMdS;v?hB%LQ$>1;7YJgGW5Qf>b85sRnGUKHg-hq6F5R1EsC3lv$M4uCSC z+Ki4&yjoF=yUmrE+0}^VW5IN>G8>>X#i=>GPBN*G)H+@|{j9^=($hj5aX6+GIIl)M z^-MY=e|Cn3t3aPlY<%G`yB1x4W>})xGrx1zS8}n;uR!Ho9b>RQ4c+S4oNA!z|{CLOhyO$nDI*) z@t=W)=*B-CXZ*5o%$hTPcj#|3AMWE?tC*v3N2Lvq^PuipAuBY@6n3(Gm9@cq30Esbf>2v) zsxU#3ilC?|eG=e!Hl0XxqRLOezLAS^ z3DKv%!yj}Fvdm;t;_rBUpo`I&!?luBo|vC<$;?pxAHc|)i39n8#$(OKntg+epEZte z=OLSiy7q8J^j@gKBOJ57d^tTH!FGGxK2HlDfLTGWrO#&J|HJ+cg2SWx`{*6Xg3F(HrEt2XQk>ck z!qZ9F9fhIUJTp~#W06!{cDhmj2_1znuP!@tS-3kc<6%jmPEiA+%57>FGb~NOT1_$_ zBCqusQ2Y#1nTXJG%SHk~P)at^nQWx;nZv_(NO2gt6c10YuyeG%U4&F}%_(4m zXIYad!r=dn>wa`$K1$7rVDI8)Zk5FibBb(o@#Xom`r%7r1#1Lr9Ml=lXU#H?8m{gW z!_9VwE4}Wc(c~h~KI+^#$Bq@Tn24Ld6s#_6`d>4$>aufPg{4?QXe!oE121!6rBEGKCSNmsf_n}Zs1E?$%4@xTEFj#5+i6FC^vn<&pv%Q-e@ z2WW0-mevXp{8-vYOGesjoC=5f{WY2S9&h3$9B;kFS>Wg?vQ{(8+_gem#auneZNItf383sD^AZh@;dIvB1Igya|suVGlp#JT*K-S`23=3zn{c0)|7fOI-vv$Hp++s5_Nh zQynd%(L5R}(LtyrpM2AvgW+9dn9-9hagF#XeX(MHk*y>y9&MU zG|u}%*2$=UUnVMM`6}#mkRtk^3x{J7^I704+knUWB9(u+F2u9+h_ zxqh5{J-@(Qeyr+jc^~4uher06rzkMnsv33iP|%9i%S_ZB5)JS0SX1kiRm8H|%48p+ z9(_fQQlD#>x;Qc1b=_;X+gk!LbAUSIQWUKyj)J8lsH<}IF~mI8wY^HY0)?E>@x4;W z@lCvQJM@-A2MA+_xbd|g$^5bD-ngI_LFVg}J?fl`1w@oOP5&a4U-dMHp}HxHLo9|y zu-^RM?mZ3?wcG5j{?tLT;9S`HlireD86Asn`NSob9eY|PPt?BDmKHrwFU<6wQcMra zOG3jX_*!Fn0L4QuN-;vU>`{#g;wT zkN-wv}G$IXnL`{?KG& z2OvT+GQ&rAtRG#8(&J?UJYDJ${o4yf z8)bSP7Fa(n937$Mh|?I6&W8t$bBTr95Nv6jpeOJAX5c_qBza)OTu9{R!~}ULdswzc zh-vAQKa>3A9GRLL2|CHt3=;e`hySvVkH5xD={Ffz+i2zWIqM;}VHtonU`iz}LQTF> zI7xUjT|98r9(+_KhB!2O*5d3{2YIi~Xg3M&WUSn5MjG3Nj`wFY2`^y-4rPv-*ZwqO z=ql*L(B)8g*G+;XNL->jelhQJc^5jZLnnpD*|V^NygXeK%9{F17R5>Gpv41u!YLAmA-c(31?+n1C*MmH_xYkLxBO^+x*#-Sl0-k=}Hy7VKyat;Xn z7_^6chnBUU*C?~%({!UI8dHQK2U{!vo!JtM4#e~1o_@a9 z9JLdU@|?5XJrh7E(^H{?ZmREIsCNx?Lo}cj@UM^rZ842b{;!{Aj?nCv10Jz^4Q~i^ z^`3}og~l+&rz-HTU~)v zw^&#Arab<@&2xora;Ey>1v2P%y`*-{(^3g5>o1!KLrYjjCf9*jp7;%xv;BUdY1{+) zC(AkT0-c%RkutW#uvVS{v}D1L_<;QamJI$fI$!q|WtcG!AA{Yv$DQ5jIJr^vaOoYY zb`@DPDSJO<1y`ez>ai=|bDJ9Orv8*vEu2Rn%U3J*i>`D5=uKwq$Fni-QDbjrG)V8~ z>#x5Q49QpdlEoJi*ZQbJ)P5mcg}O}^JiknD(lWbJRm2{waXxFJHd*kf^Nqm4zm(qF z$cZlB?2ldAuA0mH(V0l(ptpW_k#mbmxgEMu>;fI18L&jP5-B@ua9`gU5Jj-q{IQ_8 z&hQ&EHt~k{j9%9nITBiGfN)vE8@QXHuN#^Ast_D0{~5ujQnoE>^RJHYKSMaN%mO>4 zC{9W7pYbhsJfHTICN43B!#+w0fVtL!-%mB5{Yz;-8p87(h#jY1V|$0bYO1#-%nfF% zX#KiAH42z-EIv8hqVJsT78SK|ajel19)d%2L>2pCA1z^~dNtyq zv{EiMv>D4>K{lL&;$nlF#1gqLyI0er*Z8HujAPg_Ya1jWMsod8&QbcTaErd<>NSpI z?cfPt=q$ml%)7e;?>}+O8mC;wh1 z#eX4iNL06^@slVo{5I6`EASpW>u+4h%{A}xK0TH>nA3%z7{Z_+9NNCj;^C)FI4R|b@loJ;4?V@{os&L#|nkiNyH zKKI6<)C5{ExD*$J1Qe(6AJ%<>s{Vy~{Q* ztV9mp#!S1edllIjDpyI zYW=yw2Xv*AH(If0Jtwe8+umi-w99@}Zlxdz(W`a*ZtH5w3p z5y?$=Ixc>K6PRJ!0>*vt9?G zOE10UUH4tcN^isfE?72YZzw%6UOfW73`R5e3Ku0Swj?((+|K$f1tN{UXx6W!WO99? zX|+hq)m&;suX%+vZwDNcW!i49S=^Q5`x~PWfFrY!UqnZz3|b_(;W+1jjcq_l5KX1MQyScwTEh$ zQX{sTzt+4%LHqo#1k+4bNvIYUgg5Av)qIU)4Z||f*YxfHz(!)cSo7A)j5D|mExyt; zYzE^(xm3i~I*@l*K&U8Ko(wHIFoVc2=?PdWz+jje(FrIY@%kfPHAtd8Q-iTc}l4xF6U2Tn#G2TsIK$f~*=+lvTP@S&=vyMtf(M=e@@^ zT6ik$agXe{rGI<4<|j0Z@e->R>GUN|P~Yn=-qew~q zDLX*4E`axc<=J0)4l13_jc<&<^v*PSgIpoZ_KF$l2RbT8HwL>qf{{jo*P*Q@?pja^ z>MD_1xM&be0pHJ!q3?;`z*??2M655fB44L1no-*XMUF!XPY1+y6Izs2O=_@}e3cm4 z#5&1XCD+>O32hjYrLXe*jpv-U>L|zAmy#j|J468juJP9tj9yG|E-_9W9TdN7(c(m$ zG&PDs10E;5ak`+BLq<;X;ps1fW8(gzyEm@P?Ut&-VsAW9!&a^NtVPfo01 zx`i$~Sy{kDO8KMhC#f?>_HWgk^^qK|Lz_Zx+D^bWY93^EH{l>P8E(n>DO)tO1lY`ho0}mIq>JM40MGqhR*ckgfp)=f+c|0u;3taI^nt)U-(y|43;it^CCXy-j>2Gcq4(Mp8YU!~NS59(8%COPT*dO5 zZ_Y8O=EGUB;V1w}9HE=qOO04QAjb{DH;^z;t>N*(*vxG3c9r_Mo?4?m zhwm^_s>}(k;Y*A)`-j-u%?aDhbpolJ*gm*a7ssF#lgTy7b#%2kG)7(z%ad20zTzo7 zre#1{qA;h2BQ_1_vs*>d9Uka!xHysCaB_F6$1~7_%p*bCJ~>gc;N zHep>>;c`x0^{9}V%LYV}X@>uhz+8Y@Lf4AsME!%5sl9Jv)&7^)dBT4BA4kRjdk3GV zQufYYaY6wJ_h=GSQf`(MDhcPRFCPYiJn@$(U{_`~#m8!EUxCIdIFnpS^3-m!IJc2R z`_v@bd*PAPq{ALm>alNs2hHRup9Fkr*^R05I%JBWgY^ZkW_Rr9yqSr

      6ycc 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Īs+S@1&GP?UjE?ytwvS*|N;VYuR-%EZx@)UP=i>06uKjRsLnW=kv)# z$v1-WgqnHUU%6ppEJalnM}ziHuF=QnAS~u*WSoD0WWn7kbUaBct_`^^KOy<4tu$AU zQ^&>?5~&i~z&eH&i?K0hOLUsGmQ@W9tF{5JBC*3Z75od3;QObw=9^pNYObPB`zlb0 zo^g2gi9Z*-EJoNz&ic1AWF<7{BQNc9SYW8H{6`4lFGb5^|h7;G~nI>1?(`2XNhk}jqDF3j#+IU&lJNk z)ZQ}jLO*dj{e?FN{lia0ts!}`lDjxPmKj07(WJ` zoJM}}#QFc*(_iQ>#9eW0?t+x|TJp2(iG9K%) z63SP5_ML`6u@mdMVY~~t2eHWJcV9jhYE2w8T83&GdFY+|YR?Wia^jJl?*~zwW;jzq zdC-szNFr1`(PFz#Jn<|DT9f=c+U2mu4{c0syiBb6;-jFOyQ7CZZvkU5#f~x`hSUPs z*9?zB)&cyOwXW5w%{v)5rR$`2I<@9#ytu38XNV$U`mo5`7bN6jz2gOp*w{*J@Y(B` zZg7a!boSN}ZlnThW&)cOZ&|3jeQ18iL`wZWje^6CRNl-36Ol*%S~UEFSvI1V6wxVO zB#%j4lXA?a<^i6l7Cp;ikDGu*>ajiB@Gld_mh66qdW}GlzUbX(`3t@zh9w0-)r}AP zM#D6vgt|kA9@7~n{OZvnbPF+7-~_*F`1+gbH;4|Z2OB z5n6$j-hPeg@YzfD8RMf&95Ho70_qO%nHpr)Xq{KtCpKqfMm0H<9Egt6YXKu2RL4}c z{|oJ#&0;41zJ?*sPN$8vM7c>9I9Sv}Ius;3^2ahtqBFtlJ?Aekcoad{yXw>49&(@u z^_I9d%GIJl?w#02pEmb}v9F4ExR>WD;>tO1i&spAoni}joS1$b{X9!Jq5gMD*uPv~ z8qy856meA^9QzEkihHI8y4$~dDU*>r>Km#Q=*7#0e@UfNlzTCE7LBC?3bU~Tg%4Uq zCFkumuTgFle*U;# zIt}Olkh0(?qVkse&rX);^Y}MSNq>R*mEeHmFq7weq$ah;R@7d99B5dLvF_)NF0=dR zJ60*r$vtg-mLOfX=5x|Rj4V?a9k88UaqlzNRL#7 zA%g=%%O8~;jS7X+!6TH?)(6#AuD0vd+LyWEBaS@MA6-s0Ot2oTIyRoi%3rsD+WBE z#_GoYo14<$p|unO&oL#VcW~4B1!Z1dOp8MxzrO;-XjC7e!lqKx(2a4bi)@qP5Vs z^$=fz3A^#z#!nY&IfjLTRH%iW1)IjQy18Y}2ga603Wv@ueq<|FN8s-?PNbCjQpwgT zJ;+Y)eApL27UyrHy`}I|cp>aAObG=Z5MK;NaC6Rx%G~J&TexJbx=ucKg*fPcuheC} zdnWnyYirygCuc?wr$oarU}Gl0NnbaIaqOxQD7!JXKkf(=$VZ7%44Y+Kj&eks3R!14 zT*R;cdgRu-8~}y1yi9Z~!SPJt+>5Up3^7EDGu4H+|0HiVkBW$L_V69rvW8Sd=&)W+ zcpzuE5fuQ%&JRu`9>T@wPdC4`I0B2yjU?ZAs||;5lb*_5b|0LM)bL*?cXAzuM#O(KPcPCIBF`eheb?E30~myrWHVJAJGKpeZ{#-sav|Cy3x-!FwjVlXRIjeCruG|W)unc{<5~5RFk`Y>PCXhyV zSG|`+1n6~`f0J_}RYhW01`FsLud{1_@Z4R0#jVufPYCAZPbD{ty0Sy-7W(6d2z4!BL=8wE_}x}T_@*D$Ki)dX9CxW zP5$jContKv9HH2se}UwkJiAA)m7JR0#5Yb|Bk|-G!w{X!XNt@zV&|_rMkSX#1iAV~ zZ;!h<$RQ)wLR_&D>z=VeoMSAADxUjwO&HY*IvB*XHHC=Opv426O~&mP`B~Lmxk>7b zK7|!nQ?;6!v{GiltX2pjw{s)rJ6X>{8E;^p3{Di3W5}n&rVB|jgJLAz_{9`>pHmf1 zhe0=c*v5IVcYAuzc&QewlD4aveN*TDe56pyU2CbNUk&@_HQz6J&VE=D`1``)6+WxX zg|o1c`JKm6hG4%a_jI6ly|UoIocD0}04Gn~zzQk1eRZG-n71N zE9f|>?Ybe1*_OcU!Q9B%*7saPuiyeZ3>a@bh%U<C|29>;5s+siVr(*fxtMWQGo~&#rEB-gf>SXz3BI0Z+Aep1-`1YCox&r$?Qgla z(+|O?M9&@lA0PJ6c;~O%GB-jH28O|=cO*FAz<<{A8&+WgwkYi##j{GMc>je8s01( z-RZbaR$MzPRvdA;H96vcF_~9*_s!?OK!s5+H6=zg=T}BUsWF+TSC@hVfF%egiS~~y zaV=1tv(Wo})%9G;vqbYt-;pJc1ix^2f`)rlhCE57NwYG`StnYx0Z3EEb6`m00R=O2 zaPe?E&bBdEzm0iyh{(BgWpiPO$ouyb)+6{?%Hz<~vqcBP`NYA>9j*tnMCJ0!swNcD#aUwi>K?YJuAPlJCrE z_El5Of>dv+qmV-VWYLt9iTjd33%7nb?n&WCrcG|qNvCeWUe<_JG$3OR_5=f8uR2<6F{4MRdGMR(z zzbbr-%++x9raNMv*q(8j_-xvfbOHfo2>s)Q9#m{hwZ3gLO@@{vv-1jVVS+;z-~sRrmu_+N%zWEa4eFFnZIFX7CV3d$UMqyC zBQpEe!-+F-UmwHXbwYU3F1uW2e;S9qM9KSIOD>OjLxr!a_~K~;Uh+Du)0BjhmoimF zWj8AnE>`p|uB0AdTreysK1&zegZV;4t;$6U}Qy z^0BHwAa{$&DfDyLR|vZ9PuwTKPsNVinlnkbJLk4EPv)5L?G~7i_Lc%yuGw*J35#mw z^@m~H3&8=2Dg51zv1{6y^)*UWI-C|Z^>077D9gsDjt{$+DewDLxTLSVJt;h)C(85v zkDu15I`PewYBt5Z{R! zRPfKZ%b4-ltHfTOYxqD3MJWn7QyBOAdK=QT%dl)=eZNDL&Bek&aK7ZT&fH>o6~VUD zm9|Sj?$}`$TKF;gq}Vmt`}Qc(H~`^7Jiw46zf)?T@4LninC8Z5;7AC}e?`Noa7d9t zNX%z``h#y$@Le@^7k|PLxM$W_Uk_2OS|^0X;thA%x7-SNpL&%{GgcfaYH1jQ3RN@2 zP(8KL0l%=fL8k4=1~IV=)k5!O}uIEPv8Y+}XoTkOpZC{@|Xt#0${ zg5S^iue(*1VLAG7)bvVk>Rg^=r275j1_qVxi$q;Ab4eLD(<|H!VXKB+o#C+iA7O4o z7IV=uy1#>6+-s!Eap}^@?yk%VKglIF;pCECDX<1fZzO~(La=ar;ew#E5D*1Dd^ zrnZ}?5SJv9DUx-o#fTEX?0gD~;{Gl3Ax}AVKv8%ff;NLttvZ_v>Y&>?W*v+MY%4Lh zGWSAuT7UN)TBtQ{6$WGOqmB`P2?9^}gIi+iSSQXSM1!txTx9Oos^NKwd+F1*e&RCpcpxuj11tuI`$tJOAb!?P z4`&`pDW+8j3!$-WL&yjcw-!p{H~U(~$(6s4rXHU&7?w{Nz7kb)9py0(CpOT3e0`*r zC{atw^9*8>-*Ls|wZV0rhu^!_;r^)Q&B*wKlyajdzTGV9$?k0N)qSh97aVsqLQBw8 zZ+BGM3ujw-XhLpdc#?6C@DkV_|2f{)U{RJL%g;L!6By8nD067h;=g zf%E6W`udg}td$2<8!avInmUZGOwVX~DRMhMEd@A6Glu^oW#Qs#NRjy+X6h{0kl58d zKrRYL>e{jxJAZt;$pz{b{($ZxU9wg}lk22}))91Rc0b@s0(YysF8AjVVqogNB^<7eZKH?piD8X--; zL&yWg?n9ozmWF|#E^j0ptJ~>by|e>(Ro!O;BV{i*l#EO?Uh)%o-B@QBXJ?<&V0N7G zTk%D1w$G-+J)vbbyNAB+0URDFx~nSR03pUNf;!~x6?cg2tm;h|&9UZOSql$M-tY_~S2wvP3D1IQ$ zp>-vIU_kFz+8o(vShe!f26EDAVl^+#�A9bBHbos_PtKtu)Bo!hN^S)Gb-XSl!H- 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