commit c2882c296d56745e1d5911fc48b680fa431d131a Author: René Preuß Date: Sun Jan 21 13:37:26 2024 +0100 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d2b47d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +node_modules \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..05e07f2 --- /dev/null +++ b/index.js @@ -0,0 +1,56 @@ +import {getPrinters, print} from "unix-print"; + +import express from 'express' +import cors from 'cors' +import bodyParser from 'body-parser' +import multer from 'multer' + +const app = express() +const port = 1903 + +const upload = multer({dest: 'uploads/'}) + +app.use(cors()) +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({extended: true})); + +app.get('/', (req, res) => { + res.send('Hello World!') +}) + +app.get('/printers', async (req, res) => { + const printers = await getPrinters() + return res.json(printers.map(printer => { + return { + default: false, + format: 'PDF', + id: printer.printer, + name: printer.printer, + } + })) +}) + +app.post('/printers/:printer/print', upload.single('file'), async (req, res) => { + const {printer} = req.params + + // query: user-id: string, docType: label + // form data: file: binary, copies: string, shipment-ids: string + + const fileToPrint = req.file.path; + const printJob = await print(fileToPrint, printer); + const jobId = getRequestId(printJob); + + return res.json({ + jobs: [jobId], + }) + +}) + +app.listen(port, () => { + console.log(`App listening on port ${port}`) +}) + +function getRequestId(printJob) { + const requestId = printJob.stdout.split(' ')[3] + return requestId.split('-')[1] +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..d6a518d --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "print-utils", + "version": "1.0.0", + "main": "index.js", + "type": "module", + "license": "MIT", + "dependencies": { + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "express": "^4.18.2", + "multer": "^1.4.5-lts.1", + "pdf-to-printer": "^5.6.0", + "unix-print": "^1.3.2" + } +} diff --git a/print-service.js b/print-service.js new file mode 100644 index 0000000..fc06c6a --- /dev/null +++ b/print-service.js @@ -0,0 +1,338 @@ +import globalAxiosClient, { printAxiosClient } from '@/utils/axios' +import store from '@/store/store.js' + +import Segment from '@/app/users/tracking/segment.js' +import i18n from '@/i18n/i18n' +import serializeUrlParams from '@/utils/serialize-url-params.js' +import ClientHelperService from '@/services/client-helper.service.js' +import ModalService from '@/services/modal.service.js' +import { getAbsoluteBackendURL } from '@/utils/backend' +import * as DownloadsApi from '../api/downloads.api.js' + +import ToastService from '@/services/toast.service' + +export default { + printers: undefined, + + /** + * Opens a new window to download the document, or the current window URL + * is changed to display the PDF + * + * @param {string} url URL where the document can be downloaded + * @param {Object} params An `Object` of key/value pairs to be turned into a query string + * @param {string} [fileName] File name to save as + * @return {Promise} + */ + _downloadDocument(url, params = {}, fileName) { + // The URL passed is a relative one, with the frontend running on + // app.sendcloud.com and the document generating endpoints over at + // eu-central-1-0.app.sendcloud.com, we need to make this URL absolute. + const absoluteUrl = getAbsoluteBackendURL(url) + const queryString = serializeUrlParams({ ...params, download: true }) + return DownloadsApi.push(new URL(`${absoluteUrl}?${queryString}`), fileName) + }, + + /** + * @param {string} printerId + * @param {string} doc File contents + * @param {string} docType Document type + * @param {{ numberOfCopies?: number + * , shipmentIds?: Array + * }} [options={}] + * @returns {Promise} Rejected promise if the browser is unsupported, otherwise a resolved + * Promise with the result from the endpoint + */ + _printDocument(printerId, doc, docType, options = {}) { + const { numberOfCopies = 1, shipmentIds = [] } = options + if (!ClientHelperService.isBrowserSupported()) { + // eslint-disable-next-line prefer-promise-reject-errors + return Promise.reject({ + printer: printerId, + data: doc, + reason: 'unsupported_browser', + }) + } + + const API_URL = store.getters.definitions.desktop_client.api_url + const user = store.getters.user + + const payload = new FormData() + const blob = new Blob([doc], { type: 'application/pdf' }) + payload.append('file', blob) + payload.append('copies', numberOfCopies.toString()) + payload.append('shipment-ids', shipmentIds.join(',')) + + const config = { + params: { 'user-id': user.id, 'docType': docType }, + } + + return printAxiosClient.post(`${API_URL}/printers/${encodeURIComponent(printerId)}/print`, payload, config) + }, + + /** + * Download customs documents to the user's device, either in a new window or the current window. + * + * @param {Array} shipmentIds List of shipment IDs + * @param {Object} printFormat `Object` containing paper size of the document + * @returns {Promise} + */ + downloadCustomsDocuments(shipmentIds, printFormat) { + const params = { + ids: shipmentIds.join(','), + start_from: printFormat.startAt, + paper_size: printFormat.size || 'A4', + type: 'customs', + } + + return this._downloadDocument('/xhr/parcel/label', params, 'customs') + }, + + /** + * Download labels to the user's device, either in a new window or the current window, + * using the user's selected print options. + * + * @param {Array} shipmentIds List of shipment blob UUIDs + * @param {Object} printFormat `Object` containing paper size and where on the page to start printing labels + */ + downloadLabels(shipmentIds, printFormat) { + if (store.getters.user.is_account_on_hold) { + return this.showAccountOnHoldModal() + } + + const params = { + ids: shipmentIds.join(','), + start_from: printFormat.startAt, + paper_size: printFormat.size, + } + + this._downloadDocument('/xhr/parcel/label', params, 'labels') + }, + + /** + * Download packing slips to the user's device, either in a new window or the current window. + * + * @param {Array} shipmentBlobUuids List of shipment blob UUIDs + * @param {Object} _printFormat (Currently unused) Object containing paper size and document position + * @param {number} senderAddressId + */ + downloadPackingSlips(shipmentBlobUuids, _printFormat, senderAddressId) { + this._downloadDocument( + '/orders/packgo/slips/packing-slip', + { + blobs: shipmentBlobUuids.join(','), + sender_address: senderAddressId, + }, + 'packing_slip', + ) + }, + + /** + * Download picking lists to the user's device, either in a new window or the current window. + * + * @param {Array} shipmentBlobUuids List of shipment blob UUIDs + * @param {Object} _printFormat (Currently unused) Object containing paper size and document position + */ + downloadPickingLists(shipmentBlobUuids, _printFormat) { + this._downloadDocument( + '/orders/packgo/slips/picking-list', + { + blobs: shipmentBlobUuids.join(','), + }, + 'picking_list', + ) + }, + + /** + * Check if a printer exists in the service's stored list of printers. + * + * @param {string} printerId + * @returns {boolean} `true` if a printer with a matching `id` is found, otherwise `false`. + */ + exists(printerId) { + if (!Array.isArray(this.printers) || !printerId) { + return false + } + + const foundPrinter = this.printers.find(printer => printer.id === printerId) + return foundPrinter !== undefined && foundPrinter !== null + }, + + /** + * Fetch printers and store them in the service for future reference. + * + * @returns {Promise} An empty `Array` if the browser is not supported, an `Array` + * of printer `Object`s installed on the user's device, or `undefined` in case of failure. + */ + async findAll() { + if (!ClientHelperService.isBrowserSupported()) { + this.printers = [] + return Promise.resolve([]) + } + + try { + const API_URL = store.getters.definitions.desktop_client.api_url + const user = store.getters.user + + const { data: printers } = await printAxiosClient.get(`${API_URL}/printers`, { + params: { 'user-id': user.id }, + }) + this.printers = printers + return Promise.resolve(printers) + } catch (error) { + this.printers = undefined + return Promise.resolve(undefined) + } + }, + + /** + * List printers that are stored in the service. + * + * @returns {Promise} An empty `Array` if the browser is not supported, an `Array` + * of printer `Object`s installed on the user's device, or `undefined` in case of failure. Will be `undefined` + * if the `findAll()` method has not previously been called. + */ + async getAll() { + // TODO: Remove this condition after the full FE/BE split + if (!this.printers) { + await this.findAll() + } + return this.printers + }, + + /** + * Retrieve the default printer from the provided `printers` argument. + * + * @param {Array|undefined} printers A list of printers to inspect + * @returns {Object|undefined} The user's default printer `Object`, if available - otherwise `undefined` + */ + getDefault(printers) { + if (!Array.isArray(printers)) { + return undefined + } + return printers.find(printer => printer.default === true) + }, + + /** + * Print customs documents with the user's selected printer and print options. + * + * @param {Array} shipmentIds List of shipment IDs + * @param {string} printerId + * @param {Object} printFormat `Object` containing paper size definition and where + * @param {number} numberOfCopies + */ + async printCustomsDocuments(shipmentIds, printerId, printFormat, numberOfCopies = 1) { + const params = { + ids: shipmentIds.join(','), + start_from: printFormat.start_from || 0, + paper_size: printFormat.size || 'A4', + download: false, + type: 'customs', + } + + const { data } = await globalAxiosClient.get('/xhr/parcel/label', { responseType: 'arraybuffer', params }) + await this._printDocument(printerId, data, 'customs', { + numberOfCopies, + shipmentIds, + }) + }, + + /** + * Print labels with the user's selected printer and print options + * + * @param {Array} shipmentIds List of shipment IDs + * @param {string} printerId + * @param {Object} printFormat `Object` containing paper size definition and where + * on the page to start printing labels + */ + printLabels(shipmentIds, printerId, printFormat) { + if (store.getters.user.is_account_on_hold) { + return this.showAccountOnHoldModal() + } + + const params = { + ids: shipmentIds.join(','), + start_from: printFormat.startAt || 0, + paper_size: printFormat.size || 'A6', + download: false, + } + + return globalAxiosClient + .get('/xhr/parcel/label', { responseType: 'arraybuffer', params }) + .then((response) => { + return this._printDocument(printerId, response.data, 'label', { shipmentIds }) + }) + .catch((error) => { + if (error.errors && error.errors[0].detail) { + for (const err of error.errors) { + ToastService.error(err.detail) + } + } + }) + }, + + /** + * Print packing slips with the user's selected printer + * + * @param {Array} shipmentBlobUuids List of shipment blob UUIDs + * @param {string} printerId + * @param {Object} _printFormat (Currently unused) `Object` containing paper size definition and where + * on the page to start printing documents + * @param {number} senderAddressId + */ + async printPackingSlips(shipmentBlobUuids, printerId, _printFormat, senderAddressId) { + const url = `/orders/packgo/slips/packing-slip?sender_address=${senderAddressId}&blobs=${shipmentBlobUuids.join( + ',', + )}` + + const { data } = await globalAxiosClient.get(url, { responseType: 'arraybuffer' }) + return this._printDocument(printerId, data, 'packing-slip', { shipmentIds: shipmentBlobUuids }) + }, + + /** + * Print picking lists with the user's selected printer + * + * @param {Array} shipmentBlobUuids List of shipment blob UUIDs + * @param {string} printerId + * @param {Object} _printFormat (Currently unused) `Object` containing paper size definition and where + * on the page to start printing documents + */ + async printPickingLists(shipmentBlobUuids, printerId, _printFormat) { + const url = `/orders/packgo/slips/picking-list?blobs=${shipmentBlobUuids.join(',')}` + + try { + const { data } = await globalAxiosClient.get(url, { responseType: 'arraybuffer' }) + const result = await this._printDocument(printerId, data, 'picking-list', { shipmentIds: shipmentBlobUuids }) + return Promise.resolve(result) + } catch (error) { + // Reject with the URL (the caller may use it as a fallback, retry, etc): + return Promise.reject(url) + } + }, + + /** + * Displays a confirmation modal explaining the user that printing labels is unavailable due to the + * account being on hold. + * + * @returns {Promise} + */ + async showAccountOnHoldModal() { + Segment.track('Print Labels on Hold modal') + + return new Promise((_resolve, reject) => { + ModalService.build('AccountOnHoldModal', { + id: 'account-on-hold', + confirm: () => { + reject() + }, + title: `${i18n.t("Sorry! You can't print any labels right now.")} 😕`, + bodyMessage: `

${i18n.t( + "We've placed your account on hold in order to review it for security reasons. This means you can't create or print any labels at this time.", + )}

+

${i18n.t("Don't worry—these reviews are usually finished within a few hours on normal business days.")}

+

${i18n.t( + 'If you have any concerns in the meantime, feel free to reach out to our customer support team.', + )}

`, + }) + }) + }, +} diff --git a/uploads/09369e94076fefc4a54e519a6f5a92c1 b/uploads/09369e94076fefc4a54e519a6f5a92c1 new file mode 100644 index 0000000..b0aed4b Binary files /dev/null and b/uploads/09369e94076fefc4a54e519a6f5a92c1 differ diff --git a/uploads/18bed00c24c2fe5d7e4949a8a188b034 b/uploads/18bed00c24c2fe5d7e4949a8a188b034 new file mode 100644 index 0000000..b0aed4b Binary files /dev/null and b/uploads/18bed00c24c2fe5d7e4949a8a188b034 differ diff --git a/uploads/6858a8870cfd238f4648da5ffd5a31c6 b/uploads/6858a8870cfd238f4648da5ffd5a31c6 new file mode 100644 index 0000000..4a0b015 --- /dev/null +++ b/uploads/6858a8870cfd238f4648da5ffd5a31c6 @@ -0,0 +1,325 @@ +%PDF-1.3 +%âãÏÓ +1 0 obj +<< +/Type /Pages +/Count 1 +/Kids [ 3 0 R ] +>> +endobj +2 0 obj +<< +/Producer (PyPDF2) +>> +endobj +3 0 obj +<< +/Type /Page +/Parent 1 0 R +/Resources 6 0 R +/Contents 5 0 R +/MediaBox [ 0 0 419.53 297.64 ] +/Rotate 90 +>> +endobj +4 0 obj +<< +/Type /Catalog +/Pages 1 0 R +>> +endobj +5 0 obj +<< +/Length 6758 +>> +stream +2 J +0.57 w +0.000 g +13.34 96.64 2.98 -2.98 re f +16.32 96.64 2.98 -2.98 re f +19.30 96.64 2.98 -2.98 re f +22.29 96.64 2.98 -2.98 re f +25.27 96.64 2.98 -2.98 re f +28.25 96.64 2.98 -2.98 re f +31.23 96.64 2.98 -2.98 re f +37.19 96.64 2.98 -2.98 re f +40.17 96.64 2.98 -2.98 re f +49.12 96.64 2.98 -2.98 re f +55.08 96.64 2.98 -2.98 re f +58.06 96.64 2.98 -2.98 re f +61.04 96.64 2.98 -2.98 re f +64.02 96.64 2.98 -2.98 re f +67.01 96.64 2.98 -2.98 re f +69.99 96.64 2.98 -2.98 re f +72.97 96.64 2.98 -2.98 re f +13.34 93.66 2.98 -2.98 re f +31.23 93.66 2.98 -2.98 re f +37.19 93.66 2.98 -2.98 re f +43.16 93.66 2.98 -2.98 re f +46.14 93.66 2.98 -2.98 re f +55.08 93.66 2.98 -2.98 re f +72.97 93.66 2.98 -2.98 re f +13.34 90.68 2.98 -2.98 re f +19.30 90.68 2.98 -2.98 re f +22.29 90.68 2.98 -2.98 re f +25.27 90.68 2.98 -2.98 re f +31.23 90.68 2.98 -2.98 re f +40.17 90.68 2.98 -2.98 re f +49.12 90.68 2.98 -2.98 re f +55.08 90.68 2.98 -2.98 re f +61.04 90.68 2.98 -2.98 re f +64.02 90.68 2.98 -2.98 re f +67.01 90.68 2.98 -2.98 re f +72.97 90.68 2.98 -2.98 re f +13.34 87.70 2.98 -2.98 re f +19.30 87.70 2.98 -2.98 re f +22.29 87.70 2.98 -2.98 re f +25.27 87.70 2.98 -2.98 re f +31.23 87.70 2.98 -2.98 re f +37.19 87.70 2.98 -2.98 re f +46.14 87.70 2.98 -2.98 re f +49.12 87.70 2.98 -2.98 re f +55.08 87.70 2.98 -2.98 re f +61.04 87.70 2.98 -2.98 re f +64.02 87.70 2.98 -2.98 re f +67.01 87.70 2.98 -2.98 re f +72.97 87.70 2.98 -2.98 re f +13.34 84.72 2.98 -2.98 re f +19.30 84.72 2.98 -2.98 re f +22.29 84.72 2.98 -2.98 re f +25.27 84.72 2.98 -2.98 re f +31.23 84.72 2.98 -2.98 re f +40.17 84.72 2.98 -2.98 re f +43.16 84.72 2.98 -2.98 re f +46.14 84.72 2.98 -2.98 re f +55.08 84.72 2.98 -2.98 re f +61.04 84.72 2.98 -2.98 re f +64.02 84.72 2.98 -2.98 re f +67.01 84.72 2.98 -2.98 re f +72.97 84.72 2.98 -2.98 re f +13.34 81.74 2.98 -2.98 re f +31.23 81.74 2.98 -2.98 re f +46.14 81.74 2.98 -2.98 re f +49.12 81.74 2.98 -2.98 re f +55.08 81.74 2.98 -2.98 re f +72.97 81.74 2.98 -2.98 re f +13.34 78.75 2.98 -2.98 re f +16.32 78.75 2.98 -2.98 re f +19.30 78.75 2.98 -2.98 re f +22.29 78.75 2.98 -2.98 re f +25.27 78.75 2.98 -2.98 re f +28.25 78.75 2.98 -2.98 re f +31.23 78.75 2.98 -2.98 re f +37.19 78.75 2.98 -2.98 re f +43.16 78.75 2.98 -2.98 re f +49.12 78.75 2.98 -2.98 re f +55.08 78.75 2.98 -2.98 re f +58.06 78.75 2.98 -2.98 re f +61.04 78.75 2.98 -2.98 re f +64.02 78.75 2.98 -2.98 re f +67.01 78.75 2.98 -2.98 re f +69.99 78.75 2.98 -2.98 re f +72.97 78.75 2.98 -2.98 re f +37.19 75.77 2.98 -2.98 re f +46.14 75.77 2.98 -2.98 re f +49.12 75.77 2.98 -2.98 re f +13.34 72.79 2.98 -2.98 re f +19.30 72.79 2.98 -2.98 re f +22.29 72.79 2.98 -2.98 re f +28.25 72.79 2.98 -2.98 re f +31.23 72.79 2.98 -2.98 re f +34.21 72.79 2.98 -2.98 re f +46.14 72.79 2.98 -2.98 re f +49.12 72.79 2.98 -2.98 re f +55.08 72.79 2.98 -2.98 re f +64.02 72.79 2.98 -2.98 re f +69.99 72.79 2.98 -2.98 re f +72.97 72.79 2.98 -2.98 re f +13.34 69.81 2.98 -2.98 re f +16.32 69.81 2.98 -2.98 re f +28.25 69.81 2.98 -2.98 re f +34.21 69.81 2.98 -2.98 re f +40.17 69.81 2.98 -2.98 re f +43.16 69.81 2.98 -2.98 re f +46.14 69.81 2.98 -2.98 re f +49.12 69.81 2.98 -2.98 re f +55.08 69.81 2.98 -2.98 re f +61.04 69.81 2.98 -2.98 re f +64.02 69.81 2.98 -2.98 re f +67.01 69.81 2.98 -2.98 re f +13.34 66.83 2.98 -2.98 re f +16.32 66.83 2.98 -2.98 re f +28.25 66.83 2.98 -2.98 re f +31.23 66.83 2.98 -2.98 re f +40.17 66.83 2.98 -2.98 re f +46.14 66.83 2.98 -2.98 re f +52.10 66.83 2.98 -2.98 re f +61.04 66.83 2.98 -2.98 re f +64.02 66.83 2.98 -2.98 re f +13.34 63.85 2.98 -2.98 re f +16.32 63.85 2.98 -2.98 re f +19.30 63.85 2.98 -2.98 re f +25.27 63.85 2.98 -2.98 re f +28.25 63.85 2.98 -2.98 re f +34.21 63.85 2.98 -2.98 re f +43.16 63.85 2.98 -2.98 re f +46.14 63.85 2.98 -2.98 re f +52.10 63.85 2.98 -2.98 re f +55.08 63.85 2.98 -2.98 re f +64.02 63.85 2.98 -2.98 re f +72.97 63.85 2.98 -2.98 re f +16.32 60.87 2.98 -2.98 re f +19.30 60.87 2.98 -2.98 re f +31.23 60.87 2.98 -2.98 re f +40.17 60.87 2.98 -2.98 re f +43.16 60.87 2.98 -2.98 re f +49.12 60.87 2.98 -2.98 re f +55.08 60.87 2.98 -2.98 re f +64.02 60.87 2.98 -2.98 re f +69.99 60.87 2.98 -2.98 re f +72.97 60.87 2.98 -2.98 re f +37.19 57.89 2.98 -2.98 re f +46.14 57.89 2.98 -2.98 re f +55.08 57.89 2.98 -2.98 re f +58.06 57.89 2.98 -2.98 re f +61.04 57.89 2.98 -2.98 re f +64.02 57.89 2.98 -2.98 re f +67.01 57.89 2.98 -2.98 re f +72.97 57.89 2.98 -2.98 re f +13.34 54.90 2.98 -2.98 re f +16.32 54.90 2.98 -2.98 re f +19.30 54.90 2.98 -2.98 re f +22.29 54.90 2.98 -2.98 re f +25.27 54.90 2.98 -2.98 re f +28.25 54.90 2.98 -2.98 re f +31.23 54.90 2.98 -2.98 re f +37.19 54.90 2.98 -2.98 re f +46.14 54.90 2.98 -2.98 re f +49.12 54.90 2.98 -2.98 re f +52.10 54.90 2.98 -2.98 re f +13.34 51.92 2.98 -2.98 re f +31.23 51.92 2.98 -2.98 re f +37.19 51.92 2.98 -2.98 re f +40.17 51.92 2.98 -2.98 re f +43.16 51.92 2.98 -2.98 re f +58.06 51.92 2.98 -2.98 re f +61.04 51.92 2.98 -2.98 re f +72.97 51.92 2.98 -2.98 re f +13.34 48.94 2.98 -2.98 re f +19.30 48.94 2.98 -2.98 re f +22.29 48.94 2.98 -2.98 re f +25.27 48.94 2.98 -2.98 re f +31.23 48.94 2.98 -2.98 re f +40.17 48.94 2.98 -2.98 re f +49.12 48.94 2.98 -2.98 re f +55.08 48.94 2.98 -2.98 re f +61.04 48.94 2.98 -2.98 re f +64.02 48.94 2.98 -2.98 re f +67.01 48.94 2.98 -2.98 re f +69.99 48.94 2.98 -2.98 re f +72.97 48.94 2.98 -2.98 re f +13.34 45.96 2.98 -2.98 re f +19.30 45.96 2.98 -2.98 re f +22.29 45.96 2.98 -2.98 re f +25.27 45.96 2.98 -2.98 re f +31.23 45.96 2.98 -2.98 re f +37.19 45.96 2.98 -2.98 re f +43.16 45.96 2.98 -2.98 re f +46.14 45.96 2.98 -2.98 re f +55.08 45.96 2.98 -2.98 re f +58.06 45.96 2.98 -2.98 re f +61.04 45.96 2.98 -2.98 re f +67.01 45.96 2.98 -2.98 re f +69.99 45.96 2.98 -2.98 re f +13.34 42.98 2.98 -2.98 re f +19.30 42.98 2.98 -2.98 re f +22.29 42.98 2.98 -2.98 re f +25.27 42.98 2.98 -2.98 re f +31.23 42.98 2.98 -2.98 re f +37.19 42.98 2.98 -2.98 re f +40.17 42.98 2.98 -2.98 re f +49.12 42.98 2.98 -2.98 re f +55.08 42.98 2.98 -2.98 re f +58.06 42.98 2.98 -2.98 re f +61.04 42.98 2.98 -2.98 re f +64.02 42.98 2.98 -2.98 re f +67.01 42.98 2.98 -2.98 re f +13.34 40.00 2.98 -2.98 re f +31.23 40.00 2.98 -2.98 re f +52.10 40.00 2.98 -2.98 re f +64.02 40.00 2.98 -2.98 re f +67.01 40.00 2.98 -2.98 re f +13.34 37.02 2.98 -2.98 re f +16.32 37.02 2.98 -2.98 re f +19.30 37.02 2.98 -2.98 re f +22.29 37.02 2.98 -2.98 re f +25.27 37.02 2.98 -2.98 re f +28.25 37.02 2.98 -2.98 re f +31.23 37.02 2.98 -2.98 re f +37.19 37.02 2.98 -2.98 re f +40.17 37.02 2.98 -2.98 re f +52.10 37.02 2.98 -2.98 re f +64.02 37.02 2.98 -2.98 re f +69.99 37.02 2.98 -2.98 re f +BT /F1 7.50 Tf ET +q 0 g BT 12.76 21.14 Td (SCCWF3HMFJXG) Tj ET Q +BT /F1 8.00 Tf ET +q 0 g BT 12.76 274.83 Td (Anikeen, Buntspechtweg 21, 53123 Bonn) Tj ET Q +BT /F1 10.00 Tf ET +q 0 g BT 175.75 175.58 Td (Max Mustermann) Tj ET Q +q 0 g BT 175.75 162.83 Td (Musterstraße 1) Tj ET Q +BT /F2 10.00 Tf ET +q 0 g BT 175.75 150.07 Td (12345 MUSTERORT) Tj ET Q +BT /F1 10.00 Tf ET +q 0 g BT 175.75 137.31 Td (Germany) Tj ET Q + +endstream +endobj +6 0 obj +<< +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/Font << +/F1 8 0 R +/F2 7 0 R +>> +/XObject << +>> +>> +endobj +7 0 obj +<< +/Type /Font +/BaseFont /Helvetica-Bold +/Subtype /Type1 +/Encoding /WinAnsiEncoding +>> +endobj +8 0 obj +<< +/Type /Font +/BaseFont /Helvetica +/Subtype /Type1 +/Encoding /WinAnsiEncoding +>> +endobj +xref +0 9 +0000000000 65535 f +0000000015 00000 n +0000000074 00000 n +0000000114 00000 n +0000000237 00000 n +0000000286 00000 n +0000007096 00000 n +0000007212 00000 n +0000007314 00000 n +trailer +<< +/Size 9 +/Root 4 0 R +/Info 2 0 R +>> +startxref +7411 +%%EOF diff --git a/uploads/6e14c511521f2a65ca1fa557643b5dad b/uploads/6e14c511521f2a65ca1fa557643b5dad new file mode 100644 index 0000000..b0aed4b Binary files /dev/null and b/uploads/6e14c511521f2a65ca1fa557643b5dad differ diff --git a/uploads/83bfaeeb54aa5a9467fa511689636f60 b/uploads/83bfaeeb54aa5a9467fa511689636f60 new file mode 100644 index 0000000..b0aed4b Binary files /dev/null and b/uploads/83bfaeeb54aa5a9467fa511689636f60 differ diff --git a/uploads/b68676b211afb2042c7d01a219d49761 b/uploads/b68676b211afb2042c7d01a219d49761 new file mode 100644 index 0000000..4a0b015 --- /dev/null +++ b/uploads/b68676b211afb2042c7d01a219d49761 @@ -0,0 +1,325 @@ +%PDF-1.3 +%âãÏÓ +1 0 obj +<< +/Type /Pages +/Count 1 +/Kids [ 3 0 R ] +>> +endobj +2 0 obj +<< +/Producer (PyPDF2) +>> +endobj +3 0 obj +<< +/Type /Page +/Parent 1 0 R +/Resources 6 0 R +/Contents 5 0 R +/MediaBox [ 0 0 419.53 297.64 ] +/Rotate 90 +>> +endobj +4 0 obj +<< +/Type /Catalog +/Pages 1 0 R +>> +endobj +5 0 obj +<< +/Length 6758 +>> +stream +2 J +0.57 w +0.000 g +13.34 96.64 2.98 -2.98 re f +16.32 96.64 2.98 -2.98 re f +19.30 96.64 2.98 -2.98 re f +22.29 96.64 2.98 -2.98 re f +25.27 96.64 2.98 -2.98 re f +28.25 96.64 2.98 -2.98 re f +31.23 96.64 2.98 -2.98 re f +37.19 96.64 2.98 -2.98 re f +40.17 96.64 2.98 -2.98 re f +49.12 96.64 2.98 -2.98 re f +55.08 96.64 2.98 -2.98 re f +58.06 96.64 2.98 -2.98 re f +61.04 96.64 2.98 -2.98 re f +64.02 96.64 2.98 -2.98 re f +67.01 96.64 2.98 -2.98 re f +69.99 96.64 2.98 -2.98 re f +72.97 96.64 2.98 -2.98 re f +13.34 93.66 2.98 -2.98 re f +31.23 93.66 2.98 -2.98 re f +37.19 93.66 2.98 -2.98 re f +43.16 93.66 2.98 -2.98 re f +46.14 93.66 2.98 -2.98 re f +55.08 93.66 2.98 -2.98 re f +72.97 93.66 2.98 -2.98 re f +13.34 90.68 2.98 -2.98 re f +19.30 90.68 2.98 -2.98 re f +22.29 90.68 2.98 -2.98 re f +25.27 90.68 2.98 -2.98 re f +31.23 90.68 2.98 -2.98 re f +40.17 90.68 2.98 -2.98 re f +49.12 90.68 2.98 -2.98 re f +55.08 90.68 2.98 -2.98 re f +61.04 90.68 2.98 -2.98 re f +64.02 90.68 2.98 -2.98 re f +67.01 90.68 2.98 -2.98 re f +72.97 90.68 2.98 -2.98 re f +13.34 87.70 2.98 -2.98 re f +19.30 87.70 2.98 -2.98 re f +22.29 87.70 2.98 -2.98 re f +25.27 87.70 2.98 -2.98 re f +31.23 87.70 2.98 -2.98 re f +37.19 87.70 2.98 -2.98 re f +46.14 87.70 2.98 -2.98 re f +49.12 87.70 2.98 -2.98 re f +55.08 87.70 2.98 -2.98 re f +61.04 87.70 2.98 -2.98 re f +64.02 87.70 2.98 -2.98 re f +67.01 87.70 2.98 -2.98 re f +72.97 87.70 2.98 -2.98 re f +13.34 84.72 2.98 -2.98 re f +19.30 84.72 2.98 -2.98 re f +22.29 84.72 2.98 -2.98 re f +25.27 84.72 2.98 -2.98 re f +31.23 84.72 2.98 -2.98 re f +40.17 84.72 2.98 -2.98 re f +43.16 84.72 2.98 -2.98 re f +46.14 84.72 2.98 -2.98 re f +55.08 84.72 2.98 -2.98 re f +61.04 84.72 2.98 -2.98 re f +64.02 84.72 2.98 -2.98 re f +67.01 84.72 2.98 -2.98 re f +72.97 84.72 2.98 -2.98 re f +13.34 81.74 2.98 -2.98 re f +31.23 81.74 2.98 -2.98 re f +46.14 81.74 2.98 -2.98 re f +49.12 81.74 2.98 -2.98 re f +55.08 81.74 2.98 -2.98 re f +72.97 81.74 2.98 -2.98 re f +13.34 78.75 2.98 -2.98 re f +16.32 78.75 2.98 -2.98 re f +19.30 78.75 2.98 -2.98 re f +22.29 78.75 2.98 -2.98 re f +25.27 78.75 2.98 -2.98 re f +28.25 78.75 2.98 -2.98 re f +31.23 78.75 2.98 -2.98 re f +37.19 78.75 2.98 -2.98 re f +43.16 78.75 2.98 -2.98 re f +49.12 78.75 2.98 -2.98 re f +55.08 78.75 2.98 -2.98 re f +58.06 78.75 2.98 -2.98 re f +61.04 78.75 2.98 -2.98 re f +64.02 78.75 2.98 -2.98 re f +67.01 78.75 2.98 -2.98 re f +69.99 78.75 2.98 -2.98 re f +72.97 78.75 2.98 -2.98 re f +37.19 75.77 2.98 -2.98 re f +46.14 75.77 2.98 -2.98 re f +49.12 75.77 2.98 -2.98 re f +13.34 72.79 2.98 -2.98 re f +19.30 72.79 2.98 -2.98 re f +22.29 72.79 2.98 -2.98 re f +28.25 72.79 2.98 -2.98 re f +31.23 72.79 2.98 -2.98 re f +34.21 72.79 2.98 -2.98 re f +46.14 72.79 2.98 -2.98 re f +49.12 72.79 2.98 -2.98 re f +55.08 72.79 2.98 -2.98 re f +64.02 72.79 2.98 -2.98 re f +69.99 72.79 2.98 -2.98 re f +72.97 72.79 2.98 -2.98 re f +13.34 69.81 2.98 -2.98 re f +16.32 69.81 2.98 -2.98 re f +28.25 69.81 2.98 -2.98 re f +34.21 69.81 2.98 -2.98 re f +40.17 69.81 2.98 -2.98 re f +43.16 69.81 2.98 -2.98 re f +46.14 69.81 2.98 -2.98 re f +49.12 69.81 2.98 -2.98 re f +55.08 69.81 2.98 -2.98 re f +61.04 69.81 2.98 -2.98 re f +64.02 69.81 2.98 -2.98 re f +67.01 69.81 2.98 -2.98 re f +13.34 66.83 2.98 -2.98 re f +16.32 66.83 2.98 -2.98 re f +28.25 66.83 2.98 -2.98 re f +31.23 66.83 2.98 -2.98 re f +40.17 66.83 2.98 -2.98 re f +46.14 66.83 2.98 -2.98 re f +52.10 66.83 2.98 -2.98 re f +61.04 66.83 2.98 -2.98 re f +64.02 66.83 2.98 -2.98 re f +13.34 63.85 2.98 -2.98 re f +16.32 63.85 2.98 -2.98 re f +19.30 63.85 2.98 -2.98 re f +25.27 63.85 2.98 -2.98 re f +28.25 63.85 2.98 -2.98 re f +34.21 63.85 2.98 -2.98 re f +43.16 63.85 2.98 -2.98 re f +46.14 63.85 2.98 -2.98 re f +52.10 63.85 2.98 -2.98 re f +55.08 63.85 2.98 -2.98 re f +64.02 63.85 2.98 -2.98 re f +72.97 63.85 2.98 -2.98 re f +16.32 60.87 2.98 -2.98 re f +19.30 60.87 2.98 -2.98 re f +31.23 60.87 2.98 -2.98 re f +40.17 60.87 2.98 -2.98 re f +43.16 60.87 2.98 -2.98 re f +49.12 60.87 2.98 -2.98 re f +55.08 60.87 2.98 -2.98 re f +64.02 60.87 2.98 -2.98 re f +69.99 60.87 2.98 -2.98 re f +72.97 60.87 2.98 -2.98 re f +37.19 57.89 2.98 -2.98 re f +46.14 57.89 2.98 -2.98 re f +55.08 57.89 2.98 -2.98 re f +58.06 57.89 2.98 -2.98 re f +61.04 57.89 2.98 -2.98 re f +64.02 57.89 2.98 -2.98 re f +67.01 57.89 2.98 -2.98 re f +72.97 57.89 2.98 -2.98 re f +13.34 54.90 2.98 -2.98 re f +16.32 54.90 2.98 -2.98 re f +19.30 54.90 2.98 -2.98 re f +22.29 54.90 2.98 -2.98 re f +25.27 54.90 2.98 -2.98 re f +28.25 54.90 2.98 -2.98 re f +31.23 54.90 2.98 -2.98 re f +37.19 54.90 2.98 -2.98 re f +46.14 54.90 2.98 -2.98 re f +49.12 54.90 2.98 -2.98 re f +52.10 54.90 2.98 -2.98 re f +13.34 51.92 2.98 -2.98 re f +31.23 51.92 2.98 -2.98 re f +37.19 51.92 2.98 -2.98 re f +40.17 51.92 2.98 -2.98 re f +43.16 51.92 2.98 -2.98 re f +58.06 51.92 2.98 -2.98 re f +61.04 51.92 2.98 -2.98 re f +72.97 51.92 2.98 -2.98 re f +13.34 48.94 2.98 -2.98 re f +19.30 48.94 2.98 -2.98 re f +22.29 48.94 2.98 -2.98 re f +25.27 48.94 2.98 -2.98 re f +31.23 48.94 2.98 -2.98 re f +40.17 48.94 2.98 -2.98 re f +49.12 48.94 2.98 -2.98 re f +55.08 48.94 2.98 -2.98 re f +61.04 48.94 2.98 -2.98 re f +64.02 48.94 2.98 -2.98 re f +67.01 48.94 2.98 -2.98 re f +69.99 48.94 2.98 -2.98 re f +72.97 48.94 2.98 -2.98 re f +13.34 45.96 2.98 -2.98 re f +19.30 45.96 2.98 -2.98 re f +22.29 45.96 2.98 -2.98 re f +25.27 45.96 2.98 -2.98 re f +31.23 45.96 2.98 -2.98 re f +37.19 45.96 2.98 -2.98 re f +43.16 45.96 2.98 -2.98 re f +46.14 45.96 2.98 -2.98 re f +55.08 45.96 2.98 -2.98 re f +58.06 45.96 2.98 -2.98 re f +61.04 45.96 2.98 -2.98 re f +67.01 45.96 2.98 -2.98 re f +69.99 45.96 2.98 -2.98 re f +13.34 42.98 2.98 -2.98 re f +19.30 42.98 2.98 -2.98 re f +22.29 42.98 2.98 -2.98 re f +25.27 42.98 2.98 -2.98 re f +31.23 42.98 2.98 -2.98 re f +37.19 42.98 2.98 -2.98 re f +40.17 42.98 2.98 -2.98 re f +49.12 42.98 2.98 -2.98 re f +55.08 42.98 2.98 -2.98 re f +58.06 42.98 2.98 -2.98 re f +61.04 42.98 2.98 -2.98 re f +64.02 42.98 2.98 -2.98 re f +67.01 42.98 2.98 -2.98 re f +13.34 40.00 2.98 -2.98 re f +31.23 40.00 2.98 -2.98 re f +52.10 40.00 2.98 -2.98 re f +64.02 40.00 2.98 -2.98 re f +67.01 40.00 2.98 -2.98 re f +13.34 37.02 2.98 -2.98 re f +16.32 37.02 2.98 -2.98 re f +19.30 37.02 2.98 -2.98 re f +22.29 37.02 2.98 -2.98 re f +25.27 37.02 2.98 -2.98 re f +28.25 37.02 2.98 -2.98 re f +31.23 37.02 2.98 -2.98 re f +37.19 37.02 2.98 -2.98 re f +40.17 37.02 2.98 -2.98 re f +52.10 37.02 2.98 -2.98 re f +64.02 37.02 2.98 -2.98 re f +69.99 37.02 2.98 -2.98 re f +BT /F1 7.50 Tf ET +q 0 g BT 12.76 21.14 Td (SCCWF3HMFJXG) Tj ET Q +BT /F1 8.00 Tf ET +q 0 g BT 12.76 274.83 Td (Anikeen, Buntspechtweg 21, 53123 Bonn) Tj ET Q +BT /F1 10.00 Tf ET +q 0 g BT 175.75 175.58 Td (Max Mustermann) Tj ET Q +q 0 g BT 175.75 162.83 Td (Musterstraße 1) Tj ET Q +BT /F2 10.00 Tf ET +q 0 g BT 175.75 150.07 Td (12345 MUSTERORT) Tj ET Q +BT /F1 10.00 Tf ET +q 0 g BT 175.75 137.31 Td (Germany) Tj ET Q + +endstream +endobj +6 0 obj +<< +/ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +/Font << +/F1 8 0 R +/F2 7 0 R +>> +/XObject << +>> +>> +endobj +7 0 obj +<< +/Type /Font +/BaseFont /Helvetica-Bold +/Subtype /Type1 +/Encoding /WinAnsiEncoding +>> +endobj +8 0 obj +<< +/Type /Font +/BaseFont /Helvetica +/Subtype /Type1 +/Encoding /WinAnsiEncoding +>> +endobj +xref +0 9 +0000000000 65535 f +0000000015 00000 n +0000000074 00000 n +0000000114 00000 n +0000000237 00000 n +0000000286 00000 n +0000007096 00000 n +0000007212 00000 n +0000007314 00000 n +trailer +<< +/Size 9 +/Root 4 0 R +/Info 2 0 R +>> +startxref +7411 +%%EOF diff --git a/uploads/f7226033849efe824fe917b419cace63 b/uploads/f7226033849efe824fe917b419cace63 new file mode 100644 index 0000000..b0aed4b Binary files /dev/null and b/uploads/f7226033849efe824fe917b419cace63 differ diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..2916e72 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,609 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + 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.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +body-parser@^1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + 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.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +busboy@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +express@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@^0.5.4: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multer@^1.4.5-lts.1: + version "1.4.5-lts.1" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac" + integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== + dependencies: + append-field "^1.0.0" + busboy "^1.0.0" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + type-is "^1.6.4" + xtend "^4.0.0" + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +object-assign@^4, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +pdf-to-printer@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pdf-to-printer/-/pdf-to-printer-5.6.0.tgz#31916ba92e834b8a112a3c96a7aa8074c3fab24d" + integrity sha512-yPZoLWFjbjnHoYNVLU8fyoVA5wPMmT6U4+W/ip+sTDZdt5hwcVuQSVe96rrqRB0kEaKznNcLU7BXSo42R7AHVQ== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + 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" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +type-is@^1.6.4, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +unix-print@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/unix-print/-/unix-print-1.3.2.tgz#4f41620ab435f5adddab2bc1401cd8a53afb70dc" + integrity sha512-0ibC236YdguosxDVdSf28IKRalwiMipo7vOmQ3nKZcqjhr38OG+ELGyBWscCNbfZj5WLvwVD8rObNGK7hxftjQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==