/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __create = Object.create; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __commonJS = (cb, mod) => function __require() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( // If the importer is in node compatibility mode or this is not an ESM // file that has been converted to a CommonJS file using a Babel- // compatible transform (i.e. "__esModule" has not been set), then set // "default" to the CommonJS "module.exports" for node compatibility. isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod )); var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateGet = (obj, member, getter) => { __accessCheck(obj, member, "read from private field"); return getter ? getter.call(obj) : member.get(obj); }; var __privateAdd = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateSet = (obj, member, value, setter) => { __accessCheck(obj, member, "write to private field"); setter ? setter.call(obj, value) : member.set(obj, value); return value; }; var __privateWrapper = (obj, member, setter, getter) => ({ set _(value) { __privateSet(obj, member, value, setter); }, get _() { return __privateGet(obj, member, getter); } }); var __privateMethod = (obj, member, method) => { __accessCheck(obj, member, "access private method"); return method; }; // node_modules/retry/lib/retry_operation.js var require_retry_operation = __commonJS({ "node_modules/retry/lib/retry_operation.js"(exports, module2) { function RetryOperation(timeouts, options) { if (typeof options === "boolean") { options = { forever: options }; } this._originalTimeouts = JSON.parse(JSON.stringify(timeouts)); this._timeouts = timeouts; this._options = options || {}; this._maxRetryTime = options && options.maxRetryTime || Infinity; this._fn = null; this._errors = []; this._attempts = 1; this._operationTimeout = null; this._operationTimeoutCb = null; this._timeout = null; this._operationStart = null; this._timer = null; if (this._options.forever) { this._cachedTimeouts = this._timeouts.slice(0); } } module2.exports = RetryOperation; RetryOperation.prototype.reset = function() { this._attempts = 1; this._timeouts = this._originalTimeouts.slice(0); }; RetryOperation.prototype.stop = function() { if (this._timeout) { clearTimeout(this._timeout); } if (this._timer) { clearTimeout(this._timer); } this._timeouts = []; this._cachedTimeouts = null; }; RetryOperation.prototype.retry = function(err) { if (this._timeout) { clearTimeout(this._timeout); } if (!err) { return false; } var currentTime = new Date().getTime(); if (err && currentTime - this._operationStart >= this._maxRetryTime) { this._errors.push(err); this._errors.unshift(new Error("RetryOperation timeout occurred")); return false; } this._errors.push(err); var timeout = this._timeouts.shift(); if (timeout === void 0) { if (this._cachedTimeouts) { this._errors.splice(0, this._errors.length - 1); timeout = this._cachedTimeouts.slice(-1); } else { return false; } } var self = this; this._timer = setTimeout(function() { self._attempts++; if (self._operationTimeoutCb) { self._timeout = setTimeout(function() { self._operationTimeoutCb(self._attempts); }, self._operationTimeout); if (self._options.unref) { self._timeout.unref(); } } self._fn(self._attempts); }, timeout); if (this._options.unref) { this._timer.unref(); } return true; }; RetryOperation.prototype.attempt = function(fn, timeoutOps) { this._fn = fn; if (timeoutOps) { if (timeoutOps.timeout) { this._operationTimeout = timeoutOps.timeout; } if (timeoutOps.cb) { this._operationTimeoutCb = timeoutOps.cb; } } var self = this; if (this._operationTimeoutCb) { this._timeout = setTimeout(function() { self._operationTimeoutCb(); }, self._operationTimeout); } this._operationStart = new Date().getTime(); this._fn(this._attempts); }; RetryOperation.prototype.try = function(fn) { console.log("Using RetryOperation.try() is deprecated"); this.attempt(fn); }; RetryOperation.prototype.start = function(fn) { console.log("Using RetryOperation.start() is deprecated"); this.attempt(fn); }; RetryOperation.prototype.start = RetryOperation.prototype.try; RetryOperation.prototype.errors = function() { return this._errors; }; RetryOperation.prototype.attempts = function() { return this._attempts; }; RetryOperation.prototype.mainError = function() { if (this._errors.length === 0) { return null; } var counts = {}; var mainError = null; var mainErrorCount = 0; for (var i = 0; i < this._errors.length; i++) { var error = this._errors[i]; var message = error.message; var count = (counts[message] || 0) + 1; counts[message] = count; if (count >= mainErrorCount) { mainError = error; mainErrorCount = count; } } return mainError; }; } }); // node_modules/retry/lib/retry.js var require_retry = __commonJS({ "node_modules/retry/lib/retry.js"(exports) { var RetryOperation = require_retry_operation(); exports.operation = function(options) { var timeouts = exports.timeouts(options); return new RetryOperation(timeouts, { forever: options && (options.forever || options.retries === Infinity), unref: options && options.unref, maxRetryTime: options && options.maxRetryTime }); }; exports.timeouts = function(options) { if (options instanceof Array) { return [].concat(options); } var opts = { retries: 10, factor: 2, minTimeout: 1 * 1e3, maxTimeout: Infinity, randomize: false }; for (var key in options) { opts[key] = options[key]; } if (opts.minTimeout > opts.maxTimeout) { throw new Error("minTimeout is greater than maxTimeout"); } var timeouts = []; for (var i = 0; i < opts.retries; i++) { timeouts.push(this.createTimeout(i, opts)); } if (options && options.forever && !timeouts.length) { timeouts.push(this.createTimeout(i, opts)); } timeouts.sort(function(a, b) { return a - b; }); return timeouts; }; exports.createTimeout = function(attempt, opts) { var random = opts.randomize ? Math.random() + 1 : 1; var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt)); timeout = Math.min(timeout, opts.maxTimeout); return timeout; }; exports.wrap = function(obj, options, methods) { if (options instanceof Array) { methods = options; options = null; } if (!methods) { methods = []; for (var key in obj) { if (typeof obj[key] === "function") { methods.push(key); } } } for (var i = 0; i < methods.length; i++) { var method = methods[i]; var original = obj[method]; obj[method] = function retryWrapper(original2) { var op = exports.operation(options); var args = Array.prototype.slice.call(arguments, 1); var callback = args.pop(); args.push(function(err) { if (op.retry(err)) { return; } if (err) { arguments[0] = op.mainError(); } callback.apply(this, arguments); }); op.attempt(function() { original2.apply(obj, args); }); }.bind(obj, original); obj[method].options = options; } }; } }); // node_modules/retry/index.js var require_retry2 = __commonJS({ "node_modules/retry/index.js"(exports, module2) { module2.exports = require_retry(); } }); // node_modules/p-retry/index.js var require_p_retry = __commonJS({ "node_modules/p-retry/index.js"(exports, module2) { "use strict"; var retry = require_retry2(); var networkErrorMsgs = [ "Failed to fetch", // Chrome "NetworkError when attempting to fetch resource.", // Firefox "The Internet connection appears to be offline.", // Safari "Network request failed" // `cross-fetch` ]; var AbortError = class extends Error { constructor(message) { super(); if (message instanceof Error) { this.originalError = message; ({ message } = message); } else { this.originalError = new Error(message); this.originalError.stack = this.stack; } this.name = "AbortError"; this.message = message; } }; var decorateErrorWithCounts = (error, attemptNumber, options) => { const retriesLeft = options.retries - (attemptNumber - 1); error.attemptNumber = attemptNumber; error.retriesLeft = retriesLeft; return error; }; var isNetworkError = (errorMessage) => networkErrorMsgs.includes(errorMessage); var pRetry4 = (input, options) => new Promise((resolve, reject) => { options = { onFailedAttempt: () => { }, retries: 10, ...options }; const operation = retry.operation(options); operation.attempt(async (attemptNumber) => { try { resolve(await input(attemptNumber)); } catch (error) { if (!(error instanceof Error)) { reject(new TypeError(`Non-error was thrown: "${error}". You should only throw errors.`)); return; } if (error instanceof AbortError) { operation.stop(); reject(error.originalError); } else if (error instanceof TypeError && !isNetworkError(error.message)) { operation.stop(); reject(error); } else { decorateErrorWithCounts(error, attemptNumber, options); try { await options.onFailedAttempt(error); } catch (error2) { reject(error2); return; } if (!operation.retry(error)) { reject(operation.mainError()); } } } }); }); module2.exports = pRetry4; module2.exports.default = pRetry4; module2.exports.AbortError = AbortError; } }); // node_modules/decamelize/index.js var require_decamelize = __commonJS({ "node_modules/decamelize/index.js"(exports, module2) { "use strict"; module2.exports = function(str, sep) { if (typeof str !== "string") { throw new TypeError("Expected a string"); } sep = typeof sep === "undefined" ? "_" : sep; return str.replace(/([a-z\d])([A-Z])/g, "$1" + sep + "$2").replace(/([A-Z]+)([A-Z][a-z\d]+)/g, "$1" + sep + "$2").toLowerCase(); }; } }); // node_modules/camelcase/index.js var require_camelcase = __commonJS({ "node_modules/camelcase/index.js"(exports, module2) { "use strict"; var UPPERCASE = /[\p{Lu}]/u; var LOWERCASE = /[\p{Ll}]/u; var LEADING_CAPITAL = /^[\p{Lu}](?![\p{Lu}])/gu; var IDENTIFIER = /([\p{Alpha}\p{N}_]|$)/u; var SEPARATORS = /[_.\- ]+/; var LEADING_SEPARATORS = new RegExp("^" + SEPARATORS.source); var SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, "gu"); var NUMBERS_AND_IDENTIFIER = new RegExp("\\d+" + IDENTIFIER.source, "gu"); var preserveCamelCase = (string, toLowerCase, toUpperCase) => { let isLastCharLower = false; let isLastCharUpper = false; let isLastLastCharUpper = false; for (let i = 0; i < string.length; i++) { const character = string[i]; if (isLastCharLower && UPPERCASE.test(character)) { string = string.slice(0, i) + "-" + string.slice(i); isLastCharLower = false; isLastLastCharUpper = isLastCharUpper; isLastCharUpper = true; i++; } else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) { string = string.slice(0, i - 1) + "-" + string.slice(i - 1); isLastLastCharUpper = isLastCharUpper; isLastCharUpper = false; isLastCharLower = true; } else { isLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character; isLastLastCharUpper = isLastCharUpper; isLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character; } } return string; }; var preserveConsecutiveUppercase = (input, toLowerCase) => { LEADING_CAPITAL.lastIndex = 0; return input.replace(LEADING_CAPITAL, (m1) => toLowerCase(m1)); }; var postProcess = (input, toUpperCase) => { SEPARATORS_AND_IDENTIFIER.lastIndex = 0; NUMBERS_AND_IDENTIFIER.lastIndex = 0; return input.replace(SEPARATORS_AND_IDENTIFIER, (_, identifier) => toUpperCase(identifier)).replace(NUMBERS_AND_IDENTIFIER, (m) => toUpperCase(m)); }; var camelCase2 = (input, options) => { if (!(typeof input === "string" || Array.isArray(input))) { throw new TypeError("Expected the input to be `string | string[]`"); } options = { pascalCase: false, preserveConsecutiveUppercase: false, ...options }; if (Array.isArray(input)) { input = input.map((x) => x.trim()).filter((x) => x.length).join("-"); } else { input = input.trim(); } if (input.length === 0) { return ""; } const toLowerCase = options.locale === false ? (string) => string.toLowerCase() : (string) => string.toLocaleLowerCase(options.locale); const toUpperCase = options.locale === false ? (string) => string.toUpperCase() : (string) => string.toLocaleUpperCase(options.locale); if (input.length === 1) { return options.pascalCase ? toUpperCase(input) : toLowerCase(input); } const hasUpperCase = input !== toLowerCase(input); if (hasUpperCase) { input = preserveCamelCase(input, toLowerCase, toUpperCase); } input = input.replace(LEADING_SEPARATORS, ""); if (options.preserveConsecutiveUppercase) { input = preserveConsecutiveUppercase(input, toLowerCase); } else { input = toLowerCase(input); } if (options.pascalCase) { input = toUpperCase(input.charAt(0)) + input.slice(1); } return postProcess(input, toUpperCase); }; module2.exports = camelCase2; module2.exports.default = camelCase2; } }); // node_modules/langchain/node_modules/ansi-styles/index.js var require_ansi_styles = __commonJS({ "node_modules/langchain/node_modules/ansi-styles/index.js"(exports, module2) { "use strict"; var ANSI_BACKGROUND_OFFSET = 10; var wrapAnsi256 = (offset = 0) => (code) => `\x1B[${38 + offset};5;${code}m`; var wrapAnsi16m = (offset = 0) => (red, green, blue) => `\x1B[${38 + offset};2;${red};${green};${blue}m`; function assembleStyles() { const codes = /* @__PURE__ */ new Map(); const styles2 = { modifier: { reset: [0, 0], // 21 isn't widely supported and 22 does the same thing bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], overline: [53, 55], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29] }, color: { black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], // Bright color blackBright: [90, 39], redBright: [91, 39], greenBright: [92, 39], yellowBright: [93, 39], blueBright: [94, 39], magentaBright: [95, 39], cyanBright: [96, 39], whiteBright: [97, 39] }, bgColor: { bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], // Bright color bgBlackBright: [100, 49], bgRedBright: [101, 49], bgGreenBright: [102, 49], bgYellowBright: [103, 49], bgBlueBright: [104, 49], bgMagentaBright: [105, 49], bgCyanBright: [106, 49], bgWhiteBright: [107, 49] } }; styles2.color.gray = styles2.color.blackBright; styles2.bgColor.bgGray = styles2.bgColor.bgBlackBright; styles2.color.grey = styles2.color.blackBright; styles2.bgColor.bgGrey = styles2.bgColor.bgBlackBright; for (const [groupName, group] of Object.entries(styles2)) { for (const [styleName, style] of Object.entries(group)) { styles2[styleName] = { open: `\x1B[${style[0]}m`, close: `\x1B[${style[1]}m` }; group[styleName] = styles2[styleName]; codes.set(style[0], style[1]); } Object.defineProperty(styles2, groupName, { value: group, enumerable: false }); } Object.defineProperty(styles2, "codes", { value: codes, enumerable: false }); styles2.color.close = "\x1B[39m"; styles2.bgColor.close = "\x1B[49m"; styles2.color.ansi256 = wrapAnsi256(); styles2.color.ansi16m = wrapAnsi16m(); styles2.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET); styles2.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET); Object.defineProperties(styles2, { rgbToAnsi256: { value: (red, green, blue) => { if (red === green && green === blue) { if (red < 8) { return 16; } if (red > 248) { return 231; } return Math.round((red - 8) / 247 * 24) + 232; } return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5); }, enumerable: false }, hexToRgb: { value: (hex) => { const matches = /(?[a-f\d]{6}|[a-f\d]{3})/i.exec(hex.toString(16)); if (!matches) { return [0, 0, 0]; } let { colorString } = matches.groups; if (colorString.length === 3) { colorString = colorString.split("").map((character) => character + character).join(""); } const integer = Number.parseInt(colorString, 16); return [ integer >> 16 & 255, integer >> 8 & 255, integer & 255 ]; }, enumerable: false }, hexToAnsi256: { value: (hex) => styles2.rgbToAnsi256(...styles2.hexToRgb(hex)), enumerable: false } }); return styles2; } Object.defineProperty(module2, "exports", { enumerable: true, get: assembleStyles }); } }); // node_modules/eventemitter3/index.js var require_eventemitter3 = __commonJS({ "node_modules/eventemitter3/index.js"(exports, module2) { "use strict"; var has = Object.prototype.hasOwnProperty; var prefix = "~"; function Events() { } if (Object.create) { Events.prototype = /* @__PURE__ */ Object.create(null); if (!new Events().__proto__) prefix = false; } function EE(fn, context, once) { this.fn = fn; this.context = context; this.once = once || false; } function addListener(emitter, event, fn, context, once) { if (typeof fn !== "function") { throw new TypeError("The listener must be a function"); } var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event; if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++; else if (!emitter._events[evt].fn) emitter._events[evt].push(listener); else emitter._events[evt] = [emitter._events[evt], listener]; return emitter; } function clearEvent(emitter, evt) { if (--emitter._eventsCount === 0) emitter._events = new Events(); else delete emitter._events[evt]; } function EventEmitter() { this._events = new Events(); this._eventsCount = 0; } EventEmitter.prototype.eventNames = function eventNames() { var names = [], events, name; if (this._eventsCount === 0) return names; for (name in events = this._events) { if (has.call(events, name)) names.push(prefix ? name.slice(1) : name); } if (Object.getOwnPropertySymbols) { return names.concat(Object.getOwnPropertySymbols(events)); } return names; }; EventEmitter.prototype.listeners = function listeners(event) { var evt = prefix ? prefix + event : event, handlers = this._events[evt]; if (!handlers) return []; if (handlers.fn) return [handlers.fn]; for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) { ee[i] = handlers[i].fn; } return ee; }; EventEmitter.prototype.listenerCount = function listenerCount(event) { var evt = prefix ? prefix + event : event, listeners = this._events[evt]; if (!listeners) return 0; if (listeners.fn) return 1; return listeners.length; }; EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return false; var listeners = this._events[evt], len = arguments.length, args, i; if (listeners.fn) { if (listeners.once) this.removeListener(event, listeners.fn, void 0, true); switch (len) { case 1: return listeners.fn.call(listeners.context), true; case 2: return listeners.fn.call(listeners.context, a1), true; case 3: return listeners.fn.call(listeners.context, a1, a2), true; case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true; case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true; case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true; } for (i = 1, args = new Array(len - 1); i < len; i++) { args[i - 1] = arguments[i]; } listeners.fn.apply(listeners.context, args); } else { var length = listeners.length, j; for (i = 0; i < length; i++) { if (listeners[i].once) this.removeListener(event, listeners[i].fn, void 0, true); switch (len) { case 1: listeners[i].fn.call(listeners[i].context); break; case 2: listeners[i].fn.call(listeners[i].context, a1); break; case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break; case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break; default: if (!args) for (j = 1, args = new Array(len - 1); j < len; j++) { args[j - 1] = arguments[j]; } listeners[i].fn.apply(listeners[i].context, args); } } } return true; }; EventEmitter.prototype.on = function on(event, fn, context) { return addListener(this, event, fn, context, false); }; EventEmitter.prototype.once = function once(event, fn, context) { return addListener(this, event, fn, context, true); }; EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) { var evt = prefix ? prefix + event : event; if (!this._events[evt]) return this; if (!fn) { clearEvent(this, evt); return this; } var listeners = this._events[evt]; if (listeners.fn) { if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) { clearEvent(this, evt); } } else { for (var i = 0, events = [], length = listeners.length; i < length; i++) { if (listeners[i].fn !== fn || once && !listeners[i].once || context && listeners[i].context !== context) { events.push(listeners[i]); } } if (events.length) this._events[evt] = events.length === 1 ? events[0] : events; else clearEvent(this, evt); } return this; }; EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) { var evt; if (event) { evt = prefix ? prefix + event : event; if (this._events[evt]) clearEvent(this, evt); } else { this._events = new Events(); this._eventsCount = 0; } return this; }; EventEmitter.prototype.off = EventEmitter.prototype.removeListener; EventEmitter.prototype.addListener = EventEmitter.prototype.on; EventEmitter.prefixed = prefix; EventEmitter.EventEmitter = EventEmitter; if ("undefined" !== typeof module2) { module2.exports = EventEmitter; } } }); // node_modules/p-finally/index.js var require_p_finally = __commonJS({ "node_modules/p-finally/index.js"(exports, module2) { "use strict"; module2.exports = (promise, onFinally) => { onFinally = onFinally || (() => { }); return promise.then( (val) => new Promise((resolve) => { resolve(onFinally()); }).then(() => val), (err) => new Promise((resolve) => { resolve(onFinally()); }).then(() => { throw err; }) ); }; } }); // node_modules/p-timeout/index.js var require_p_timeout = __commonJS({ "node_modules/p-timeout/index.js"(exports, module2) { "use strict"; var pFinally = require_p_finally(); var TimeoutError = class extends Error { constructor(message) { super(message); this.name = "TimeoutError"; } }; var pTimeout = (promise, milliseconds, fallback) => new Promise((resolve, reject) => { if (typeof milliseconds !== "number" || milliseconds < 0) { throw new TypeError("Expected `milliseconds` to be a positive number"); } if (milliseconds === Infinity) { resolve(promise); return; } const timer = setTimeout(() => { if (typeof fallback === "function") { try { resolve(fallback()); } catch (error) { reject(error); } return; } const message = typeof fallback === "string" ? fallback : `Promise timed out after ${milliseconds} milliseconds`; const timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message); if (typeof promise.cancel === "function") { promise.cancel(); } reject(timeoutError); }, milliseconds); pFinally( // eslint-disable-next-line promise/prefer-await-to-then promise.then(resolve, reject), () => { clearTimeout(timer); } ); }); module2.exports = pTimeout; module2.exports.default = pTimeout; module2.exports.TimeoutError = TimeoutError; } }); // node_modules/p-queue/dist/lower-bound.js var require_lower_bound = __commonJS({ "node_modules/p-queue/dist/lower-bound.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function lowerBound(array, value, comparator) { let first = 0; let count = array.length; while (count > 0) { const step = count / 2 | 0; let it = first + step; if (comparator(array[it], value) <= 0) { first = ++it; count -= step + 1; } else { count = step; } } return first; } exports.default = lowerBound; } }); // node_modules/p-queue/dist/priority-queue.js var require_priority_queue = __commonJS({ "node_modules/p-queue/dist/priority-queue.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var lower_bound_1 = require_lower_bound(); var PriorityQueue = class { constructor() { this._queue = []; } enqueue(run, options) { options = Object.assign({ priority: 0 }, options); const element = { priority: options.priority, run }; if (this.size && this._queue[this.size - 1].priority >= options.priority) { this._queue.push(element); return; } const index = lower_bound_1.default(this._queue, element, (a, b) => b.priority - a.priority); this._queue.splice(index, 0, element); } dequeue() { const item = this._queue.shift(); return item === null || item === void 0 ? void 0 : item.run; } filter(options) { return this._queue.filter((element) => element.priority === options.priority).map((element) => element.run); } get size() { return this._queue.length; } }; exports.default = PriorityQueue; } }); // node_modules/p-queue/dist/index.js var require_dist = __commonJS({ "node_modules/p-queue/dist/index.js"(exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var EventEmitter = require_eventemitter3(); var p_timeout_1 = require_p_timeout(); var priority_queue_1 = require_priority_queue(); var empty = () => { }; var timeoutError = new p_timeout_1.TimeoutError(); var PQueue = class extends EventEmitter { constructor(options) { var _a2, _b, _c, _d; super(); this._intervalCount = 0; this._intervalEnd = 0; this._pendingCount = 0; this._resolveEmpty = empty; this._resolveIdle = empty; options = Object.assign({ carryoverConcurrencyCount: false, intervalCap: Infinity, interval: 0, concurrency: Infinity, autoStart: true, queueClass: priority_queue_1.default }, options); if (!(typeof options.intervalCap === "number" && options.intervalCap >= 1)) { throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(_b = (_a2 = options.intervalCap) === null || _a2 === void 0 ? void 0 : _a2.toString()) !== null && _b !== void 0 ? _b : ""}\` (${typeof options.intervalCap})`); } if (options.interval === void 0 || !(Number.isFinite(options.interval) && options.interval >= 0)) { throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ""}\` (${typeof options.interval})`); } this._carryoverConcurrencyCount = options.carryoverConcurrencyCount; this._isIntervalIgnored = options.intervalCap === Infinity || options.interval === 0; this._intervalCap = options.intervalCap; this._interval = options.interval; this._queue = new options.queueClass(); this._queueClass = options.queueClass; this.concurrency = options.concurrency; this._timeout = options.timeout; this._throwOnTimeout = options.throwOnTimeout === true; this._isPaused = options.autoStart === false; } get _doesIntervalAllowAnother() { return this._isIntervalIgnored || this._intervalCount < this._intervalCap; } get _doesConcurrentAllowAnother() { return this._pendingCount < this._concurrency; } _next() { this._pendingCount--; this._tryToStartAnother(); this.emit("next"); } _resolvePromises() { this._resolveEmpty(); this._resolveEmpty = empty; if (this._pendingCount === 0) { this._resolveIdle(); this._resolveIdle = empty; this.emit("idle"); } } _onResumeInterval() { this._onInterval(); this._initializeIntervalIfNeeded(); this._timeoutId = void 0; } _isIntervalPaused() { const now = Date.now(); if (this._intervalId === void 0) { const delay = this._intervalEnd - now; if (delay < 0) { this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0; } else { if (this._timeoutId === void 0) { this._timeoutId = setTimeout(() => { this._onResumeInterval(); }, delay); } return true; } } return false; } _tryToStartAnother() { if (this._queue.size === 0) { if (this._intervalId) { clearInterval(this._intervalId); } this._intervalId = void 0; this._resolvePromises(); return false; } if (!this._isPaused) { const canInitializeInterval = !this._isIntervalPaused(); if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) { const job = this._queue.dequeue(); if (!job) { return false; } this.emit("active"); job(); if (canInitializeInterval) { this._initializeIntervalIfNeeded(); } return true; } } return false; } _initializeIntervalIfNeeded() { if (this._isIntervalIgnored || this._intervalId !== void 0) { return; } this._intervalId = setInterval(() => { this._onInterval(); }, this._interval); this._intervalEnd = Date.now() + this._interval; } _onInterval() { if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) { clearInterval(this._intervalId); this._intervalId = void 0; } this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0; this._processQueue(); } /** Executes all queued functions until it reaches the limit. */ _processQueue() { while (this._tryToStartAnother()) { } } get concurrency() { return this._concurrency; } set concurrency(newConcurrency) { if (!(typeof newConcurrency === "number" && newConcurrency >= 1)) { throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${newConcurrency}\` (${typeof newConcurrency})`); } this._concurrency = newConcurrency; this._processQueue(); } /** Adds a sync or async task to the queue. Always returns a promise. */ async add(fn, options = {}) { return new Promise((resolve, reject) => { const run = async () => { this._pendingCount++; this._intervalCount++; try { const operation = this._timeout === void 0 && options.timeout === void 0 ? fn() : p_timeout_1.default(Promise.resolve(fn()), options.timeout === void 0 ? this._timeout : options.timeout, () => { if (options.throwOnTimeout === void 0 ? this._throwOnTimeout : options.throwOnTimeout) { reject(timeoutError); } return void 0; }); resolve(await operation); } catch (error) { reject(error); } this._next(); }; this._queue.enqueue(run, options); this._tryToStartAnother(); this.emit("add"); }); } /** Same as `.add()`, but accepts an array of sync or async functions. @returns A promise that resolves when all functions are resolved. */ async addAll(functions, options) { return Promise.all(functions.map(async (function_) => this.add(function_, options))); } /** Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.) */ start() { if (!this._isPaused) { return this; } this._isPaused = false; this._processQueue(); return this; } /** Put queue execution on hold. */ pause() { this._isPaused = true; } /** Clear the queue. */ clear() { this._queue = new this._queueClass(); } /** Can be called multiple times. Useful if you for example add additional items at a later time. @returns A promise that settles when the queue becomes empty. */ async onEmpty() { if (this._queue.size === 0) { return; } return new Promise((resolve) => { const existingResolve = this._resolveEmpty; this._resolveEmpty = () => { existingResolve(); resolve(); }; }); } /** The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet. @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`. */ async onIdle() { if (this._pendingCount === 0 && this._queue.size === 0) { return; } return new Promise((resolve) => { const existingResolve = this._resolveIdle; this._resolveIdle = () => { existingResolve(); resolve(); }; }); } /** Size of the queue. */ get size() { return this._queue.size; } /** Size of the queue, filtered by the given options. For example, this can be used to find the number of items remaining in the queue with a specific priority level. */ sizeBy(options) { return this._queue.filter(options).length; } /** Number of pending promises. */ get pending() { return this._pendingCount; } /** Whether the queue is currently paused. */ get isPaused() { return this._isPaused; } get timeout() { return this._timeout; } /** Set the timeout for future operations. */ set timeout(milliseconds) { this._timeout = milliseconds; } }; exports.default = PQueue; } }); // node_modules/binary-search/index.js var require_binary_search = __commonJS({ "node_modules/binary-search/index.js"(exports, module2) { module2.exports = function(haystack, needle, comparator, low, high) { var mid, cmp; if (low === void 0) low = 0; else { low = low | 0; if (low < 0 || low >= haystack.length) throw new RangeError("invalid lower bound"); } if (high === void 0) high = haystack.length - 1; else { high = high | 0; if (high < low || high >= haystack.length) throw new RangeError("invalid upper bound"); } while (low <= high) { mid = low + (high - low >>> 1); cmp = +comparator(haystack[mid], needle, mid, haystack); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid - 1; else return mid; } return ~low; }; } }); // node_modules/num-sort/index.js var require_num_sort = __commonJS({ "node_modules/num-sort/index.js"(exports) { "use strict"; function assertNumber(number) { if (typeof number !== "number") { throw new TypeError("Expected a number"); } } exports.ascending = (left, right) => { assertNumber(left); assertNumber(right); if (Number.isNaN(left)) { return -1; } if (Number.isNaN(right)) { return 1; } return left - right; }; exports.descending = (left, right) => { assertNumber(left); assertNumber(right); if (Number.isNaN(left)) { return 1; } if (Number.isNaN(right)) { return -1; } return right - left; }; } }); // src/main.ts var main_exports = {}; __export(main_exports, { default: () => LocalGPT }); module.exports = __toCommonJS(main_exports); var import_obsidian6 = require("obsidian"); // src/LocalGPTSettingTab.ts var import_obsidian5 = require("obsidian"); // src/defaultSettings.ts var DEFAULT_SETTINGS = { providers: { ollama: { ollamaUrl: "http://localhost:11434", defaultModel: "gemma2", embeddingModel: "", type: "ollama" }, ollama_fallback: { ollamaUrl: "http://localhost:11434", defaultModel: "gemma2", embeddingModel: "", type: "ollama" }, openaiCompatible: { url: "http://localhost:8080", apiKey: "", embeddingModel: "", type: "openaiCompatible" }, openaiCompatible_fallback: { url: "http://localhost:8080", apiKey: "", embeddingModel: "", type: "openaiCompatible" } }, defaults: { provider: "ollama", fallbackProvider: "", creativity: "low" }, actions: [ { name: "\u{1FA84} General help", prompt: "", system: "You are an assistant helping a user write more content in a document based on a prompt. Output in markdown format. Do not use links. Do not include literal content from the original document." }, { name: "\u270D\uFE0F Continue writing", prompt: "Act as a professional editor with many years of experience as a writer. Carefully finalize the following text, add details, use facts and make sure that the meaning and original style are preserved. Purposely write in detail, with examples, so that your reader is comfortable, even if they don't understand the specifics. Don't use clericalisms, evaluations without proof with facts, passive voice. Use Markdown markup language for formatting. Answer only content and nothing else, no introductory words, only substance.", system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." }, { name: "\u{1F36D} Summarize", prompt: "Make a concise summary of the key points of the following text.", system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." }, { name: "\u{1F4D6} Fix spelling and grammar", prompt: "Proofread the below for spelling and grammar.", system: "You are an AI assistant that follows instruction extremely well. Help as much as you can.", replace: true }, { name: "\u2705 Find action items", prompt: 'Act as an assistant helping find action items inside a document. An action item is an extracted task or to-do found inside of an unstructured document. Use Markdown checkbox format: each line starts with "- [ ] "', system: "You are an AI assistant that follows instruction extremely well. Help as much as you can." }, { name: "\u{1F9E0} New System Prompt", prompt: "", system: `You are a highly skilled AI prompt engineer with expertise in creating tailored prompts for a wide range of professional roles. You have a deep knowledge of how to craft prompts that effectively guide the language model to produce high-quality, contextually appropriate responses. Your task is to generate a custom system prompt for different roles based on user input. This involves understanding the specific requirements of each role, the context in which the prompt will be used, and the desired output format. You are skilled in structuring prompts that ensure clarity, relevance, and utility. Create a custom system prompt for an LLM to assist users in generating contextually appropriate and highly effective responses for various roles. The prompt should provide clear instructions to the LLM on how to handle specific scenarios related to the role, including the tone and format of the response. Start by providing a role "You are..." and context as a summary of the situation or background information relevant to the prompt. Define the main objective, outlining what the LLM needs to accomplish. Include instructions on the appropriate style and tone (e.g., formal, casual, technical, empathetic) based on the role and audience. Identify the target audience to tailor the LLM's output effectively. Specify the format of the response, whether it should be a narrative, bullet points, step-by-step guide, code, or another format. Avoid using headings or examples; the prompt should read as a continuous, cohesive set of instructions. ANSWER PROMPT AND NOTHING ELSE!` } ], _version: 5 }; var CREATIVITY = { "": { temperature: 0 }, low: { temperature: 0.2 }, medium: { temperature: 0.5 }, high: { temperature: 1 } }; var SELECTION_KEYWORD = "{{=SELECTION=}}"; var CONTEXT_KEYWORD = "{{=CONTEXT=}}"; var CONTEXT_CONDITION_START = "{{=CONTEXT_START=}}"; var CONTEXT_CONDITION_END = "{{=CONTEXT_END=}}"; // src/providers/ollama.ts var import_obsidian2 = require("obsidian"); // src/request-handler.ts var import_electron = require("electron"); // src/logger.ts var Logger = class { constructor() { this.logLevel = 0 /* DEBUG */; this.timers = /* @__PURE__ */ new Map(); this.colorIndex = 0; this.colors = [ "#FFB3BA", "#BAFFC9", "#BAE1FF", "#FFFFBA", "#FFDFBA", "#E0BBE4" ]; this.isDevMode = false; } static getInstance() { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } setLogLevel(level) { this.logLevel = level; } logWithEmoji(level, message, ...args) { if (this.isDevMode && level >= this.logLevel) { const emoji = this.getEmojiForLevel(level); if (args.length === 0) { console.log(`${emoji} %c${message}`, "font-weight: bold;"); } else { console.group(`${emoji} %c${message}`, "font-weight: bold;"); this.logArgs(args); console.groupEnd(); } } } logArgs(args) { args.forEach((arg) => { console.log(arg); }); } getEmojiForLevel(level) { switch (level) { case 0 /* DEBUG */: return "\u{1F41B}"; case 1 /* INFO */: return "\u2139\uFE0F"; case 2 /* WARN */: return "\u26A0\uFE0F"; case 3 /* ERROR */: return "\u{1F6AB}"; case 4 /* SUCCESS */: return "\u2705"; default: return ""; } } debug(message, ...args) { this.logWithEmoji(0 /* DEBUG */, message, ...args); } info(message, ...args) { this.logWithEmoji(1 /* INFO */, message, ...args); } warn(message, ...args) { this.logWithEmoji(2 /* WARN */, message, ...args); } error(message, ...args) { this.logWithEmoji(3 /* ERROR */, message, ...args); } success(message, ...args) { this.logWithEmoji(4 /* SUCCESS */, message, ...args); } table(message, ...args) { if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { console.group(`\u{1F4CA} %c${message}`, "font-weight: bold;"); this.logNestedGroups(args); console.groupEnd(); } } logNestedGroups(args) { args.forEach((arg) => { if (typeof arg === "object" && arg !== null) { this.logObjectAsGroups(arg); } else { console.log(arg); } }); } logObjectAsGroups(obj) { Object.entries(obj).forEach(([key, value]) => { if (typeof value === "object" && value !== null) { console.group(`${key}:`); this.logObjectAsGroups(value); console.groupEnd(); } else { console.log(`${key}: ${value}`); } }); } time(label) { if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { const color2 = this.getNextColor(); this.timers.set(label, { startTime: performance.now(), color: color2 }); console.log( `\u23F1\uFE0F %c${label}: timer started`, `color: black; font-weight: bold; background-color: ${color2}; padding: 2px 5px; border-radius: 3px;` ); } } timeEnd(label) { if (this.isDevMode && this.logLevel <= 0 /* DEBUG */) { const timerData = this.timers.get(label); if (timerData) { const duration = performance.now() - timerData.startTime; console.log( `\u23F1\uFE0F %c${label}: ${duration.toFixed(2)}ms`, `color: black; font-weight: bold; background-color: ${timerData.color}; padding: 2px 5px; border-radius: 3px;` ); this.timers.delete(label); } else { console.warn(`Timer '${label}' does not exist`); } } } getNextColor() { const color2 = this.colors[this.colorIndex]; this.colorIndex = (this.colorIndex + 1) % this.colors.length; return color2; } // Добавляем новый метод для создания разделителя separator(message = "") { if (this.isDevMode) { const lineLength = 20; const line = "\u2501".repeat(lineLength); const paddedMessage = message ? ` ${message} ` : ""; const leftPadding = Math.floor( (lineLength - paddedMessage.length) / 2 ); const rightPadding = lineLength - paddedMessage.length - leftPadding; const separatorLine = message ? line.slice(0, leftPadding) + paddedMessage + line.slice(lineLength - rightPadding) : line; console.log( "\n%c" + separatorLine, "color: #FF4500; font-weight: bold; font-size: 1.2em;" ); } } }; var logger = Logger.getInstance(); // src/request-handler.ts var import_obsidian = require("obsidian"); var RequestHandler = class { constructor() { this.useRemoteRequest = !import_obsidian.Platform.isMobileApp; } static getInstance() { if (!RequestHandler.instance) { RequestHandler.instance = new RequestHandler(); } return RequestHandler.instance; } async makeRequest(options, handlers) { try { if (this.useRemoteRequest) { return await this.makeRemoteRequest(options, handlers); } else { return await this.makeFetchRequest(options, handlers); } } catch (error) { handlers.onError(error); } } async makeRemoteRequest(options, handlers) { return new Promise((resolve, reject) => { const request = import_electron.remote.net.request({ method: options.method, url: options.url }); logger.debug("Request url:", options.url); if (options.abortController.signal.aborted) { handlers.onError(new Error("Request aborted")); reject(); return; } options.abortController.signal.addEventListener("abort", () => { logger.warn("Request aborted"); request.abort(); handlers.onError(new Error("Request aborted")); reject(); }); if (options.headers) { Object.entries(options.headers).forEach(([key, value]) => { request.setHeader(key, value); }); } request.on("response", (response) => { logger.table("Response headers:", { statusCode: response.statusCode, ...response.headers }); response.on("data", (chunk) => { if (options.abortController.signal.aborted) { handlers.onError(new Error("Request aborted")); reject(); return; } handlers.onData(chunk.toString("utf8")); }); response.on("end", () => { logger.debug("Response end"); handlers.onEnd(); resolve(); }); }); request.on("error", (error) => { handlers.onError(error); reject(error); }); if (options.body) { request.write(options.body); } request.end(); }); } async makeFetchRequest(options, handlers) { var _a2; try { const response = await fetch(options.url, { method: options.method, headers: options.headers, body: options.body, signal: options.abortController.signal }); const reader = (_a2 = response.body) == null ? void 0 : _a2.getReader(); if (!reader) { throw new Error("Unable to read response body"); } while (true) { const { done, value } = await reader.read(); if (done) break; handlers.onData(new TextDecoder().decode(value)); } handlers.onEnd(); } catch (error) { handlers.onError(error); } } }; // src/utils.ts function preparePrompt(prompt = "", selectedText, context) { if (prompt.includes(SELECTION_KEYWORD)) { prompt = prompt.replace(SELECTION_KEYWORD, selectedText || ""); } else { prompt = [prompt, selectedText].filter(Boolean).join("\n\n"); } if (prompt.includes(CONTEXT_KEYWORD)) { prompt = prompt.replace(CONTEXT_KEYWORD, context || ""); } else { if (context.trim()) { prompt = [prompt, "Context:\n" + context].filter(Boolean).join("\n\n"); } } if (prompt.includes(CONTEXT_CONDITION_START) && prompt.includes(CONTEXT_CONDITION_END)) { const start = prompt.indexOf(CONTEXT_CONDITION_START) - 1; const end = prompt.indexOf(CONTEXT_CONDITION_END); if (start !== -1 && end !== -1 && start < end) { let contextBlock = prompt.substring( start + CONTEXT_CONDITION_START.length + 1, end ); if (!context.trim()) { contextBlock = ""; } prompt = prompt.substring(0, start) + contextBlock + prompt.substring(end + CONTEXT_CONDITION_END.length + 1); } } return prompt; } // src/providers/ollama.ts var SYMBOLS_PER_TOKEN = 2.5; var EMBEDDING_CONTEXT_LENGTH_LIMIT = 2048; var MODEL_INFO_CACHE = /* @__PURE__ */ new Map(); var OllamaAIProvider = class { constructor(config) { this.defaultModel = config.defaultModel; this.ollamaUrl = config.ollamaUrl; this.embeddingModel = config.embeddingModel; this.onUpdate = config.onUpdate; this.abortController = config.abortController; } async process({ text = "", action, options, images = [], context = "" }) { const prompt = preparePrompt(action.prompt, text, context); logger.debug("Querying prompt", prompt); const requestBody = { prompt, model: action.model || this.defaultModel, options: { temperature: options.temperature }, stream: true }; if (action.system) requestBody.system = action.system; if (images.length) requestBody.images = images; const { contextLength, lastContextLength } = await this.getCachedModelInfo(requestBody.model); const bodyLengthInTokens = Math.ceil( JSON.stringify(requestBody).length / SYMBOLS_PER_TOKEN ); logger.table("Context length", { model: requestBody.model, contextLength, lastContextLength, bodyLengthInTokens }); if (contextLength > 0 && requestBody.options) { if (bodyLengthInTokens > lastContextLength) { requestBody.options.num_ctx = Math.min( contextLength, Math.round(bodyLengthInTokens * 1.2) ); } else if (bodyLengthInTokens < lastContextLength * 0.5) { requestBody.options.num_ctx = Math.min( contextLength, Math.round(bodyLengthInTokens * 1.2) ); } else { requestBody.options.num_ctx = Math.min( contextLength, lastContextLength ); } this.setModelInfoLastContextLength( requestBody.model, requestBody.options.num_ctx ); } const url = `${this.ollamaUrl.replace(/\/+$/i, "")}/api/generate`; return new Promise((resolve, reject) => { if (this.abortController.signal.aborted) { return reject(); } let combined = ""; const requestHandler = RequestHandler.getInstance(); requestHandler.makeRequest( { method: "POST", url, headers: { "Content-Type": "application/json" }, body: JSON.stringify(requestBody), abortController: this.abortController }, { onData: (chunk) => { if (this.abortController.signal.aborted) { return reject(); } const lines = chunk.split("\n").filter((line) => line.trim() !== ""); for (const line of lines) { try { const parsed = JSON.parse(line); combined += parsed.response || ""; this.onUpdate(combined); } catch (error) { console.error( "Could not JSON parse stream message", line, error ); } } }, onError: (error) => { if (this.abortController.signal.aborted) { return reject(); } (0, import_obsidian2.requestUrl)({ url, method: "POST", body: JSON.stringify({ ...requestBody, stream: false }) }).then(({ json }) => resolve(json.response)).catch(reject); }, onEnd: () => { this.abortController.signal.aborted ? reject() : resolve(combined); } } ); this.abortController.signal.addEventListener("abort", () => { reject(); }); }); } setModelInfoLastContextLength(model, num_ctx) { const modelInfo = MODEL_INFO_CACHE.get(model); if (modelInfo) { modelInfo.lastContextLength = num_ctx; MODEL_INFO_CACHE.set(model, modelInfo); } return modelInfo; } async getEmbeddings(texts, updateProgress) { logger.info("Getting embeddings for texts"); const groupedTexts = []; let currentGroup = []; let currentLength = 0; const { contextLength, lastContextLength } = await this.getCachedModelInfo(this.embeddingModel); let embeddingContextLength = Math.min( contextLength, EMBEDDING_CONTEXT_LENGTH_LIMIT ); const maxTextLength = Math.max(...texts.map((text) => text.length)); const maxTextLengthInTokens = Math.ceil( maxTextLength / SYMBOLS_PER_TOKEN ); if (maxTextLengthInTokens < lastContextLength) { embeddingContextLength = lastContextLength; } else if (maxTextLengthInTokens > embeddingContextLength) { embeddingContextLength = Math.min( contextLength, maxTextLengthInTokens * 1.2 ); this.setModelInfoLastContextLength( this.embeddingModel, embeddingContextLength ); } logger.time("Tokenizing texts"); for (const text of texts) { const textLengthInTokens = Math.ceil( text.length / SYMBOLS_PER_TOKEN ); logger.table("Text length in tokens", { text, textLength: text.length, textLengthInTokens }); if (currentLength + textLengthInTokens > embeddingContextLength) { groupedTexts.push(currentGroup); currentGroup = []; currentLength = 0; } currentGroup.push(text); currentLength += textLengthInTokens; } if (currentGroup.length > 0) { groupedTexts.push(currentGroup); } logger.timeEnd("Tokenizing texts"); const allEmbeddings = []; for (const group of groupedTexts) { if (this.abortController.signal.aborted) { return allEmbeddings; } const body = { input: group, model: this.embeddingModel, options: {} }; if (embeddingContextLength > EMBEDDING_CONTEXT_LENGTH_LIMIT) { body.options.num_ctx = embeddingContextLength; } logger.table("Ollama embeddings request", group); const { json } = await (0, import_obsidian2.requestUrl)({ url: `${this.ollamaUrl.replace(/\/+$/i, "")}/api/embed`, method: "POST", body: JSON.stringify(body) }); logger.debug("Ollama embeddings for group", { embeddings: json.embeddings }); allEmbeddings.push(...json.embeddings); updateProgress(json.embeddings.length); } return allEmbeddings; } async getCachedModelInfo(modelName) { if (MODEL_INFO_CACHE.has(modelName)) { return MODEL_INFO_CACHE.get(modelName); } const { json } = await (0, import_obsidian2.requestUrl)({ url: `${this.ollamaUrl.replace(/\/+$/i, "")}/api/show`, method: "POST", body: JSON.stringify({ model: modelName }) }); const modelInfo = { contextLength: 0, lastContextLength: 2048 }; const contextLengthKey = Object.keys(json.model_info).find( (key) => key.endsWith(".context_length") ); if (!contextLengthKey) { return modelInfo; } modelInfo.contextLength = json.model_info[contextLengthKey]; MODEL_INFO_CACHE.set(modelName, modelInfo); return modelInfo; } static async getModels(providerConfig) { logger.debug("Fetching Ollama models"); const { json } = await (0, import_obsidian2.requestUrl)({ url: `${providerConfig.ollamaUrl.replace(/\/+$/i, "")}/api/tags` }); if (!json.models || json.models.length === 0) { logger.warn("No Ollama models found"); return Promise.reject("No models found"); } return json.models.reduce( (acc, el) => { const name = el.name.replace(":latest", ""); acc[name] = name; return acc; }, {} ); } }; // src/providers/openai-compatible.ts var import_obsidian3 = require("obsidian"); var OpenAICompatibleAIProvider = class { constructor(config) { this.url = config.url; this.apiKey = config.apiKey || ""; this.defaultModel = config.defaultModel || ""; this.abortController = config.abortController; this.onUpdate = config.onUpdate; this.embeddingModel = config.embeddingModel || ""; } async process({ text = "", action, options, images = [], context = "" }) { logger.table("Processing request with OpenAI Compatible provider", { model: action.model || this.defaultModel }); const prompt = preparePrompt(action.prompt, text, context); logger.debug("Querying prompt", prompt); const messages = [ action.system && { role: "system", content: action.system }, !images.length && { role: "user", content: prompt }, images.length && { role: "user", content: [ { type: "text", text: prompt }, ...images.map((image) => ({ type: "image_url", image_url: { url: `data:image/jpeg;base64,${image}` } })) ] } ].filter(Boolean); const requestBody = { stream: true, model: action.model || this.defaultModel, temperature: options.temperature, messages }; const url = `${this.url.replace(/\/+$/i, "")}/v1/chat/completions`; return new Promise((resolve, reject) => { if (this.abortController.signal.aborted) { return reject(); } let combined = ""; const requestHandler = RequestHandler.getInstance(); const headers = { "Content-Type": "application/json" }; if (this.apiKey) { headers["Authorization"] = `Bearer ${this.apiKey}`; } requestHandler.makeRequest( { method: "POST", url, headers, body: JSON.stringify(requestBody), abortController: this.abortController }, { onData: (chunk) => { var _a2, _b; if (this.abortController.signal.aborted) { return reject(); } const lines = chunk.split("\n").filter((line) => line.trim() !== ""); for (const line of lines) { const message = line.replace(/^data: /, ""); if (message === "[DONE]") { break; } try { const parsed = JSON.parse(message); combined += ((_b = (_a2 = parsed.choices[0]) == null ? void 0 : _a2.delta) == null ? void 0 : _b.content) || ""; this.onUpdate(combined); } catch (error) { console.error( "Could not JSON parse stream message", message, error ); } } }, onError: (error) => { if (this.abortController.signal.aborted) { return reject(); } (0, import_obsidian3.requestUrl)({ url, method: "POST", body: JSON.stringify({ ...requestBody, stream: false }) }).then( ({ json }) => resolve(json.choices[0].message.content) ).catch(reject); }, onEnd: () => { this.abortController.signal.aborted ? reject() : resolve(combined); } } ); this.abortController.signal.addEventListener("abort", () => { reject(); }); }); } async getEmbeddings(texts, updateProgress) { logger.info("Getting embeddings for texts"); const results = []; for (const text of texts) { if (this.abortController.signal.aborted) { return results; } try { logger.table("OpenAI-like embeddings request", text); const { json } = await (0, import_obsidian3.requestUrl)({ url: `${this.url.replace(/\/+$/i, "")}/v1/embeddings`, method: "POST", body: JSON.stringify({ input: [text], model: this.embeddingModel }) }); logger.debug("OpenAI compatible embeddings", { embedding: json.data[0].embedding }); results.push(json.data[0].embedding); updateProgress(1); } catch (error) { console.error("Error getting embedding:", { error }); throw error; } } logger.debug("OpenAI compatible embeddings results", results); return results; } static async getModels(providerConfig) { logger.debug("Fetching OpenAI Compatible models"); const { json } = await (0, import_obsidian3.requestUrl)({ url: `${providerConfig.url.replace(/\/+$/i, "")}/v1/models`, headers: { "Content-Type": "application/json", Authorization: `Bearer ${providerConfig.apiKey}` } }); if (!json.data || json.data.length === 0) { logger.warn("No OpenAI Compatible models found"); return Promise.reject("No models found"); } return json.data.reduce( (acc, el) => { const name = el.id; acc[name] = name; return acc; }, {} ); } }; // src/rag.ts var import_obsidian4 = require("obsidian"); // node_modules/langchain/node_modules/@langchain/core/dist/documents/document.js var Document = class { constructor(fields) { var _a2; Object.defineProperty(this, "pageContent", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "metadata", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.pageContent = fields.pageContent ? fields.pageContent.toString() : this.pageContent; this.metadata = (_a2 = fields.metadata) != null ? _a2 : {}; } }; // node_modules/langchain/node_modules/@langchain/core/dist/runnables/base.js var import_p_retry3 = __toESM(require_p_retry(), 1); // node_modules/uuid/dist/esm-browser/rng.js var getRandomValues; var rnds8 = new Uint8Array(16); function rng() { if (!getRandomValues) { getRandomValues = typeof crypto !== "undefined" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); if (!getRandomValues) { throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported"); } } return getRandomValues(rnds8); } // node_modules/uuid/dist/esm-browser/regex.js var regex_default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; // node_modules/uuid/dist/esm-browser/validate.js function validate(uuid) { return typeof uuid === "string" && regex_default.test(uuid); } var validate_default = validate; // node_modules/uuid/dist/esm-browser/stringify.js var byteToHex = []; for (let i = 0; i < 256; ++i) { byteToHex.push((i + 256).toString(16).slice(1)); } function unsafeStringify(arr, offset = 0) { return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; } // node_modules/uuid/dist/esm-browser/native.js var randomUUID = typeof crypto !== "undefined" && crypto.randomUUID && crypto.randomUUID.bind(crypto); var native_default = { randomUUID }; // node_modules/uuid/dist/esm-browser/v4.js function v4(options, buf, offset) { if (native_default.randomUUID && !buf && !options) { return native_default.randomUUID(); } options = options || {}; const rnds = options.random || (options.rng || rng)(); rnds[6] = rnds[6] & 15 | 64; rnds[8] = rnds[8] & 63 | 128; if (buf) { offset = offset || 0; for (let i = 0; i < 16; ++i) { buf[offset + i] = rnds[i]; } return buf; } return unsafeStringify(rnds); } var v4_default = v4; // node_modules/langchain/node_modules/@langchain/core/dist/load/map_keys.js var import_decamelize = __toESM(require_decamelize(), 1); var import_camelcase = __toESM(require_camelcase(), 1); function keyToJson(key, map) { return (map == null ? void 0 : map[key]) || (0, import_decamelize.default)(key); } function mapKeys(fields, mapper, map) { const mapped = {}; for (const key in fields) { if (Object.hasOwn(fields, key)) { mapped[mapper(key, map)] = fields[key]; } } return mapped; } // node_modules/langchain/node_modules/@langchain/core/dist/load/serializable.js function shallowCopy(obj) { return Array.isArray(obj) ? [...obj] : { ...obj }; } function replaceSecrets(root, secretsMap) { const result = shallowCopy(root); for (const [path, secretId] of Object.entries(secretsMap)) { const [last, ...partsReverse] = path.split(".").reverse(); let current = result; for (const part of partsReverse.reverse()) { if (current[part] === void 0) { break; } current[part] = shallowCopy(current[part]); current = current[part]; } if (current[last] !== void 0) { current[last] = { lc: 1, type: "secret", id: [secretId] }; } } return result; } function get_lc_unique_name(serializableClass) { const parentClass = Object.getPrototypeOf(serializableClass); const lcNameIsSubclassed = typeof serializableClass.lc_name === "function" && (typeof parentClass.lc_name !== "function" || serializableClass.lc_name() !== parentClass.lc_name()); if (lcNameIsSubclassed) { return serializableClass.lc_name(); } else { return serializableClass.name; } } var Serializable = class { /** * The name of the serializable. Override to provide an alias or * to preserve the serialized module name in minified environments. * * Implemented as a static method to support loading logic. */ static lc_name() { return this.name; } /** * The final serialized identifier for the module. */ get lc_id() { return [ ...this.lc_namespace, get_lc_unique_name(this.constructor) ]; } /** * A map of secrets, which will be omitted from serialization. * Keys are paths to the secret in constructor args, e.g. "foo.bar.baz". * Values are the secret ids, which will be used when deserializing. */ get lc_secrets() { return void 0; } /** * A map of additional attributes to merge with constructor args. * Keys are the attribute names, e.g. "foo". * Values are the attribute values, which will be serialized. * These attributes need to be accepted by the constructor as arguments. */ get lc_attributes() { return void 0; } /** * A map of aliases for constructor args. * Keys are the attribute names, e.g. "foo". * Values are the alias that will replace the key in serialization. * This is used to eg. make argument names match Python. */ get lc_aliases() { return void 0; } constructor(kwargs, ..._args) { Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "lc_kwargs", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.lc_kwargs = kwargs || {}; } toJSON() { if (!this.lc_serializable) { return this.toJSONNotImplemented(); } if ( // eslint-disable-next-line no-instanceof/no-instanceof this.lc_kwargs instanceof Serializable || typeof this.lc_kwargs !== "object" || Array.isArray(this.lc_kwargs) ) { return this.toJSONNotImplemented(); } const aliases = {}; const secrets = {}; const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => { acc[key] = key in this ? this[key] : this.lc_kwargs[key]; return acc; }, {}); for (let current = Object.getPrototypeOf(this); current; current = Object.getPrototypeOf(current)) { Object.assign(aliases, Reflect.get(current, "lc_aliases", this)); Object.assign(secrets, Reflect.get(current, "lc_secrets", this)); Object.assign(kwargs, Reflect.get(current, "lc_attributes", this)); } Object.keys(secrets).forEach((keyPath) => { let read = this; let write = kwargs; const [last, ...partsReverse] = keyPath.split(".").reverse(); for (const key of partsReverse.reverse()) { if (!(key in read) || read[key] === void 0) return; if (!(key in write) || write[key] === void 0) { if (typeof read[key] === "object" && read[key] != null) { write[key] = {}; } else if (Array.isArray(read[key])) { write[key] = []; } } read = read[key]; write = write[key]; } if (last in read && read[last] !== void 0) { write[last] = write[last] || read[last]; } }); return { lc: 1, type: "constructor", id: this.lc_id, kwargs: mapKeys(Object.keys(secrets).length ? replaceSecrets(kwargs, secrets) : kwargs, keyToJson, aliases) }; } toJSONNotImplemented() { return { lc: 1, type: "not_implemented", id: this.lc_id }; } }; // node_modules/langchain/node_modules/@langchain/core/dist/callbacks/base.js var BaseCallbackHandlerMethodsClass = class { }; var BaseCallbackHandler = class extends BaseCallbackHandlerMethodsClass { get lc_namespace() { return ["langchain_core", "callbacks", this.name]; } get lc_secrets() { return void 0; } get lc_attributes() { return void 0; } get lc_aliases() { return void 0; } /** * The name of the serializable. Override to provide an alias or * to preserve the serialized module name in minified environments. * * Implemented as a static method to support loading logic. */ static lc_name() { return this.name; } /** * The final serialized identifier for the module. */ get lc_id() { return [ ...this.lc_namespace, get_lc_unique_name(this.constructor) ]; } constructor(input) { var _a2, _b, _c, _d, _e; super(); Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "lc_kwargs", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "ignoreLLM", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "ignoreChain", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "ignoreAgent", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "ignoreRetriever", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "awaitHandlers", { enumerable: true, configurable: true, writable: true, value: typeof process !== "undefined" ? ( // eslint-disable-next-line no-process-env ((_a2 = process.env) == null ? void 0 : _a2.LANGCHAIN_CALLBACKS_BACKGROUND) !== "true" ) : true }); this.lc_kwargs = input || {}; if (input) { this.ignoreLLM = (_b = input.ignoreLLM) != null ? _b : this.ignoreLLM; this.ignoreChain = (_c = input.ignoreChain) != null ? _c : this.ignoreChain; this.ignoreAgent = (_d = input.ignoreAgent) != null ? _d : this.ignoreAgent; this.ignoreRetriever = (_e = input.ignoreRetriever) != null ? _e : this.ignoreRetriever; } } copy() { return new this.constructor(this); } toJSON() { return Serializable.prototype.toJSON.call(this); } toJSONNotImplemented() { return Serializable.prototype.toJSONNotImplemented.call(this); } static fromMethods(methods) { class Handler extends BaseCallbackHandler { constructor() { super(); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: v4_default() }); Object.assign(this, methods); } } return new Handler(); } }; // node_modules/langchain/node_modules/@langchain/core/dist/tracers/console.js var import_ansi_styles = __toESM(require_ansi_styles(), 1); // node_modules/langchain/node_modules/@langchain/core/dist/tracers/base.js function _coerceToDict(value, defaultKey) { return value && !Array.isArray(value) && typeof value === "object" ? value : { [defaultKey]: value }; } var BaseTracer = class extends BaseCallbackHandler { constructor(_fields) { super(...arguments); Object.defineProperty(this, "runMap", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Map() }); } copy() { return this; } _addChildRun(parentRun, childRun) { parentRun.child_runs.push(childRun); } async _startTrace(run) { var _a2; if (run.parent_run_id !== void 0) { const parentRun = this.runMap.get(run.parent_run_id); if (parentRun) { this._addChildRun(parentRun, run); parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order); } } this.runMap.set(run.id, run); await ((_a2 = this.onRunCreate) == null ? void 0 : _a2.call(this, run)); } async _endTrace(run) { var _a2; const parentRun = run.parent_run_id !== void 0 && this.runMap.get(run.parent_run_id); if (parentRun) { parentRun.child_execution_order = Math.max(parentRun.child_execution_order, run.child_execution_order); } else { await this.persistRun(run); } this.runMap.delete(run.id); await ((_a2 = this.onRunUpdate) == null ? void 0 : _a2.call(this, run)); } _getExecutionOrder(parentRunId) { const parentRun = parentRunId !== void 0 && this.runMap.get(parentRunId); if (!parentRun) { return 1; } return parentRun.child_execution_order + 1; } async handleLLMStart(llm, prompts, runId, parentRunId, extraParams, tags, metadata, name) { var _a2; const execution_order = this._getExecutionOrder(parentRunId); const start_time = Date.now(); const finalExtraParams = metadata ? { ...extraParams, metadata } : extraParams; const run = { id: runId, name: name != null ? name : llm.id[llm.id.length - 1], parent_run_id: parentRunId, start_time, serialized: llm, events: [ { name: "start", time: new Date(start_time).toISOString() } ], inputs: { prompts }, execution_order, child_runs: [], child_execution_order: execution_order, run_type: "llm", extra: finalExtraParams != null ? finalExtraParams : {}, tags: tags || [] }; await this._startTrace(run); await ((_a2 = this.onLLMStart) == null ? void 0 : _a2.call(this, run)); return run; } async handleChatModelStart(llm, messages, runId, parentRunId, extraParams, tags, metadata, name) { var _a2; const execution_order = this._getExecutionOrder(parentRunId); const start_time = Date.now(); const finalExtraParams = metadata ? { ...extraParams, metadata } : extraParams; const run = { id: runId, name: name != null ? name : llm.id[llm.id.length - 1], parent_run_id: parentRunId, start_time, serialized: llm, events: [ { name: "start", time: new Date(start_time).toISOString() } ], inputs: { messages }, execution_order, child_runs: [], child_execution_order: execution_order, run_type: "llm", extra: finalExtraParams != null ? finalExtraParams : {}, tags: tags || [] }; await this._startTrace(run); await ((_a2 = this.onLLMStart) == null ? void 0 : _a2.call(this, run)); return run; } async handleLLMEnd(output, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "llm") { throw new Error("No LLM run to end."); } run.end_time = Date.now(); run.outputs = output; run.events.push({ name: "end", time: new Date(run.end_time).toISOString() }); await ((_a2 = this.onLLMEnd) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleLLMError(error, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "llm") { throw new Error("No LLM run to end."); } run.end_time = Date.now(); run.error = error.message; run.events.push({ name: "error", time: new Date(run.end_time).toISOString() }); await ((_a2 = this.onLLMError) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleChainStart(chain, inputs, runId, parentRunId, tags, metadata, runType, name) { var _a2; const execution_order = this._getExecutionOrder(parentRunId); const start_time = Date.now(); const run = { id: runId, name: name != null ? name : chain.id[chain.id.length - 1], parent_run_id: parentRunId, start_time, serialized: chain, events: [ { name: "start", time: new Date(start_time).toISOString() } ], inputs, execution_order, child_execution_order: execution_order, run_type: runType != null ? runType : "chain", child_runs: [], extra: metadata ? { metadata } : {}, tags: tags || [] }; await this._startTrace(run); await ((_a2 = this.onChainStart) == null ? void 0 : _a2.call(this, run)); return run; } async handleChainEnd(outputs, runId, _parentRunId, _tags, kwargs) { var _a2; const run = this.runMap.get(runId); if (!run) { throw new Error("No chain run to end."); } run.end_time = Date.now(); run.outputs = _coerceToDict(outputs, "output"); run.events.push({ name: "end", time: new Date(run.end_time).toISOString() }); if ((kwargs == null ? void 0 : kwargs.inputs) !== void 0) { run.inputs = _coerceToDict(kwargs.inputs, "input"); } await ((_a2 = this.onChainEnd) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleChainError(error, runId, _parentRunId, _tags, kwargs) { var _a2; const run = this.runMap.get(runId); if (!run) { throw new Error("No chain run to end."); } run.end_time = Date.now(); run.error = error.message; run.events.push({ name: "error", time: new Date(run.end_time).toISOString() }); if ((kwargs == null ? void 0 : kwargs.inputs) !== void 0) { run.inputs = _coerceToDict(kwargs.inputs, "input"); } await ((_a2 = this.onChainError) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleToolStart(tool, input, runId, parentRunId, tags, metadata, name) { var _a2; const execution_order = this._getExecutionOrder(parentRunId); const start_time = Date.now(); const run = { id: runId, name: name != null ? name : tool.id[tool.id.length - 1], parent_run_id: parentRunId, start_time, serialized: tool, events: [ { name: "start", time: new Date(start_time).toISOString() } ], inputs: { input }, execution_order, child_execution_order: execution_order, run_type: "tool", child_runs: [], extra: metadata ? { metadata } : {}, tags: tags || [] }; await this._startTrace(run); await ((_a2 = this.onToolStart) == null ? void 0 : _a2.call(this, run)); return run; } async handleToolEnd(output, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "tool") { throw new Error("No tool run to end"); } run.end_time = Date.now(); run.outputs = { output }; run.events.push({ name: "end", time: new Date(run.end_time).toISOString() }); await ((_a2 = this.onToolEnd) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleToolError(error, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "tool") { throw new Error("No tool run to end"); } run.end_time = Date.now(); run.error = error.message; run.events.push({ name: "error", time: new Date(run.end_time).toISOString() }); await ((_a2 = this.onToolError) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleAgentAction(action, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "chain") { return; } const agentRun = run; agentRun.actions = agentRun.actions || []; agentRun.actions.push(action); agentRun.events.push({ name: "agent_action", time: new Date().toISOString(), kwargs: { action } }); await ((_a2 = this.onAgentAction) == null ? void 0 : _a2.call(this, run)); } async handleAgentEnd(action, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "chain") { return; } run.events.push({ name: "agent_end", time: new Date().toISOString(), kwargs: { action } }); await ((_a2 = this.onAgentEnd) == null ? void 0 : _a2.call(this, run)); } async handleRetrieverStart(retriever, query, runId, parentRunId, tags, metadata, name) { var _a2; const execution_order = this._getExecutionOrder(parentRunId); const start_time = Date.now(); const run = { id: runId, name: name != null ? name : retriever.id[retriever.id.length - 1], parent_run_id: parentRunId, start_time, serialized: retriever, events: [ { name: "start", time: new Date(start_time).toISOString() } ], inputs: { query }, execution_order, child_execution_order: execution_order, run_type: "retriever", child_runs: [], extra: metadata ? { metadata } : {}, tags: tags || [] }; await this._startTrace(run); await ((_a2 = this.onRetrieverStart) == null ? void 0 : _a2.call(this, run)); return run; } async handleRetrieverEnd(documents, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "retriever") { throw new Error("No retriever run to end"); } run.end_time = Date.now(); run.outputs = { documents }; run.events.push({ name: "end", time: new Date(run.end_time).toISOString() }); await ((_a2 = this.onRetrieverEnd) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleRetrieverError(error, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "retriever") { throw new Error("No retriever run to end"); } run.end_time = Date.now(); run.error = error.message; run.events.push({ name: "error", time: new Date(run.end_time).toISOString() }); await ((_a2 = this.onRetrieverError) == null ? void 0 : _a2.call(this, run)); await this._endTrace(run); return run; } async handleText(text, runId) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "chain") { return; } run.events.push({ name: "text", time: new Date().toISOString(), kwargs: { text } }); await ((_a2 = this.onText) == null ? void 0 : _a2.call(this, run)); } async handleLLMNewToken(token, idx, runId, _parentRunId, _tags, fields) { var _a2; const run = this.runMap.get(runId); if (!run || (run == null ? void 0 : run.run_type) !== "llm") { throw new Error(`Invalid "runId" provided to "handleLLMNewToken" callback.`); } run.events.push({ name: "new_token", time: new Date().toISOString(), kwargs: { token, idx, chunk: fields == null ? void 0 : fields.chunk } }); await ((_a2 = this.onLLMNewToken) == null ? void 0 : _a2.call(this, run, token)); return run; } }; // node_modules/langchain/node_modules/@langchain/core/dist/tracers/console.js function wrap(style, text) { return `${style.open}${text}${style.close}`; } function tryJsonStringify(obj, fallback) { try { return JSON.stringify(obj, null, 2); } catch (err) { return fallback; } } function elapsed(run) { if (!run.end_time) return ""; const elapsed2 = run.end_time - run.start_time; if (elapsed2 < 1e3) { return `${elapsed2}ms`; } return `${(elapsed2 / 1e3).toFixed(2)}s`; } var { color } = import_ansi_styles.default; var ConsoleCallbackHandler = class extends BaseTracer { constructor() { super(...arguments); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: "console_callback_handler" }); } /** * Method used to persist the run. In this case, it simply returns a * resolved promise as there's no persistence logic. * @param _run The run to persist. * @returns A resolved promise. */ persistRun(_run) { return Promise.resolve(); } // utility methods /** * Method used to get all the parent runs of a given run. * @param run The run whose parents are to be retrieved. * @returns An array of parent runs. */ getParents(run) { const parents = []; let currentRun = run; while (currentRun.parent_run_id) { const parent = this.runMap.get(currentRun.parent_run_id); if (parent) { parents.push(parent); currentRun = parent; } else { break; } } return parents; } /** * Method used to get a string representation of the run's lineage, which * is used in logging. * @param run The run whose lineage is to be retrieved. * @returns A string representation of the run's lineage. */ getBreadcrumbs(run) { const parents = this.getParents(run).reverse(); const string = [...parents, run].map((parent, i, arr) => { const name = `${parent.execution_order}:${parent.run_type}:${parent.name}`; return i === arr.length - 1 ? wrap(import_ansi_styles.default.bold, name) : name; }).join(" > "); return wrap(color.grey, string); } // logging methods /** * Method used to log the start of a chain run. * @param run The chain run that has started. * @returns void */ onChainStart(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.green, "[chain/start]")} [${crumbs}] Entering Chain run with input: ${tryJsonStringify(run.inputs, "[inputs]")}`); } /** * Method used to log the end of a chain run. * @param run The chain run that has ended. * @returns void */ onChainEnd(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.cyan, "[chain/end]")} [${crumbs}] [${elapsed(run)}] Exiting Chain run with output: ${tryJsonStringify(run.outputs, "[outputs]")}`); } /** * Method used to log any errors of a chain run. * @param run The chain run that has errored. * @returns void */ onChainError(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.red, "[chain/error]")} [${crumbs}] [${elapsed(run)}] Chain run errored with error: ${tryJsonStringify(run.error, "[error]")}`); } /** * Method used to log the start of an LLM run. * @param run The LLM run that has started. * @returns void */ onLLMStart(run) { const crumbs = this.getBreadcrumbs(run); const inputs = "prompts" in run.inputs ? { prompts: run.inputs.prompts.map((p) => p.trim()) } : run.inputs; console.log(`${wrap(color.green, "[llm/start]")} [${crumbs}] Entering LLM run with input: ${tryJsonStringify(inputs, "[inputs]")}`); } /** * Method used to log the end of an LLM run. * @param run The LLM run that has ended. * @returns void */ onLLMEnd(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.cyan, "[llm/end]")} [${crumbs}] [${elapsed(run)}] Exiting LLM run with output: ${tryJsonStringify(run.outputs, "[response]")}`); } /** * Method used to log any errors of an LLM run. * @param run The LLM run that has errored. * @returns void */ onLLMError(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.red, "[llm/error]")} [${crumbs}] [${elapsed(run)}] LLM run errored with error: ${tryJsonStringify(run.error, "[error]")}`); } /** * Method used to log the start of a tool run. * @param run The tool run that has started. * @returns void */ onToolStart(run) { var _a2; const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.green, "[tool/start]")} [${crumbs}] Entering Tool run with input: "${(_a2 = run.inputs.input) == null ? void 0 : _a2.trim()}"`); } /** * Method used to log the end of a tool run. * @param run The tool run that has ended. * @returns void */ onToolEnd(run) { var _a2, _b; const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.cyan, "[tool/end]")} [${crumbs}] [${elapsed(run)}] Exiting Tool run with output: "${(_b = (_a2 = run.outputs) == null ? void 0 : _a2.output) == null ? void 0 : _b.trim()}"`); } /** * Method used to log any errors of a tool run. * @param run The tool run that has errored. * @returns void */ onToolError(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.red, "[tool/error]")} [${crumbs}] [${elapsed(run)}] Tool run errored with error: ${tryJsonStringify(run.error, "[error]")}`); } /** * Method used to log the start of a retriever run. * @param run The retriever run that has started. * @returns void */ onRetrieverStart(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.green, "[retriever/start]")} [${crumbs}] Entering Retriever run with input: ${tryJsonStringify(run.inputs, "[inputs]")}`); } /** * Method used to log the end of a retriever run. * @param run The retriever run that has ended. * @returns void */ onRetrieverEnd(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.cyan, "[retriever/end]")} [${crumbs}] [${elapsed(run)}] Exiting Retriever run with output: ${tryJsonStringify(run.outputs, "[outputs]")}`); } /** * Method used to log any errors of a retriever run. * @param run The retriever run that has errored. * @returns void */ onRetrieverError(run) { const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.red, "[retriever/error]")} [${crumbs}] [${elapsed(run)}] Retriever run errored with error: ${tryJsonStringify(run.error, "[error]")}`); } /** * Method used to log the action selected by the agent. * @param run The run in which the agent action occurred. * @returns void */ onAgentAction(run) { const agentRun = run; const crumbs = this.getBreadcrumbs(run); console.log(`${wrap(color.blue, "[agent/action]")} [${crumbs}] Agent selected action: ${tryJsonStringify(agentRun.actions[agentRun.actions.length - 1], "[action]")}`); } }; // node_modules/langsmith/dist/utils/async_caller.js var import_p_retry = __toESM(require_p_retry(), 1); var import_p_queue = __toESM(require_dist(), 1); var STATUS_NO_RETRY = [ 400, 401, 403, 404, 405, 406, 407, 408 // Request Timeout ]; var STATUS_IGNORE = [ 409 // Conflict ]; var AsyncCaller = class { constructor(params) { var _a2, _b; Object.defineProperty(this, "maxConcurrency", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "maxRetries", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "queue", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.maxConcurrency = (_a2 = params.maxConcurrency) != null ? _a2 : Infinity; this.maxRetries = (_b = params.maxRetries) != null ? _b : 6; const PQueue = "default" in import_p_queue.default ? import_p_queue.default.default : import_p_queue.default; this.queue = new PQueue({ concurrency: this.maxConcurrency }); } // eslint-disable-next-line @typescript-eslint/no-explicit-any call(callable, ...args) { return this.queue.add(() => (0, import_p_retry.default)(() => callable(...args).catch((error) => { if (error instanceof Error) { throw error; } else { throw new Error(error); } }), { onFailedAttempt(error) { var _a2; if (error.message.startsWith("Cancel") || error.message.startsWith("TimeoutError") || error.message.startsWith("AbortError")) { throw error; } if ((error == null ? void 0 : error.code) === "ECONNABORTED") { throw error; } const status = (_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.status; if (status) { if (STATUS_NO_RETRY.includes(+status)) { throw error; } else if (STATUS_IGNORE.includes(+status)) { return; } } }, // If needed we can change some of the defaults here, // but they're quite sensible. retries: this.maxRetries, randomize: true }), { throwOnTimeout: true }); } // eslint-disable-next-line @typescript-eslint/no-explicit-any callWithOptions(options, callable, ...args) { if (options.signal) { return Promise.race([ this.call(callable, ...args), new Promise((_, reject) => { var _a2; (_a2 = options.signal) == null ? void 0 : _a2.addEventListener("abort", () => { reject(new Error("AbortError")); }); }) ]); } return this.call(callable, ...args); } fetch(...args) { return this.call(() => fetch(...args).then((res) => res.ok ? res : Promise.reject(res))); } }; // node_modules/langsmith/dist/utils/messages.js function isLangChainMessage(message) { return typeof (message == null ? void 0 : message._getType) === "function"; } function convertLangChainMessageToExample(message) { const converted = { type: message._getType(), data: { content: message.content } }; if ((message == null ? void 0 : message.additional_kwargs) && Object.keys(message.additional_kwargs).length > 0) { converted.data.additional_kwargs = { ...message.additional_kwargs }; } return converted; } // node_modules/langsmith/dist/utils/env.js var globalEnv; var isBrowser = () => typeof window !== "undefined" && typeof window.document !== "undefined"; var isWebWorker = () => typeof globalThis === "object" && globalThis.constructor && globalThis.constructor.name === "DedicatedWorkerGlobalScope"; var isJsDom = () => typeof window !== "undefined" && window.name === "nodejs" || typeof navigator !== "undefined" && (navigator.userAgent.includes("Node.js") || navigator.userAgent.includes("jsdom")); var isDeno = () => typeof Deno !== "undefined"; var isNode = () => typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined" && !isDeno(); var getEnv = () => { if (globalEnv) { return globalEnv; } if (isBrowser()) { globalEnv = "browser"; } else if (isNode()) { globalEnv = "node"; } else if (isWebWorker()) { globalEnv = "webworker"; } else if (isJsDom()) { globalEnv = "jsdom"; } else if (isDeno()) { globalEnv = "deno"; } else { globalEnv = "other"; } return globalEnv; }; var runtimeEnvironment; async function getRuntimeEnvironment() { if (runtimeEnvironment === void 0) { const env = getEnv(); const releaseEnv = getShas(); runtimeEnvironment = { library: "langsmith", runtime: env, sdk: "langsmith-js", sdk_version: __version__, ...releaseEnv }; } return runtimeEnvironment; } function getLangChainEnvVarsMetadata() { const allEnvVars = getEnvironmentVariables() || {}; const envVars = {}; const excluded = [ "LANGCHAIN_API_KEY", "LANGCHAIN_ENDPOINT", "LANGCHAIN_TRACING_V2", "LANGCHAIN_PROJECT", "LANGCHAIN_SESSION" ]; for (const [key, value] of Object.entries(allEnvVars)) { if (key.startsWith("LANGCHAIN_") && typeof value === "string" && !excluded.includes(key) && !key.toLowerCase().includes("key") && !key.toLowerCase().includes("secret") && !key.toLowerCase().includes("token")) { if (key === "LANGCHAIN_REVISION_ID") { envVars["revision_id"] = value; } else { envVars[key] = value; } } } return envVars; } function getEnvironmentVariables() { try { if (typeof process !== "undefined" && process.env) { return Object.entries(process.env).reduce((acc, [key, value]) => { acc[key] = String(value); return acc; }, {}); } return void 0; } catch (e) { return void 0; } } function getEnvironmentVariable(name) { var _a2; try { return typeof process !== "undefined" ? ( // eslint-disable-next-line no-process-env (_a2 = process.env) == null ? void 0 : _a2[name] ) : void 0; } catch (e) { return void 0; } } var cachedCommitSHAs; function getShas() { if (cachedCommitSHAs !== void 0) { return cachedCommitSHAs; } const common_release_envs = [ "VERCEL_GIT_COMMIT_SHA", "NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA", "COMMIT_REF", "RENDER_GIT_COMMIT", "CI_COMMIT_SHA", "CIRCLE_SHA1", "CF_PAGES_COMMIT_SHA", "REACT_APP_GIT_SHA", "SOURCE_VERSION", "GITHUB_SHA", "TRAVIS_COMMIT", "GIT_COMMIT", "BUILD_VCS_NUMBER", "bamboo_planRepository_revision", "Build.SourceVersion", "BITBUCKET_COMMIT", "DRONE_COMMIT_SHA", "SEMAPHORE_GIT_SHA", "BUILDKITE_COMMIT" ]; const shas = {}; for (const env of common_release_envs) { const envVar = getEnvironmentVariable(env); if (envVar !== void 0) { shas[env] = envVar; } } cachedCommitSHAs = shas; return shas; } // node_modules/langsmith/dist/client.js async function mergeRuntimeEnvIntoRunCreates(runs) { const runtimeEnv = await getRuntimeEnvironment(); const envVars = getLangChainEnvVarsMetadata(); return runs.map((run) => { var _a2, _b; const extra = (_a2 = run.extra) != null ? _a2 : {}; const metadata = extra.metadata; run.extra = { ...extra, runtime: { ...runtimeEnv, ...extra == null ? void 0 : extra.runtime }, metadata: { ...envVars, ...envVars.revision_id || run.revision_id ? { revision_id: (_b = run.revision_id) != null ? _b : envVars.revision_id } : {}, ...metadata } }; return run; }); } var getTracingSamplingRate = () => { const samplingRateStr = getEnvironmentVariable("LANGCHAIN_TRACING_SAMPLING_RATE"); if (samplingRateStr === void 0) { return void 0; } const samplingRate = parseFloat(samplingRateStr); if (samplingRate < 0 || samplingRate > 1) { throw new Error(`LANGCHAIN_TRACING_SAMPLING_RATE must be between 0 and 1 if set. Got: ${samplingRate}`); } return samplingRate; }; var isLocalhost = (url) => { const strippedUrl = url.replace("http://", "").replace("https://", ""); const hostname = strippedUrl.split("/")[0].split(":")[0]; return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1"; }; var raiseForStatus = async (response, operation) => { const body = await response.text(); if (!response.ok) { throw new Error(`Failed to ${operation}: ${response.status} ${response.statusText} ${body}`); } }; async function toArray(iterable) { const result = []; for await (const item of iterable) { result.push(item); } return result; } function trimQuotes(str) { if (str === void 0) { return void 0; } return str.trim().replace(/^"(.*)"$/, "$1").replace(/^'(.*)'$/, "$1"); } function assertUuid(str) { if (!validate_default(str)) { throw new Error(`Invalid UUID: ${str}`); } } var Client = class { constructor(config = {}) { var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j; Object.defineProperty(this, "apiKey", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "apiUrl", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "webUrl", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "caller", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "timeout_ms", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "_tenantId", { enumerable: true, configurable: true, writable: true, value: null }); Object.defineProperty(this, "hideInputs", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "hideOutputs", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "tracingSampleRate", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "sampledPostUuids", { enumerable: true, configurable: true, writable: true, value: /* @__PURE__ */ new Set() }); Object.defineProperty(this, "autoBatchTracing", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "batchEndpointSupported", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "pendingAutoBatchedRuns", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "pendingAutoBatchedRunLimit", { enumerable: true, configurable: true, writable: true, value: 100 }); Object.defineProperty(this, "autoBatchTimeout", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "autoBatchInitialDelayMs", { enumerable: true, configurable: true, writable: true, value: 250 }); Object.defineProperty(this, "autoBatchAggregationDelayMs", { enumerable: true, configurable: true, writable: true, value: 50 }); const defaultConfig = Client.getDefaultClientConfig(); this.tracingSampleRate = getTracingSamplingRate(); this.apiUrl = (_b = trimQuotes((_a2 = config.apiUrl) != null ? _a2 : defaultConfig.apiUrl)) != null ? _b : ""; this.apiKey = trimQuotes((_c = config.apiKey) != null ? _c : defaultConfig.apiKey); this.webUrl = trimQuotes((_d = config.webUrl) != null ? _d : defaultConfig.webUrl); this.validateApiKeyIfHosted(); this.timeout_ms = (_e = config.timeout_ms) != null ? _e : 12e3; this.caller = new AsyncCaller((_f = config.callerOptions) != null ? _f : {}); this.hideInputs = (_g = config.hideInputs) != null ? _g : defaultConfig.hideInputs; this.hideOutputs = (_h = config.hideOutputs) != null ? _h : defaultConfig.hideOutputs; this.autoBatchTracing = (_i = config.autoBatchTracing) != null ? _i : this.autoBatchTracing; this.pendingAutoBatchedRunLimit = (_j = config.pendingAutoBatchedRunLimit) != null ? _j : this.pendingAutoBatchedRunLimit; } static getDefaultClientConfig() { var _a2; const apiKey = getEnvironmentVariable("LANGCHAIN_API_KEY"); const apiUrl = (_a2 = getEnvironmentVariable("LANGCHAIN_ENDPOINT")) != null ? _a2 : "https://api.smith.langchain.com"; const hideInputs = getEnvironmentVariable("LANGCHAIN_HIDE_INPUTS") === "true"; const hideOutputs = getEnvironmentVariable("LANGCHAIN_HIDE_OUTPUTS") === "true"; return { apiUrl, apiKey, webUrl: void 0, hideInputs, hideOutputs }; } validateApiKeyIfHosted() { const isLocal = isLocalhost(this.apiUrl); if (!isLocal && !this.apiKey) { throw new Error("API key must be provided when using hosted LangSmith API"); } } getHostUrl() { if (this.webUrl) { return this.webUrl; } else if (isLocalhost(this.apiUrl)) { this.webUrl = "http://localhost"; return "http://localhost"; } else if (this.apiUrl.includes("/api") && !this.apiUrl.split(".", 1)[0].endsWith("api")) { this.webUrl = this.apiUrl.replace("/api", ""); return this.webUrl; } else if (this.apiUrl.split(".", 1)[0].includes("dev")) { this.webUrl = "https://dev.smith.langchain.com"; return "https://dev.smith.langchain.com"; } else { this.webUrl = "https://smith.langchain.com"; return "https://smith.langchain.com"; } } get headers() { const headers = { "User-Agent": `langsmith-js/${__version__}` }; if (this.apiKey) { headers["x-api-key"] = `${this.apiKey}`; } return headers; } processInputs(inputs) { if (this.hideInputs) { return {}; } return inputs; } processOutputs(outputs) { if (this.hideOutputs) { return {}; } return outputs; } prepareRunCreateOrUpdateInputs(run) { const runParams = { ...run }; if (runParams.inputs !== void 0) { runParams.inputs = this.processInputs(runParams.inputs); } if (runParams.outputs !== void 0) { runParams.outputs = this.processOutputs(runParams.outputs); } return runParams; } async _getResponse(path, queryParams) { var _a2; const paramsString = (_a2 = queryParams == null ? void 0 : queryParams.toString()) != null ? _a2 : ""; const url = `${this.apiUrl}${path}?${paramsString}`; const response = await this.caller.call(fetch, url, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to fetch ${path}: ${response.status} ${response.statusText}`); } return response; } async _get(path, queryParams) { const response = await this._getResponse(path, queryParams); return response.json(); } async *_getPaginated(path, queryParams = new URLSearchParams()) { let offset = Number(queryParams.get("offset")) || 0; const limit = Number(queryParams.get("limit")) || 100; while (true) { queryParams.set("offset", String(offset)); queryParams.set("limit", String(limit)); const url = `${this.apiUrl}${path}?${queryParams}`; const response = await this.caller.call(fetch, url, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to fetch ${path}: ${response.status} ${response.statusText}`); } const items = await response.json(); if (items.length === 0) { break; } yield items; if (items.length < limit) { break; } offset += items.length; } } async *_getCursorPaginatedList(path, body = null, requestMethod = "POST", dataKey = "runs") { const bodyParams = body ? { ...body } : {}; while (true) { const response = await this.caller.call(fetch, `${this.apiUrl}${path}`, { method: requestMethod, headers: { ...this.headers, "Content-Type": "application/json" }, signal: AbortSignal.timeout(this.timeout_ms), body: JSON.stringify(bodyParams) }); const responseBody = await response.json(); if (!responseBody) { break; } if (!responseBody[dataKey]) { break; } yield responseBody[dataKey]; const cursors = responseBody.cursors; if (!cursors) { break; } if (!cursors.next) { break; } bodyParams.cursor = cursors.next; } } _filterForSampling(runs, patch = false) { if (this.tracingSampleRate === void 0) { return runs; } if (patch) { const sampled = []; for (const run of runs) { if (this.sampledPostUuids.has(run.id)) { sampled.push(run); this.sampledPostUuids.delete(run.id); } } return sampled; } else { const sampled = []; for (const run of runs) { if (Math.random() < this.tracingSampleRate) { sampled.push(run); this.sampledPostUuids.add(run.id); } } return sampled; } } async triggerAutoBatchSend(runs) { let batch = runs; if (batch === void 0) { batch = this.pendingAutoBatchedRuns.slice(0, this.pendingAutoBatchedRunLimit); this.pendingAutoBatchedRuns = this.pendingAutoBatchedRuns.slice(this.pendingAutoBatchedRunLimit); } await this.batchIngestRuns({ runCreates: batch.filter((item) => item.action === "create").map((item) => item.item), runUpdates: batch.filter((item) => item.action === "update").map((item) => item.item) }); } appendRunCreateToAutoBatchQueue(item) { const oldTimeout = this.autoBatchTimeout; clearTimeout(this.autoBatchTimeout); this.autoBatchTimeout = void 0; this.pendingAutoBatchedRuns.push(item); while (this.pendingAutoBatchedRuns.length >= this.pendingAutoBatchedRunLimit) { const batch = this.pendingAutoBatchedRuns.slice(0, this.pendingAutoBatchedRunLimit); this.pendingAutoBatchedRuns = this.pendingAutoBatchedRuns.slice(this.pendingAutoBatchedRunLimit); void this.triggerAutoBatchSend(batch); } if (this.pendingAutoBatchedRuns.length > 0) { if (!oldTimeout) { this.autoBatchTimeout = setTimeout(() => { this.autoBatchTimeout = void 0; void this.triggerAutoBatchSend(); }, this.autoBatchInitialDelayMs); } else { this.autoBatchTimeout = setTimeout(() => { this.autoBatchTimeout = void 0; void this.triggerAutoBatchSend(); }, this.autoBatchAggregationDelayMs); } } } async batchEndpointIsSupported() { const response = await fetch(`${this.apiUrl}/info`, { method: "GET", headers: { Accept: "application/json" }, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { await response.text(); return false; } return true; } async createRun(run) { var _a2; if (!this._filterForSampling([run]).length) { return; } const headers = { ...this.headers, "Content-Type": "application/json" }; const session_name = run.project_name; delete run.project_name; const runCreate = this.prepareRunCreateOrUpdateInputs({ session_name, ...run, start_time: (_a2 = run.start_time) != null ? _a2 : Date.now() }); if (this.autoBatchTracing && runCreate.trace_id !== void 0 && runCreate.dotted_order !== void 0) { this.appendRunCreateToAutoBatchQueue({ action: "create", item: runCreate }); return; } const mergedRunCreateParams = await mergeRuntimeEnvIntoRunCreates([ runCreate ]); const response = await this.caller.call(fetch, `${this.apiUrl}/runs`, { method: "POST", headers, body: JSON.stringify(mergedRunCreateParams[0]), signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "create run"); } /** * Batch ingest/upsert multiple runs in the Langsmith system. * @param runs */ async batchIngestRuns({ runCreates, runUpdates }) { var _a2, _b; if (runCreates === void 0 && runUpdates === void 0) { return; } let preparedCreateParams = (_a2 = runCreates == null ? void 0 : runCreates.map((create) => this.prepareRunCreateOrUpdateInputs(create))) != null ? _a2 : []; let preparedUpdateParams = (_b = runUpdates == null ? void 0 : runUpdates.map((update) => this.prepareRunCreateOrUpdateInputs(update))) != null ? _b : []; if (preparedCreateParams.length > 0 && preparedUpdateParams.length > 0) { const createById = preparedCreateParams.reduce((params, run) => { if (!run.id) { return params; } params[run.id] = run; return params; }, {}); const standaloneUpdates = []; for (const updateParam of preparedUpdateParams) { if (updateParam.id !== void 0 && createById[updateParam.id]) { createById[updateParam.id] = { ...createById[updateParam.id], ...updateParam }; } else { standaloneUpdates.push(updateParam); } } preparedCreateParams = Object.values(createById); preparedUpdateParams = standaloneUpdates; } const body = { post: this._filterForSampling(preparedCreateParams), patch: this._filterForSampling(preparedUpdateParams, true) }; if (!body.post.length && !body.patch.length) { return; } preparedCreateParams = await mergeRuntimeEnvIntoRunCreates(preparedCreateParams); if (this.batchEndpointSupported === void 0) { this.batchEndpointSupported = await this.batchEndpointIsSupported(); } if (!this.batchEndpointSupported) { this.autoBatchTracing = false; for (const preparedCreateParam of body.post) { await this.createRun(preparedCreateParam); } for (const preparedUpdateParam of body.patch) { if (preparedUpdateParam.id !== void 0) { await this.updateRun(preparedUpdateParam.id, preparedUpdateParam); } } return; } const headers = { ...this.headers, "Content-Type": "application/json", Accept: "application/json" }; const response = await this.caller.call(fetch, `${this.apiUrl}/runs/batch`, { method: "POST", headers, body: JSON.stringify(body), signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "batch create run"); } async updateRun(runId, run) { assertUuid(runId); if (run.inputs) { run.inputs = this.processInputs(run.inputs); } if (run.outputs) { run.outputs = this.processOutputs(run.outputs); } const data = { ...run, id: runId }; if (!this._filterForSampling([data], true).length) { return; } if (this.autoBatchTracing && data.trace_id !== void 0 && data.dotted_order !== void 0) { this.appendRunCreateToAutoBatchQueue({ action: "update", item: data }); return; } const headers = { ...this.headers, "Content-Type": "application/json" }; const response = await this.caller.call(fetch, `${this.apiUrl}/runs/${runId}`, { method: "PATCH", headers, body: JSON.stringify(run), signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "update run"); } async readRun(runId, { loadChildRuns } = { loadChildRuns: false }) { assertUuid(runId); let run = await this._get(`/runs/${runId}`); if (loadChildRuns && run.child_run_ids) { run = await this._loadChildRuns(run); } return run; } async getRunUrl({ runId, run, projectOpts }) { if (run !== void 0) { let sessionId; if (run.session_id) { sessionId = run.session_id; } else if (projectOpts == null ? void 0 : projectOpts.projectName) { sessionId = (await this.readProject({ projectName: projectOpts == null ? void 0 : projectOpts.projectName })).id; } else if (projectOpts == null ? void 0 : projectOpts.projectId) { sessionId = projectOpts == null ? void 0 : projectOpts.projectId; } else { const project = await this.readProject({ projectName: getEnvironmentVariable("LANGCHAIN_PROJECT") || "default" }); sessionId = project.id; } const tenantId = await this._getTenantId(); return `${this.getHostUrl()}/o/${tenantId}/projects/p/${sessionId}/r/${run.id}?poll=true`; } else if (runId !== void 0) { const run_ = await this.readRun(runId); if (!run_.app_path) { throw new Error(`Run ${runId} has no app_path`); } const baseUrl = this.getHostUrl(); return `${baseUrl}${run_.app_path}`; } else { throw new Error("Must provide either runId or run"); } } async _loadChildRuns(run) { const childRuns = await toArray(this.listRuns({ id: run.child_run_ids })); const treemap = {}; const runs = {}; childRuns.sort((a, b) => { var _a2, _b; return ((_a2 = a == null ? void 0 : a.dotted_order) != null ? _a2 : "").localeCompare((_b = b == null ? void 0 : b.dotted_order) != null ? _b : ""); }); for (const childRun of childRuns) { if (childRun.parent_run_id === null || childRun.parent_run_id === void 0) { throw new Error(`Child run ${childRun.id} has no parent`); } if (!(childRun.parent_run_id in treemap)) { treemap[childRun.parent_run_id] = []; } treemap[childRun.parent_run_id].push(childRun); runs[childRun.id] = childRun; } run.child_runs = treemap[run.id] || []; for (const runId in treemap) { if (runId !== run.id) { runs[runId].child_runs = treemap[runId]; } } return run; } async *listRuns({ projectId, projectName, parentRunId, traceId, referenceExampleId, startTime, executionOrder, runType, error, id, query, filter, limit }) { let projectIds = []; if (projectId) { projectIds = Array.isArray(projectId) ? projectId : [projectId]; } if (projectName) { const projectNames = Array.isArray(projectName) ? projectName : [projectName]; const projectIds_ = await Promise.all(projectNames.map((name) => this.readProject({ projectName: name }).then((project) => project.id))); projectIds.push(...projectIds_); } const body = { session: projectIds.length ? projectIds : null, run_type: runType, reference_example: referenceExampleId, query, filter, execution_order: executionOrder, parent_run: parentRunId ? [parentRunId] : null, start_time: startTime ? startTime.toISOString() : null, error, id, limit, trace: traceId }; for await (const runs of this._getCursorPaginatedList("/runs/query", body)) { yield* runs; } } async shareRun(runId, { shareId } = {}) { const data = { run_id: runId, share_token: shareId || v4_default() }; assertUuid(runId); const response = await this.caller.call(fetch, `${this.apiUrl}/runs/${runId}/share`, { method: "PUT", headers: this.headers, body: JSON.stringify(data), signal: AbortSignal.timeout(this.timeout_ms) }); const result = await response.json(); if (result === null || !("share_token" in result)) { throw new Error("Invalid response from server"); } return `${this.getHostUrl()}/public/${result["share_token"]}/r`; } async unshareRun(runId) { assertUuid(runId); const response = await this.caller.call(fetch, `${this.apiUrl}/runs/${runId}/share`, { method: "DELETE", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "unshare run"); } async readRunSharedLink(runId) { assertUuid(runId); const response = await this.caller.call(fetch, `${this.apiUrl}/runs/${runId}/share`, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); const result = await response.json(); if (result === null || !("share_token" in result)) { return void 0; } return `${this.getHostUrl()}/public/${result["share_token"]}/r`; } async listSharedRuns(shareToken, { runIds } = {}) { const queryParams = new URLSearchParams({ share_token: shareToken }); if (runIds !== void 0) { for (const runId of runIds) { queryParams.append("id", runId); } } assertUuid(shareToken); const response = await this.caller.call(fetch, `${this.apiUrl}/public/${shareToken}/runs${queryParams}`, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); const runs = await response.json(); return runs; } async readDatasetSharedSchema(datasetId, datasetName) { if (!datasetId && !datasetName) { throw new Error("Either datasetId or datasetName must be given"); } if (!datasetId) { const dataset = await this.readDataset({ datasetName }); datasetId = dataset.id; } assertUuid(datasetId); const response = await this.caller.call(fetch, `${this.apiUrl}/datasets/${datasetId}/share`, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); const shareSchema = await response.json(); shareSchema.url = `${this.getHostUrl()}/public/${shareSchema.share_token}/d`; return shareSchema; } async shareDataset(datasetId, datasetName) { if (!datasetId && !datasetName) { throw new Error("Either datasetId or datasetName must be given"); } if (!datasetId) { const dataset = await this.readDataset({ datasetName }); datasetId = dataset.id; } const data = { dataset_id: datasetId }; assertUuid(datasetId); const response = await this.caller.call(fetch, `${this.apiUrl}/datasets/${datasetId}/share`, { method: "PUT", headers: this.headers, body: JSON.stringify(data), signal: AbortSignal.timeout(this.timeout_ms) }); const shareSchema = await response.json(); shareSchema.url = `${this.getHostUrl()}/public/${shareSchema.share_token}/d`; return shareSchema; } async unshareDataset(datasetId) { assertUuid(datasetId); const response = await this.caller.call(fetch, `${this.apiUrl}/datasets/${datasetId}/share`, { method: "DELETE", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "unshare dataset"); } async readSharedDataset(shareToken) { assertUuid(shareToken); const response = await this.caller.call(fetch, `${this.apiUrl}/public/${shareToken}/datasets`, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); const dataset = await response.json(); return dataset; } async createProject({ projectName, description = null, metadata = null, upsert = false, projectExtra = null, referenceDatasetId = null }) { const upsert_ = upsert ? `?upsert=true` : ""; const endpoint = `${this.apiUrl}/sessions${upsert_}`; const extra = projectExtra || {}; if (metadata) { extra["metadata"] = metadata; } const body = { name: projectName, extra, description }; if (referenceDatasetId !== null) { body["reference_dataset_id"] = referenceDatasetId; } const response = await this.caller.call(fetch, endpoint, { method: "POST", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(body), signal: AbortSignal.timeout(this.timeout_ms) }); const result = await response.json(); if (!response.ok) { throw new Error(`Failed to create session ${projectName}: ${response.status} ${response.statusText}`); } return result; } async updateProject(projectId, { name = null, description = null, metadata = null, projectExtra = null, endTime = null }) { const endpoint = `${this.apiUrl}/sessions/${projectId}`; let extra = projectExtra; if (metadata) { extra = { ...extra || {}, metadata }; } const body = { name, extra, description, end_time: endTime ? new Date(endTime).toISOString() : null }; const response = await this.caller.call(fetch, endpoint, { method: "PATCH", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(body), signal: AbortSignal.timeout(this.timeout_ms) }); const result = await response.json(); if (!response.ok) { throw new Error(`Failed to update project ${projectId}: ${response.status} ${response.statusText}`); } return result; } async hasProject({ projectId, projectName }) { let path = "/sessions"; const params = new URLSearchParams(); if (projectId !== void 0 && projectName !== void 0) { throw new Error("Must provide either projectName or projectId, not both"); } else if (projectId !== void 0) { assertUuid(projectId); path += `/${projectId}`; } else if (projectName !== void 0) { params.append("name", projectName); } else { throw new Error("Must provide projectName or projectId"); } const response = await this.caller.call(fetch, `${this.apiUrl}${path}?${params}`, { method: "GET", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); try { const result = await response.json(); if (!response.ok) { return false; } if (Array.isArray(result)) { return result.length > 0; } return true; } catch (e) { return false; } } async readProject({ projectId, projectName, includeStats }) { let path = "/sessions"; const params = new URLSearchParams(); if (projectId !== void 0 && projectName !== void 0) { throw new Error("Must provide either projectName or projectId, not both"); } else if (projectId !== void 0) { assertUuid(projectId); path += `/${projectId}`; } else if (projectName !== void 0) { params.append("name", projectName); } else { throw new Error("Must provide projectName or projectId"); } if (includeStats !== void 0) { params.append("include_stats", includeStats.toString()); } const response = await this._get(path, params); let result; if (Array.isArray(response)) { if (response.length === 0) { throw new Error(`Project[id=${projectId}, name=${projectName}] not found`); } result = response[0]; } else { result = response; } return result; } async _getTenantId() { if (this._tenantId !== null) { return this._tenantId; } const queryParams = new URLSearchParams({ limit: "1" }); for await (const projects of this._getPaginated("/sessions", queryParams)) { this._tenantId = projects[0].tenant_id; return projects[0].tenant_id; } throw new Error("No projects found to resolve tenant."); } async *listProjects({ projectIds, name, nameContains, referenceDatasetId, referenceDatasetName, referenceFree } = {}) { const params = new URLSearchParams(); if (projectIds !== void 0) { for (const projectId of projectIds) { params.append("id", projectId); } } if (name !== void 0) { params.append("name", name); } if (nameContains !== void 0) { params.append("name_contains", nameContains); } if (referenceDatasetId !== void 0) { params.append("reference_dataset", referenceDatasetId); } else if (referenceDatasetName !== void 0) { const dataset = await this.readDataset({ datasetName: referenceDatasetName }); params.append("reference_dataset", dataset.id); } if (referenceFree !== void 0) { params.append("reference_free", referenceFree.toString()); } for await (const projects of this._getPaginated("/sessions", params)) { yield* projects; } } async deleteProject({ projectId, projectName }) { let projectId_; if (projectId === void 0 && projectName === void 0) { throw new Error("Must provide projectName or projectId"); } else if (projectId !== void 0 && projectName !== void 0) { throw new Error("Must provide either projectName or projectId, not both"); } else if (projectId === void 0) { projectId_ = (await this.readProject({ projectName })).id; } else { projectId_ = projectId; } assertUuid(projectId_); const response = await this.caller.call(fetch, `${this.apiUrl}/sessions/${projectId_}`, { method: "DELETE", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, `delete session ${projectId_} (${projectName})`); } async uploadCsv({ csvFile, fileName, inputKeys, outputKeys, description, dataType, name }) { const url = `${this.apiUrl}/datasets/upload`; const formData = new FormData(); formData.append("file", csvFile, fileName); inputKeys.forEach((key) => { formData.append("input_keys", key); }); outputKeys.forEach((key) => { formData.append("output_keys", key); }); if (description) { formData.append("description", description); } if (dataType) { formData.append("data_type", dataType); } if (name) { formData.append("name", name); } const response = await this.caller.call(fetch, url, { method: "POST", headers: this.headers, body: formData, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { const result2 = await response.json(); if (result2.detail && result2.detail.includes("already exists")) { throw new Error(`Dataset ${fileName} already exists`); } throw new Error(`Failed to upload CSV: ${response.status} ${response.statusText}`); } const result = await response.json(); return result; } async createDataset(name, { description, dataType } = {}) { const body = { name, description }; if (dataType) { body.data_type = dataType; } const response = await this.caller.call(fetch, `${this.apiUrl}/datasets`, { method: "POST", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(body), signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { const result2 = await response.json(); if (result2.detail && result2.detail.includes("already exists")) { throw new Error(`Dataset ${name} already exists`); } throw new Error(`Failed to create dataset ${response.status} ${response.statusText}`); } const result = await response.json(); return result; } async readDataset({ datasetId, datasetName }) { let path = "/datasets"; const params = new URLSearchParams({ limit: "1" }); if (datasetId !== void 0 && datasetName !== void 0) { throw new Error("Must provide either datasetName or datasetId, not both"); } else if (datasetId !== void 0) { assertUuid(datasetId); path += `/${datasetId}`; } else if (datasetName !== void 0) { params.append("name", datasetName); } else { throw new Error("Must provide datasetName or datasetId"); } const response = await this._get(path, params); let result; if (Array.isArray(response)) { if (response.length === 0) { throw new Error(`Dataset[id=${datasetId}, name=${datasetName}] not found`); } result = response[0]; } else { result = response; } return result; } async readDatasetOpenaiFinetuning({ datasetId, datasetName }) { const path = "/datasets"; if (datasetId !== void 0) { } else if (datasetName !== void 0) { datasetId = (await this.readDataset({ datasetName })).id; } else { throw new Error("Must provide datasetName or datasetId"); } const response = await this._getResponse(`${path}/${datasetId}/openai_ft`); const datasetText = await response.text(); const dataset = datasetText.trim().split("\n").map((line) => JSON.parse(line)); return dataset; } async *listDatasets({ limit = 100, offset = 0, datasetIds, datasetName, datasetNameContains } = {}) { const path = "/datasets"; const params = new URLSearchParams({ limit: limit.toString(), offset: offset.toString() }); if (datasetIds !== void 0) { for (const id_ of datasetIds) { params.append("id", id_); } } if (datasetName !== void 0) { params.append("name", datasetName); } if (datasetNameContains !== void 0) { params.append("name_contains", datasetNameContains); } for await (const datasets of this._getPaginated(path, params)) { yield* datasets; } } async deleteDataset({ datasetId, datasetName }) { let path = "/datasets"; let datasetId_ = datasetId; if (datasetId !== void 0 && datasetName !== void 0) { throw new Error("Must provide either datasetName or datasetId, not both"); } else if (datasetName !== void 0) { const dataset = await this.readDataset({ datasetName }); datasetId_ = dataset.id; } if (datasetId_ !== void 0) { assertUuid(datasetId_); path += `/${datasetId_}`; } else { throw new Error("Must provide datasetName or datasetId"); } const response = await this.caller.call(fetch, this.apiUrl + path, { method: "DELETE", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to delete ${path}: ${response.status} ${response.statusText}`); } await response.json(); } async createExample(inputs, outputs, { datasetId, datasetName, createdAt, exampleId }) { let datasetId_ = datasetId; if (datasetId_ === void 0 && datasetName === void 0) { throw new Error("Must provide either datasetName or datasetId"); } else if (datasetId_ !== void 0 && datasetName !== void 0) { throw new Error("Must provide either datasetName or datasetId, not both"); } else if (datasetId_ === void 0) { const dataset = await this.readDataset({ datasetName }); datasetId_ = dataset.id; } const createdAt_ = createdAt || new Date(); const data = { dataset_id: datasetId_, inputs, outputs, created_at: createdAt_ == null ? void 0 : createdAt_.toISOString(), id: exampleId }; const response = await this.caller.call(fetch, `${this.apiUrl}/examples`, { method: "POST", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(data), signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to create example: ${response.status} ${response.statusText}`); } const result = await response.json(); return result; } async createExamples(props) { const { inputs, outputs, sourceRunIds, exampleIds, datasetId, datasetName } = props; let datasetId_ = datasetId; if (datasetId_ === void 0 && datasetName === void 0) { throw new Error("Must provide either datasetName or datasetId"); } else if (datasetId_ !== void 0 && datasetName !== void 0) { throw new Error("Must provide either datasetName or datasetId, not both"); } else if (datasetId_ === void 0) { const dataset = await this.readDataset({ datasetName }); datasetId_ = dataset.id; } const formattedExamples = inputs.map((input, idx) => { return { dataset_id: datasetId_, inputs: input, outputs: outputs ? outputs[idx] : void 0, id: exampleIds ? exampleIds[idx] : void 0, source_run_id: sourceRunIds ? sourceRunIds[idx] : void 0 }; }); const response = await this.caller.call(fetch, `${this.apiUrl}/examples/bulk`, { method: "POST", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(formattedExamples), signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to create examples: ${response.status} ${response.statusText}`); } const result = await response.json(); return result; } async createLLMExample(input, generation, options) { return this.createExample({ input }, { output: generation }, options); } async createChatExample(input, generations, options) { const finalInput = input.map((message) => { if (isLangChainMessage(message)) { return convertLangChainMessageToExample(message); } return message; }); const finalOutput = isLangChainMessage(generations) ? convertLangChainMessageToExample(generations) : generations; return this.createExample({ input: finalInput }, { output: finalOutput }, options); } async readExample(exampleId) { assertUuid(exampleId); const path = `/examples/${exampleId}`; return await this._get(path); } async *listExamples({ datasetId, datasetName, exampleIds } = {}) { let datasetId_; if (datasetId !== void 0 && datasetName !== void 0) { throw new Error("Must provide either datasetName or datasetId, not both"); } else if (datasetId !== void 0) { datasetId_ = datasetId; } else if (datasetName !== void 0) { const dataset = await this.readDataset({ datasetName }); datasetId_ = dataset.id; } else { throw new Error("Must provide a datasetName or datasetId"); } const params = new URLSearchParams({ dataset: datasetId_ }); if (exampleIds !== void 0) { for (const id_ of exampleIds) { params.append("id", id_); } } for await (const examples of this._getPaginated("/examples", params)) { yield* examples; } } async deleteExample(exampleId) { assertUuid(exampleId); const path = `/examples/${exampleId}`; const response = await this.caller.call(fetch, this.apiUrl + path, { method: "DELETE", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to delete ${path}: ${response.status} ${response.statusText}`); } await response.json(); } async updateExample(exampleId, update) { assertUuid(exampleId); const response = await this.caller.call(fetch, `${this.apiUrl}/examples/${exampleId}`, { method: "PATCH", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(update), signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to update example ${exampleId}: ${response.status} ${response.statusText}`); } const result = await response.json(); return result; } async evaluateRun(run, evaluator, { sourceInfo, loadChildRuns, referenceExample } = { loadChildRuns: false }) { var _a2; let run_; if (typeof run === "string") { run_ = await this.readRun(run, { loadChildRuns }); } else if (typeof run === "object" && "id" in run) { run_ = run; } else { throw new Error(`Invalid run type: ${typeof run}`); } if (run_.reference_example_id !== null && run_.reference_example_id !== void 0) { referenceExample = await this.readExample(run_.reference_example_id); } const feedbackResult = await evaluator.evaluateRun(run_, referenceExample); let sourceInfo_ = sourceInfo != null ? sourceInfo : {}; if (feedbackResult.evaluatorInfo) { sourceInfo_ = { ...sourceInfo_, ...feedbackResult.evaluatorInfo }; } const runId = (_a2 = feedbackResult.targetRunId) != null ? _a2 : run_.id; return await this.createFeedback(runId, feedbackResult.key, { score: feedbackResult == null ? void 0 : feedbackResult.score, value: feedbackResult == null ? void 0 : feedbackResult.value, comment: feedbackResult == null ? void 0 : feedbackResult.comment, correction: feedbackResult == null ? void 0 : feedbackResult.correction, sourceInfo: sourceInfo_, feedbackSourceType: "model", sourceRunId: feedbackResult == null ? void 0 : feedbackResult.sourceRunId }); } async createFeedback(runId, key, { score, value, correction, comment, sourceInfo, feedbackSourceType = "api", sourceRunId, feedbackId, eager = false }) { var _a2; const feedback_source = { type: feedbackSourceType != null ? feedbackSourceType : "api", metadata: sourceInfo != null ? sourceInfo : {} }; if (sourceRunId !== void 0 && (feedback_source == null ? void 0 : feedback_source.metadata) !== void 0 && !feedback_source.metadata["__run"]) { feedback_source.metadata["__run"] = { run_id: sourceRunId }; } if ((feedback_source == null ? void 0 : feedback_source.metadata) !== void 0 && ((_a2 = feedback_source.metadata["__run"]) == null ? void 0 : _a2.run_id) !== void 0) { assertUuid(feedback_source.metadata["__run"].run_id); } const feedback = { id: feedbackId != null ? feedbackId : v4_default(), run_id: runId, key, score, value, correction, comment, feedback_source }; const url = `${this.apiUrl}/feedback` + (eager ? "/eager" : ""); const response = await this.caller.call(fetch, url, { method: "POST", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(feedback), signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "create feedback"); return feedback; } async updateFeedback(feedbackId, { score, value, correction, comment }) { const feedbackUpdate = {}; if (score !== void 0 && score !== null) { feedbackUpdate["score"] = score; } if (value !== void 0 && value !== null) { feedbackUpdate["value"] = value; } if (correction !== void 0 && correction !== null) { feedbackUpdate["correction"] = correction; } if (comment !== void 0 && comment !== null) { feedbackUpdate["comment"] = comment; } assertUuid(feedbackId); const response = await this.caller.call(fetch, `${this.apiUrl}/feedback/${feedbackId}`, { method: "PATCH", headers: { ...this.headers, "Content-Type": "application/json" }, body: JSON.stringify(feedbackUpdate), signal: AbortSignal.timeout(this.timeout_ms) }); await raiseForStatus(response, "update feedback"); } async readFeedback(feedbackId) { assertUuid(feedbackId); const path = `/feedback/${feedbackId}`; const response = await this._get(path); return response; } async deleteFeedback(feedbackId) { assertUuid(feedbackId); const path = `/feedback/${feedbackId}`; const response = await this.caller.call(fetch, this.apiUrl + path, { method: "DELETE", headers: this.headers, signal: AbortSignal.timeout(this.timeout_ms) }); if (!response.ok) { throw new Error(`Failed to delete ${path}: ${response.status} ${response.statusText}`); } await response.json(); } async *listFeedback({ runIds, feedbackKeys, feedbackSourceTypes } = {}) { const queryParams = new URLSearchParams(); if (runIds) { queryParams.append("run", runIds.join(",")); } if (feedbackKeys) { for (const key of feedbackKeys) { queryParams.append("key", key); } } if (feedbackSourceTypes) { for (const type of feedbackSourceTypes) { queryParams.append("source", type); } } for await (const feedbacks of this._getPaginated("/feedback", queryParams)) { yield* feedbacks; } } }; // node_modules/langsmith/dist/index.js var __version__ = "0.0.70"; // node_modules/langchain/node_modules/@langchain/core/dist/utils/env.js var isBrowser2 = () => typeof window !== "undefined" && typeof window.document !== "undefined"; var isWebWorker2 = () => typeof globalThis === "object" && globalThis.constructor && globalThis.constructor.name === "DedicatedWorkerGlobalScope"; var isJsDom2 = () => typeof window !== "undefined" && window.name === "nodejs" || typeof navigator !== "undefined" && (navigator.userAgent.includes("Node.js") || navigator.userAgent.includes("jsdom")); var isDeno2 = () => typeof Deno !== "undefined"; var isNode2 = () => typeof process !== "undefined" && typeof process.versions !== "undefined" && typeof process.versions.node !== "undefined" && !isDeno2(); var getEnv2 = () => { let env; if (isBrowser2()) { env = "browser"; } else if (isNode2()) { env = "node"; } else if (isWebWorker2()) { env = "webworker"; } else if (isJsDom2()) { env = "jsdom"; } else if (isDeno2()) { env = "deno"; } else { env = "other"; } return env; }; var runtimeEnvironment2; async function getRuntimeEnvironment2() { if (runtimeEnvironment2 === void 0) { const env = getEnv2(); runtimeEnvironment2 = { library: "langchain-js", runtime: env }; } return runtimeEnvironment2; } function getEnvironmentVariable2(name) { var _a2; try { return typeof process !== "undefined" ? ( // eslint-disable-next-line no-process-env (_a2 = process.env) == null ? void 0 : _a2[name] ) : void 0; } catch (e) { return void 0; } } // node_modules/langchain/node_modules/@langchain/core/dist/tracers/tracer_langchain.js var LangChainTracer = class extends BaseTracer { constructor(fields = {}) { var _a2; super(fields); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: "langchain_tracer" }); Object.defineProperty(this, "projectName", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "exampleId", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "client", { enumerable: true, configurable: true, writable: true, value: void 0 }); const { exampleId, projectName, client } = fields; this.projectName = (_a2 = projectName != null ? projectName : getEnvironmentVariable2("LANGCHAIN_PROJECT")) != null ? _a2 : getEnvironmentVariable2("LANGCHAIN_SESSION"); this.exampleId = exampleId; this.client = client != null ? client : new Client({}); } async _convertToCreate(run, example_id = void 0) { return { ...run, extra: { ...run.extra, runtime: await getRuntimeEnvironment2() }, child_runs: void 0, session_name: this.projectName, reference_example_id: run.parent_run_id ? void 0 : example_id }; } async persistRun(_run) { } async _persistRunSingle(run) { const persistedRun = await this._convertToCreate(run, this.exampleId); await this.client.createRun(persistedRun); } async _updateRunSingle(run) { const runUpdate = { end_time: run.end_time, error: run.error, outputs: run.outputs, events: run.events, inputs: run.inputs }; await this.client.updateRun(run.id, runUpdate); } async onRetrieverStart(run) { await this._persistRunSingle(run); } async onRetrieverEnd(run) { await this._updateRunSingle(run); } async onRetrieverError(run) { await this._updateRunSingle(run); } async onLLMStart(run) { await this._persistRunSingle(run); } async onLLMEnd(run) { await this._updateRunSingle(run); } async onLLMError(run) { await this._updateRunSingle(run); } async onChainStart(run) { await this._persistRunSingle(run); } async onChainEnd(run) { await this._updateRunSingle(run); } async onChainError(run) { await this._updateRunSingle(run); } async onToolStart(run) { await this._persistRunSingle(run); } async onToolEnd(run) { await this._updateRunSingle(run); } async onToolError(run) { await this._updateRunSingle(run); } }; // node_modules/langchain/node_modules/@langchain/core/dist/messages/index.js function getBufferString(messages, humanPrefix = "Human", aiPrefix = "AI") { const string_messages = []; for (const m of messages) { let role; if (m._getType() === "human") { role = humanPrefix; } else if (m._getType() === "ai") { role = aiPrefix; } else if (m._getType() === "system") { role = "System"; } else if (m._getType() === "function") { role = "Function"; } else if (m._getType() === "tool") { role = "Tool"; } else if (m._getType() === "generic") { role = m.role; } else { throw new Error(`Got unsupported message type: ${m._getType()}`); } const nameStr = m.name ? `${m.name}, ` : ""; string_messages.push(`${role}: ${nameStr}${m.content}`); } return string_messages.join("\n"); } // node_modules/langchain/node_modules/@langchain/core/dist/tracers/tracer_langchain_v1.js var LangChainTracerV1 = class extends BaseTracer { constructor() { super(); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: "langchain_tracer" }); Object.defineProperty(this, "endpoint", { enumerable: true, configurable: true, writable: true, value: getEnvironmentVariable2("LANGCHAIN_ENDPOINT") || "http://localhost:1984" }); Object.defineProperty(this, "headers", { enumerable: true, configurable: true, writable: true, value: { "Content-Type": "application/json" } }); Object.defineProperty(this, "session", { enumerable: true, configurable: true, writable: true, value: void 0 }); const apiKey = getEnvironmentVariable2("LANGCHAIN_API_KEY"); if (apiKey) { this.headers["x-api-key"] = apiKey; } } async newSession(sessionName) { const sessionCreate = { start_time: Date.now(), name: sessionName }; const session = await this.persistSession(sessionCreate); this.session = session; return session; } async loadSession(sessionName) { const endpoint = `${this.endpoint}/sessions?name=${sessionName}`; return this._handleSessionResponse(endpoint); } async loadDefaultSession() { const endpoint = `${this.endpoint}/sessions?name=default`; return this._handleSessionResponse(endpoint); } async convertV2RunToRun(run) { var _a2, _b; const session = (_a2 = this.session) != null ? _a2 : await this.loadDefaultSession(); const serialized = run.serialized; let runResult; if (run.run_type === "llm") { const prompts = run.inputs.prompts ? run.inputs.prompts : run.inputs.messages.map((x) => getBufferString(x)); const llmRun = { uuid: run.id, start_time: run.start_time, end_time: run.end_time, execution_order: run.execution_order, child_execution_order: run.child_execution_order, serialized, type: run.run_type, session_id: session.id, prompts, response: run.outputs }; runResult = llmRun; } else if (run.run_type === "chain") { const child_runs = await Promise.all(run.child_runs.map((child_run) => this.convertV2RunToRun(child_run))); const chainRun = { uuid: run.id, start_time: run.start_time, end_time: run.end_time, execution_order: run.execution_order, child_execution_order: run.child_execution_order, serialized, type: run.run_type, session_id: session.id, inputs: run.inputs, outputs: run.outputs, child_llm_runs: child_runs.filter((child_run) => child_run.type === "llm"), child_chain_runs: child_runs.filter((child_run) => child_run.type === "chain"), child_tool_runs: child_runs.filter((child_run) => child_run.type === "tool") }; runResult = chainRun; } else if (run.run_type === "tool") { const child_runs = await Promise.all(run.child_runs.map((child_run) => this.convertV2RunToRun(child_run))); const toolRun = { uuid: run.id, start_time: run.start_time, end_time: run.end_time, execution_order: run.execution_order, child_execution_order: run.child_execution_order, serialized, type: run.run_type, session_id: session.id, tool_input: run.inputs.input, output: (_b = run.outputs) == null ? void 0 : _b.output, action: JSON.stringify(serialized), child_llm_runs: child_runs.filter((child_run) => child_run.type === "llm"), child_chain_runs: child_runs.filter((child_run) => child_run.type === "chain"), child_tool_runs: child_runs.filter((child_run) => child_run.type === "tool") }; runResult = toolRun; } else { throw new Error(`Unknown run type: ${run.run_type}`); } return runResult; } async persistRun(run) { let endpoint; let v1Run; if (run.run_type !== void 0) { v1Run = await this.convertV2RunToRun(run); } else { v1Run = run; } if (v1Run.type === "llm") { endpoint = `${this.endpoint}/llm-runs`; } else if (v1Run.type === "chain") { endpoint = `${this.endpoint}/chain-runs`; } else { endpoint = `${this.endpoint}/tool-runs`; } const response = await fetch(endpoint, { method: "POST", headers: this.headers, body: JSON.stringify(v1Run) }); if (!response.ok) { console.error(`Failed to persist run: ${response.status} ${response.statusText}`); } } async persistSession(sessionCreate) { const endpoint = `${this.endpoint}/sessions`; const response = await fetch(endpoint, { method: "POST", headers: this.headers, body: JSON.stringify(sessionCreate) }); if (!response.ok) { console.error(`Failed to persist session: ${response.status} ${response.statusText}, using default session.`); return { id: 1, ...sessionCreate }; } return { id: (await response.json()).id, ...sessionCreate }; } async _handleSessionResponse(endpoint) { const response = await fetch(endpoint, { method: "GET", headers: this.headers }); let tracerSession; if (!response.ok) { console.error(`Failed to load session: ${response.status} ${response.statusText}`); tracerSession = { id: 1, start_time: Date.now() }; this.session = tracerSession; return tracerSession; } const resp = await response.json(); if (resp.length === 0) { tracerSession = { id: 1, start_time: Date.now() }; this.session = tracerSession; return tracerSession; } [tracerSession] = resp; this.session = tracerSession; return tracerSession; } }; // node_modules/langchain/node_modules/@langchain/core/dist/tracers/initialize.js async function getTracingCallbackHandler(session) { const tracer = new LangChainTracerV1(); if (session) { await tracer.loadSession(session); } else { await tracer.loadDefaultSession(); } return tracer; } async function getTracingV2CallbackHandler() { return new LangChainTracer(); } // node_modules/langchain/node_modules/@langchain/core/dist/callbacks/promises.js var import_p_queue2 = __toESM(require_dist(), 1); var queue; function createQueue() { const PQueue = "default" in import_p_queue2.default ? import_p_queue2.default.default : import_p_queue2.default; return new PQueue({ autoStart: true, concurrency: 1 }); } async function consumeCallback(promiseFn, wait) { if (wait === true) { await promiseFn(); } else { if (typeof queue === "undefined") { queue = createQueue(); } void queue.add(promiseFn); } } // node_modules/langchain/node_modules/@langchain/core/dist/callbacks/manager.js function parseCallbackConfigArg(arg) { if (!arg) { return {}; } else if (Array.isArray(arg) || "name" in arg) { return { callbacks: arg }; } else { return arg; } } var BaseCallbackManager = class { setHandler(handler) { return this.setHandlers([handler]); } }; var BaseRunManager = class { constructor(runId, handlers, inheritableHandlers, tags, inheritableTags, metadata, inheritableMetadata, _parentRunId) { Object.defineProperty(this, "runId", { enumerable: true, configurable: true, writable: true, value: runId }); Object.defineProperty(this, "handlers", { enumerable: true, configurable: true, writable: true, value: handlers }); Object.defineProperty(this, "inheritableHandlers", { enumerable: true, configurable: true, writable: true, value: inheritableHandlers }); Object.defineProperty(this, "tags", { enumerable: true, configurable: true, writable: true, value: tags }); Object.defineProperty(this, "inheritableTags", { enumerable: true, configurable: true, writable: true, value: inheritableTags }); Object.defineProperty(this, "metadata", { enumerable: true, configurable: true, writable: true, value: metadata }); Object.defineProperty(this, "inheritableMetadata", { enumerable: true, configurable: true, writable: true, value: inheritableMetadata }); Object.defineProperty(this, "_parentRunId", { enumerable: true, configurable: true, writable: true, value: _parentRunId }); } async handleText(text) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; try { await ((_a2 = handler.handleText) == null ? void 0 : _a2.call(handler, text, this.runId, this._parentRunId, this.tags)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleText: ${err}`); } }, handler.awaitHandlers))); } }; var CallbackManagerForRetrieverRun = class extends BaseRunManager { getChild(tag) { const manager = new CallbackManager(this.runId); manager.setHandlers(this.inheritableHandlers); manager.addTags(this.inheritableTags); manager.addMetadata(this.inheritableMetadata); if (tag) { manager.addTags([tag], false); } return manager; } async handleRetrieverEnd(documents) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreRetriever) { try { await ((_a2 = handler.handleRetrieverEnd) == null ? void 0 : _a2.call(handler, documents, this.runId, this._parentRunId, this.tags)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleRetriever`); } } }, handler.awaitHandlers))); } async handleRetrieverError(err) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreRetriever) { try { await ((_a2 = handler.handleRetrieverError) == null ? void 0 : _a2.call(handler, err, this.runId, this._parentRunId, this.tags)); } catch (error) { console.error(`Error in handler ${handler.constructor.name}, handleRetrieverError: ${error}`); } } }, handler.awaitHandlers))); } }; var CallbackManagerForLLMRun = class extends BaseRunManager { async handleLLMNewToken(token, idx, _runId, _parentRunId, _tags, fields) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreLLM) { try { await ((_a2 = handler.handleLLMNewToken) == null ? void 0 : _a2.call(handler, token, idx != null ? idx : { prompt: 0, completion: 0 }, this.runId, this._parentRunId, this.tags, fields)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleLLMNewToken: ${err}`); } } }, handler.awaitHandlers))); } async handleLLMError(err) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreLLM) { try { await ((_a2 = handler.handleLLMError) == null ? void 0 : _a2.call(handler, err, this.runId, this._parentRunId, this.tags)); } catch (err2) { console.error(`Error in handler ${handler.constructor.name}, handleLLMError: ${err2}`); } } }, handler.awaitHandlers))); } async handleLLMEnd(output) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreLLM) { try { await ((_a2 = handler.handleLLMEnd) == null ? void 0 : _a2.call(handler, output, this.runId, this._parentRunId, this.tags)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleLLMEnd: ${err}`); } } }, handler.awaitHandlers))); } }; var CallbackManagerForChainRun = class extends BaseRunManager { getChild(tag) { const manager = new CallbackManager(this.runId); manager.setHandlers(this.inheritableHandlers); manager.addTags(this.inheritableTags); manager.addMetadata(this.inheritableMetadata); if (tag) { manager.addTags([tag], false); } return manager; } async handleChainError(err, _runId, _parentRunId, _tags, kwargs) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreChain) { try { await ((_a2 = handler.handleChainError) == null ? void 0 : _a2.call(handler, err, this.runId, this._parentRunId, this.tags, kwargs)); } catch (err2) { console.error(`Error in handler ${handler.constructor.name}, handleChainError: ${err2}`); } } }, handler.awaitHandlers))); } async handleChainEnd(output, _runId, _parentRunId, _tags, kwargs) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreChain) { try { await ((_a2 = handler.handleChainEnd) == null ? void 0 : _a2.call(handler, output, this.runId, this._parentRunId, this.tags, kwargs)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleChainEnd: ${err}`); } } }, handler.awaitHandlers))); } async handleAgentAction(action) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreAgent) { try { await ((_a2 = handler.handleAgentAction) == null ? void 0 : _a2.call(handler, action, this.runId, this._parentRunId, this.tags)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleAgentAction: ${err}`); } } }, handler.awaitHandlers))); } async handleAgentEnd(action) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreAgent) { try { await ((_a2 = handler.handleAgentEnd) == null ? void 0 : _a2.call(handler, action, this.runId, this._parentRunId, this.tags)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleAgentEnd: ${err}`); } } }, handler.awaitHandlers))); } }; var CallbackManagerForToolRun = class extends BaseRunManager { getChild(tag) { const manager = new CallbackManager(this.runId); manager.setHandlers(this.inheritableHandlers); manager.addTags(this.inheritableTags); manager.addMetadata(this.inheritableMetadata); if (tag) { manager.addTags([tag], false); } return manager; } async handleToolError(err) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreAgent) { try { await ((_a2 = handler.handleToolError) == null ? void 0 : _a2.call(handler, err, this.runId, this._parentRunId, this.tags)); } catch (err2) { console.error(`Error in handler ${handler.constructor.name}, handleToolError: ${err2}`); } } }, handler.awaitHandlers))); } async handleToolEnd(output) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreAgent) { try { await ((_a2 = handler.handleToolEnd) == null ? void 0 : _a2.call(handler, output, this.runId, this._parentRunId, this.tags)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleToolEnd: ${err}`); } } }, handler.awaitHandlers))); } }; var CallbackManager = class extends BaseCallbackManager { constructor(parentRunId, options) { var _a2, _b, _c, _d, _e, _f; super(); Object.defineProperty(this, "handlers", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "inheritableHandlers", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "tags", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "inheritableTags", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "metadata", { enumerable: true, configurable: true, writable: true, value: {} }); Object.defineProperty(this, "inheritableMetadata", { enumerable: true, configurable: true, writable: true, value: {} }); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: "callback_manager" }); Object.defineProperty(this, "_parentRunId", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.handlers = (_a2 = options == null ? void 0 : options.handlers) != null ? _a2 : this.handlers; this.inheritableHandlers = (_b = options == null ? void 0 : options.inheritableHandlers) != null ? _b : this.inheritableHandlers; this.tags = (_c = options == null ? void 0 : options.tags) != null ? _c : this.tags; this.inheritableTags = (_d = options == null ? void 0 : options.inheritableTags) != null ? _d : this.inheritableTags; this.metadata = (_e = options == null ? void 0 : options.metadata) != null ? _e : this.metadata; this.inheritableMetadata = (_f = options == null ? void 0 : options.inheritableMetadata) != null ? _f : this.inheritableMetadata; this._parentRunId = parentRunId; } async handleLLMStart(llm, prompts, _runId = void 0, _parentRunId = void 0, extraParams = void 0, _tags = void 0, _metadata = void 0, runName = void 0) { return Promise.all(prompts.map(async (prompt) => { const runId = v4_default(); await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreLLM) { try { await ((_a2 = handler.handleLLMStart) == null ? void 0 : _a2.call(handler, llm, [prompt], runId, this._parentRunId, extraParams, this.tags, this.metadata, runName)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleLLMStart: ${err}`); } } }, handler.awaitHandlers))); return new CallbackManagerForLLMRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); })); } async handleChatModelStart(llm, messages, _runId = void 0, _parentRunId = void 0, extraParams = void 0, _tags = void 0, _metadata = void 0, runName = void 0) { return Promise.all(messages.map(async (messageGroup) => { const runId = v4_default(); await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2, _b; if (!handler.ignoreLLM) { try { if (handler.handleChatModelStart) { await ((_a2 = handler.handleChatModelStart) == null ? void 0 : _a2.call(handler, llm, [messageGroup], runId, this._parentRunId, extraParams, this.tags, this.metadata, runName)); } else if (handler.handleLLMStart) { const messageString = getBufferString(messageGroup); await ((_b = handler.handleLLMStart) == null ? void 0 : _b.call(handler, llm, [messageString], runId, this._parentRunId, extraParams, this.tags, this.metadata, runName)); } } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleLLMStart: ${err}`); } } }, handler.awaitHandlers))); return new CallbackManagerForLLMRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); })); } async handleChainStart(chain, inputs, runId = v4_default(), runType = void 0, _tags = void 0, _metadata = void 0, runName = void 0) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreChain) { try { await ((_a2 = handler.handleChainStart) == null ? void 0 : _a2.call(handler, chain, inputs, runId, this._parentRunId, this.tags, this.metadata, runType, runName)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleChainStart: ${err}`); } } }, handler.awaitHandlers))); return new CallbackManagerForChainRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); } async handleToolStart(tool, input, runId = v4_default(), _parentRunId = void 0, _tags = void 0, _metadata = void 0, runName = void 0) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreAgent) { try { await ((_a2 = handler.handleToolStart) == null ? void 0 : _a2.call(handler, tool, input, runId, this._parentRunId, this.tags, this.metadata, runName)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleToolStart: ${err}`); } } }, handler.awaitHandlers))); return new CallbackManagerForToolRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); } async handleRetrieverStart(retriever, query, runId = v4_default(), _parentRunId = void 0, _tags = void 0, _metadata = void 0, runName = void 0) { await Promise.all(this.handlers.map((handler) => consumeCallback(async () => { var _a2; if (!handler.ignoreRetriever) { try { await ((_a2 = handler.handleRetrieverStart) == null ? void 0 : _a2.call(handler, retriever, query, runId, this._parentRunId, this.tags, this.metadata, runName)); } catch (err) { console.error(`Error in handler ${handler.constructor.name}, handleRetrieverStart: ${err}`); } } }, handler.awaitHandlers))); return new CallbackManagerForRetrieverRun(runId, this.handlers, this.inheritableHandlers, this.tags, this.inheritableTags, this.metadata, this.inheritableMetadata, this._parentRunId); } addHandler(handler, inherit = true) { this.handlers.push(handler); if (inherit) { this.inheritableHandlers.push(handler); } } removeHandler(handler) { this.handlers = this.handlers.filter((_handler) => _handler !== handler); this.inheritableHandlers = this.inheritableHandlers.filter((_handler) => _handler !== handler); } setHandlers(handlers, inherit = true) { this.handlers = []; this.inheritableHandlers = []; for (const handler of handlers) { this.addHandler(handler, inherit); } } addTags(tags, inherit = true) { this.removeTags(tags); this.tags.push(...tags); if (inherit) { this.inheritableTags.push(...tags); } } removeTags(tags) { this.tags = this.tags.filter((tag) => !tags.includes(tag)); this.inheritableTags = this.inheritableTags.filter((tag) => !tags.includes(tag)); } addMetadata(metadata, inherit = true) { this.metadata = { ...this.metadata, ...metadata }; if (inherit) { this.inheritableMetadata = { ...this.inheritableMetadata, ...metadata }; } } removeMetadata(metadata) { for (const key of Object.keys(metadata)) { delete this.metadata[key]; delete this.inheritableMetadata[key]; } } copy(additionalHandlers = [], inherit = true) { const manager = new CallbackManager(this._parentRunId); for (const handler of this.handlers) { const inheritable = this.inheritableHandlers.includes(handler); manager.addHandler(handler, inheritable); } for (const tag of this.tags) { const inheritable = this.inheritableTags.includes(tag); manager.addTags([tag], inheritable); } for (const key of Object.keys(this.metadata)) { const inheritable = Object.keys(this.inheritableMetadata).includes(key); manager.addMetadata({ [key]: this.metadata[key] }, inheritable); } for (const handler of additionalHandlers) { if ( // Prevent multiple copies of console_callback_handler manager.handlers.filter((h) => h.name === "console_callback_handler").some((h) => h.name === handler.name) ) { continue; } manager.addHandler(handler, inherit); } return manager; } static fromHandlers(handlers) { class Handler extends BaseCallbackHandler { constructor() { super(); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: v4_default() }); Object.assign(this, handlers); } } const manager = new this(); manager.addHandler(new Handler()); return manager; } static async configure(inheritableHandlers, localHandlers, inheritableTags, localTags, inheritableMetadata, localMetadata, options) { var _a2, _b; let callbackManager; if (inheritableHandlers || localHandlers) { if (Array.isArray(inheritableHandlers) || !inheritableHandlers) { callbackManager = new CallbackManager(); callbackManager.setHandlers((_a2 = inheritableHandlers == null ? void 0 : inheritableHandlers.map(ensureHandler)) != null ? _a2 : [], true); } else { callbackManager = inheritableHandlers; } callbackManager = callbackManager.copy(Array.isArray(localHandlers) ? localHandlers.map(ensureHandler) : localHandlers == null ? void 0 : localHandlers.handlers, false); } const verboseEnabled = getEnvironmentVariable2("LANGCHAIN_VERBOSE") === "true" || (options == null ? void 0 : options.verbose); const tracingV2Enabled = getEnvironmentVariable2("LANGCHAIN_TRACING_V2") === "true"; const tracingEnabled = tracingV2Enabled || ((_b = getEnvironmentVariable2("LANGCHAIN_TRACING")) != null ? _b : false); if (verboseEnabled || tracingEnabled) { if (!callbackManager) { callbackManager = new CallbackManager(); } if (verboseEnabled && !callbackManager.handlers.some((handler) => handler.name === ConsoleCallbackHandler.prototype.name)) { const consoleHandler = new ConsoleCallbackHandler(); callbackManager.addHandler(consoleHandler, true); } if (tracingEnabled && !callbackManager.handlers.some((handler) => handler.name === "langchain_tracer")) { if (tracingV2Enabled) { callbackManager.addHandler(await getTracingV2CallbackHandler(), true); } else { const session = getEnvironmentVariable2("LANGCHAIN_PROJECT") && getEnvironmentVariable2("LANGCHAIN_SESSION"); callbackManager.addHandler(await getTracingCallbackHandler(session), true); } } } if (inheritableTags || localTags) { if (callbackManager) { callbackManager.addTags(inheritableTags != null ? inheritableTags : []); callbackManager.addTags(localTags != null ? localTags : [], false); } } if (inheritableMetadata || localMetadata) { if (callbackManager) { callbackManager.addMetadata(inheritableMetadata != null ? inheritableMetadata : {}); callbackManager.addMetadata(localMetadata != null ? localMetadata : {}, false); } } return callbackManager; } }; function ensureHandler(handler) { if ("name" in handler) { return handler; } return BaseCallbackHandler.fromMethods(handler); } // node_modules/langchain/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.js var core_exports = {}; __export(core_exports, { JsonPatchError: () => JsonPatchError, _areEquals: () => _areEquals, applyOperation: () => applyOperation, applyPatch: () => applyPatch, applyReducer: () => applyReducer, deepClone: () => deepClone, getValueByPointer: () => getValueByPointer, validate: () => validate2, validator: () => validator }); // node_modules/langchain/node_modules/@langchain/core/dist/utils/fast-json-patch/src/helpers.js var _hasOwnProperty = Object.prototype.hasOwnProperty; function hasOwnProperty(obj, key) { return _hasOwnProperty.call(obj, key); } function _objectKeys(obj) { if (Array.isArray(obj)) { const keys2 = new Array(obj.length); for (let k = 0; k < keys2.length; k++) { keys2[k] = "" + k; } return keys2; } if (Object.keys) { return Object.keys(obj); } let keys = []; for (let i in obj) { if (hasOwnProperty(obj, i)) { keys.push(i); } } return keys; } function _deepClone(obj) { switch (typeof obj) { case "object": return JSON.parse(JSON.stringify(obj)); case "undefined": return null; default: return obj; } } function isInteger(str) { let i = 0; const len = str.length; let charCode; while (i < len) { charCode = str.charCodeAt(i); if (charCode >= 48 && charCode <= 57) { i++; continue; } return false; } return true; } function escapePathComponent(path) { if (path.indexOf("/") === -1 && path.indexOf("~") === -1) return path; return path.replace(/~/g, "~0").replace(/\//g, "~1"); } function unescapePathComponent(path) { return path.replace(/~1/g, "/").replace(/~0/g, "~"); } function hasUndefined(obj) { if (obj === void 0) { return true; } if (obj) { if (Array.isArray(obj)) { for (let i2 = 0, len = obj.length; i2 < len; i2++) { if (hasUndefined(obj[i2])) { return true; } } } else if (typeof obj === "object") { const objKeys = _objectKeys(obj); const objKeysLength = objKeys.length; for (var i = 0; i < objKeysLength; i++) { if (hasUndefined(obj[objKeys[i]])) { return true; } } } } return false; } function patchErrorMessageFormatter(message, args) { const messageParts = [message]; for (const key in args) { const value = typeof args[key] === "object" ? JSON.stringify(args[key], null, 2) : args[key]; if (typeof value !== "undefined") { messageParts.push(`${key}: ${value}`); } } return messageParts.join("\n"); } var PatchError = class extends Error { constructor(message, name, index, operation, tree) { super(patchErrorMessageFormatter(message, { name, index, operation, tree })); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: name }); Object.defineProperty(this, "index", { enumerable: true, configurable: true, writable: true, value: index }); Object.defineProperty(this, "operation", { enumerable: true, configurable: true, writable: true, value: operation }); Object.defineProperty(this, "tree", { enumerable: true, configurable: true, writable: true, value: tree }); Object.setPrototypeOf(this, new.target.prototype); this.message = patchErrorMessageFormatter(message, { name, index, operation, tree }); } }; // node_modules/langchain/node_modules/@langchain/core/dist/utils/fast-json-patch/src/core.js var JsonPatchError = PatchError; var deepClone = _deepClone; var objOps = { add: function(obj, key, document2) { obj[key] = this.value; return { newDocument: document2 }; }, remove: function(obj, key, document2) { var removed = obj[key]; delete obj[key]; return { newDocument: document2, removed }; }, replace: function(obj, key, document2) { var removed = obj[key]; obj[key] = this.value; return { newDocument: document2, removed }; }, move: function(obj, key, document2) { let removed = getValueByPointer(document2, this.path); if (removed) { removed = _deepClone(removed); } const originalValue = applyOperation(document2, { op: "remove", path: this.from }).removed; applyOperation(document2, { op: "add", path: this.path, value: originalValue }); return { newDocument: document2, removed }; }, copy: function(obj, key, document2) { const valueToCopy = getValueByPointer(document2, this.from); applyOperation(document2, { op: "add", path: this.path, value: _deepClone(valueToCopy) }); return { newDocument: document2 }; }, test: function(obj, key, document2) { return { newDocument: document2, test: _areEquals(obj[key], this.value) }; }, _get: function(obj, key, document2) { this.value = obj[key]; return { newDocument: document2 }; } }; var arrOps = { add: function(arr, i, document2) { if (isInteger(i)) { arr.splice(i, 0, this.value); } else { arr[i] = this.value; } return { newDocument: document2, index: i }; }, remove: function(arr, i, document2) { var removedList = arr.splice(i, 1); return { newDocument: document2, removed: removedList[0] }; }, replace: function(arr, i, document2) { var removed = arr[i]; arr[i] = this.value; return { newDocument: document2, removed }; }, move: objOps.move, copy: objOps.copy, test: objOps.test, _get: objOps._get }; function getValueByPointer(document2, pointer) { if (pointer == "") { return document2; } var getOriginalDestination = { op: "_get", path: pointer }; applyOperation(document2, getOriginalDestination); return getOriginalDestination.value; } function applyOperation(document2, operation, validateOperation = false, mutateDocument = true, banPrototypeModifications = true, index = 0) { if (validateOperation) { if (typeof validateOperation == "function") { validateOperation(operation, 0, document2, operation.path); } else { validator(operation, 0); } } if (operation.path === "") { let returnValue = { newDocument: document2 }; if (operation.op === "add") { returnValue.newDocument = operation.value; return returnValue; } else if (operation.op === "replace") { returnValue.newDocument = operation.value; returnValue.removed = document2; return returnValue; } else if (operation.op === "move" || operation.op === "copy") { returnValue.newDocument = getValueByPointer(document2, operation.from); if (operation.op === "move") { returnValue.removed = document2; } return returnValue; } else if (operation.op === "test") { returnValue.test = _areEquals(document2, operation.value); if (returnValue.test === false) { throw new JsonPatchError("Test operation failed", "TEST_OPERATION_FAILED", index, operation, document2); } returnValue.newDocument = document2; return returnValue; } else if (operation.op === "remove") { returnValue.removed = document2; returnValue.newDocument = null; return returnValue; } else if (operation.op === "_get") { operation.value = document2; return returnValue; } else { if (validateOperation) { throw new JsonPatchError("Operation `op` property is not one of operations defined in RFC-6902", "OPERATION_OP_INVALID", index, operation, document2); } else { return returnValue; } } } else { if (!mutateDocument) { document2 = _deepClone(document2); } const path = operation.path || ""; const keys = path.split("/"); let obj = document2; let t = 1; let len = keys.length; let existingPathFragment = void 0; let key; let validateFunction; if (typeof validateOperation == "function") { validateFunction = validateOperation; } else { validateFunction = validator; } while (true) { key = keys[t]; if (key && key.indexOf("~") != -1) { key = unescapePathComponent(key); } if (banPrototypeModifications && (key == "__proto__" || key == "prototype" && t > 0 && keys[t - 1] == "constructor")) { throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README"); } if (validateOperation) { if (existingPathFragment === void 0) { if (obj[key] === void 0) { existingPathFragment = keys.slice(0, t).join("/"); } else if (t == len - 1) { existingPathFragment = operation.path; } if (existingPathFragment !== void 0) { validateFunction(operation, 0, document2, existingPathFragment); } } } t++; if (Array.isArray(obj)) { if (key === "-") { key = obj.length; } else { if (validateOperation && !isInteger(key)) { throw new JsonPatchError("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index", "OPERATION_PATH_ILLEGAL_ARRAY_INDEX", index, operation, document2); } else if (isInteger(key)) { key = ~~key; } } if (t >= len) { if (validateOperation && operation.op === "add" && key > obj.length) { throw new JsonPatchError("The specified index MUST NOT be greater than the number of elements in the array", "OPERATION_VALUE_OUT_OF_BOUNDS", index, operation, document2); } const returnValue = arrOps[operation.op].call(operation, obj, key, document2); if (returnValue.test === false) { throw new JsonPatchError("Test operation failed", "TEST_OPERATION_FAILED", index, operation, document2); } return returnValue; } } else { if (t >= len) { const returnValue = objOps[operation.op].call(operation, obj, key, document2); if (returnValue.test === false) { throw new JsonPatchError("Test operation failed", "TEST_OPERATION_FAILED", index, operation, document2); } return returnValue; } } obj = obj[key]; if (validateOperation && t < len && (!obj || typeof obj !== "object")) { throw new JsonPatchError("Cannot perform operation at the desired path", "OPERATION_PATH_UNRESOLVABLE", index, operation, document2); } } } } function applyPatch(document2, patch, validateOperation, mutateDocument = true, banPrototypeModifications = true) { if (validateOperation) { if (!Array.isArray(patch)) { throw new JsonPatchError("Patch sequence must be an array", "SEQUENCE_NOT_AN_ARRAY"); } } if (!mutateDocument) { document2 = _deepClone(document2); } const results = new Array(patch.length); for (let i = 0, length = patch.length; i < length; i++) { results[i] = applyOperation(document2, patch[i], validateOperation, true, banPrototypeModifications, i); document2 = results[i].newDocument; } results.newDocument = document2; return results; } function applyReducer(document2, operation, index) { const operationResult = applyOperation(document2, operation); if (operationResult.test === false) { throw new JsonPatchError("Test operation failed", "TEST_OPERATION_FAILED", index, operation, document2); } return operationResult.newDocument; } function validator(operation, index, document2, existingPathFragment) { if (typeof operation !== "object" || operation === null || Array.isArray(operation)) { throw new JsonPatchError("Operation is not an object", "OPERATION_NOT_AN_OBJECT", index, operation, document2); } else if (!objOps[operation.op]) { throw new JsonPatchError("Operation `op` property is not one of operations defined in RFC-6902", "OPERATION_OP_INVALID", index, operation, document2); } else if (typeof operation.path !== "string") { throw new JsonPatchError("Operation `path` property is not a string", "OPERATION_PATH_INVALID", index, operation, document2); } else if (operation.path.indexOf("/") !== 0 && operation.path.length > 0) { throw new JsonPatchError('Operation `path` property must start with "/"', "OPERATION_PATH_INVALID", index, operation, document2); } else if ((operation.op === "move" || operation.op === "copy") && typeof operation.from !== "string") { throw new JsonPatchError("Operation `from` property is not present (applicable in `move` and `copy` operations)", "OPERATION_FROM_REQUIRED", index, operation, document2); } else if ((operation.op === "add" || operation.op === "replace" || operation.op === "test") && operation.value === void 0) { throw new JsonPatchError("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)", "OPERATION_VALUE_REQUIRED", index, operation, document2); } else if ((operation.op === "add" || operation.op === "replace" || operation.op === "test") && hasUndefined(operation.value)) { throw new JsonPatchError("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)", "OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED", index, operation, document2); } else if (document2) { if (operation.op == "add") { var pathLen = operation.path.split("/").length; var existingPathLen = existingPathFragment.split("/").length; if (pathLen !== existingPathLen + 1 && pathLen !== existingPathLen) { throw new JsonPatchError("Cannot perform an `add` operation at the desired path", "OPERATION_PATH_CANNOT_ADD", index, operation, document2); } } else if (operation.op === "replace" || operation.op === "remove" || operation.op === "_get") { if (operation.path !== existingPathFragment) { throw new JsonPatchError("Cannot perform the operation at a path that does not exist", "OPERATION_PATH_UNRESOLVABLE", index, operation, document2); } } else if (operation.op === "move" || operation.op === "copy") { var existingValue = { op: "_get", path: operation.from, value: void 0 }; var error = validate2([existingValue], document2); if (error && error.name === "OPERATION_PATH_UNRESOLVABLE") { throw new JsonPatchError("Cannot perform the operation from a path that does not exist", "OPERATION_FROM_UNRESOLVABLE", index, operation, document2); } } } } function validate2(sequence, document2, externalValidator) { try { if (!Array.isArray(sequence)) { throw new JsonPatchError("Patch sequence must be an array", "SEQUENCE_NOT_AN_ARRAY"); } if (document2) { applyPatch(_deepClone(document2), _deepClone(sequence), externalValidator || true); } else { externalValidator = externalValidator || validator; for (var i = 0; i < sequence.length; i++) { externalValidator(sequence[i], i, document2, void 0); } } } catch (e) { if (e instanceof JsonPatchError) { return e; } else { throw e; } } } function _areEquals(a, b) { if (a === b) return true; if (a && b && typeof a == "object" && typeof b == "object") { var arrA = Array.isArray(a), arrB = Array.isArray(b), i, length, key; if (arrA && arrB) { length = a.length; if (length != b.length) return false; for (i = length; i-- !== 0; ) if (!_areEquals(a[i], b[i])) return false; return true; } if (arrA != arrB) return false; var keys = Object.keys(a); length = keys.length; if (length !== Object.keys(b).length) return false; for (i = length; i-- !== 0; ) if (!b.hasOwnProperty(keys[i])) return false; for (i = length; i-- !== 0; ) { key = keys[i]; if (!_areEquals(a[key], b[key])) return false; } return true; } return a !== a && b !== b; } // node_modules/langchain/node_modules/@langchain/core/dist/utils/fast-json-patch/index.js var fast_json_patch_default = { ...core_exports, // ...duplex, JsonPatchError: PatchError, deepClone: _deepClone, escapePathComponent, unescapePathComponent }; // node_modules/langchain/node_modules/@langchain/core/dist/utils/stream.js var IterableReadableStream = class extends ReadableStream { constructor() { super(...arguments); Object.defineProperty(this, "reader", { enumerable: true, configurable: true, writable: true, value: void 0 }); } ensureReader() { if (!this.reader) { this.reader = this.getReader(); } } async next() { this.ensureReader(); try { const result = await this.reader.read(); if (result.done) this.reader.releaseLock(); return { done: result.done, value: result.value // Cloudflare Workers typing fix }; } catch (e) { this.reader.releaseLock(); throw e; } } async return() { this.ensureReader(); if (this.locked) { const cancelPromise = this.reader.cancel(); this.reader.releaseLock(); await cancelPromise; } return { done: true, value: void 0 }; } [Symbol.asyncIterator]() { return this; } static fromReadableStream(stream) { const reader = stream.getReader(); return new IterableReadableStream({ start(controller) { return pump(); function pump() { return reader.read().then(({ done, value }) => { if (done) { controller.close(); return; } controller.enqueue(value); return pump(); }); } }, cancel() { reader.releaseLock(); } }); } static fromAsyncGenerator(generator) { return new IterableReadableStream({ async pull(controller) { const { value, done } = await generator.next(); if (done) { controller.close(); } controller.enqueue(value); } }); } }; // node_modules/langchain/node_modules/@langchain/core/dist/tracers/log_stream.js var RunLogPatch = class { constructor(fields) { Object.defineProperty(this, "ops", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.ops = fields.ops; } concat(other) { const ops = this.ops.concat(other.ops); const states = applyPatch({}, ops); return new RunLog({ ops, state: states[states.length - 1].newDocument }); } }; var RunLog = class extends RunLogPatch { constructor(fields) { super(fields); Object.defineProperty(this, "state", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.state = fields.state; } concat(other) { const ops = this.ops.concat(other.ops); const states = applyPatch(this.state, other.ops); return new RunLog({ ops, state: states[states.length - 1].newDocument }); } }; var LogStreamCallbackHandler = class extends BaseTracer { constructor(fields) { var _a2; super(fields); Object.defineProperty(this, "autoClose", { enumerable: true, configurable: true, writable: true, value: true }); Object.defineProperty(this, "includeNames", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "includeTypes", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "includeTags", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "excludeNames", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "excludeTypes", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "excludeTags", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "keyMapByRunId", { enumerable: true, configurable: true, writable: true, value: {} }); Object.defineProperty(this, "counterMapByRunName", { enumerable: true, configurable: true, writable: true, value: {} }); Object.defineProperty(this, "transformStream", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "writer", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "receiveStream", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: "log_stream_tracer" }); this.autoClose = (_a2 = fields == null ? void 0 : fields.autoClose) != null ? _a2 : true; this.includeNames = fields == null ? void 0 : fields.includeNames; this.includeTypes = fields == null ? void 0 : fields.includeTypes; this.includeTags = fields == null ? void 0 : fields.includeTags; this.excludeNames = fields == null ? void 0 : fields.excludeNames; this.excludeTypes = fields == null ? void 0 : fields.excludeTypes; this.excludeTags = fields == null ? void 0 : fields.excludeTags; this.transformStream = new TransformStream(); this.writer = this.transformStream.writable.getWriter(); this.receiveStream = IterableReadableStream.fromReadableStream(this.transformStream.readable); } [Symbol.asyncIterator]() { return this.receiveStream; } async persistRun(_run) { } _includeRun(run) { var _a2; if (run.parent_run_id === void 0) { return false; } const runTags = (_a2 = run.tags) != null ? _a2 : []; let include = this.includeNames === void 0 && this.includeTags === void 0 && this.includeTypes === void 0; if (this.includeNames !== void 0) { include = include || this.includeNames.includes(run.name); } if (this.includeTypes !== void 0) { include = include || this.includeTypes.includes(run.run_type); } if (this.includeTags !== void 0) { include = include || runTags.find((tag) => { var _a3; return (_a3 = this.includeTags) == null ? void 0 : _a3.includes(tag); }) !== void 0; } if (this.excludeNames !== void 0) { include = include && !this.excludeNames.includes(run.name); } if (this.excludeTypes !== void 0) { include = include && !this.excludeTypes.includes(run.run_type); } if (this.excludeTags !== void 0) { include = include && runTags.every((tag) => { var _a3; return !((_a3 = this.excludeTags) == null ? void 0 : _a3.includes(tag)); }); } return include; } async onRunCreate(run) { var _a2, _b, _c; if (run.parent_run_id === void 0) { await this.writer.write(new RunLogPatch({ ops: [ { op: "replace", path: "", value: { id: run.id, streamed_output: [], final_output: void 0, logs: {} } } ] })); } if (!this._includeRun(run)) { return; } if (this.counterMapByRunName[run.name] === void 0) { this.counterMapByRunName[run.name] = 0; } this.counterMapByRunName[run.name] += 1; const count = this.counterMapByRunName[run.name]; this.keyMapByRunId[run.id] = count === 1 ? run.name : `${run.name}:${count}`; const logEntry = { id: run.id, name: run.name, type: run.run_type, tags: (_a2 = run.tags) != null ? _a2 : [], metadata: (_c = (_b = run.extra) == null ? void 0 : _b.metadata) != null ? _c : {}, start_time: new Date(run.start_time).toISOString(), streamed_output_str: [], final_output: void 0, end_time: void 0 }; await this.writer.write(new RunLogPatch({ ops: [ { op: "add", path: `/logs/${this.keyMapByRunId[run.id]}`, value: logEntry } ] })); } async onRunUpdate(run) { try { const runName = this.keyMapByRunId[run.id]; if (runName === void 0) { return; } const ops = [ { op: "add", path: `/logs/${runName}/final_output`, value: run.outputs } ]; if (run.end_time !== void 0) { ops.push({ op: "add", path: `/logs/${runName}/end_time`, value: new Date(run.end_time).toISOString() }); } const patch = new RunLogPatch({ ops }); await this.writer.write(patch); } finally { if (run.parent_run_id === void 0) { const patch = new RunLogPatch({ ops: [ { op: "replace", path: "/final_output", value: run.outputs } ] }); await this.writer.write(patch); if (this.autoClose) { await this.writer.close(); } } } } async onLLMNewToken(run, token) { const runName = this.keyMapByRunId[run.id]; if (runName === void 0) { return; } const patch = new RunLogPatch({ ops: [ { op: "add", path: `/logs/${runName}/streamed_output_str/-`, value: token } ] }); await this.writer.write(patch); } }; // node_modules/langchain/node_modules/@langchain/core/dist/runnables/config.js async function getCallbackMangerForConfig(config) { return CallbackManager.configure(config == null ? void 0 : config.callbacks, void 0, config == null ? void 0 : config.tags, void 0, config == null ? void 0 : config.metadata); } function mergeConfigs(config, options) { var _a2, _b, _c, _d; const copy = { ...config }; if (options) { for (const key of Object.keys(options)) { if (key === "metadata") { copy[key] = { ...copy[key], ...options[key] }; } else if (key === "tags") { copy[key] = ((_a2 = copy[key]) != null ? _a2 : []).concat((_b = options[key]) != null ? _b : []); } else if (key === "callbacks") { const baseCallbacks = copy.callbacks; const providedCallbacks = (_c = options.callbacks) != null ? _c : config.callbacks; if (Array.isArray(providedCallbacks)) { if (!baseCallbacks) { copy.callbacks = providedCallbacks; } else if (Array.isArray(baseCallbacks)) { copy.callbacks = baseCallbacks.concat(providedCallbacks); } else { const manager = baseCallbacks.copy(); for (const callback of providedCallbacks) { manager.addHandler(callback, true); } copy.callbacks = manager; } } else if (providedCallbacks) { if (!baseCallbacks) { copy.callbacks = providedCallbacks; } else if (Array.isArray(baseCallbacks)) { const manager = providedCallbacks.copy(); for (const callback of baseCallbacks) { manager.addHandler(callback, true); } copy.callbacks = manager; } else { copy.callbacks = new CallbackManager(providedCallbacks.parentRunId, { handlers: baseCallbacks.handlers.concat(providedCallbacks.handlers), inheritableHandlers: baseCallbacks.inheritableHandlers.concat(providedCallbacks.inheritableHandlers), tags: Array.from(new Set(baseCallbacks.tags.concat(providedCallbacks.tags))), inheritableTags: Array.from(new Set(baseCallbacks.inheritableTags.concat(providedCallbacks.inheritableTags))), metadata: { ...baseCallbacks.metadata, ...providedCallbacks.metadata } }); } } } else { copy[key] = (_d = options[key]) != null ? _d : copy[key]; } } } return copy; } // node_modules/langchain/node_modules/@langchain/core/dist/utils/async_caller.js var import_p_retry2 = __toESM(require_p_retry(), 1); var import_p_queue3 = __toESM(require_dist(), 1); var STATUS_NO_RETRY2 = [ 400, 401, 402, 403, 404, 405, 406, 407, 408, 409 // Conflict ]; var defaultFailedAttemptHandler = (error) => { var _a2, _b, _c; if (error.message.startsWith("Cancel") || error.message.startsWith("TimeoutError") || error.name === "TimeoutError" || error.message.startsWith("AbortError") || error.name === "AbortError") { throw error; } if ((error == null ? void 0 : error.code) === "ECONNABORTED") { throw error; } const status = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any (_b = (_a2 = error == null ? void 0 : error.response) == null ? void 0 : _a2.status) != null ? _b : error == null ? void 0 : error.status ); if (status && STATUS_NO_RETRY2.includes(+status)) { throw error; } if (((_c = error == null ? void 0 : error.error) == null ? void 0 : _c.code) === "insufficient_quota") { const err = new Error(error == null ? void 0 : error.message); err.name = "InsufficientQuotaError"; throw err; } }; var AsyncCaller2 = class { constructor(params) { var _a2, _b, _c; Object.defineProperty(this, "maxConcurrency", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "maxRetries", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "onFailedAttempt", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "queue", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.maxConcurrency = (_a2 = params.maxConcurrency) != null ? _a2 : Infinity; this.maxRetries = (_b = params.maxRetries) != null ? _b : 6; this.onFailedAttempt = (_c = params.onFailedAttempt) != null ? _c : defaultFailedAttemptHandler; const PQueue = "default" in import_p_queue3.default ? import_p_queue3.default.default : import_p_queue3.default; this.queue = new PQueue({ concurrency: this.maxConcurrency }); } // eslint-disable-next-line @typescript-eslint/no-explicit-any call(callable, ...args) { return this.queue.add(() => (0, import_p_retry2.default)(() => callable(...args).catch((error) => { if (error instanceof Error) { throw error; } else { throw new Error(error); } }), { onFailedAttempt: this.onFailedAttempt, retries: this.maxRetries, randomize: true // If needed we can change some of the defaults here, // but they're quite sensible. }), { throwOnTimeout: true }); } // eslint-disable-next-line @typescript-eslint/no-explicit-any callWithOptions(options, callable, ...args) { if (options.signal) { return Promise.race([ this.call(callable, ...args), new Promise((_, reject) => { var _a2; (_a2 = options.signal) == null ? void 0 : _a2.addEventListener("abort", () => { reject(new Error("AbortError")); }); }) ]); } return this.call(callable, ...args); } fetch(...args) { return this.call(() => fetch(...args).then((res) => res.ok ? res : Promise.reject(res))); } }; // node_modules/langchain/node_modules/@langchain/core/dist/tracers/root_listener.js var RootListenersTracer = class extends BaseTracer { constructor({ config, onStart, onEnd, onError }) { super(); Object.defineProperty(this, "name", { enumerable: true, configurable: true, writable: true, value: "RootListenersTracer" }); Object.defineProperty(this, "rootId", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "config", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "argOnStart", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "argOnEnd", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "argOnError", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.config = config; this.argOnStart = onStart; this.argOnEnd = onEnd; this.argOnError = onError; } /** * This is a legacy method only called once for an entire run tree * therefore not useful here * @param {Run} _ Not used */ persistRun(_) { return Promise.resolve(); } async onRunCreate(run) { if (this.rootId) { return; } this.rootId = run.id; if (this.argOnStart) { if (this.argOnStart.length === 1) { await this.argOnStart(run); } else if (this.argOnStart.length === 2) { await this.argOnStart(run, this.config); } } } async onRunUpdate(run) { if (run.id !== this.rootId) { return; } if (!run.error) { if (this.argOnEnd) { if (this.argOnEnd.length === 1) { await this.argOnEnd(run); } else if (this.argOnEnd.length === 2) { await this.argOnEnd(run, this.config); } } } else if (this.argOnError) { if (this.argOnError.length === 1) { await this.argOnError(run); } else if (this.argOnError.length === 2) { await this.argOnError(run, this.config); } } } }; // node_modules/langchain/node_modules/@langchain/core/dist/runnables/base.js function _coerceToDict2(value, defaultKey) { return value && !Array.isArray(value) && typeof value === "object" ? value : { [defaultKey]: value }; } var Runnable = class extends Serializable { constructor() { super(...arguments); Object.defineProperty(this, "lc_runnable", { enumerable: true, configurable: true, writable: true, value: true }); } /** * Bind arguments to a Runnable, returning a new Runnable. * @param kwargs * @returns A new RunnableBinding that, when invoked, will apply the bound args. */ bind(kwargs) { return new RunnableBinding({ bound: this, kwargs, config: {} }); } /** * Return a new Runnable that maps a list of inputs to a list of outputs, * by calling invoke() with each input. */ map() { return new RunnableEach({ bound: this }); } /** * Add retry logic to an existing runnable. * @param kwargs * @returns A new RunnableRetry that, when invoked, will retry according to the parameters. */ withRetry(fields) { return new RunnableRetry({ bound: this, kwargs: {}, config: {}, maxAttemptNumber: fields == null ? void 0 : fields.stopAfterAttempt, ...fields }); } /** * Bind config to a Runnable, returning a new Runnable. * @param config New configuration parameters to attach to the new runnable. * @returns A new RunnableBinding with a config matching what's passed. */ withConfig(config) { return new RunnableBinding({ bound: this, config, kwargs: {} }); } /** * Create a new runnable from the current one that will try invoking * other passed fallback runnables if the initial invocation fails. * @param fields.fallbacks Other runnables to call if the runnable errors. * @returns A new RunnableWithFallbacks. */ withFallbacks(fields) { return new RunnableWithFallbacks({ runnable: this, fallbacks: fields.fallbacks }); } _getOptionsList(options, length = 0) { if (Array.isArray(options)) { if (options.length !== length) { throw new Error(`Passed "options" must be an array with the same length as the inputs, but got ${options.length} options for ${length} inputs`); } return options; } return Array.from({ length }, () => options); } async batch(inputs, options, batchOptions) { const configList = this._getOptionsList(options != null ? options : {}, inputs.length); const caller = new AsyncCaller2({ maxConcurrency: batchOptions == null ? void 0 : batchOptions.maxConcurrency, onFailedAttempt: (e) => { throw e; } }); const batchCalls = inputs.map((input, i) => caller.call(async () => { try { const result = await this.invoke(input, configList[i]); return result; } catch (e) { if (batchOptions == null ? void 0 : batchOptions.returnExceptions) { return e; } throw e; } })); return Promise.all(batchCalls); } /** * Default streaming implementation. * Subclasses should override this method if they support streaming output. * @param input * @param options */ async *_streamIterator(input, options) { yield this.invoke(input, options); } /** * Stream output in chunks. * @param input * @param options * @returns A readable stream that is also an iterable. */ async stream(input, options) { return IterableReadableStream.fromAsyncGenerator(this._streamIterator(input, options)); } _separateRunnableConfigFromCallOptions(options = {}) { const runnableConfig = { callbacks: options.callbacks, tags: options.tags, metadata: options.metadata, runName: options.runName }; const callOptions = { ...options }; delete callOptions.callbacks; delete callOptions.tags; delete callOptions.metadata; delete callOptions.runName; return [runnableConfig, callOptions]; } async _callWithConfig(func, input, options) { const callbackManager_ = await getCallbackMangerForConfig(options); const runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleChainStart(this.toJSON(), _coerceToDict2(input, "input"), void 0, options == null ? void 0 : options.runType, void 0, void 0, options == null ? void 0 : options.runName)); let output; try { output = await func.bind(this)(input, options, runManager); } catch (e) { await (runManager == null ? void 0 : runManager.handleChainError(e)); throw e; } await (runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(output, "output"))); return output; } /** * Internal method that handles batching and configuration for a runnable * It takes a function, input values, and optional configuration, and * returns a promise that resolves to the output values. * @param func The function to be executed for each input value. * @param input The input values to be processed. * @param config Optional configuration for the function execution. * @returns A promise that resolves to the output values. */ async _batchWithConfig(func, inputs, options, batchOptions) { const optionsList = this._getOptionsList(options != null ? options : {}, inputs.length); const callbackManagers = await Promise.all(optionsList.map(getCallbackMangerForConfig)); const runManagers = await Promise.all(callbackManagers.map((callbackManager, i) => callbackManager == null ? void 0 : callbackManager.handleChainStart(this.toJSON(), _coerceToDict2(inputs[i], "input"), void 0, optionsList[i].runType, void 0, void 0, optionsList[i].runName))); let outputs; try { outputs = await func(inputs, optionsList, runManagers, batchOptions); } catch (e) { await Promise.all(runManagers.map((runManager) => runManager == null ? void 0 : runManager.handleChainError(e))); throw e; } await Promise.all(runManagers.map((runManager) => runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(outputs, "output")))); return outputs; } /** * Helper method to transform an Iterator of Input values into an Iterator of * Output values, with callbacks. * Use this to implement `stream()` or `transform()` in Runnable subclasses. */ async *_transformStreamWithConfig(inputGenerator, transformer, options) { let finalInput; let finalInputSupported = true; let finalOutput; let finalOutputSupported = true; const callbackManager_ = await getCallbackMangerForConfig(options); let runManager; const serializedRepresentation = this.toJSON(); async function* wrapInputForTracing() { for await (const chunk of inputGenerator) { if (!runManager) { runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleChainStart(serializedRepresentation, { input: "" }, void 0, options == null ? void 0 : options.runType, void 0, void 0, options == null ? void 0 : options.runName)); } if (finalInputSupported) { if (finalInput === void 0) { finalInput = chunk; } else { try { finalInput = finalInput.concat(chunk); } catch (e) { finalInput = void 0; finalInputSupported = false; } } } yield chunk; } } const wrappedInputGenerator = wrapInputForTracing(); try { const outputIterator = transformer(wrappedInputGenerator, runManager, options); for await (const chunk of outputIterator) { yield chunk; if (finalOutputSupported) { if (finalOutput === void 0) { finalOutput = chunk; } else { try { finalOutput = finalOutput.concat(chunk); } catch (e) { finalOutput = void 0; finalOutputSupported = false; } } } } } catch (e) { await (runManager == null ? void 0 : runManager.handleChainError(e, void 0, void 0, void 0, { inputs: _coerceToDict2(finalInput, "input") })); throw e; } await (runManager == null ? void 0 : runManager.handleChainEnd(finalOutput != null ? finalOutput : {}, void 0, void 0, void 0, { inputs: _coerceToDict2(finalInput, "input") })); } _patchConfig(config = {}, callbackManager = void 0) { const newConfig = { ...config }; if (callbackManager !== void 0) { delete newConfig.runName; return { ...newConfig, callbacks: callbackManager }; } return newConfig; } /** * Create a new runnable sequence that runs each individual runnable in series, * piping the output of one runnable into another runnable or runnable-like. * @param coerceable A runnable, function, or object whose values are functions or runnables. * @returns A new runnable sequence. */ pipe(coerceable) { return new RunnableSequence({ first: this, last: _coerceToRunnable(coerceable) }); } /** * Default implementation of transform, which buffers input and then calls stream. * Subclasses should override this method if they can start producing output while * input is still being generated. * @param generator * @param options */ async *transform(generator, options) { let finalChunk; for await (const chunk of generator) { if (finalChunk === void 0) { finalChunk = chunk; } else { finalChunk = finalChunk.concat(chunk); } } yield* this._streamIterator(finalChunk, options); } /** * Stream all output from a runnable, as reported to the callback system. * This includes all inner runs of LLMs, Retrievers, Tools, etc. * Output is streamed as Log objects, which include a list of * jsonpatch ops that describe how the state of the run has changed in each * step, and the final state of the run. * The jsonpatch ops can be applied in order to construct state. * @param input * @param options * @param streamOptions */ async *streamLog(input, options, streamOptions) { const stream = new LogStreamCallbackHandler({ ...streamOptions, autoClose: false }); const config = options != null ? options : {}; const { callbacks } = config; if (callbacks === void 0) { config.callbacks = [stream]; } else if (Array.isArray(callbacks)) { config.callbacks = callbacks.concat([stream]); } else { const copiedCallbacks = callbacks.copy(); copiedCallbacks.inheritableHandlers.push(stream); config.callbacks = copiedCallbacks; } const runnableStream = await this.stream(input, config); async function consumeRunnableStream() { try { for await (const chunk of runnableStream) { const patch = new RunLogPatch({ ops: [ { op: "add", path: "/streamed_output/-", value: chunk } ] }); await stream.writer.write(patch); } } finally { await stream.writer.close(); } } const runnableStreamPromise = consumeRunnableStream(); try { for await (const log of stream) { yield log; } } finally { await runnableStreamPromise; } } // eslint-disable-next-line @typescript-eslint/no-explicit-any static isRunnable(thing) { return thing ? thing.lc_runnable : false; } /** * Bind lifecycle listeners to a Runnable, returning a new Runnable. * The Run object contains information about the run, including its id, * type, input, output, error, startTime, endTime, and any tags or metadata * added to the run. * * @param {Object} params - The object containing the callback functions. * @param {(run: Run) => void} params.onStart - Called before the runnable starts running, with the Run object. * @param {(run: Run) => void} params.onEnd - Called after the runnable finishes running, with the Run object. * @param {(run: Run) => void} params.onError - Called if the runnable throws an error, with the Run object. */ withListeners({ onStart, onEnd, onError }) { return new RunnableBinding({ bound: this, config: {}, configFactories: [ (config) => ({ callbacks: [ new RootListenersTracer({ config, onStart, onEnd, onError }) ] }) ] }); } }; var RunnableBinding = class extends Runnable { static lc_name() { return "RunnableBinding"; } constructor(fields) { super(fields); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: true }); Object.defineProperty(this, "bound", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "config", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "kwargs", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "configFactories", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.bound = fields.bound; this.kwargs = fields.kwargs; this.config = fields.config; this.configFactories = fields.configFactories; } async _mergeConfig(options) { const config = mergeConfigs(this.config, options); return mergeConfigs(config, ...this.configFactories ? await Promise.all(this.configFactories.map(async (configFactory) => await configFactory(config))) : []); } bind(kwargs) { return this.constructor({ bound: this.bound, kwargs: { ...this.kwargs, ...kwargs }, config: this.config }); } withConfig(config) { return this.constructor({ bound: this.bound, kwargs: this.kwargs, config: { ...this.config, ...config } }); } withRetry(fields) { return this.constructor({ bound: this.bound.withRetry(fields), kwargs: this.kwargs, config: this.config }); } async invoke(input, options) { return this.bound.invoke(input, await this._mergeConfig({ ...options, ...this.kwargs })); } async batch(inputs, options, batchOptions) { const mergedOptions = Array.isArray(options) ? await Promise.all(options.map(async (individualOption) => this._mergeConfig({ ...individualOption, ...this.kwargs }))) : await this._mergeConfig({ ...options, ...this.kwargs }); return this.bound.batch(inputs, mergedOptions, batchOptions); } async *_streamIterator(input, options) { yield* this.bound._streamIterator(input, await this._mergeConfig({ ...options, ...this.kwargs })); } async stream(input, options) { return this.bound.stream(input, await this._mergeConfig({ ...options, ...this.kwargs })); } async *transform(generator, options) { yield* this.bound.transform(generator, await this._mergeConfig({ ...options, ...this.kwargs })); } static isRunnableBinding(thing) { return thing.bound && Runnable.isRunnable(thing.bound); } /** * Bind lifecycle listeners to a Runnable, returning a new Runnable. * The Run object contains information about the run, including its id, * type, input, output, error, startTime, endTime, and any tags or metadata * added to the run. * * @param {Object} params - The object containing the callback functions. * @param {(run: Run) => void} params.onStart - Called before the runnable starts running, with the Run object. * @param {(run: Run) => void} params.onEnd - Called after the runnable finishes running, with the Run object. * @param {(run: Run) => void} params.onError - Called if the runnable throws an error, with the Run object. */ withListeners({ onStart, onEnd, onError }) { return new RunnableBinding({ bound: this.bound, kwargs: this.kwargs, config: this.config, configFactories: [ (config) => ({ callbacks: [ new RootListenersTracer({ config, onStart, onEnd, onError }) ] }) ] }); } }; var RunnableEach = class extends Runnable { static lc_name() { return "RunnableEach"; } constructor(fields) { super(fields); Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: true }); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); Object.defineProperty(this, "bound", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.bound = fields.bound; } /** * Binds the runnable with the specified arguments. * @param args The arguments to bind the runnable with. * @returns A new instance of the `RunnableEach` class that is bound with the specified arguments. */ bind(kwargs) { return new RunnableEach({ bound: this.bound.bind(kwargs) }); } /** * Invokes the runnable with the specified input and configuration. * @param input The input to invoke the runnable with. * @param config The configuration to invoke the runnable with. * @returns A promise that resolves to the output of the runnable. */ async invoke(inputs, config) { return this._callWithConfig(this._invoke, inputs, config); } /** * A helper method that is used to invoke the runnable with the specified input and configuration. * @param input The input to invoke the runnable with. * @param config The configuration to invoke the runnable with. * @returns A promise that resolves to the output of the runnable. */ async _invoke(inputs, config, runManager) { return this.bound.batch(inputs, this._patchConfig(config, runManager == null ? void 0 : runManager.getChild())); } /** * Bind lifecycle listeners to a Runnable, returning a new Runnable. * The Run object contains information about the run, including its id, * type, input, output, error, startTime, endTime, and any tags or metadata * added to the run. * * @param {Object} params - The object containing the callback functions. * @param {(run: Run) => void} params.onStart - Called before the runnable starts running, with the Run object. * @param {(run: Run) => void} params.onEnd - Called after the runnable finishes running, with the Run object. * @param {(run: Run) => void} params.onError - Called if the runnable throws an error, with the Run object. */ withListeners({ onStart, onEnd, onError }) { return new RunnableEach({ bound: this.bound.withListeners({ onStart, onEnd, onError }) }); } }; var RunnableRetry = class extends RunnableBinding { static lc_name() { return "RunnableRetry"; } constructor(fields) { var _a2, _b; super(fields); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); Object.defineProperty(this, "maxAttemptNumber", { enumerable: true, configurable: true, writable: true, value: 3 }); Object.defineProperty(this, "onFailedAttempt", { enumerable: true, configurable: true, writable: true, value: () => { } }); this.maxAttemptNumber = (_a2 = fields.maxAttemptNumber) != null ? _a2 : this.maxAttemptNumber; this.onFailedAttempt = (_b = fields.onFailedAttempt) != null ? _b : this.onFailedAttempt; } _patchConfigForRetry(attempt, config, runManager) { const tag = attempt > 1 ? `retry:attempt:${attempt}` : void 0; return this._patchConfig(config, runManager == null ? void 0 : runManager.getChild(tag)); } async _invoke(input, config, runManager) { return (0, import_p_retry3.default)((attemptNumber) => super.invoke(input, this._patchConfigForRetry(attemptNumber, config, runManager)), { onFailedAttempt: this.onFailedAttempt, retries: Math.max(this.maxAttemptNumber - 1, 0), randomize: true }); } /** * Method that invokes the runnable with the specified input, run manager, * and config. It handles the retry logic by catching any errors and * recursively invoking itself with the updated config for the next retry * attempt. * @param input The input for the runnable. * @param runManager The run manager for the runnable. * @param config The config for the runnable. * @returns A promise that resolves to the output of the runnable. */ async invoke(input, config) { return this._callWithConfig(this._invoke, input, config); } async _batch(inputs, configs, runManagers, batchOptions) { const resultsMap = {}; try { await (0, import_p_retry3.default)(async (attemptNumber) => { const remainingIndexes = inputs.map((_, i) => i).filter((i) => resultsMap[i.toString()] === void 0 || // eslint-disable-next-line no-instanceof/no-instanceof resultsMap[i.toString()] instanceof Error); const remainingInputs = remainingIndexes.map((i) => inputs[i]); const patchedConfigs = remainingIndexes.map((i) => this._patchConfigForRetry(attemptNumber, configs == null ? void 0 : configs[i], runManagers == null ? void 0 : runManagers[i])); const results = await super.batch(remainingInputs, patchedConfigs, { ...batchOptions, returnExceptions: true }); let firstException; for (let i = 0; i < results.length; i += 1) { const result = results[i]; const resultMapIndex = remainingIndexes[i]; if (result instanceof Error) { if (firstException === void 0) { firstException = result; } } resultsMap[resultMapIndex.toString()] = result; } if (firstException) { throw firstException; } return results; }, { onFailedAttempt: this.onFailedAttempt, retries: Math.max(this.maxAttemptNumber - 1, 0), randomize: true }); } catch (e) { if ((batchOptions == null ? void 0 : batchOptions.returnExceptions) !== true) { throw e; } } return Object.keys(resultsMap).sort((a, b) => parseInt(a, 10) - parseInt(b, 10)).map((key) => resultsMap[parseInt(key, 10)]); } async batch(inputs, options, batchOptions) { return this._batchWithConfig(this._batch.bind(this), inputs, options, batchOptions); } }; var RunnableSequence = class extends Runnable { static lc_name() { return "RunnableSequence"; } constructor(fields) { var _a2; super(fields); Object.defineProperty(this, "first", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "middle", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "last", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: true }); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); this.first = fields.first; this.middle = (_a2 = fields.middle) != null ? _a2 : this.middle; this.last = fields.last; } get steps() { return [this.first, ...this.middle, this.last]; } async invoke(input, options) { const callbackManager_ = await getCallbackMangerForConfig(options); const runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleChainStart(this.toJSON(), _coerceToDict2(input, "input"), void 0, void 0, void 0, void 0, options == null ? void 0 : options.runName)); let nextStepInput = input; let finalOutput; try { const initialSteps = [this.first, ...this.middle]; for (let i = 0; i < initialSteps.length; i += 1) { const step = initialSteps[i]; nextStepInput = await step.invoke(nextStepInput, this._patchConfig(options, runManager == null ? void 0 : runManager.getChild(`seq:step:${i + 1}`))); } finalOutput = await this.last.invoke(nextStepInput, this._patchConfig(options, runManager == null ? void 0 : runManager.getChild(`seq:step:${this.steps.length}`))); } catch (e) { await (runManager == null ? void 0 : runManager.handleChainError(e)); throw e; } await (runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(finalOutput, "output"))); return finalOutput; } async batch(inputs, options, batchOptions) { const configList = this._getOptionsList(options != null ? options : {}, inputs.length); const callbackManagers = await Promise.all(configList.map(getCallbackMangerForConfig)); const runManagers = await Promise.all(callbackManagers.map((callbackManager, i) => callbackManager == null ? void 0 : callbackManager.handleChainStart(this.toJSON(), _coerceToDict2(inputs[i], "input"), void 0, void 0, void 0, void 0, configList[i].runName))); let nextStepInputs = inputs; let finalOutputs; try { const initialSteps = [this.first, ...this.middle]; for (let i = 0; i < initialSteps.length; i += 1) { const step = initialSteps[i]; nextStepInputs = await step.batch(nextStepInputs, runManagers.map((runManager, j) => this._patchConfig(configList[j], runManager == null ? void 0 : runManager.getChild(`seq:step:${i + 1}`))), batchOptions); } finalOutputs = await this.last.batch(nextStepInputs, runManagers.map((runManager) => this._patchConfig(configList[this.steps.length - 1], runManager == null ? void 0 : runManager.getChild(`seq:step:${this.steps.length}`))), batchOptions); } catch (e) { await Promise.all(runManagers.map((runManager) => runManager == null ? void 0 : runManager.handleChainError(e))); throw e; } await Promise.all(runManagers.map((runManager, i) => runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(finalOutputs[i], "output")))); return finalOutputs; } async *_streamIterator(input, options) { const callbackManager_ = await getCallbackMangerForConfig(options); const runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleChainStart(this.toJSON(), _coerceToDict2(input, "input"), void 0, void 0, void 0, void 0, options == null ? void 0 : options.runName)); const steps = [this.first, ...this.middle, this.last]; let concatSupported = true; let finalOutput; async function* inputGenerator() { yield input; } try { let finalGenerator = steps[0].transform(inputGenerator(), this._patchConfig(options, runManager == null ? void 0 : runManager.getChild(`seq:step:1`))); for (let i = 1; i < steps.length; i += 1) { const step = steps[i]; finalGenerator = await step.transform(finalGenerator, this._patchConfig(options, runManager == null ? void 0 : runManager.getChild(`seq:step:${i + 1}`))); } for await (const chunk of finalGenerator) { yield chunk; if (concatSupported) { if (finalOutput === void 0) { finalOutput = chunk; } else { try { finalOutput = finalOutput.concat(chunk); } catch (e) { finalOutput = void 0; concatSupported = false; } } } } } catch (e) { await (runManager == null ? void 0 : runManager.handleChainError(e)); throw e; } await (runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(finalOutput, "output"))); } pipe(coerceable) { if (RunnableSequence.isRunnableSequence(coerceable)) { return new RunnableSequence({ first: this.first, middle: this.middle.concat([ this.last, coerceable.first, ...coerceable.middle ]), last: coerceable.last }); } else { return new RunnableSequence({ first: this.first, middle: [...this.middle, this.last], last: _coerceToRunnable(coerceable) }); } } // eslint-disable-next-line @typescript-eslint/no-explicit-any static isRunnableSequence(thing) { return Array.isArray(thing.middle) && Runnable.isRunnable(thing); } // eslint-disable-next-line @typescript-eslint/no-explicit-any static from([first, ...runnables]) { return new RunnableSequence({ first: _coerceToRunnable(first), middle: runnables.slice(0, -1).map(_coerceToRunnable), last: _coerceToRunnable(runnables[runnables.length - 1]) }); } }; var RunnableMap = class extends Runnable { static lc_name() { return "RunnableMap"; } getStepsKeys() { return Object.keys(this.steps); } constructor(fields) { super(fields); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: true }); Object.defineProperty(this, "steps", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.steps = {}; for (const [key, value] of Object.entries(fields.steps)) { this.steps[key] = _coerceToRunnable(value); } } static from(steps) { return new RunnableMap({ steps }); } async invoke(input, options) { const callbackManager_ = await getCallbackMangerForConfig(options); const runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleChainStart(this.toJSON(), { input }, void 0, void 0, void 0, void 0, options == null ? void 0 : options.runName)); const output = {}; try { await Promise.all(Object.entries(this.steps).map(async ([key, runnable]) => { output[key] = await runnable.invoke(input, this._patchConfig(options, runManager == null ? void 0 : runManager.getChild(key))); })); } catch (e) { await (runManager == null ? void 0 : runManager.handleChainError(e)); throw e; } await (runManager == null ? void 0 : runManager.handleChainEnd(output)); return output; } }; var RunnableLambda = class extends Runnable { static lc_name() { return "RunnableLambda"; } constructor(fields) { super(fields); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); Object.defineProperty(this, "func", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.func = fields.func; } static from(func) { return new RunnableLambda({ func }); } async _invoke(input, config, runManager) { let output = await this.func(input, { config }); if (output && Runnable.isRunnable(output)) { output = await output.invoke(input, this._patchConfig(config, runManager == null ? void 0 : runManager.getChild())); } return output; } async invoke(input, options) { return this._callWithConfig(this._invoke, input, options); } }; var RunnableWithFallbacks = class extends Runnable { static lc_name() { return "RunnableWithFallbacks"; } constructor(fields) { super(fields); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain_core", "runnables"] }); Object.defineProperty(this, "lc_serializable", { enumerable: true, configurable: true, writable: true, value: true }); Object.defineProperty(this, "runnable", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "fallbacks", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.runnable = fields.runnable; this.fallbacks = fields.fallbacks; } *runnables() { yield this.runnable; for (const fallback of this.fallbacks) { yield fallback; } } async invoke(input, options) { const callbackManager_ = await CallbackManager.configure(options == null ? void 0 : options.callbacks, void 0, options == null ? void 0 : options.tags, void 0, options == null ? void 0 : options.metadata); const runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleChainStart(this.toJSON(), _coerceToDict2(input, "input"), void 0, void 0, void 0, void 0, options == null ? void 0 : options.runName)); let firstError; for (const runnable of this.runnables()) { try { const output = await runnable.invoke(input, this._patchConfig(options, runManager == null ? void 0 : runManager.getChild())); await (runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(output, "output"))); return output; } catch (e) { if (firstError === void 0) { firstError = e; } } } if (firstError === void 0) { throw new Error("No error stored at end of fallback."); } await (runManager == null ? void 0 : runManager.handleChainError(firstError)); throw firstError; } async batch(inputs, options, batchOptions) { if (batchOptions == null ? void 0 : batchOptions.returnExceptions) { throw new Error("Not implemented."); } const configList = this._getOptionsList(options != null ? options : {}, inputs.length); const callbackManagers = await Promise.all(configList.map((config) => CallbackManager.configure(config == null ? void 0 : config.callbacks, void 0, config == null ? void 0 : config.tags, void 0, config == null ? void 0 : config.metadata))); const runManagers = await Promise.all(callbackManagers.map((callbackManager, i) => callbackManager == null ? void 0 : callbackManager.handleChainStart(this.toJSON(), _coerceToDict2(inputs[i], "input"), void 0, void 0, void 0, void 0, configList[i].runName))); let firstError; for (const runnable of this.runnables()) { try { const outputs = await runnable.batch(inputs, runManagers.map((runManager, j) => this._patchConfig(configList[j], runManager == null ? void 0 : runManager.getChild())), batchOptions); await Promise.all(runManagers.map((runManager, i) => runManager == null ? void 0 : runManager.handleChainEnd(_coerceToDict2(outputs[i], "output")))); return outputs; } catch (e) { if (firstError === void 0) { firstError = e; } } } if (!firstError) { throw new Error("No error stored at end of fallbacks."); } await Promise.all(runManagers.map((runManager) => runManager == null ? void 0 : runManager.handleChainError(firstError))); throw firstError; } }; function _coerceToRunnable(coerceable) { if (typeof coerceable === "function") { return new RunnableLambda({ func: coerceable }); } else if (Runnable.isRunnable(coerceable)) { return coerceable; } else if (!Array.isArray(coerceable) && typeof coerceable === "object") { const runnables = {}; for (const [key, value] of Object.entries(coerceable)) { runnables[key] = _coerceToRunnable(value); } return new RunnableMap({ steps: runnables }); } else { throw new Error(`Expected a Runnable, function or object. Instead got an unsupported type.`); } } // node_modules/ml-distance/lib-esm/similarities/czekanowski.js function czekanowskiSimilarity(a, b) { let up = 0; let down = 0; for (let i = 0; i < a.length; i++) { up += Math.min(a[i], b[i]); down += a[i] + b[i]; } return 2 * up / down; } // node_modules/ml-distance/lib-esm/distances/dice.js function dice(a, b) { let a2 = 0; let b2 = 0; let prod2 = 0; for (let i = 0; i < a.length; i++) { a2 += a[i] * a[i]; b2 += b[i] * b[i]; prod2 += (a[i] - b[i]) * (a[i] - b[i]); } return prod2 / (a2 + b2); } // node_modules/ml-distance/lib-esm/distances/intersection.js function intersection(a, b) { let ans = 0; for (let i = 0; i < a.length; i++) { ans += Math.min(a[i], b[i]); } return 1 - ans; } // node_modules/ml-distance/lib-esm/similarities/kumarHassebrook.js function kumarHassebrook(a, b) { let p = 0; let p2 = 0; let q2 = 0; for (let i = 0; i < a.length; i++) { p += a[i] * b[i]; p2 += a[i] * a[i]; q2 += b[i] * b[i]; } return p / (p2 + q2 - p); } // node_modules/ml-distance/lib-esm/distances/kulczynski.js function kulczynski(a, b) { let up = 0; let down = 0; for (let i = 0; i < a.length; i++) { up += Math.abs(a[i] - b[i]); down += Math.min(a[i], b[i]); } return up / down; } // node_modules/ml-distance/lib-esm/distances/motyka.js function motyka(a, b) { let up = 0; let down = 0; for (let i = 0; i < a.length; i++) { up += Math.min(a[i], b[i]); down += a[i] + b[i]; } return 1 - up / down; } // node_modules/ml-distance/lib-esm/distances/squaredChord.js function squaredChord(a, b) { let ans = 0; for (let i = 0; i < a.length; i++) { ans += (Math.sqrt(a[i]) - Math.sqrt(b[i])) ** 2; } return ans; } // node_modules/ml-distance/lib-esm/similarities/tanimoto.js function tanimoto(a, b, bitvector) { if (bitvector) { let inter = 0; let union = 0; for (let j = 0; j < a.length; j++) { inter += a[j] && b[j]; union += a[j] || b[j]; } if (union === 0) { return 1; } return inter / union; } else { let p = 0; let q = 0; let m = 0; for (let i = 0; i < a.length; i++) { p += a[i]; q += b[i]; m += Math.min(a[i], b[i]); } return 1 - (p + q - 2 * m) / (p + q - m); } } // node_modules/ml-distance/lib-esm/similarities.js var similarities_exports = {}; __export(similarities_exports, { cosine: () => cosine, czekanowski: () => czekanowskiSimilarity, dice: () => dice2, intersection: () => intersection2, kulczynski: () => kulczynski2, kumarHassebrook: () => kumarHassebrook, motyka: () => motyka2, pearson: () => pearson2, squaredChord: () => squaredChord2, tanimoto: () => tanimoto, tree: () => src_exports }); // node_modules/ml-tree-similarity/src/index.js var src_exports = {}; __export(src_exports, { createTree: () => createTree, getFunction: () => getFunction, treeSimilarity: () => treeSimilarity }); // node_modules/ml-tree-similarity/src/createTree.js var import_binary_search = __toESM(require_binary_search()); var import_num_sort = __toESM(require_num_sort()); function createTree(spectrum, options = {}) { var X = spectrum[0]; const { minWindow = 0.16, threshold = 0.01, from = X[0], to = X[X.length - 1] } = options; return mainCreateTree( spectrum[0], spectrum[1], from, to, minWindow, threshold ); } function mainCreateTree(X, Y, from, to, minWindow, threshold) { if (to - from < minWindow) { return null; } var start = (0, import_binary_search.default)(X, from, import_num_sort.ascending); if (start < 0) { start = ~start; } var sum2 = 0; var center = 0; for (var i = start; i < X.length; i++) { if (X[i] >= to) { break; } sum2 += Y[i]; center += X[i] * Y[i]; } if (sum2 < threshold) { return null; } center /= sum2; if (center - from < 1e-6 || to - center < 1e-6) { return null; } if (center - from < minWindow / 4) { return mainCreateTree(X, Y, center, to, minWindow, threshold); } else { if (to - center < minWindow / 4) { return mainCreateTree(X, Y, from, center, minWindow, threshold); } else { return new Tree( sum2, center, mainCreateTree(X, Y, from, center, minWindow, threshold), mainCreateTree(X, Y, center, to, minWindow, threshold) ); } } } var Tree = class { constructor(sum2, center, left, right) { this.sum = sum2; this.center = center; this.left = left; this.right = right; } }; // node_modules/ml-tree-similarity/src/getSimilarity.js function getSimilarity(a, b, options = {}) { const { alpha = 0.1, beta = 0.33, gamma = 1e-3 } = options; if (a === null || b === null) { return 0; } if (Array.isArray(a)) { a = createTree(a); } if (Array.isArray(b)) { b = createTree(b); } var C = alpha * Math.min(a.sum, b.sum) / Math.max(a.sum, b.sum) + (1 - alpha) * Math.exp(-gamma * Math.abs(a.center - b.center)); return beta * C + (1 - beta) * (getSimilarity(a.left, b.left, options) + getSimilarity(a.right, b.right, options)) / 2; } // node_modules/ml-tree-similarity/src/index.js function treeSimilarity(A, B, options = {}) { return getSimilarity(A, B, options); } function getFunction(options = {}) { return (A, B) => getSimilarity(A, B, options); } // node_modules/ml-distance/lib-esm/similarities/cosine.js function cosine(a, b) { let p = 0; let p2 = 0; let q2 = 0; for (let i = 0; i < a.length; i++) { p += a[i] * b[i]; p2 += a[i] * a[i]; q2 += b[i] * b[i]; } return p / (Math.sqrt(p2) * Math.sqrt(q2)); } // node_modules/ml-distance/lib-esm/similarities/dice.js function dice2(a, b) { return 1 - dice(a, b); } // node_modules/ml-distance/lib-esm/similarities/intersection.js function intersection2(a, b) { return 1 - intersection(a, b); } // node_modules/ml-distance/lib-esm/similarities/kulczynski.js function kulczynski2(a, b) { return 1 / kulczynski(a, b); } // node_modules/ml-distance/lib-esm/similarities/motyka.js function motyka2(a, b) { return 1 - motyka(a, b); } // node_modules/is-any-array/lib-esm/index.js var toString = Object.prototype.toString; function isAnyArray(value) { const tag = toString.call(value); return tag.endsWith("Array]") && !tag.includes("Big"); } // node_modules/ml-array-sum/lib-es6/index.js function sum(input) { if (!isAnyArray(input)) { throw new TypeError("input must be an array"); } if (input.length === 0) { throw new TypeError("input must not be empty"); } var sumValue = 0; for (var i = 0; i < input.length; i++) { sumValue += input[i]; } return sumValue; } // node_modules/ml-array-mean/lib-es6/index.js function mean(input) { return sum(input) / input.length; } // node_modules/ml-distance/lib-esm/similarities/pearson.js function pearson2(a, b) { let avgA = mean(a); let avgB = mean(b); let newA = new Array(a.length); let newB = new Array(b.length); for (let i = 0; i < newA.length; i++) { newA[i] = a[i] - avgA; newB[i] = b[i] - avgB; } return cosine(newA, newB); } // node_modules/ml-distance/lib-esm/similarities/squaredChord.js function squaredChord2(a, b) { return 1 - squaredChord(a, b); } // node_modules/langchain/node_modules/@langchain/core/dist/retrievers.js var BaseRetriever = class extends Runnable { constructor(fields) { var _a2, _b, _c; super(fields); Object.defineProperty(this, "callbacks", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "tags", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "metadata", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "verbose", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.callbacks = fields == null ? void 0 : fields.callbacks; this.tags = (_a2 = fields == null ? void 0 : fields.tags) != null ? _a2 : []; this.metadata = (_b = fields == null ? void 0 : fields.metadata) != null ? _b : {}; this.verbose = (_c = fields == null ? void 0 : fields.verbose) != null ? _c : false; } /** * TODO: This should be an abstract method, but we'd like to avoid breaking * changes to people currently using subclassed custom retrievers. * Change it on next major release. */ _getRelevantDocuments(_query, _callbacks) { throw new Error("Not implemented!"); } async invoke(input, options) { return this.getRelevantDocuments(input, options); } /** * Main method used to retrieve relevant documents. It takes a query * string and an optional configuration object, and returns a promise that * resolves to an array of `Document` objects. This method handles the * retrieval process, including starting and ending callbacks, and error * handling. * @param query The query string to retrieve relevant documents for. * @param config Optional configuration object for the retrieval process. * @returns A promise that resolves to an array of `Document` objects. */ async getRelevantDocuments(query, config) { const parsedConfig = parseCallbackConfigArg(config); const callbackManager_ = await CallbackManager.configure(parsedConfig.callbacks, this.callbacks, parsedConfig.tags, this.tags, parsedConfig.metadata, this.metadata, { verbose: this.verbose }); const runManager = await (callbackManager_ == null ? void 0 : callbackManager_.handleRetrieverStart(this.toJSON(), query, void 0, void 0, void 0, void 0, parsedConfig.runName)); try { const results = await this._getRelevantDocuments(query, runManager); await (runManager == null ? void 0 : runManager.handleRetrieverEnd(results)); return results; } catch (error) { await (runManager == null ? void 0 : runManager.handleRetrieverError(error)); throw error; } } }; // node_modules/langchain/dist/vectorstores/base.js var VectorStoreRetriever = class extends BaseRetriever { static lc_name() { return "VectorStoreRetriever"; } get lc_namespace() { return ["langchain", "retrievers", "base"]; } _vectorstoreType() { return this.vectorStore._vectorstoreType(); } constructor(fields) { var _a2, _b; super(fields); Object.defineProperty(this, "vectorStore", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "k", { enumerable: true, configurable: true, writable: true, value: 4 }); Object.defineProperty(this, "searchType", { enumerable: true, configurable: true, writable: true, value: "similarity" }); Object.defineProperty(this, "searchKwargs", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "filter", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.vectorStore = fields.vectorStore; this.k = (_a2 = fields.k) != null ? _a2 : this.k; this.searchType = (_b = fields.searchType) != null ? _b : this.searchType; this.filter = fields.filter; if (fields.searchType === "mmr") { this.searchKwargs = fields.searchKwargs; } } async _getRelevantDocuments(query, runManager) { if (this.searchType === "mmr") { if (typeof this.vectorStore.maxMarginalRelevanceSearch !== "function") { throw new Error(`The vector store backing this retriever, ${this._vectorstoreType()} does not support max marginal relevance search.`); } return this.vectorStore.maxMarginalRelevanceSearch(query, { k: this.k, filter: this.filter, ...this.searchKwargs }, runManager == null ? void 0 : runManager.getChild("vectorstore")); } return this.vectorStore.similaritySearch(query, this.k, this.filter, runManager == null ? void 0 : runManager.getChild("vectorstore")); } async addDocuments(documents, options) { return this.vectorStore.addDocuments(documents, options); } }; var VectorStore = class extends Serializable { // eslint-disable-next-line @typescript-eslint/no-explicit-any constructor(embeddings, dbConfig) { super(dbConfig); Object.defineProperty(this, "lc_namespace", { enumerable: true, configurable: true, writable: true, value: ["langchain", "vectorstores", this._vectorstoreType()] }); Object.defineProperty(this, "embeddings", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.embeddings = embeddings; } // eslint-disable-next-line @typescript-eslint/no-explicit-any async delete(_params) { throw new Error("Not implemented."); } async similaritySearch(query, k = 4, filter = void 0, _callbacks = void 0) { const results = await this.similaritySearchVectorWithScore(await this.embeddings.embedQuery(query), k, filter); return results.map((result) => result[0]); } async similaritySearchWithScore(query, k = 4, filter = void 0, _callbacks = void 0) { return this.similaritySearchVectorWithScore(await this.embeddings.embedQuery(query), k, filter); } static fromTexts(_texts, _metadatas, _embeddings, _dbConfig) { throw new Error("the Langchain vectorstore implementation you are using forgot to override this, please report a bug"); } static fromDocuments(_docs, _embeddings, _dbConfig) { throw new Error("the Langchain vectorstore implementation you are using forgot to override this, please report a bug"); } asRetriever(kOrFields, filter, callbacks, tags, metadata, verbose) { var _a2; if (typeof kOrFields === "number") { return new VectorStoreRetriever({ vectorStore: this, k: kOrFields, filter, tags: [...tags != null ? tags : [], this._vectorstoreType()], metadata, verbose, callbacks }); } else { const params = { vectorStore: this, k: kOrFields == null ? void 0 : kOrFields.k, filter: kOrFields == null ? void 0 : kOrFields.filter, tags: [...(_a2 = kOrFields == null ? void 0 : kOrFields.tags) != null ? _a2 : [], this._vectorstoreType()], metadata: kOrFields == null ? void 0 : kOrFields.metadata, verbose: kOrFields == null ? void 0 : kOrFields.verbose, callbacks: kOrFields == null ? void 0 : kOrFields.callbacks, searchType: kOrFields == null ? void 0 : kOrFields.searchType }; if ((kOrFields == null ? void 0 : kOrFields.searchType) === "mmr") { return new VectorStoreRetriever({ ...params, searchKwargs: kOrFields.searchKwargs }); } return new VectorStoreRetriever({ ...params }); } } }; // node_modules/langchain/dist/vectorstores/memory.js var MemoryVectorStore = class extends VectorStore { _vectorstoreType() { return "memory"; } constructor(embeddings, { similarity, ...rest } = {}) { super(embeddings, rest); Object.defineProperty(this, "memoryVectors", { enumerable: true, configurable: true, writable: true, value: [] }); Object.defineProperty(this, "similarity", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.similarity = similarity != null ? similarity : similarities_exports.cosine; } /** * Method to add documents to the memory vector store. It extracts the * text from each document, generates embeddings for them, and adds the * resulting vectors to the store. * @param documents Array of `Document` instances to be added to the store. * @returns Promise that resolves when all documents have been added. */ async addDocuments(documents) { const texts = documents.map(({ pageContent }) => pageContent); return this.addVectors(await this.embeddings.embedDocuments(texts), documents); } /** * Method to add vectors to the memory vector store. It creates * `MemoryVector` instances for each vector and document pair and adds * them to the store. * @param vectors Array of vectors to be added to the store. * @param documents Array of `Document` instances corresponding to the vectors. * @returns Promise that resolves when all vectors have been added. */ async addVectors(vectors, documents) { const memoryVectors = vectors.map((embedding, idx) => ({ content: documents[idx].pageContent, embedding, metadata: documents[idx].metadata })); this.memoryVectors = this.memoryVectors.concat(memoryVectors); } /** * Method to perform a similarity search in the memory vector store. It * calculates the similarity between the query vector and each vector in * the store, sorts the results by similarity, and returns the top `k` * results along with their scores. * @param query Query vector to compare against the vectors in the store. * @param k Number of top results to return. * @param filter Optional filter function to apply to the vectors before performing the search. * @returns Promise that resolves with an array of tuples, each containing a `Document` and its similarity score. */ async similaritySearchVectorWithScore(query, k, filter) { const filterFunction = (memoryVector) => { if (!filter) { return true; } const doc = new Document({ metadata: memoryVector.metadata, pageContent: memoryVector.content }); return filter(doc); }; const filteredMemoryVectors = this.memoryVectors.filter(filterFunction); const searches = filteredMemoryVectors.map((vector, index) => ({ similarity: this.similarity(query, vector.embedding), index })).sort((a, b) => a.similarity > b.similarity ? -1 : 0).slice(0, k); const result = searches.map((search) => [ new Document({ metadata: filteredMemoryVectors[search.index].metadata, pageContent: filteredMemoryVectors[search.index].content }), search.similarity ]); return result; } /** * Static method to create a `MemoryVectorStore` instance from an array of * texts. It creates a `Document` for each text and metadata pair, and * adds them to the store. * @param texts Array of texts to be added to the store. * @param metadatas Array or single object of metadata corresponding to the texts. * @param embeddings `Embeddings` instance used to generate embeddings for the texts. * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance. * @returns Promise that resolves with a new `MemoryVectorStore` instance. */ static async fromTexts(texts, metadatas, embeddings, dbConfig) { const docs = []; for (let i = 0; i < texts.length; i += 1) { const metadata = Array.isArray(metadatas) ? metadatas[i] : metadatas; const newDoc = new Document({ pageContent: texts[i], metadata }); docs.push(newDoc); } return MemoryVectorStore.fromDocuments(docs, embeddings, dbConfig); } /** * Static method to create a `MemoryVectorStore` instance from an array of * `Document` instances. It adds the documents to the store. * @param docs Array of `Document` instances to be added to the store. * @param embeddings `Embeddings` instance used to generate embeddings for the documents. * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance. * @returns Promise that resolves with a new `MemoryVectorStore` instance. */ static async fromDocuments(docs, embeddings, dbConfig) { const instance = new this(embeddings, dbConfig); await instance.addDocuments(docs); return instance; } /** * Static method to create a `MemoryVectorStore` instance from an existing * index. It creates a new `MemoryVectorStore` instance without adding any * documents or vectors. * @param embeddings `Embeddings` instance used to generate embeddings for the documents. * @param dbConfig Optional `MemoryVectorStoreArgs` to configure the `MemoryVectorStore` instance. * @returns Promise that resolves with a new `MemoryVectorStore` instance. */ static async fromExistingIndex(embeddings, dbConfig) { const instance = new this(embeddings, dbConfig); return instance; } }; // src/text-processing.ts var MAX_CHUNK_SIZE = 1e3; function preprocessContent(content) { logger.debug("Preprocessing content", { contentLength: content.length }); return content.replace(/^---\n[\s\S]*?\n---\n/, "").replace(/```[\s\S]*?```/g, "").replace(/^(#+)\s*$\n/gm, "").replace(/^(#+)\s*(?!$)[^\n]+\n(?=\s*(?:\1#|\s*$)(?!\s*\S))/gm, "").replace(/\n{3,}/g, "\n\n"); } function splitContent(content) { logger.debug("Splitting content", { contentLength: content.length }); const sections = content.split(/^---$/m).flatMap((section) => splitByHeaders(section.trim())); return sections.flatMap((section) => splitSectionWithLists(section)).filter((chunk) => chunk.length > 0); } function splitByHeaders(text) { const headerRegex = /^(#{1,6})\s+(.+)$/gm; const sections = []; let lastIndex = 0; let lastHeader = ""; let match; while ((match = headerRegex.exec(text)) !== null) { if (lastIndex < match.index) { sections.push( lastHeader + text.slice(lastIndex, match.index).trim() ); } lastHeader = match[0] + "\n"; lastIndex = headerRegex.lastIndex; } if (lastIndex < text.length) { sections.push(lastHeader + text.slice(lastIndex).trim()); } return sections.filter((section) => section.length > 0); } function splitSectionWithLists(section) { const lines = section.split("\n"); const result = lines.reduce(processLine, { chunks: [], currentChunk: "", inList: false, lastNonListText: "" }); return result.currentChunk ? [...result.chunks, result.currentChunk.trim()] : result.chunks; } function processLine(state, line) { const isListItem = /^(\s*[-*+]|\s*\d+\.)/.test(line); const isHeader = /^(#{1,6}\s|[*_]{2}).+/.test(line); if (isHeader) { return handleHeader(state, line); } if (isListItem) { return handleListItem(state, line); } if (state.inList && !line.trim()) { return { ...state, currentChunk: state.currentChunk + "\n" + line }; } return handleRegularLine(state, line); } function handleHeader(state, line) { const { chunks, currentChunk } = state; return { chunks: currentChunk ? [...chunks, currentChunk.trim()] : chunks, currentChunk: line, inList: false, lastNonListText: line }; } function handleListItem(state, line) { const { chunks, currentChunk, inList, lastNonListText } = state; if (!inList && currentChunk.length + line.length <= MAX_CHUNK_SIZE) { return { ...state, currentChunk: currentChunk + "\n" + line, inList: true }; } if (!inList) { return { chunks: currentChunk ? [...chunks, currentChunk.trim()] : chunks, currentChunk: lastNonListText + "\n" + line, inList: true, lastNonListText }; } return { ...state, currentChunk: currentChunk + "\n" + line }; } function handleRegularLine(state, line) { const { chunks, currentChunk, lastNonListText } = state; if (line.length > MAX_CHUNK_SIZE) { let remainingLine = line; let newChunks = [...chunks]; if (currentChunk) { newChunks.push(currentChunk.trim()); } while (remainingLine.length > 0) { const chunkEnd = findChunkEnd(remainingLine, MAX_CHUNK_SIZE); newChunks.push(remainingLine.slice(0, chunkEnd).trim()); remainingLine = remainingLine.slice(chunkEnd).trim(); } return { chunks: newChunks, currentChunk: "", inList: false, lastNonListText: line }; } const newChunk = currentChunk + (currentChunk ? "\n" : "") + line; if (newChunk.length > MAX_CHUNK_SIZE) { return { chunks: [...chunks, currentChunk.trim()], currentChunk: line, inList: false, lastNonListText: line.trim() ? line : lastNonListText }; } return { ...state, currentChunk: newChunk, inList: false, lastNonListText: line.trim() ? line : lastNonListText }; } function findChunkEnd(text, maxLength) { if (text.length <= maxLength) return text.length; let end = maxLength; while (end > 0 && !/\s/.test(text[end])) { end--; } return end > 0 ? end : maxLength; } // node_modules/langchain/node_modules/@langchain/core/dist/embeddings.js var Embeddings = class { constructor(params) { Object.defineProperty(this, "caller", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.caller = new AsyncCaller2(params != null ? params : {}); } }; // src/embeddings/CustomEmbeddings.ts var CustomEmbeddings = class extends Embeddings { constructor(config) { super({}); this.config = config; this.caller = void 0; } async embedDocuments(texts) { logger.debug("Embedding documents", texts); return await this.config.aiProvider.getEmbeddings( texts, this.config.updateCompletedSteps ); } async embedQuery(text) { logger.debug("Embedding query", text); const [embedding] = await this.embedDocuments([text]); return embedding; } }; // node_modules/pdfjs-dist/build/pdf.mjs var __webpack_require__ = {}; (() => { __webpack_require__.d = (exports, definition) => { for (var key in definition) { if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); } } }; })(); (() => { __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); })(); var __webpack_exports__ = globalThis.pdfjsLib = {}; __webpack_require__.d(__webpack_exports__, { AbortException: () => ( /* reexport */ AbortException ), AnnotationEditorLayer: () => ( /* reexport */ AnnotationEditorLayer ), AnnotationEditorParamsType: () => ( /* reexport */ AnnotationEditorParamsType ), AnnotationEditorType: () => ( /* reexport */ AnnotationEditorType ), AnnotationEditorUIManager: () => ( /* reexport */ AnnotationEditorUIManager ), AnnotationLayer: () => ( /* reexport */ AnnotationLayer ), AnnotationMode: () => ( /* reexport */ AnnotationMode ), CMapCompressionType: () => ( /* reexport */ CMapCompressionType ), ColorPicker: () => ( /* reexport */ ColorPicker ), DOMSVGFactory: () => ( /* reexport */ DOMSVGFactory ), DrawLayer: () => ( /* reexport */ DrawLayer ), FeatureTest: () => ( /* reexport */ util_FeatureTest ), GlobalWorkerOptions: () => ( /* reexport */ GlobalWorkerOptions ), ImageKind: () => ( /* reexport */ util_ImageKind ), InvalidPDFException: () => ( /* reexport */ InvalidPDFException ), MissingPDFException: () => ( /* reexport */ MissingPDFException ), OPS: () => ( /* reexport */ OPS ), PDFDataRangeTransport: () => ( /* reexport */ PDFDataRangeTransport ), PDFDateString: () => ( /* reexport */ PDFDateString ), PDFWorker: () => ( /* reexport */ PDFWorker ), PasswordResponses: () => ( /* reexport */ PasswordResponses ), PermissionFlag: () => ( /* reexport */ PermissionFlag ), PixelsPerInch: () => ( /* reexport */ PixelsPerInch ), RenderingCancelledException: () => ( /* reexport */ RenderingCancelledException ), TextLayer: () => ( /* reexport */ TextLayer ), UnexpectedResponseException: () => ( /* reexport */ UnexpectedResponseException ), Util: () => ( /* reexport */ Util ), VerbosityLevel: () => ( /* reexport */ VerbosityLevel ), XfaLayer: () => ( /* reexport */ XfaLayer ), build: () => ( /* reexport */ build ), createValidAbsoluteUrl: () => ( /* reexport */ createValidAbsoluteUrl ), fetchData: () => ( /* reexport */ fetchData ), getDocument: () => ( /* reexport */ getDocument ), getFilenameFromUrl: () => ( /* reexport */ getFilenameFromUrl ), getPdfFilenameFromUrl: () => ( /* reexport */ getPdfFilenameFromUrl ), getXfaPageViewport: () => ( /* reexport */ getXfaPageViewport ), isDataScheme: () => ( /* reexport */ isDataScheme ), isPdfFile: () => ( /* reexport */ isPdfFile ), noContextMenu: () => ( /* reexport */ noContextMenu ), normalizeUnicode: () => ( /* reexport */ normalizeUnicode ), setLayerDimensions: () => ( /* reexport */ setLayerDimensions ), shadow: () => ( /* reexport */ shadow ), version: () => ( /* reexport */ version ) }); var isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; var FONT_IDENTITY_MATRIX = [1e-3, 0, 0, 1e-3, 0, 0]; var MAX_IMAGE_SIZE_TO_CACHE = 1e7; var LINE_FACTOR = 1.35; var LINE_DESCENT_FACTOR = 0.35; var BASELINE_FACTOR = LINE_DESCENT_FACTOR / LINE_FACTOR; var RenderingIntentFlag = { ANY: 1, DISPLAY: 2, PRINT: 4, SAVE: 8, ANNOTATIONS_FORMS: 16, ANNOTATIONS_STORAGE: 32, ANNOTATIONS_DISABLE: 64, IS_EDITING: 128, OPLIST: 256 }; var AnnotationMode = { DISABLE: 0, ENABLE: 1, ENABLE_FORMS: 2, ENABLE_STORAGE: 3 }; var AnnotationEditorPrefix = "pdfjs_internal_editor_"; var AnnotationEditorType = { DISABLE: -1, NONE: 0, FREETEXT: 3, HIGHLIGHT: 9, STAMP: 13, INK: 15 }; var AnnotationEditorParamsType = { RESIZE: 1, CREATE: 2, FREETEXT_SIZE: 11, FREETEXT_COLOR: 12, FREETEXT_OPACITY: 13, INK_COLOR: 21, INK_THICKNESS: 22, INK_OPACITY: 23, HIGHLIGHT_COLOR: 31, HIGHLIGHT_DEFAULT_COLOR: 32, HIGHLIGHT_THICKNESS: 33, HIGHLIGHT_FREE: 34, HIGHLIGHT_SHOW_ALL: 35 }; var PermissionFlag = { PRINT: 4, MODIFY_CONTENTS: 8, COPY: 16, MODIFY_ANNOTATIONS: 32, FILL_INTERACTIVE_FORMS: 256, COPY_FOR_ACCESSIBILITY: 512, ASSEMBLE: 1024, PRINT_HIGH_QUALITY: 2048 }; var 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 }; var util_ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; var 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 }; var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; var CMapCompressionType = { NONE: 0, BINARY: 1 }; var 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, beginAnnotation: 80, endAnnotation: 81, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91, setStrokeTransparent: 92, setFillTransparent: 93 }; var PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; var 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) { switch (url == null ? void 0 : 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 == null ? void 0 : dots.length) >= 2) { url = `http://${url}`; } } if (options.tryConvertEncoding) { try { url = stringToUTF8String(url); } catch (e) { } } } const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (e) { } return null; } function shadow(obj, prop, value, nonSerializable = false) { Object.defineProperty(obj, prop, { value, enumerable: !nonSerializable, configurable: true, writable: false }); return value; } var BaseException = function BaseExceptionClosure() { function BaseException2(message, name) { this.message = message; this.name = name; } BaseException2.prototype = new Error(); BaseException2.constructor = BaseException2; return BaseException2; }(); var PasswordException = class extends BaseException { constructor(msg, code) { super(msg, "PasswordException"); this.code = code; } }; var UnknownErrorException = class extends BaseException { constructor(msg, details) { super(msg, "UnknownErrorException"); this.details = details; } }; var InvalidPDFException = class extends BaseException { constructor(msg) { super(msg, "InvalidPDFException"); } }; var MissingPDFException = class extends BaseException { constructor(msg) { super(msg, "MissingPDFException"); } }; var UnexpectedResponseException = class extends BaseException { constructor(msg, status) { super(msg, "UnexpectedResponseException"); this.status = status; } }; var FormatError = class extends BaseException { constructor(msg) { super(msg, "FormatError"); } }; var AbortException = class extends BaseException { constructor(msg) { super(msg, "AbortException"); } }; function bytesToString(bytes) { if (typeof bytes !== "object" || (bytes == null ? void 0 : bytes.length) === void 0) { 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) & 255; } return bytes; } function string32(value) { return String.fromCharCode(value >> 24 & 255, value >> 16 & 255, value >> 8 & 255, value & 255); } function objectFromMap(map) { const obj = /* @__PURE__ */ 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; } } var util_FeatureTest = class { 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"); } static get platform() { if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.platform) === "string") { return shadow(this, "platform", { isMac: navigator.platform.includes("Mac") }); } return shadow(this, "platform", { isMac: false }); } static get isCSSRoundSupported() { var _a2, _b; return shadow(this, "isCSSRoundSupported", (_b = (_a2 = globalThis.CSS) == null ? void 0 : _a2.supports) == null ? void 0 : _b.call(_a2, "width: round(1.5px, 1px)")); } }; var hexNumbers = Array.from(Array(256).keys(), (n) => n.toString(16).padStart(2, "0")); var _getExtremumOnCurve, getExtremumOnCurve_fn, _getExtremum, getExtremum_fn; var Util = class { 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[2]; minMax[2] = temp; } minMax[0] *= transform[0]; minMax[2] *= transform[0]; if (transform[3] < 0) { temp = minMax[1]; minMax[1] = minMax[3]; minMax[3] = temp; } minMax[1] *= transform[3]; minMax[3] *= transform[3]; } else { temp = minMax[0]; minMax[0] = minMax[1]; minMax[1] = temp; temp = minMax[2]; minMax[2] = minMax[3]; minMax[3] = temp; if (transform[1] < 0) { temp = minMax[1]; minMax[1] = minMax[3]; minMax[3] = temp; } minMax[1] *= transform[1]; minMax[3] *= transform[1]; if (transform[2] < 0) { temp = minMax[0]; minMax[0] = minMax[2]; minMax[2] = temp; } minMax[0] *= transform[2]; minMax[2] *= transform[2]; } minMax[0] += transform[4]; minMax[1] += transform[5]; minMax[2] += transform[4]; 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 = this.applyTransform(r, m); const p2 = this.applyTransform(r.slice(2, 4), m); const p3 = this.applyTransform([r[0], r[3]], m); const p4 = this.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 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, minMax) { if (minMax) { minMax[0] = Math.min(minMax[0], x0, x3); minMax[1] = Math.min(minMax[1], y0, y3); minMax[2] = Math.max(minMax[2], x0, x3); minMax[3] = Math.max(minMax[3], y0, y3); } else { minMax = [Math.min(x0, x3), Math.min(y0, y3), Math.max(x0, x3), Math.max(y0, y3)]; } __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-x0 + 3 * (x1 - x2) + x3), 6 * (x0 - 2 * x1 + x2), 3 * (x1 - x0), minMax); __privateMethod(this, _getExtremum, getExtremum_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, 3 * (-y0 + 3 * (y1 - y2) + y3), 6 * (y0 - 2 * y1 + y2), 3 * (y1 - y0), minMax); return minMax; } }; _getExtremumOnCurve = new WeakSet(); getExtremumOnCurve_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, t, minMax) { if (t <= 0 || t >= 1) { return; } const mt = 1 - t; const tt = t * t; const ttt = tt * t; const x = mt * (mt * (mt * x0 + 3 * t * x1) + 3 * tt * x2) + ttt * x3; const y = mt * (mt * (mt * y0 + 3 * t * y1) + 3 * tt * y2) + ttt * y3; minMax[0] = Math.min(minMax[0], x); minMax[1] = Math.min(minMax[1], y); minMax[2] = Math.max(minMax[2], x); minMax[3] = Math.max(minMax[3], y); }; _getExtremum = new WeakSet(); getExtremum_fn = function(x0, x1, x2, x3, y0, y1, y2, y3, a, b, c, minMax) { if (Math.abs(a) < 1e-12) { if (Math.abs(b) >= 1e-12) { __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, -c / b, minMax); } return; } const delta = b ** 2 - 4 * c * a; if (delta < 0) { return; } const sqrtDelta = Math.sqrt(delta); const a2 = 2 * a; __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b + sqrtDelta) / a2, minMax); __privateMethod(this, _getExtremumOnCurve, getExtremumOnCurve_fn).call(this, x0, x1, x2, x3, y0, y1, y2, y3, (-b - sqrtDelta) / a2, minMax); }; __privateAdd(Util, _getExtremumOnCurve); __privateAdd(Util, _getExtremum); function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } var NormalizeRegex = null; var NormalizationMap = null; function normalizeUnicode(str) { if (!NormalizeRegex) { NormalizeRegex = /([\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; NormalizationMap = /* @__PURE__ */ new Map([["\uFB05", "\u017Ft"]]); } return str.replaceAll(NormalizeRegex, (_, p1, p2) => p1 ? p1.normalize("NFKC") : NormalizationMap.get(p2)); } function getUuid() { if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.randomUUID) === "function") { return crypto.randomUUID(); } const buf = new Uint8Array(32); if (typeof crypto !== "undefined" && typeof (crypto == null ? void 0 : crypto.getRandomValues) === "function") { crypto.getRandomValues(buf); } else { for (let i = 0; i < 32; i++) { buf[i] = Math.floor(Math.random() * 255); } } return bytesToString(buf); } var AnnotationPrefix = "pdfjs_internal_id_"; var FontRenderOps = { BEZIER_CURVE_TO: 0, MOVE_TO: 1, LINE_TO: 2, QUADRATIC_CURVE_TO: 3, RESTORE: 4, SAVE: 5, SCALE: 6, TRANSFORM: 7, TRANSLATE: 8 }; var BaseFilterFactory = class { addFilter(maps) { return "none"; } addHCMFilter(fgColor, bgColor) { return "none"; } addAlphaFilter(map) { return "none"; } addLuminosityFilter(map) { return "none"; } addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { return "none"; } destroy(keepHCM = false) { } }; var _enableHWA; var BaseCanvasFactory = class { constructor({ enableHWA = false } = {}) { __privateAdd(this, _enableHWA, false); __privateSet(this, _enableHWA, enableHWA); } create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } const canvas = this._createCanvas(width, height); return { canvas, context: canvas.getContext("2d", { willReadFrequently: !__privateGet(this, _enableHWA) }) }; } reset(canvasAndContext, width, height) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } canvasAndContext.canvas.width = width; canvasAndContext.canvas.height = height; } destroy(canvasAndContext) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } canvasAndContext.canvas.width = 0; canvasAndContext.canvas.height = 0; canvasAndContext.canvas = null; canvasAndContext.context = null; } _createCanvas(width, height) { unreachable("Abstract method `_createCanvas` called."); } }; _enableHWA = new WeakMap(); var BaseCMapReaderFactory = class { constructor({ baseUrl = null, isCompressed = true }) { this.baseUrl = baseUrl; this.isCompressed = isCompressed; } async fetch({ name }) { if (!this.baseUrl) { throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided."); } if (!name) { throw new Error("CMap name must be specified."); } const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); const compressionType = this.isCompressed ? CMapCompressionType.BINARY : CMapCompressionType.NONE; return this._fetchData(url, compressionType).catch((reason) => { throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); }); } _fetchData(url, compressionType) { unreachable("Abstract method `_fetchData` called."); } }; var BaseStandardFontDataFactory = class { constructor({ baseUrl = null }) { this.baseUrl = baseUrl; } async fetch({ filename }) { if (!this.baseUrl) { throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided."); } if (!filename) { throw new Error("Font filename must be specified."); } const url = `${this.baseUrl}${filename}`; return this._fetchData(url).catch((reason) => { throw new Error(`Unable to load font data at: ${url}`); }); } _fetchData(url) { unreachable("Abstract method `_fetchData` called."); } }; var BaseSVGFactory = class { create(width, height, skipDimensions = false) { if (width <= 0 || height <= 0) { throw new Error("Invalid SVG dimensions"); } const svg = this._createSVG("svg:svg"); svg.setAttribute("version", "1.1"); if (!skipDimensions) { svg.setAttribute("width", `${width}px`); svg.setAttribute("height", `${height}px`); } svg.setAttribute("preserveAspectRatio", "none"); svg.setAttribute("viewBox", `0 0 ${width} ${height}`); return svg; } createElement(type) { if (typeof type !== "string") { throw new Error("Invalid SVG element type"); } return this._createSVG(type); } _createSVG(type) { unreachable("Abstract method `_createSVG` called."); } }; var SVG_NS = "http://www.w3.org/2000/svg"; var _PixelsPerInch = class { }; var PixelsPerInch = _PixelsPerInch; __publicField(PixelsPerInch, "CSS", 96); __publicField(PixelsPerInch, "PDF", 72); __publicField(PixelsPerInch, "PDF_TO_CSS_UNITS", _PixelsPerInch.CSS / _PixelsPerInch.PDF); var _baseUrl, __cache, __defs, _docId, _document, __hcmCache, _id, _cache, cache_get, _hcmCache, hcmCache_get, _defs, defs_get, _createTables, createTables_fn, _createUrl, createUrl_fn, _addLuminosityConversion, addLuminosityConversion_fn, _addGrayConversion, addGrayConversion_fn, _createFilter, createFilter_fn, _appendFeFunc, appendFeFunc_fn, _addTransferMapConversion, addTransferMapConversion_fn, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn, _getRGB, getRGB_fn; var DOMFilterFactory = class extends BaseFilterFactory { constructor({ docId, ownerDocument = globalThis.document } = {}) { super(); __privateAdd(this, _cache); __privateAdd(this, _hcmCache); __privateAdd(this, _defs); __privateAdd(this, _createTables); __privateAdd(this, _createUrl); __privateAdd(this, _addLuminosityConversion); __privateAdd(this, _addGrayConversion); __privateAdd(this, _createFilter); __privateAdd(this, _appendFeFunc); __privateAdd(this, _addTransferMapConversion); __privateAdd(this, _addTransferMapAlphaConversion); __privateAdd(this, _getRGB); __privateAdd(this, _baseUrl, void 0); __privateAdd(this, __cache, void 0); __privateAdd(this, __defs, void 0); __privateAdd(this, _docId, void 0); __privateAdd(this, _document, void 0); __privateAdd(this, __hcmCache, void 0); __privateAdd(this, _id, 0); __privateSet(this, _docId, docId); __privateSet(this, _document, ownerDocument); } addFilter(maps) { if (!maps) { return "none"; } let value = __privateGet(this, _cache, cache_get).get(maps); if (value) { return value; } const [tableR, tableG, tableB] = __privateMethod(this, _createTables, createTables_fn).call(this, maps); const key = maps.length === 1 ? tableR : `${tableR}${tableG}${tableB}`; value = __privateGet(this, _cache, cache_get).get(key); if (value) { __privateGet(this, _cache, cache_get).set(maps, value); return value; } const id = `g_${__privateGet(this, _docId)}_transfer_map_${__privateWrapper(this, _id)._++}`; const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); __privateGet(this, _cache, cache_get).set(maps, url); __privateGet(this, _cache, cache_get).set(key, url); const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, tableR, tableG, tableB, filter); return url; } addHCMFilter(fgColor, bgColor) { var _a2; const key = `${fgColor}-${bgColor}`; const filterName = "base"; let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName); if ((info2 == null ? void 0 : info2.key) === key) { return info2.url; } if (info2) { (_a2 = info2.filter) == null ? void 0 : _a2.remove(); info2.key = key; info2.url = "none"; info2.filter = null; } else { info2 = { key, url: "none", filter: null }; __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2); } if (!fgColor || !bgColor) { return info2.url; } const fgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, fgColor); fgColor = Util.makeHexColor(...fgRGB); const bgRGB = __privateMethod(this, _getRGB, getRGB_fn).call(this, bgColor); bgColor = Util.makeHexColor(...bgRGB); __privateGet(this, _defs, defs_get).style.color = ""; if (fgColor === "#000000" && bgColor === "#ffffff" || fgColor === bgColor) { return info2.url; } const map = new Array(256); for (let i = 0; i <= 255; i++) { const x = i / 255; map[i] = x <= 0.03928 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4; } const table = map.join(","); const id = `g_${__privateGet(this, _docId)}_hcm_filter`; const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, table, table, table, filter); __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter); const getSteps = (c, n) => { const start = fgRGB[c] / 255; const end = bgRGB[c] / 255; const arr = new Array(n + 1); for (let i = 0; i <= n; i++) { arr[i] = start + i / n * (end - start); } return arr.join(","); }; __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), filter); info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); return info2.url; } addAlphaFilter(map) { let value = __privateGet(this, _cache, cache_get).get(map); if (value) { return value; } const [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]); const key = `alpha_${tableA}`; value = __privateGet(this, _cache, cache_get).get(key); if (value) { __privateGet(this, _cache, cache_get).set(map, value); return value; } const id = `g_${__privateGet(this, _docId)}_alpha_map_${__privateWrapper(this, _id)._++}`; const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); __privateGet(this, _cache, cache_get).set(map, url); __privateGet(this, _cache, cache_get).set(key, url); const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter); return url; } addLuminosityFilter(map) { let value = __privateGet(this, _cache, cache_get).get(map || "luminosity"); if (value) { return value; } let tableA, key; if (map) { [tableA] = __privateMethod(this, _createTables, createTables_fn).call(this, [map]); key = `luminosity_${tableA}`; } else { key = "luminosity"; } value = __privateGet(this, _cache, cache_get).get(key); if (value) { __privateGet(this, _cache, cache_get).set(map, value); return value; } const id = `g_${__privateGet(this, _docId)}_luminosity_map_${__privateWrapper(this, _id)._++}`; const url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); __privateGet(this, _cache, cache_get).set(map, url); __privateGet(this, _cache, cache_get).set(key, url); const filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addLuminosityConversion, addLuminosityConversion_fn).call(this, filter); if (map) { __privateMethod(this, _addTransferMapAlphaConversion, addTransferMapAlphaConversion_fn).call(this, tableA, filter); } return url; } addHighlightHCMFilter(filterName, fgColor, bgColor, newFgColor, newBgColor) { var _a2; const key = `${fgColor}-${bgColor}-${newFgColor}-${newBgColor}`; let info2 = __privateGet(this, _hcmCache, hcmCache_get).get(filterName); if ((info2 == null ? void 0 : info2.key) === key) { return info2.url; } if (info2) { (_a2 = info2.filter) == null ? void 0 : _a2.remove(); info2.key = key; info2.url = "none"; info2.filter = null; } else { info2 = { key, url: "none", filter: null }; __privateGet(this, _hcmCache, hcmCache_get).set(filterName, info2); } if (!fgColor || !bgColor) { return info2.url; } const [fgRGB, bgRGB] = [fgColor, bgColor].map(__privateMethod(this, _getRGB, getRGB_fn).bind(this)); let fgGray = Math.round(0.2126 * fgRGB[0] + 0.7152 * fgRGB[1] + 0.0722 * fgRGB[2]); let bgGray = Math.round(0.2126 * bgRGB[0] + 0.7152 * bgRGB[1] + 0.0722 * bgRGB[2]); let [newFgRGB, newBgRGB] = [newFgColor, newBgColor].map(__privateMethod(this, _getRGB, getRGB_fn).bind(this)); if (bgGray < fgGray) { [fgGray, bgGray, newFgRGB, newBgRGB] = [bgGray, fgGray, newBgRGB, newFgRGB]; } __privateGet(this, _defs, defs_get).style.color = ""; const getSteps = (fg, bg, n) => { const arr = new Array(256); const step = (bgGray - fgGray) / n; const newStart = fg / 255; const newStep = (bg - fg) / (255 * n); let prev = 0; for (let i = 0; i <= n; i++) { const k = Math.round(fgGray + i * step); const value = newStart + i * newStep; for (let j = prev; j <= k; j++) { arr[j] = value; } prev = k + 1; } for (let i = prev; i < 256; i++) { arr[i] = arr[prev - 1]; } return arr.join(","); }; const id = `g_${__privateGet(this, _docId)}_hcm_${filterName}_filter`; const filter = info2.filter = __privateMethod(this, _createFilter, createFilter_fn).call(this, id); __privateMethod(this, _addGrayConversion, addGrayConversion_fn).call(this, filter); __privateMethod(this, _addTransferMapConversion, addTransferMapConversion_fn).call(this, getSteps(newFgRGB[0], newBgRGB[0], 5), getSteps(newFgRGB[1], newBgRGB[1], 5), getSteps(newFgRGB[2], newBgRGB[2], 5), filter); info2.url = __privateMethod(this, _createUrl, createUrl_fn).call(this, id); return info2.url; } destroy(keepHCM = false) { if (keepHCM && __privateGet(this, _hcmCache, hcmCache_get).size !== 0) { return; } if (__privateGet(this, __defs)) { __privateGet(this, __defs).parentNode.parentNode.remove(); __privateSet(this, __defs, null); } if (__privateGet(this, __cache)) { __privateGet(this, __cache).clear(); __privateSet(this, __cache, null); } __privateSet(this, _id, 0); } }; _baseUrl = new WeakMap(); __cache = new WeakMap(); __defs = new WeakMap(); _docId = new WeakMap(); _document = new WeakMap(); __hcmCache = new WeakMap(); _id = new WeakMap(); _cache = new WeakSet(); cache_get = function() { return __privateGet(this, __cache) || __privateSet(this, __cache, /* @__PURE__ */ new Map()); }; _hcmCache = new WeakSet(); hcmCache_get = function() { return __privateGet(this, __hcmCache) || __privateSet(this, __hcmCache, /* @__PURE__ */ new Map()); }; _defs = new WeakSet(); defs_get = function() { if (!__privateGet(this, __defs)) { const div = __privateGet(this, _document).createElement("div"); const { style } = div; style.visibility = "hidden"; style.contain = "strict"; style.width = style.height = 0; style.position = "absolute"; style.top = style.left = 0; style.zIndex = -1; const svg = __privateGet(this, _document).createElementNS(SVG_NS, "svg"); svg.setAttribute("width", 0); svg.setAttribute("height", 0); __privateSet(this, __defs, __privateGet(this, _document).createElementNS(SVG_NS, "defs")); div.append(svg); svg.append(__privateGet(this, __defs)); __privateGet(this, _document).body.append(div); } return __privateGet(this, __defs); }; _createTables = new WeakSet(); createTables_fn = function(maps) { if (maps.length === 1) { const mapR2 = maps[0]; const buffer = new Array(256); for (let i = 0; i < 256; i++) { buffer[i] = mapR2[i] / 255; } const table = buffer.join(","); return [table, table, table]; } const [mapR, mapG, mapB] = maps; const bufferR = new Array(256); const bufferG = new Array(256); const bufferB = new Array(256); for (let i = 0; i < 256; i++) { bufferR[i] = mapR[i] / 255; bufferG[i] = mapG[i] / 255; bufferB[i] = mapB[i] / 255; } return [bufferR.join(","), bufferG.join(","), bufferB.join(",")]; }; _createUrl = new WeakSet(); createUrl_fn = function(id) { if (__privateGet(this, _baseUrl) === void 0) { __privateSet(this, _baseUrl, ""); const url = __privateGet(this, _document).URL; if (url !== __privateGet(this, _document).baseURI) { if (isDataScheme(url)) { warn('#createUrl: ignore "data:"-URL for performance reasons.'); } else { __privateSet(this, _baseUrl, url.split("#", 1)[0]); } } } return `url(${__privateGet(this, _baseUrl)}#${id})`; }; _addLuminosityConversion = new WeakSet(); addLuminosityConversion_fn = function(filter) { const feColorMatrix = __privateGet(this, _document).createElementNS(SVG_NS, "feColorMatrix"); feColorMatrix.setAttribute("type", "matrix"); feColorMatrix.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"); filter.append(feColorMatrix); }; _addGrayConversion = new WeakSet(); addGrayConversion_fn = function(filter) { const feColorMatrix = __privateGet(this, _document).createElementNS(SVG_NS, "feColorMatrix"); feColorMatrix.setAttribute("type", "matrix"); feColorMatrix.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"); filter.append(feColorMatrix); }; _createFilter = new WeakSet(); createFilter_fn = function(id) { const filter = __privateGet(this, _document).createElementNS(SVG_NS, "filter"); filter.setAttribute("color-interpolation-filters", "sRGB"); filter.setAttribute("id", id); __privateGet(this, _defs, defs_get).append(filter); return filter; }; _appendFeFunc = new WeakSet(); appendFeFunc_fn = function(feComponentTransfer, func, table) { const feFunc = __privateGet(this, _document).createElementNS(SVG_NS, func); feFunc.setAttribute("type", "discrete"); feFunc.setAttribute("tableValues", table); feComponentTransfer.append(feFunc); }; _addTransferMapConversion = new WeakSet(); addTransferMapConversion_fn = function(rTable, gTable, bTable, filter) { const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer"); filter.append(feComponentTransfer); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncR", rTable); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncG", gTable); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncB", bTable); }; _addTransferMapAlphaConversion = new WeakSet(); addTransferMapAlphaConversion_fn = function(aTable, filter) { const feComponentTransfer = __privateGet(this, _document).createElementNS(SVG_NS, "feComponentTransfer"); filter.append(feComponentTransfer); __privateMethod(this, _appendFeFunc, appendFeFunc_fn).call(this, feComponentTransfer, "feFuncA", aTable); }; _getRGB = new WeakSet(); getRGB_fn = function(color2) { __privateGet(this, _defs, defs_get).style.color = color2; return getRGB(getComputedStyle(__privateGet(this, _defs, defs_get)).getPropertyValue("color")); }; var DOMCanvasFactory = class extends BaseCanvasFactory { constructor({ ownerDocument = globalThis.document, enableHWA = false } = {}) { super({ enableHWA }); this._document = ownerDocument; } _createCanvas(width, height) { const canvas = this._document.createElement("canvas"); canvas.width = width; canvas.height = height; return canvas; } }; async function fetchData(url, type = "text") { if (isValidFetchUrl(url, document.baseURI)) { const response = await fetch(url); if (!response.ok) { throw new Error(response.statusText); } switch (type) { case "arraybuffer": return response.arrayBuffer(); case "blob": return response.blob(); case "json": return response.json(); } return response.text(); } return new Promise((resolve, reject) => { const request = new XMLHttpRequest(); request.open("GET", url, true); request.responseType = type; request.onreadystatechange = () => { if (request.readyState !== XMLHttpRequest.DONE) { return; } if (request.status === 200 || request.status === 0) { switch (type) { case "arraybuffer": case "blob": case "json": resolve(request.response); return; } resolve(request.responseText); return; } reject(new Error(request.statusText)); }; request.send(null); }); } var DOMCMapReaderFactory = class extends BaseCMapReaderFactory { _fetchData(url, compressionType) { return fetchData(url, this.isCompressed ? "arraybuffer" : "text").then((data) => ({ cMapData: data instanceof ArrayBuffer ? new Uint8Array(data) : stringToBytes(data), compressionType })); } }; var DOMStandardFontDataFactory = class extends BaseStandardFontDataFactory { _fetchData(url) { return fetchData(url, "arraybuffer").then((data) => new Uint8Array(data)); } }; var DOMSVGFactory = class extends BaseSVGFactory { _createSVG(type) { return document.createElementNS(SVG_NS, type); } }; var PageViewport = class { constructor({ viewBox, scale, rotation, offsetX = 0, offsetY = 0, dontFlip = false }) { this.viewBox = viewBox; this.scale = scale; this.rotation = rotation; this.offsetX = offsetX; this.offsetY = offsetY; const centerX = (viewBox[2] + viewBox[0]) / 2; const centerY = (viewBox[3] + viewBox[1]) / 2; let rotateA, rotateB, rotateC, rotateD; rotation %= 360; if (rotation < 0) { rotation += 360; } switch (rotation) { case 180: rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; break; case 90: rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; break; case 270: rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; break; case 0: rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; break; default: throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); } if (dontFlip) { rotateC = -rotateC; rotateD = -rotateD; } let offsetCanvasX, offsetCanvasY; let width, height; if (rotateA === 0) { offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; width = (viewBox[3] - viewBox[1]) * scale; height = (viewBox[2] - viewBox[0]) * scale; } else { offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; width = (viewBox[2] - viewBox[0]) * scale; height = (viewBox[3] - viewBox[1]) * scale; } this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; this.width = width; this.height = height; } get rawDims() { const { viewBox } = this; return shadow(this, "rawDims", { pageWidth: viewBox[2] - viewBox[0], pageHeight: viewBox[3] - viewBox[1], pageX: viewBox[0], pageY: viewBox[1] }); } clone({ scale = this.scale, rotation = this.rotation, offsetX = this.offsetX, offsetY = this.offsetY, dontFlip = false } = {}) { return new PageViewport({ viewBox: this.viewBox.slice(), scale, rotation, offsetX, offsetY, dontFlip }); } convertToViewportPoint(x, y) { return Util.applyTransform([x, y], this.transform); } convertToViewportRectangle(rect) { const topLeft = Util.applyTransform([rect[0], rect[1]], this.transform); const bottomRight = Util.applyTransform([rect[2], rect[3]], this.transform); return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; } convertToPdfPoint(x, y) { return Util.applyInverseTransform([x, y], this.transform); } }; var RenderingCancelledException = class extends BaseException { constructor(msg, extraDelay = 0) { super(msg, "RenderingCancelledException"); this.extraDelay = extraDelay; } }; function isDataScheme(url) { const ii = url.length; let i = 0; while (i < ii && url[i].trim() === "") { i++; } return url.substring(i, i + 5).toLowerCase() === "data:"; } function isPdfFile(filename) { return typeof filename === "string" && /\.pdf$/i.test(filename); } function getFilenameFromUrl(url) { [url] = url.split(/[#?]/, 1); return url.substring(url.lastIndexOf("/") + 1); } function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { if (typeof url !== "string") { return defaultFilename; } if (isDataScheme(url)) { warn('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); return defaultFilename; } const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; const splitURI = reURI.exec(url); let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); if (suggestedFilename) { suggestedFilename = suggestedFilename[0]; if (suggestedFilename.includes("%")) { try { suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; } catch (e) { } } } return suggestedFilename || defaultFilename; } var StatTimer = class { constructor() { __publicField(this, "started", /* @__PURE__ */ Object.create(null)); __publicField(this, "times", []); } time(name) { if (name in this.started) { warn(`Timer is already running for ${name}`); } this.started[name] = Date.now(); } timeEnd(name) { if (!(name in this.started)) { warn(`Timer has not been started for ${name}`); } this.times.push({ name, start: this.started[name], end: Date.now() }); delete this.started[name]; } toString() { const outBuf = []; let longest = 0; for (const { name } of this.times) { longest = Math.max(name.length, longest); } for (const { name, start, end } of this.times) { outBuf.push(`${name.padEnd(longest)} ${end - start}ms `); } return outBuf.join(""); } }; function isValidFetchUrl(url, baseUrl) { try { const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url); return protocol === "http:" || protocol === "https:"; } catch (e) { return false; } } function noContextMenu(e) { e.preventDefault(); } var pdfDateStringRegex; var PDFDateString = class { static toDateObject(input) { if (!input || typeof input !== "string") { return null; } pdfDateStringRegex || (pdfDateStringRegex = new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?")); const matches = pdfDateStringRegex.exec(input); if (!matches) { return null; } const year = parseInt(matches[1], 10); let month = parseInt(matches[2], 10); month = month >= 1 && month <= 12 ? month - 1 : 0; let day = parseInt(matches[3], 10); day = day >= 1 && day <= 31 ? day : 1; let hour = parseInt(matches[4], 10); hour = hour >= 0 && hour <= 23 ? hour : 0; let minute = parseInt(matches[5], 10); minute = minute >= 0 && minute <= 59 ? minute : 0; let second = parseInt(matches[6], 10); second = second >= 0 && second <= 59 ? second : 0; const universalTimeRelation = matches[7] || "Z"; let offsetHour = parseInt(matches[8], 10); offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; let offsetMinute = parseInt(matches[9], 10) || 0; offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; if (universalTimeRelation === "-") { hour += offsetHour; minute += offsetMinute; } else if (universalTimeRelation === "+") { hour -= offsetHour; minute -= offsetMinute; } return new Date(Date.UTC(year, month, day, hour, minute, second)); } }; function getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) { const { width, height } = xfaPage.attributes.style; const viewBox = [0, 0, parseInt(width), parseInt(height)]; return new PageViewport({ viewBox, scale, rotation }); } function getRGB(color2) { if (color2.startsWith("#")) { const colorRGB = parseInt(color2.slice(1), 16); return [(colorRGB & 16711680) >> 16, (colorRGB & 65280) >> 8, colorRGB & 255]; } if (color2.startsWith("rgb(")) { return color2.slice(4, -1).split(",").map((x) => parseInt(x)); } if (color2.startsWith("rgba(")) { return color2.slice(5, -1).split(",").map((x) => parseInt(x)).slice(0, 3); } warn(`Not a valid color format: "${color2}"`); return [0, 0, 0]; } function getColorValues(colors) { const span = document.createElement("span"); span.style.visibility = "hidden"; document.body.append(span); for (const name of colors.keys()) { span.style.color = name; const computedColor = window.getComputedStyle(span).color; colors.set(name, getRGB(computedColor)); } span.remove(); } function getCurrentTransform(ctx) { const { a, b, c, d, e, f } = ctx.getTransform(); return [a, b, c, d, e, f]; } function getCurrentTransformInverse(ctx) { const { a, b, c, d, e, f } = ctx.getTransform().invertSelf(); return [a, b, c, d, e, f]; } function setLayerDimensions(div, viewport, mustFlip = false, mustRotate = true) { if (viewport instanceof PageViewport) { const { pageWidth, pageHeight } = viewport.rawDims; const { style } = div; const useRound = util_FeatureTest.isCSSRoundSupported; const w = `var(--scale-factor) * ${pageWidth}px`, h = `var(--scale-factor) * ${pageHeight}px`; const widthStr = useRound ? `round(${w}, 1px)` : `calc(${w})`, heightStr = useRound ? `round(${h}, 1px)` : `calc(${h})`; if (!mustFlip || viewport.rotation % 180 === 0) { style.width = widthStr; style.height = heightStr; } else { style.width = heightStr; style.height = widthStr; } } if (mustRotate) { div.setAttribute("data-main-rotation", viewport.rotation); } } var _toolbar, _colorPicker, _editor, _buttons, _altText, _l10nRemove, _pointerDown, pointerDown_fn, _focusIn, focusIn_fn, _focusOut, focusOut_fn, _addListenersToElement, addListenersToElement_fn, _addDeleteButton, addDeleteButton_fn, _divider, divider_get; var _EditorToolbar = class { constructor(editor) { __privateAdd(this, _focusIn); __privateAdd(this, _focusOut); __privateAdd(this, _addListenersToElement); __privateAdd(this, _addDeleteButton); __privateAdd(this, _divider); __privateAdd(this, _toolbar, null); __privateAdd(this, _colorPicker, null); __privateAdd(this, _editor, void 0); __privateAdd(this, _buttons, null); __privateAdd(this, _altText, null); __privateSet(this, _editor, editor); __privateGet(_EditorToolbar, _l10nRemove) || __privateSet(_EditorToolbar, _l10nRemove, Object.freeze({ freetext: "pdfjs-editor-remove-freetext-button", highlight: "pdfjs-editor-remove-highlight-button", ink: "pdfjs-editor-remove-ink-button", stamp: "pdfjs-editor-remove-stamp-button" })); } render() { const editToolbar = __privateSet(this, _toolbar, document.createElement("div")); editToolbar.className = "editToolbar"; editToolbar.setAttribute("role", "toolbar"); const signal = __privateGet(this, _editor)._uiManager._signal; editToolbar.addEventListener("contextmenu", noContextMenu, { signal }); editToolbar.addEventListener("pointerdown", __privateMethod(_EditorToolbar, _pointerDown, pointerDown_fn), { signal }); const buttons = __privateSet(this, _buttons, document.createElement("div")); buttons.className = "buttons"; editToolbar.append(buttons); const position = __privateGet(this, _editor).toolbarPosition; if (position) { const { style } = editToolbar; const x = __privateGet(this, _editor)._uiManager.direction === "ltr" ? 1 - position[0] : position[0]; style.insetInlineEnd = `${100 * x}%`; style.top = `calc(${100 * position[1]}% + var(--editor-toolbar-vert-offset))`; } __privateMethod(this, _addDeleteButton, addDeleteButton_fn).call(this); return editToolbar; } hide() { var _a2; __privateGet(this, _toolbar).classList.add("hidden"); (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.hideDropdown(); } show() { var _a2; __privateGet(this, _toolbar).classList.remove("hidden"); (_a2 = __privateGet(this, _altText)) == null ? void 0 : _a2.shown(); } async addAltText(altText) { const button = await altText.render(); __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get)); __privateSet(this, _altText, altText); } addColorPicker(colorPicker) { __privateSet(this, _colorPicker, colorPicker); const button = colorPicker.renderButton(); __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); __privateGet(this, _buttons).prepend(button, __privateGet(this, _divider, divider_get)); } remove() { var _a2; __privateGet(this, _toolbar).remove(); (_a2 = __privateGet(this, _colorPicker)) == null ? void 0 : _a2.destroy(); __privateSet(this, _colorPicker, null); } }; var EditorToolbar = _EditorToolbar; _toolbar = new WeakMap(); _colorPicker = new WeakMap(); _editor = new WeakMap(); _buttons = new WeakMap(); _altText = new WeakMap(); _l10nRemove = new WeakMap(); _pointerDown = new WeakSet(); pointerDown_fn = function(e) { e.stopPropagation(); }; _focusIn = new WeakSet(); focusIn_fn = function(e) { __privateGet(this, _editor)._focusEventsAllowed = false; e.preventDefault(); e.stopPropagation(); }; _focusOut = new WeakSet(); focusOut_fn = function(e) { __privateGet(this, _editor)._focusEventsAllowed = true; e.preventDefault(); e.stopPropagation(); }; _addListenersToElement = new WeakSet(); addListenersToElement_fn = function(element) { const signal = __privateGet(this, _editor)._uiManager._signal; element.addEventListener("focusin", __privateMethod(this, _focusIn, focusIn_fn).bind(this), { capture: true, signal }); element.addEventListener("focusout", __privateMethod(this, _focusOut, focusOut_fn).bind(this), { capture: true, signal }); element.addEventListener("contextmenu", noContextMenu, { signal }); }; _addDeleteButton = new WeakSet(); addDeleteButton_fn = function() { const { editorType, _uiManager: _uiManager4 } = __privateGet(this, _editor); const button = document.createElement("button"); button.className = "delete"; button.tabIndex = 0; button.setAttribute("data-l10n-id", __privateGet(_EditorToolbar, _l10nRemove)[editorType]); __privateMethod(this, _addListenersToElement, addListenersToElement_fn).call(this, button); button.addEventListener("click", (e) => { _uiManager4.delete(); }, { signal: _uiManager4._signal }); __privateGet(this, _buttons).append(button); }; _divider = new WeakSet(); divider_get = function() { const divider = document.createElement("div"); divider.className = "divider"; return divider; }; __privateAdd(EditorToolbar, _pointerDown); __privateAdd(EditorToolbar, _l10nRemove, null); var _buttons2, _toolbar2, _uiManager, _render, render_fn, _getLastPoint, getLastPoint_fn, _addHighlightButton, addHighlightButton_fn; var HighlightToolbar = class { constructor(uiManager) { __privateAdd(this, _render); __privateAdd(this, _getLastPoint); __privateAdd(this, _addHighlightButton); __privateAdd(this, _buttons2, null); __privateAdd(this, _toolbar2, null); __privateAdd(this, _uiManager, void 0); __privateSet(this, _uiManager, uiManager); } show(parent, boxes, isLTR) { const [x, y] = __privateMethod(this, _getLastPoint, getLastPoint_fn).call(this, boxes, isLTR); const { style } = __privateGet(this, _toolbar2) || __privateSet(this, _toolbar2, __privateMethod(this, _render, render_fn).call(this)); parent.append(__privateGet(this, _toolbar2)); style.insetInlineEnd = `${100 * x}%`; style.top = `calc(${100 * y}% + var(--editor-toolbar-vert-offset))`; } hide() { __privateGet(this, _toolbar2).remove(); } }; _buttons2 = new WeakMap(); _toolbar2 = new WeakMap(); _uiManager = new WeakMap(); _render = new WeakSet(); render_fn = function() { const editToolbar = __privateSet(this, _toolbar2, document.createElement("div")); editToolbar.className = "editToolbar"; editToolbar.setAttribute("role", "toolbar"); editToolbar.addEventListener("contextmenu", noContextMenu, { signal: __privateGet(this, _uiManager)._signal }); const buttons = __privateSet(this, _buttons2, document.createElement("div")); buttons.className = "buttons"; editToolbar.append(buttons); __privateMethod(this, _addHighlightButton, addHighlightButton_fn).call(this); return editToolbar; }; _getLastPoint = new WeakSet(); getLastPoint_fn = function(boxes, isLTR) { let lastY = 0; let lastX = 0; for (const box of boxes) { const y = box.y + box.height; if (y < lastY) { continue; } const x = box.x + (isLTR ? box.width : 0); if (y > lastY) { lastX = x; lastY = y; continue; } if (isLTR) { if (x > lastX) { lastX = x; } } else if (x < lastX) { lastX = x; } } return [isLTR ? 1 - lastX : lastX, lastY]; }; _addHighlightButton = new WeakSet(); addHighlightButton_fn = function() { const button = document.createElement("button"); button.className = "highlightButton"; button.tabIndex = 0; button.setAttribute("data-l10n-id", `pdfjs-highlight-floating-button1`); const span = document.createElement("span"); button.append(span); span.className = "visuallyHidden"; span.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button-label"); const signal = __privateGet(this, _uiManager)._signal; button.addEventListener("contextmenu", noContextMenu, { signal }); button.addEventListener("click", () => { __privateGet(this, _uiManager).highlightSelection("floating_button"); }, { signal }); __privateGet(this, _buttons2).append(button); }; function bindEvents(obj, element, names) { for (const name of names) { element.addEventListener(name, obj[name].bind(obj)); } } function opacityToHex(opacity) { return Math.round(Math.min(255, Math.max(1, 255 * opacity))).toString(16).padStart(2, "0"); } var _id2; var IdManager = class { constructor() { __privateAdd(this, _id2, 0); } get id() { return `${AnnotationEditorPrefix}${__privateWrapper(this, _id2)._++}`; } }; _id2 = new WeakMap(); var _baseId, _id3, _cache2, _get, get_fn; var _ImageManager = class { constructor() { __privateAdd(this, _get); __privateAdd(this, _baseId, getUuid()); __privateAdd(this, _id3, 0); __privateAdd(this, _cache2, null); } static get _isSVGFittingCanvas() { const svg = `data:image/svg+xml;charset=UTF-8,`; const canvas = new OffscreenCanvas(1, 3); const ctx = canvas.getContext("2d", { willReadFrequently: true }); const image = new Image(); image.src = svg; const promise = image.decode().then(() => { ctx.drawImage(image, 0, 0, 1, 1, 0, 0, 1, 3); return new Uint32Array(ctx.getImageData(0, 0, 1, 1).data.buffer)[0] === 0; }); return shadow(this, "_isSVGFittingCanvas", promise); } async getFromFile(file) { const { lastModified, name, size, type } = file; return __privateMethod(this, _get, get_fn).call(this, `${lastModified}_${name}_${size}_${type}`, file); } async getFromUrl(url) { return __privateMethod(this, _get, get_fn).call(this, url, url); } async getFromId(id) { __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); const data = __privateGet(this, _cache2).get(id); if (!data) { return null; } if (data.bitmap) { data.refCounter += 1; return data; } if (data.file) { return this.getFromFile(data.file); } return this.getFromUrl(data.url); } getSvgUrl(id) { const data = __privateGet(this, _cache2).get(id); if (!(data == null ? void 0 : data.isSvg)) { return null; } return data.svgUrl; } deleteId(id) { __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); const data = __privateGet(this, _cache2).get(id); if (!data) { return; } data.refCounter -= 1; if (data.refCounter !== 0) { return; } data.bitmap = null; } isValidId(id) { return id.startsWith(`image_${__privateGet(this, _baseId)}_`); } }; var ImageManager = _ImageManager; _baseId = new WeakMap(); _id3 = new WeakMap(); _cache2 = new WeakMap(); _get = new WeakSet(); get_fn = async function(key, rawData) { __privateGet(this, _cache2) || __privateSet(this, _cache2, /* @__PURE__ */ new Map()); let data = __privateGet(this, _cache2).get(key); if (data === null) { return null; } if (data == null ? void 0 : data.bitmap) { data.refCounter += 1; return data; } try { data || (data = { bitmap: null, id: `image_${__privateGet(this, _baseId)}_${__privateWrapper(this, _id3)._++}`, refCounter: 0, isSvg: false }); let image; if (typeof rawData === "string") { data.url = rawData; image = await fetchData(rawData, "blob"); } else { image = data.file = rawData; } if (image.type === "image/svg+xml") { const mustRemoveAspectRatioPromise = _ImageManager._isSVGFittingCanvas; const fileReader = new FileReader(); const imageElement = new Image(); const imagePromise = new Promise((resolve, reject) => { imageElement.onload = () => { data.bitmap = imageElement; data.isSvg = true; resolve(); }; fileReader.onload = async () => { const url = data.svgUrl = fileReader.result; imageElement.src = await mustRemoveAspectRatioPromise ? `${url}#svgView(preserveAspectRatio(none))` : url; }; imageElement.onerror = fileReader.onerror = reject; }); fileReader.readAsDataURL(image); await imagePromise; } else { data.bitmap = await createImageBitmap(image); } data.refCounter = 1; } catch (e) { console.error(e); data = null; } __privateGet(this, _cache2).set(key, data); if (data) { __privateGet(this, _cache2).set(data.id, data); } return data; }; var _commands, _locked, _maxSize, _position; var CommandManager = class { constructor(maxSize = 128) { __privateAdd(this, _commands, []); __privateAdd(this, _locked, false); __privateAdd(this, _maxSize, void 0); __privateAdd(this, _position, -1); __privateSet(this, _maxSize, maxSize); } add({ cmd, undo, post, mustExec, type = NaN, overwriteIfSameType = false, keepUndo = false }) { if (mustExec) { cmd(); } if (__privateGet(this, _locked)) { return; } const save = { cmd, undo, post, type }; if (__privateGet(this, _position) === -1) { if (__privateGet(this, _commands).length > 0) { __privateGet(this, _commands).length = 0; } __privateSet(this, _position, 0); __privateGet(this, _commands).push(save); return; } if (overwriteIfSameType && __privateGet(this, _commands)[__privateGet(this, _position)].type === type) { if (keepUndo) { save.undo = __privateGet(this, _commands)[__privateGet(this, _position)].undo; } __privateGet(this, _commands)[__privateGet(this, _position)] = save; return; } const next = __privateGet(this, _position) + 1; if (next === __privateGet(this, _maxSize)) { __privateGet(this, _commands).splice(0, 1); } else { __privateSet(this, _position, next); if (next < __privateGet(this, _commands).length) { __privateGet(this, _commands).splice(next); } } __privateGet(this, _commands).push(save); } undo() { if (__privateGet(this, _position) === -1) { return; } __privateSet(this, _locked, true); const { undo, post } = __privateGet(this, _commands)[__privateGet(this, _position)]; undo(); post == null ? void 0 : post(); __privateSet(this, _locked, false); __privateSet(this, _position, __privateGet(this, _position) - 1); } redo() { if (__privateGet(this, _position) < __privateGet(this, _commands).length - 1) { __privateSet(this, _position, __privateGet(this, _position) + 1); __privateSet(this, _locked, true); const { cmd, post } = __privateGet(this, _commands)[__privateGet(this, _position)]; cmd(); post == null ? void 0 : post(); __privateSet(this, _locked, false); } } hasSomethingToUndo() { return __privateGet(this, _position) !== -1; } hasSomethingToRedo() { return __privateGet(this, _position) < __privateGet(this, _commands).length - 1; } destroy() { __privateSet(this, _commands, null); } }; _commands = new WeakMap(); _locked = new WeakMap(); _maxSize = new WeakMap(); _position = new WeakMap(); var _serialize, serialize_fn; var KeyboardManager = class { constructor(callbacks) { __privateAdd(this, _serialize); this.buffer = []; this.callbacks = /* @__PURE__ */ new Map(); this.allKeys = /* @__PURE__ */ new Set(); const { isMac } = util_FeatureTest.platform; for (const [keys, callback, options = {}] of callbacks) { for (const key of keys) { const isMacKey = key.startsWith("mac+"); if (isMac && isMacKey) { this.callbacks.set(key.slice(4), { callback, options }); this.allKeys.add(key.split("+").at(-1)); } else if (!isMac && !isMacKey) { this.callbacks.set(key, { callback, options }); this.allKeys.add(key.split("+").at(-1)); } } } } exec(self, event) { if (!this.allKeys.has(event.key)) { return; } const info2 = this.callbacks.get(__privateMethod(this, _serialize, serialize_fn).call(this, event)); if (!info2) { return; } const { callback, options: { bubbles = false, args = [], checker = null } } = info2; if (checker && !checker(self, event)) { return; } callback.bind(self, ...args, event)(); if (!bubbles) { event.stopPropagation(); event.preventDefault(); } } }; _serialize = new WeakSet(); serialize_fn = function(event) { if (event.altKey) { this.buffer.push("alt"); } if (event.ctrlKey) { this.buffer.push("ctrl"); } if (event.metaKey) { this.buffer.push("meta"); } if (event.shiftKey) { this.buffer.push("shift"); } this.buffer.push(event.key); const str = this.buffer.join("+"); this.buffer.length = 0; return str; }; var _ColorManager = class { get _colors() { const colors = /* @__PURE__ */ new Map([["CanvasText", null], ["Canvas", null]]); getColorValues(colors); return shadow(this, "_colors", colors); } convert(color2) { const rgb = getRGB(color2); if (!window.matchMedia("(forced-colors: active)").matches) { return rgb; } for (const [name, RGB] of this._colors) { if (RGB.every((x, i) => x === rgb[i])) { return _ColorManager._colorsMapping.get(name); } } return rgb; } getHexCode(name) { const rgb = this._colors.get(name); if (!rgb) { return name; } return Util.makeHexColor(...rgb); } }; var ColorManager = _ColorManager; __publicField(ColorManager, "_colorsMapping", /* @__PURE__ */ new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]])); var _abortController, _activeEditor, _allEditors, _allLayers, _altTextManager, _annotationStorage, _changedExistingAnnotations, _commandManager, _copyPasteAC, _currentPageIndex, _deletedAnnotationsElementIds, _draggingEditors, _editorTypes, _editorsToRescale, _enableHighlightFloatingButton, _enableUpdatedAddImage, _enableNewAltTextWhenAddingImage, _filterFactory, _focusMainContainerTimeoutId, _focusManagerAC, _highlightColors, _highlightWhenShiftUp, _highlightToolbar, _idManager, _isEnabled, _isWaiting, _keyboardManagerAC, _lastActiveElement, _mainHighlightColorPicker, _mlManager, _mode, _selectedEditors, _selectedTextNode, _pageColors, _showAllStates, _previousStates, _translation, _translationTimeoutId, _container, _viewer, _getAnchorElementForSelection, getAnchorElementForSelection_fn, _getLayerForTextLayer, getLayerForTextLayer_fn, _displayHighlightToolbar, displayHighlightToolbar_fn, _selectionChange, selectionChange_fn, _onSelectEnd, onSelectEnd_fn, _addSelectionListener, addSelectionListener_fn, _addFocusManager, addFocusManager_fn, _removeFocusManager, removeFocusManager_fn, _addKeyboardManager, addKeyboardManager_fn, _removeKeyboardManager, removeKeyboardManager_fn, _addCopyPasteListeners, addCopyPasteListeners_fn, _removeCopyPasteListeners, removeCopyPasteListeners_fn, _addDragAndDropListeners, addDragAndDropListeners_fn, _dispatchUpdateStates, dispatchUpdateStates_fn, _dispatchUpdateUI, dispatchUpdateUI_fn, _enableAll, enableAll_fn, _disableAll, disableAll_fn, _addEditorToLayer, addEditorToLayer_fn, _lastSelectedEditor, lastSelectedEditor_get, _isEmpty, isEmpty_fn, _selectEditors, selectEditors_fn; var _AnnotationEditorUIManager = class { constructor(container, viewer, altTextManager, eventBus, pdfDocument, pageColors, highlightColors, enableHighlightFloatingButton, enableUpdatedAddImage, enableNewAltTextWhenAddingImage, mlManager) { __privateAdd(this, _getAnchorElementForSelection); __privateAdd(this, _getLayerForTextLayer); __privateAdd(this, _displayHighlightToolbar); __privateAdd(this, _selectionChange); __privateAdd(this, _onSelectEnd); __privateAdd(this, _addSelectionListener); __privateAdd(this, _addFocusManager); __privateAdd(this, _removeFocusManager); __privateAdd(this, _addKeyboardManager); __privateAdd(this, _removeKeyboardManager); __privateAdd(this, _addCopyPasteListeners); __privateAdd(this, _removeCopyPasteListeners); __privateAdd(this, _addDragAndDropListeners); __privateAdd(this, _dispatchUpdateStates); __privateAdd(this, _dispatchUpdateUI); __privateAdd(this, _enableAll); __privateAdd(this, _disableAll); __privateAdd(this, _addEditorToLayer); __privateAdd(this, _lastSelectedEditor); __privateAdd(this, _isEmpty); __privateAdd(this, _selectEditors); __privateAdd(this, _abortController, new AbortController()); __privateAdd(this, _activeEditor, null); __privateAdd(this, _allEditors, /* @__PURE__ */ new Map()); __privateAdd(this, _allLayers, /* @__PURE__ */ new Map()); __privateAdd(this, _altTextManager, null); __privateAdd(this, _annotationStorage, null); __privateAdd(this, _changedExistingAnnotations, null); __privateAdd(this, _commandManager, new CommandManager()); __privateAdd(this, _copyPasteAC, null); __privateAdd(this, _currentPageIndex, 0); __privateAdd(this, _deletedAnnotationsElementIds, /* @__PURE__ */ new Set()); __privateAdd(this, _draggingEditors, null); __privateAdd(this, _editorTypes, null); __privateAdd(this, _editorsToRescale, /* @__PURE__ */ new Set()); __privateAdd(this, _enableHighlightFloatingButton, false); __privateAdd(this, _enableUpdatedAddImage, false); __privateAdd(this, _enableNewAltTextWhenAddingImage, false); __privateAdd(this, _filterFactory, null); __privateAdd(this, _focusMainContainerTimeoutId, null); __privateAdd(this, _focusManagerAC, null); __privateAdd(this, _highlightColors, null); __privateAdd(this, _highlightWhenShiftUp, false); __privateAdd(this, _highlightToolbar, null); __privateAdd(this, _idManager, new IdManager()); __privateAdd(this, _isEnabled, false); __privateAdd(this, _isWaiting, false); __privateAdd(this, _keyboardManagerAC, null); __privateAdd(this, _lastActiveElement, null); __privateAdd(this, _mainHighlightColorPicker, null); __privateAdd(this, _mlManager, null); __privateAdd(this, _mode, AnnotationEditorType.NONE); __privateAdd(this, _selectedEditors, /* @__PURE__ */ new Set()); __privateAdd(this, _selectedTextNode, null); __privateAdd(this, _pageColors, null); __privateAdd(this, _showAllStates, null); __privateAdd(this, _previousStates, { isEditing: false, isEmpty: true, hasSomethingToUndo: false, hasSomethingToRedo: false, hasSelectedEditor: false, hasSelectedText: false }); __privateAdd(this, _translation, [0, 0]); __privateAdd(this, _translationTimeoutId, null); __privateAdd(this, _container, null); __privateAdd(this, _viewer, null); const signal = this._signal = __privateGet(this, _abortController).signal; __privateSet(this, _container, container); __privateSet(this, _viewer, viewer); __privateSet(this, _altTextManager, altTextManager); this._eventBus = eventBus; eventBus._on("editingaction", this.onEditingAction.bind(this), { signal }); eventBus._on("pagechanging", this.onPageChanging.bind(this), { signal }); eventBus._on("scalechanging", this.onScaleChanging.bind(this), { signal }); eventBus._on("rotationchanging", this.onRotationChanging.bind(this), { signal }); eventBus._on("setpreference", this.onSetPreference.bind(this), { signal }); eventBus._on("switchannotationeditorparams", (evt) => this.updateParams(evt.type, evt.value), { signal }); __privateMethod(this, _addSelectionListener, addSelectionListener_fn).call(this); __privateMethod(this, _addDragAndDropListeners, addDragAndDropListeners_fn).call(this); __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this); __privateSet(this, _annotationStorage, pdfDocument.annotationStorage); __privateSet(this, _filterFactory, pdfDocument.filterFactory); __privateSet(this, _pageColors, pageColors); __privateSet(this, _highlightColors, highlightColors || null); __privateSet(this, _enableHighlightFloatingButton, enableHighlightFloatingButton); __privateSet(this, _enableUpdatedAddImage, enableUpdatedAddImage); __privateSet(this, _enableNewAltTextWhenAddingImage, enableNewAltTextWhenAddingImage); __privateSet(this, _mlManager, mlManager || null); this.viewParameters = { realScale: PixelsPerInch.PDF_TO_CSS_UNITS, rotation: 0 }; this.isShiftKeyDown = false; } static get _keyboardManager() { const proto = _AnnotationEditorUIManager.prototype; const arrowChecker = (self) => __privateGet(self, _container).contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && self.hasSomethingToControl(); const textInputChecker = (_self, { target: el }) => { if (el instanceof HTMLInputElement) { const { type } = el; return type !== "text" && type !== "number"; } return true; }; const small = this.TRANSLATE_SMALL; const big = this.TRANSLATE_BIG; return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+a", "mac+meta+a"], proto.selectAll, { checker: textInputChecker }], [["ctrl+z", "mac+meta+z"], proto.undo, { checker: textInputChecker }], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], proto.redo, { checker: textInputChecker }], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], proto.delete, { checker: textInputChecker }], [["Enter", "mac+Enter"], proto.addNewEditorFromKeyboard, { checker: (self, { target: el }) => !(el instanceof HTMLButtonElement) && __privateGet(self, _container).contains(el) && !self.isEnterHandled }], [[" ", "mac+ "], proto.addNewEditorFromKeyboard, { checker: (self, { target: el }) => !(el instanceof HTMLButtonElement) && __privateGet(self, _container).contains(document.activeElement) }], [["Escape", "mac+Escape"], proto.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], proto.translateSelectedEditors, { args: [-small, 0], checker: arrowChecker }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto.translateSelectedEditors, { args: [-big, 0], checker: arrowChecker }], [["ArrowRight", "mac+ArrowRight"], proto.translateSelectedEditors, { args: [small, 0], checker: arrowChecker }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto.translateSelectedEditors, { args: [big, 0], checker: arrowChecker }], [["ArrowUp", "mac+ArrowUp"], proto.translateSelectedEditors, { args: [0, -small], checker: arrowChecker }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto.translateSelectedEditors, { args: [0, -big], checker: arrowChecker }], [["ArrowDown", "mac+ArrowDown"], proto.translateSelectedEditors, { args: [0, small], checker: arrowChecker }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto.translateSelectedEditors, { args: [0, big], checker: arrowChecker }]])); } destroy() { var _a2, _b, _c; (_a2 = __privateGet(this, _abortController)) == null ? void 0 : _a2.abort(); __privateSet(this, _abortController, null); this._signal = null; for (const layer of __privateGet(this, _allLayers).values()) { layer.destroy(); } __privateGet(this, _allLayers).clear(); __privateGet(this, _allEditors).clear(); __privateGet(this, _editorsToRescale).clear(); __privateSet(this, _activeEditor, null); __privateGet(this, _selectedEditors).clear(); __privateGet(this, _commandManager).destroy(); (_b = __privateGet(this, _altTextManager)) == null ? void 0 : _b.destroy(); (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide(); __privateSet(this, _highlightToolbar, null); if (__privateGet(this, _focusMainContainerTimeoutId)) { clearTimeout(__privateGet(this, _focusMainContainerTimeoutId)); __privateSet(this, _focusMainContainerTimeoutId, null); } if (__privateGet(this, _translationTimeoutId)) { clearTimeout(__privateGet(this, _translationTimeoutId)); __privateSet(this, _translationTimeoutId, null); } } combinedSignal(ac) { return AbortSignal.any([this._signal, ac.signal]); } get mlManager() { return __privateGet(this, _mlManager); } get useNewAltTextFlow() { return __privateGet(this, _enableUpdatedAddImage); } get useNewAltTextWhenAddingImage() { return __privateGet(this, _enableNewAltTextWhenAddingImage); } get hcmFilter() { return shadow(this, "hcmFilter", __privateGet(this, _pageColors) ? __privateGet(this, _filterFactory).addHCMFilter(__privateGet(this, _pageColors).foreground, __privateGet(this, _pageColors).background) : "none"); } get direction() { return shadow(this, "direction", getComputedStyle(__privateGet(this, _container)).direction); } get highlightColors() { return shadow(this, "highlightColors", __privateGet(this, _highlightColors) ? new Map(__privateGet(this, _highlightColors).split(",").map((pair) => pair.split("=").map((x) => x.trim()))) : null); } get highlightColorNames() { return shadow(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, (e) => e.reverse())) : null); } setMainHighlightColorPicker(colorPicker) { __privateSet(this, _mainHighlightColorPicker, colorPicker); } editAltText(editor, firstTime = false) { var _a2; (_a2 = __privateGet(this, _altTextManager)) == null ? void 0 : _a2.editAltText(this, editor, firstTime); } switchToMode(mode, callback) { this._eventBus.on("annotationeditormodechanged", callback, { once: true, signal: this._signal }); this._eventBus.dispatch("showannotationeditorui", { source: this, mode }); } setPreference(name, value) { this._eventBus.dispatch("setpreference", { source: this, name, value }); } onSetPreference({ name, value }) { switch (name) { case "enableNewAltTextWhenAddingImage": __privateSet(this, _enableNewAltTextWhenAddingImage, value); break; } } onPageChanging({ pageNumber }) { __privateSet(this, _currentPageIndex, pageNumber - 1); } focusMainContainer() { __privateGet(this, _container).focus(); } findParent(x, y) { for (const layer of __privateGet(this, _allLayers).values()) { const { x: layerX, y: layerY, width, height } = layer.div.getBoundingClientRect(); if (x >= layerX && x <= layerX + width && y >= layerY && y <= layerY + height) { return layer; } } return null; } disableUserSelect(value = false) { __privateGet(this, _viewer).classList.toggle("noUserSelect", value); } addShouldRescale(editor) { __privateGet(this, _editorsToRescale).add(editor); } removeShouldRescale(editor) { __privateGet(this, _editorsToRescale).delete(editor); } onScaleChanging({ scale }) { this.commitOrRemove(); this.viewParameters.realScale = scale * PixelsPerInch.PDF_TO_CSS_UNITS; for (const editor of __privateGet(this, _editorsToRescale)) { editor.onScaleChanging(); } } onRotationChanging({ pagesRotation }) { this.commitOrRemove(); this.viewParameters.rotation = pagesRotation; } highlightSelection(methodOfCreation = "") { const selection = document.getSelection(); if (!selection || selection.isCollapsed) { return; } const { anchorNode, anchorOffset, focusNode, focusOffset } = selection; const text = selection.toString(); const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); const textLayer = anchorElement.closest(".textLayer"); const boxes = this.getSelectionBoxes(textLayer); if (!boxes) { return; } selection.empty(); const layer = __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer); const isNoneMode = __privateGet(this, _mode) === AnnotationEditorType.NONE; const callback = () => { layer == null ? void 0 : layer.createAndAddNewEditor({ x: 0, y: 0 }, false, { methodOfCreation, boxes, anchorNode, anchorOffset, focusNode, focusOffset, text }); if (isNoneMode) { this.showAllEditors("highlight", true, true); } }; if (isNoneMode) { this.switchToMode(AnnotationEditorType.HIGHLIGHT, callback); return; } callback(); } addToAnnotationStorage(editor) { if (!editor.isEmpty() && __privateGet(this, _annotationStorage) && !__privateGet(this, _annotationStorage).has(editor.id)) { __privateGet(this, _annotationStorage).setValue(editor.id, editor); } } blur() { this.isShiftKeyDown = false; if (__privateGet(this, _highlightWhenShiftUp)) { __privateSet(this, _highlightWhenShiftUp, false); __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); } if (!this.hasSelection) { return; } const { activeElement } = document; for (const editor of __privateGet(this, _selectedEditors)) { if (editor.div.contains(activeElement)) { __privateSet(this, _lastActiveElement, [editor, activeElement]); editor._focusEventsAllowed = false; break; } } } focus() { if (!__privateGet(this, _lastActiveElement)) { return; } const [lastEditor, lastActiveElement] = __privateGet(this, _lastActiveElement); __privateSet(this, _lastActiveElement, null); lastActiveElement.addEventListener("focusin", () => { lastEditor._focusEventsAllowed = true; }, { once: true, signal: this._signal }); lastActiveElement.focus(); } addEditListeners() { __privateMethod(this, _addKeyboardManager, addKeyboardManager_fn).call(this); __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this); } removeEditListeners() { __privateMethod(this, _removeKeyboardManager, removeKeyboardManager_fn).call(this); __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this); } dragOver(event) { for (const { type } of event.dataTransfer.items) { for (const editorType of __privateGet(this, _editorTypes)) { if (editorType.isHandlingMimeForPasting(type)) { event.dataTransfer.dropEffect = "copy"; event.preventDefault(); return; } } } } drop(event) { for (const item of event.dataTransfer.items) { for (const editorType of __privateGet(this, _editorTypes)) { if (editorType.isHandlingMimeForPasting(item.type)) { editorType.paste(item, this.currentLayer); event.preventDefault(); return; } } } } copy(event) { var _a2; event.preventDefault(); (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove(); if (!this.hasSelection) { return; } const editors = []; for (const editor of __privateGet(this, _selectedEditors)) { const serialized = editor.serialize(true); if (serialized) { editors.push(serialized); } } if (editors.length === 0) { return; } event.clipboardData.setData("application/pdfjs", JSON.stringify(editors)); } cut(event) { this.copy(event); this.delete(); } paste(event) { event.preventDefault(); const { clipboardData } = event; for (const item of clipboardData.items) { for (const editorType of __privateGet(this, _editorTypes)) { if (editorType.isHandlingMimeForPasting(item.type)) { editorType.paste(item, this.currentLayer); return; } } } let data = clipboardData.getData("application/pdfjs"); if (!data) { return; } try { data = JSON.parse(data); } catch (ex) { warn(`paste: "${ex.message}".`); return; } if (!Array.isArray(data)) { return; } this.unselectAll(); const layer = this.currentLayer; try { const newEditors = []; for (const editor of data) { const deserializedEditor = layer.deserialize(editor); if (!deserializedEditor) { return; } newEditors.push(deserializedEditor); } const cmd = () => { for (const editor of newEditors) { __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor); } __privateMethod(this, _selectEditors, selectEditors_fn).call(this, newEditors); }; const undo = () => { for (const editor of newEditors) { editor.remove(); } }; this.addCommands({ cmd, undo, mustExec: true }); } catch (ex) { warn(`paste: "${ex.message}".`); } } keydown(event) { if (!this.isShiftKeyDown && event.key === "Shift") { this.isShiftKeyDown = true; } if (__privateGet(this, _mode) !== AnnotationEditorType.NONE && !this.isEditorHandlingKeyboard) { _AnnotationEditorUIManager._keyboardManager.exec(this, event); } } keyup(event) { if (this.isShiftKeyDown && event.key === "Shift") { this.isShiftKeyDown = false; if (__privateGet(this, _highlightWhenShiftUp)) { __privateSet(this, _highlightWhenShiftUp, false); __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); } } } onEditingAction({ name }) { switch (name) { case "undo": case "redo": case "delete": case "selectAll": this[name](); break; case "highlightSelection": this.highlightSelection("context_menu"); break; } } setEditingState(isEditing) { if (isEditing) { __privateMethod(this, _addFocusManager, addFocusManager_fn).call(this); __privateMethod(this, _addCopyPasteListeners, addCopyPasteListeners_fn).call(this); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { isEditing: __privateGet(this, _mode) !== AnnotationEditorType.NONE, isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this), hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(), hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(), hasSelectedEditor: false }); } else { __privateMethod(this, _removeFocusManager, removeFocusManager_fn).call(this); __privateMethod(this, _removeCopyPasteListeners, removeCopyPasteListeners_fn).call(this); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { isEditing: false }); this.disableUserSelect(false); } } registerEditorTypes(types) { if (__privateGet(this, _editorTypes)) { return; } __privateSet(this, _editorTypes, types); for (const editorType of __privateGet(this, _editorTypes)) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editorType.defaultPropertiesToUpdate); } } getId() { return __privateGet(this, _idManager).id; } get currentLayer() { return __privateGet(this, _allLayers).get(__privateGet(this, _currentPageIndex)); } getLayer(pageIndex) { return __privateGet(this, _allLayers).get(pageIndex); } get currentPageIndex() { return __privateGet(this, _currentPageIndex); } addLayer(layer) { __privateGet(this, _allLayers).set(layer.pageIndex, layer); if (__privateGet(this, _isEnabled)) { layer.enable(); } else { layer.disable(); } } removeLayer(layer) { __privateGet(this, _allLayers).delete(layer.pageIndex); } updateMode(mode, editId = null, isFromKeyboard = false) { if (__privateGet(this, _mode) === mode) { return; } __privateSet(this, _mode, mode); if (mode === AnnotationEditorType.NONE) { this.setEditingState(false); __privateMethod(this, _disableAll, disableAll_fn).call(this); return; } this.setEditingState(true); __privateMethod(this, _enableAll, enableAll_fn).call(this); this.unselectAll(); for (const layer of __privateGet(this, _allLayers).values()) { layer.updateMode(mode); } if (!editId && isFromKeyboard) { this.addNewEditorFromKeyboard(); return; } if (!editId) { return; } for (const editor of __privateGet(this, _allEditors).values()) { if (editor.annotationElementId === editId) { this.setSelected(editor); editor.enterInEditMode(); break; } } } addNewEditorFromKeyboard() { if (this.currentLayer.canCreateNewEmptyEditor()) { this.currentLayer.addNewEditor(); } } updateToolbar(mode) { if (mode === __privateGet(this, _mode)) { return; } this._eventBus.dispatch("switchannotationeditormode", { source: this, mode }); } updateParams(type, value) { var _a2; if (!__privateGet(this, _editorTypes)) { return; } switch (type) { case AnnotationEditorParamsType.CREATE: this.currentLayer.addNewEditor(); return; case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: (_a2 = __privateGet(this, _mainHighlightColorPicker)) == null ? void 0 : _a2.updateColor(value); break; case AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL: this._eventBus.dispatch("reporttelemetry", { source: this, details: { type: "editing", data: { type: "highlight", action: "toggle_visibility" } } }); (__privateGet(this, _showAllStates) || __privateSet(this, _showAllStates, /* @__PURE__ */ new Map())).set(type, value); this.showAllEditors("highlight", value); break; } for (const editor of __privateGet(this, _selectedEditors)) { editor.updateParams(type, value); } for (const editorType of __privateGet(this, _editorTypes)) { editorType.updateDefaultParams(type, value); } } showAllEditors(type, visible, updateButton = false) { var _a2, _b; for (const editor of __privateGet(this, _allEditors).values()) { if (editor.editorType === type) { editor.show(visible); } } const state = (_b = (_a2 = __privateGet(this, _showAllStates)) == null ? void 0 : _a2.get(AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL)) != null ? _b : true; if (state !== visible) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_SHOW_ALL, visible]]); } } enableWaiting(mustWait = false) { if (__privateGet(this, _isWaiting) === mustWait) { return; } __privateSet(this, _isWaiting, mustWait); for (const layer of __privateGet(this, _allLayers).values()) { if (mustWait) { layer.disableClick(); } else { layer.enableClick(); } layer.div.classList.toggle("waiting", mustWait); } } getEditors(pageIndex) { const editors = []; for (const editor of __privateGet(this, _allEditors).values()) { if (editor.pageIndex === pageIndex) { editors.push(editor); } } return editors; } getEditor(id) { return __privateGet(this, _allEditors).get(id); } addEditor(editor) { __privateGet(this, _allEditors).set(editor.id, editor); } removeEditor(editor) { var _a2; if (editor.div.contains(document.activeElement)) { if (__privateGet(this, _focusMainContainerTimeoutId)) { clearTimeout(__privateGet(this, _focusMainContainerTimeoutId)); } __privateSet(this, _focusMainContainerTimeoutId, setTimeout(() => { this.focusMainContainer(); __privateSet(this, _focusMainContainerTimeoutId, null); }, 0)); } __privateGet(this, _allEditors).delete(editor.id); this.unselect(editor); if (!editor.annotationElementId || !__privateGet(this, _deletedAnnotationsElementIds).has(editor.annotationElementId)) { (_a2 = __privateGet(this, _annotationStorage)) == null ? void 0 : _a2.remove(editor.id); } } addDeletedAnnotationElement(editor) { __privateGet(this, _deletedAnnotationsElementIds).add(editor.annotationElementId); this.addChangedExistingAnnotation(editor); editor.deleted = true; } isDeletedAnnotationElement(annotationElementId) { return __privateGet(this, _deletedAnnotationsElementIds).has(annotationElementId); } removeDeletedAnnotationElement(editor) { __privateGet(this, _deletedAnnotationsElementIds).delete(editor.annotationElementId); this.removeChangedExistingAnnotation(editor); editor.deleted = false; } setActiveEditor(editor) { if (__privateGet(this, _activeEditor) === editor) { return; } __privateSet(this, _activeEditor, editor); if (editor) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); } } updateUI(editor) { if (__privateGet(this, _lastSelectedEditor, lastSelectedEditor_get) === editor) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); } } toggleSelected(editor) { if (__privateGet(this, _selectedEditors).has(editor)) { __privateGet(this, _selectedEditors).delete(editor); editor.unselect(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: this.hasSelection }); return; } __privateGet(this, _selectedEditors).add(editor); editor.select(); __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: true }); } setSelected(editor) { for (const ed of __privateGet(this, _selectedEditors)) { if (ed !== editor) { ed.unselect(); } } __privateGet(this, _selectedEditors).clear(); __privateGet(this, _selectedEditors).add(editor); editor.select(); __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, editor.propertiesToUpdate); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: true }); } isSelected(editor) { return __privateGet(this, _selectedEditors).has(editor); } get firstSelectedEditor() { return __privateGet(this, _selectedEditors).values().next().value; } unselect(editor) { editor.unselect(); __privateGet(this, _selectedEditors).delete(editor); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: this.hasSelection }); } get hasSelection() { return __privateGet(this, _selectedEditors).size !== 0; } get isEnterHandled() { return __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.isEnterHandled; } undo() { __privateGet(this, _commandManager).undo(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSomethingToUndo: __privateGet(this, _commandManager).hasSomethingToUndo(), hasSomethingToRedo: true, isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) }); } redo() { __privateGet(this, _commandManager).redo(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSomethingToUndo: true, hasSomethingToRedo: __privateGet(this, _commandManager).hasSomethingToRedo(), isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) }); } addCommands(params) { __privateGet(this, _commandManager).add(params); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSomethingToUndo: true, hasSomethingToRedo: false, isEmpty: __privateMethod(this, _isEmpty, isEmpty_fn).call(this) }); } delete() { this.commitOrRemove(); if (!this.hasSelection) { return; } const editors = [...__privateGet(this, _selectedEditors)]; const cmd = () => { for (const editor of editors) { editor.remove(); } }; const undo = () => { for (const editor of editors) { __privateMethod(this, _addEditorToLayer, addEditorToLayer_fn).call(this, editor); } }; this.addCommands({ cmd, undo, mustExec: true }); } commitOrRemove() { var _a2; (_a2 = __privateGet(this, _activeEditor)) == null ? void 0 : _a2.commitOrRemove(); } hasSomethingToControl() { return __privateGet(this, _activeEditor) || this.hasSelection; } selectAll() { for (const editor of __privateGet(this, _selectedEditors)) { editor.commit(); } __privateMethod(this, _selectEditors, selectEditors_fn).call(this, __privateGet(this, _allEditors).values()); } unselectAll() { if (__privateGet(this, _activeEditor)) { __privateGet(this, _activeEditor).commitOrRemove(); if (__privateGet(this, _mode) !== AnnotationEditorType.NONE) { return; } } if (!this.hasSelection) { return; } for (const editor of __privateGet(this, _selectedEditors)) { editor.unselect(); } __privateGet(this, _selectedEditors).clear(); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: false }); } translateSelectedEditors(x, y, noCommit = false) { if (!noCommit) { this.commitOrRemove(); } if (!this.hasSelection) { return; } __privateGet(this, _translation)[0] += x; __privateGet(this, _translation)[1] += y; const [totalX, totalY] = __privateGet(this, _translation); const editors = [...__privateGet(this, _selectedEditors)]; const TIME_TO_WAIT = 1e3; if (__privateGet(this, _translationTimeoutId)) { clearTimeout(__privateGet(this, _translationTimeoutId)); } __privateSet(this, _translationTimeoutId, setTimeout(() => { __privateSet(this, _translationTimeoutId, null); __privateGet(this, _translation)[0] = __privateGet(this, _translation)[1] = 0; this.addCommands({ cmd: () => { for (const editor of editors) { if (__privateGet(this, _allEditors).has(editor.id)) { editor.translateInPage(totalX, totalY); } } }, undo: () => { for (const editor of editors) { if (__privateGet(this, _allEditors).has(editor.id)) { editor.translateInPage(-totalX, -totalY); } } }, mustExec: false }); }, TIME_TO_WAIT)); for (const editor of editors) { editor.translateInPage(x, y); } } setUpDragSession() { if (!this.hasSelection) { return; } this.disableUserSelect(true); __privateSet(this, _draggingEditors, /* @__PURE__ */ new Map()); for (const editor of __privateGet(this, _selectedEditors)) { __privateGet(this, _draggingEditors).set(editor, { savedX: editor.x, savedY: editor.y, savedPageIndex: editor.pageIndex, newX: 0, newY: 0, newPageIndex: -1 }); } } endDragSession() { if (!__privateGet(this, _draggingEditors)) { return false; } this.disableUserSelect(false); const map = __privateGet(this, _draggingEditors); __privateSet(this, _draggingEditors, null); let mustBeAddedInUndoStack = false; for (const [{ x, y, pageIndex }, value] of map) { value.newX = x; value.newY = y; value.newPageIndex = pageIndex; mustBeAddedInUndoStack || (mustBeAddedInUndoStack = x !== value.savedX || y !== value.savedY || pageIndex !== value.savedPageIndex); } if (!mustBeAddedInUndoStack) { return false; } const move = (editor, x, y, pageIndex) => { if (__privateGet(this, _allEditors).has(editor.id)) { const parent = __privateGet(this, _allLayers).get(pageIndex); if (parent) { editor._setParentAndPosition(parent, x, y); } else { editor.pageIndex = pageIndex; editor.x = x; editor.y = y; } } }; this.addCommands({ cmd: () => { for (const [editor, { newX, newY, newPageIndex }] of map) { move(editor, newX, newY, newPageIndex); } }, undo: () => { for (const [editor, { savedX, savedY, savedPageIndex }] of map) { move(editor, savedX, savedY, savedPageIndex); } }, mustExec: true }); return true; } dragSelectedEditors(tx, ty) { if (!__privateGet(this, _draggingEditors)) { return; } for (const editor of __privateGet(this, _draggingEditors).keys()) { editor.drag(tx, ty); } } rebuild(editor) { if (editor.parent === null) { const parent = this.getLayer(editor.pageIndex); if (parent) { parent.changeParent(editor); parent.addOrRebuild(editor); } else { this.addEditor(editor); this.addToAnnotationStorage(editor); editor.rebuild(); } } else { editor.parent.addOrRebuild(editor); } } get isEditorHandlingKeyboard() { var _a2; return ((_a2 = this.getActive()) == null ? void 0 : _a2.shouldGetKeyboardEvents()) || __privateGet(this, _selectedEditors).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents(); } isActive(editor) { return __privateGet(this, _activeEditor) === editor; } getActive() { return __privateGet(this, _activeEditor); } getMode() { return __privateGet(this, _mode); } get imageManager() { return shadow(this, "imageManager", new ImageManager()); } getSelectionBoxes(textLayer) { if (!textLayer) { return null; } const selection = document.getSelection(); for (let i = 0, ii = selection.rangeCount; i < ii; i++) { if (!textLayer.contains(selection.getRangeAt(i).commonAncestorContainer)) { return null; } } const { x: layerX, y: layerY, width: parentWidth, height: parentHeight } = textLayer.getBoundingClientRect(); let rotator; switch (textLayer.getAttribute("data-main-rotation")) { case "90": rotator = (x, y, w, h) => ({ x: (y - layerY) / parentHeight, y: 1 - (x + w - layerX) / parentWidth, width: h / parentHeight, height: w / parentWidth }); break; case "180": rotator = (x, y, w, h) => ({ x: 1 - (x + w - layerX) / parentWidth, y: 1 - (y + h - layerY) / parentHeight, width: w / parentWidth, height: h / parentHeight }); break; case "270": rotator = (x, y, w, h) => ({ x: 1 - (y + h - layerY) / parentHeight, y: (x - layerX) / parentWidth, width: h / parentHeight, height: w / parentWidth }); break; default: rotator = (x, y, w, h) => ({ x: (x - layerX) / parentWidth, y: (y - layerY) / parentHeight, width: w / parentWidth, height: h / parentHeight }); break; } const boxes = []; for (let i = 0, ii = selection.rangeCount; i < ii; i++) { const range = selection.getRangeAt(i); if (range.collapsed) { continue; } for (const { x, y, width, height } of range.getClientRects()) { if (width === 0 || height === 0) { continue; } boxes.push(rotator(x, y, width, height)); } } return boxes.length === 0 ? null : boxes; } addChangedExistingAnnotation({ annotationElementId, id }) { (__privateGet(this, _changedExistingAnnotations) || __privateSet(this, _changedExistingAnnotations, /* @__PURE__ */ new Map())).set(annotationElementId, id); } removeChangedExistingAnnotation({ annotationElementId }) { var _a2; (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.delete(annotationElementId); } renderAnnotationElement(annotation) { var _a2; const editorId = (_a2 = __privateGet(this, _changedExistingAnnotations)) == null ? void 0 : _a2.get(annotation.data.id); if (!editorId) { return; } const editor = __privateGet(this, _annotationStorage).getRawValue(editorId); if (!editor) { return; } if (__privateGet(this, _mode) === AnnotationEditorType.NONE && !editor.hasBeenModified) { return; } editor.renderAnnotationElement(annotation); } }; var AnnotationEditorUIManager = _AnnotationEditorUIManager; _abortController = new WeakMap(); _activeEditor = new WeakMap(); _allEditors = new WeakMap(); _allLayers = new WeakMap(); _altTextManager = new WeakMap(); _annotationStorage = new WeakMap(); _changedExistingAnnotations = new WeakMap(); _commandManager = new WeakMap(); _copyPasteAC = new WeakMap(); _currentPageIndex = new WeakMap(); _deletedAnnotationsElementIds = new WeakMap(); _draggingEditors = new WeakMap(); _editorTypes = new WeakMap(); _editorsToRescale = new WeakMap(); _enableHighlightFloatingButton = new WeakMap(); _enableUpdatedAddImage = new WeakMap(); _enableNewAltTextWhenAddingImage = new WeakMap(); _filterFactory = new WeakMap(); _focusMainContainerTimeoutId = new WeakMap(); _focusManagerAC = new WeakMap(); _highlightColors = new WeakMap(); _highlightWhenShiftUp = new WeakMap(); _highlightToolbar = new WeakMap(); _idManager = new WeakMap(); _isEnabled = new WeakMap(); _isWaiting = new WeakMap(); _keyboardManagerAC = new WeakMap(); _lastActiveElement = new WeakMap(); _mainHighlightColorPicker = new WeakMap(); _mlManager = new WeakMap(); _mode = new WeakMap(); _selectedEditors = new WeakMap(); _selectedTextNode = new WeakMap(); _pageColors = new WeakMap(); _showAllStates = new WeakMap(); _previousStates = new WeakMap(); _translation = new WeakMap(); _translationTimeoutId = new WeakMap(); _container = new WeakMap(); _viewer = new WeakMap(); _getAnchorElementForSelection = new WeakSet(); getAnchorElementForSelection_fn = function({ anchorNode }) { return anchorNode.nodeType === Node.TEXT_NODE ? anchorNode.parentElement : anchorNode; }; _getLayerForTextLayer = new WeakSet(); getLayerForTextLayer_fn = function(textLayer) { const { currentLayer } = this; if (currentLayer.hasTextLayer(textLayer)) { return currentLayer; } for (const layer of __privateGet(this, _allLayers).values()) { if (layer.hasTextLayer(textLayer)) { return layer; } } return null; }; _displayHighlightToolbar = new WeakSet(); displayHighlightToolbar_fn = function() { const selection = document.getSelection(); if (!selection || selection.isCollapsed) { return; } const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); const textLayer = anchorElement.closest(".textLayer"); const boxes = this.getSelectionBoxes(textLayer); if (!boxes) { return; } __privateGet(this, _highlightToolbar) || __privateSet(this, _highlightToolbar, new HighlightToolbar(this)); __privateGet(this, _highlightToolbar).show(textLayer, boxes, this.direction === "ltr"); }; _selectionChange = new WeakSet(); selectionChange_fn = function() { var _a2, _b, _c; const selection = document.getSelection(); if (!selection || selection.isCollapsed) { if (__privateGet(this, _selectedTextNode)) { (_a2 = __privateGet(this, _highlightToolbar)) == null ? void 0 : _a2.hide(); __privateSet(this, _selectedTextNode, null); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedText: false }); } return; } const { anchorNode } = selection; if (anchorNode === __privateGet(this, _selectedTextNode)) { return; } const anchorElement = __privateMethod(this, _getAnchorElementForSelection, getAnchorElementForSelection_fn).call(this, selection); const textLayer = anchorElement.closest(".textLayer"); if (!textLayer) { if (__privateGet(this, _selectedTextNode)) { (_b = __privateGet(this, _highlightToolbar)) == null ? void 0 : _b.hide(); __privateSet(this, _selectedTextNode, null); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedText: false }); } return; } (_c = __privateGet(this, _highlightToolbar)) == null ? void 0 : _c.hide(); __privateSet(this, _selectedTextNode, anchorNode); __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedText: true }); if (__privateGet(this, _mode) !== AnnotationEditorType.HIGHLIGHT && __privateGet(this, _mode) !== AnnotationEditorType.NONE) { return; } if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) { this.showAllEditors("highlight", true, true); } __privateSet(this, _highlightWhenShiftUp, this.isShiftKeyDown); if (!this.isShiftKeyDown) { const activeLayer = __privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT ? __privateMethod(this, _getLayerForTextLayer, getLayerForTextLayer_fn).call(this, textLayer) : null; activeLayer == null ? void 0 : activeLayer.toggleDrawing(); const ac = new AbortController(); const signal = this.combinedSignal(ac); const pointerup = (e) => { if (e.type === "pointerup" && e.button !== 0) { return; } ac.abort(); activeLayer == null ? void 0 : activeLayer.toggleDrawing(true); if (e.type === "pointerup") { __privateMethod(this, _onSelectEnd, onSelectEnd_fn).call(this, "main_toolbar"); } }; window.addEventListener("pointerup", pointerup, { signal }); window.addEventListener("blur", pointerup, { signal }); } }; _onSelectEnd = new WeakSet(); onSelectEnd_fn = function(methodOfCreation = "") { if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT) { this.highlightSelection(methodOfCreation); } else if (__privateGet(this, _enableHighlightFloatingButton)) { __privateMethod(this, _displayHighlightToolbar, displayHighlightToolbar_fn).call(this); } }; _addSelectionListener = new WeakSet(); addSelectionListener_fn = function() { document.addEventListener("selectionchange", __privateMethod(this, _selectionChange, selectionChange_fn).bind(this), { signal: this._signal }); }; _addFocusManager = new WeakSet(); addFocusManager_fn = function() { if (__privateGet(this, _focusManagerAC)) { return; } __privateSet(this, _focusManagerAC, new AbortController()); const signal = this.combinedSignal(__privateGet(this, _focusManagerAC)); window.addEventListener("focus", this.focus.bind(this), { signal }); window.addEventListener("blur", this.blur.bind(this), { signal }); }; _removeFocusManager = new WeakSet(); removeFocusManager_fn = function() { var _a2; (_a2 = __privateGet(this, _focusManagerAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _focusManagerAC, null); }; _addKeyboardManager = new WeakSet(); addKeyboardManager_fn = function() { if (__privateGet(this, _keyboardManagerAC)) { return; } __privateSet(this, _keyboardManagerAC, new AbortController()); const signal = this.combinedSignal(__privateGet(this, _keyboardManagerAC)); window.addEventListener("keydown", this.keydown.bind(this), { signal }); window.addEventListener("keyup", this.keyup.bind(this), { signal }); }; _removeKeyboardManager = new WeakSet(); removeKeyboardManager_fn = function() { var _a2; (_a2 = __privateGet(this, _keyboardManagerAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _keyboardManagerAC, null); }; _addCopyPasteListeners = new WeakSet(); addCopyPasteListeners_fn = function() { if (__privateGet(this, _copyPasteAC)) { return; } __privateSet(this, _copyPasteAC, new AbortController()); const signal = this.combinedSignal(__privateGet(this, _copyPasteAC)); document.addEventListener("copy", this.copy.bind(this), { signal }); document.addEventListener("cut", this.cut.bind(this), { signal }); document.addEventListener("paste", this.paste.bind(this), { signal }); }; _removeCopyPasteListeners = new WeakSet(); removeCopyPasteListeners_fn = function() { var _a2; (_a2 = __privateGet(this, _copyPasteAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _copyPasteAC, null); }; _addDragAndDropListeners = new WeakSet(); addDragAndDropListeners_fn = function() { const signal = this._signal; document.addEventListener("dragover", this.dragOver.bind(this), { signal }); document.addEventListener("drop", this.drop.bind(this), { signal }); }; _dispatchUpdateStates = new WeakSet(); dispatchUpdateStates_fn = function(details) { const hasChanged = Object.entries(details).some(([key, value]) => __privateGet(this, _previousStates)[key] !== value); if (hasChanged) { this._eventBus.dispatch("annotationeditorstateschanged", { source: this, details: Object.assign(__privateGet(this, _previousStates), details) }); if (__privateGet(this, _mode) === AnnotationEditorType.HIGHLIGHT && details.hasSelectedEditor === false) { __privateMethod(this, _dispatchUpdateUI, dispatchUpdateUI_fn).call(this, [[AnnotationEditorParamsType.HIGHLIGHT_FREE, true]]); } } }; _dispatchUpdateUI = new WeakSet(); dispatchUpdateUI_fn = function(details) { this._eventBus.dispatch("annotationeditorparamschanged", { source: this, details }); }; _enableAll = new WeakSet(); enableAll_fn = function() { if (!__privateGet(this, _isEnabled)) { __privateSet(this, _isEnabled, true); for (const layer of __privateGet(this, _allLayers).values()) { layer.enable(); } for (const editor of __privateGet(this, _allEditors).values()) { editor.enable(); } } }; _disableAll = new WeakSet(); disableAll_fn = function() { this.unselectAll(); if (__privateGet(this, _isEnabled)) { __privateSet(this, _isEnabled, false); for (const layer of __privateGet(this, _allLayers).values()) { layer.disable(); } for (const editor of __privateGet(this, _allEditors).values()) { editor.disable(); } } }; _addEditorToLayer = new WeakSet(); addEditorToLayer_fn = function(editor) { const layer = __privateGet(this, _allLayers).get(editor.pageIndex); if (layer) { layer.addOrRebuild(editor); } else { this.addEditor(editor); this.addToAnnotationStorage(editor); } }; _lastSelectedEditor = new WeakSet(); lastSelectedEditor_get = function() { let ed = null; for (ed of __privateGet(this, _selectedEditors)) { } return ed; }; _isEmpty = new WeakSet(); isEmpty_fn = function() { if (__privateGet(this, _allEditors).size === 0) { return true; } if (__privateGet(this, _allEditors).size === 1) { for (const editor of __privateGet(this, _allEditors).values()) { return editor.isEmpty(); } } return false; }; _selectEditors = new WeakSet(); selectEditors_fn = function(editors) { for (const editor of __privateGet(this, _selectedEditors)) { editor.unselect(); } __privateGet(this, _selectedEditors).clear(); for (const editor of editors) { if (editor.isEmpty()) { continue; } __privateGet(this, _selectedEditors).add(editor); editor.select(); } __privateMethod(this, _dispatchUpdateStates, dispatchUpdateStates_fn).call(this, { hasSelectedEditor: this.hasSelection }); }; __publicField(AnnotationEditorUIManager, "TRANSLATE_SMALL", 1); __publicField(AnnotationEditorUIManager, "TRANSLATE_BIG", 10); var _altText2, _altTextDecorative, _altTextButton, _altTextTooltip, _altTextTooltipTimeout, _altTextWasFromKeyBoard, _badge, _editor2, _guessedText, _textWithDisclaimer, _useNewAltTextFlow, _label, label_get, _setState, setState_fn; var _AltText = class { constructor(editor) { __privateAdd(this, _label); __privateAdd(this, _setState); __privateAdd(this, _altText2, null); __privateAdd(this, _altTextDecorative, false); __privateAdd(this, _altTextButton, null); __privateAdd(this, _altTextTooltip, null); __privateAdd(this, _altTextTooltipTimeout, null); __privateAdd(this, _altTextWasFromKeyBoard, false); __privateAdd(this, _badge, null); __privateAdd(this, _editor2, null); __privateAdd(this, _guessedText, null); __privateAdd(this, _textWithDisclaimer, null); __privateAdd(this, _useNewAltTextFlow, false); __privateSet(this, _editor2, editor); __privateSet(this, _useNewAltTextFlow, editor._uiManager.useNewAltTextFlow); } static initialize(l10nPromise) { _AltText._l10nPromise || (_AltText._l10nPromise = l10nPromise); } async render() { const altText = __privateSet(this, _altTextButton, document.createElement("button")); altText.className = "altText"; let msg; if (__privateGet(this, _useNewAltTextFlow)) { altText.classList.add("new"); msg = await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-missing-button-label"); } else { msg = await _AltText._l10nPromise.get("pdfjs-editor-alt-text-button-label"); } altText.textContent = msg; altText.setAttribute("aria-label", msg); altText.tabIndex = "0"; const signal = __privateGet(this, _editor2)._uiManager._signal; altText.addEventListener("contextmenu", noContextMenu, { signal }); altText.addEventListener("pointerdown", (event) => event.stopPropagation(), { signal }); const onClick = (event) => { event.preventDefault(); __privateGet(this, _editor2)._uiManager.editAltText(__privateGet(this, _editor2)); if (__privateGet(this, _useNewAltTextFlow)) { __privateGet(this, _editor2)._reportTelemetry({ action: "pdfjs.image.alt_text.image_status_label_clicked", data: { label: __privateGet(this, _label, label_get) } }); } }; altText.addEventListener("click", onClick, { capture: true, signal }); altText.addEventListener("keydown", (event) => { if (event.target === altText && event.key === "Enter") { __privateSet(this, _altTextWasFromKeyBoard, true); onClick(event); } }, { signal }); await __privateMethod(this, _setState, setState_fn).call(this); return altText; } finish() { if (!__privateGet(this, _altTextButton)) { return; } __privateGet(this, _altTextButton).focus({ focusVisible: __privateGet(this, _altTextWasFromKeyBoard) }); __privateSet(this, _altTextWasFromKeyBoard, false); } isEmpty() { if (__privateGet(this, _useNewAltTextFlow)) { return __privateGet(this, _altText2) === null; } return !__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative); } hasData() { if (__privateGet(this, _useNewAltTextFlow)) { return __privateGet(this, _altText2) !== null || !!__privateGet(this, _guessedText); } return this.isEmpty(); } get guessedText() { return __privateGet(this, _guessedText); } async setGuessedText(guessedText) { if (__privateGet(this, _altText2) !== null) { return; } __privateSet(this, _guessedText, guessedText); __privateSet(this, _textWithDisclaimer, await _AltText._l10nPromise.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer")({ generatedAltText: guessedText })); __privateMethod(this, _setState, setState_fn).call(this); } toggleAltTextBadge(visibility = false) { var _a2; if (!__privateGet(this, _useNewAltTextFlow) || __privateGet(this, _altText2)) { (_a2 = __privateGet(this, _badge)) == null ? void 0 : _a2.remove(); __privateSet(this, _badge, null); return; } if (!__privateGet(this, _badge)) { const badge = __privateSet(this, _badge, document.createElement("div")); badge.className = "noAltTextBadge"; __privateGet(this, _editor2).div.append(badge); } __privateGet(this, _badge).classList.toggle("hidden", !visibility); } serialize(isForCopying) { let altText = __privateGet(this, _altText2); if (!isForCopying && __privateGet(this, _guessedText) === altText) { altText = __privateGet(this, _textWithDisclaimer); } return { altText, decorative: __privateGet(this, _altTextDecorative), guessedText: __privateGet(this, _guessedText), textWithDisclaimer: __privateGet(this, _textWithDisclaimer) }; } get data() { return { altText: __privateGet(this, _altText2), decorative: __privateGet(this, _altTextDecorative) }; } set data({ altText, decorative, guessedText, textWithDisclaimer, cancel = false }) { if (guessedText) { __privateSet(this, _guessedText, guessedText); __privateSet(this, _textWithDisclaimer, textWithDisclaimer); } if (__privateGet(this, _altText2) === altText && __privateGet(this, _altTextDecorative) === decorative) { return; } if (!cancel) { __privateSet(this, _altText2, altText); __privateSet(this, _altTextDecorative, decorative); } __privateMethod(this, _setState, setState_fn).call(this); } toggle(enabled = false) { if (!__privateGet(this, _altTextButton)) { return; } if (!enabled && __privateGet(this, _altTextTooltipTimeout)) { clearTimeout(__privateGet(this, _altTextTooltipTimeout)); __privateSet(this, _altTextTooltipTimeout, null); } __privateGet(this, _altTextButton).disabled = !enabled; } shown() { __privateGet(this, _editor2)._reportTelemetry({ action: "pdfjs.image.alt_text.image_status_label_displayed", data: { label: __privateGet(this, _label, label_get) } }); } destroy() { var _a2, _b; (_a2 = __privateGet(this, _altTextButton)) == null ? void 0 : _a2.remove(); __privateSet(this, _altTextButton, null); __privateSet(this, _altTextTooltip, null); (_b = __privateGet(this, _badge)) == null ? void 0 : _b.remove(); __privateSet(this, _badge, null); } }; var AltText = _AltText; _altText2 = new WeakMap(); _altTextDecorative = new WeakMap(); _altTextButton = new WeakMap(); _altTextTooltip = new WeakMap(); _altTextTooltipTimeout = new WeakMap(); _altTextWasFromKeyBoard = new WeakMap(); _badge = new WeakMap(); _editor2 = new WeakMap(); _guessedText = new WeakMap(); _textWithDisclaimer = new WeakMap(); _useNewAltTextFlow = new WeakMap(); _label = new WeakSet(); label_get = function() { return __privateGet(this, _altText2) && "added" || __privateGet(this, _altText2) === null && this.guessedText && "review" || "missing"; }; _setState = new WeakSet(); setState_fn = async function() { var _a2, _b; const button = __privateGet(this, _altTextButton); if (!button) { return; } if (__privateGet(this, _useNewAltTextFlow)) { const label = __privateGet(this, _label, label_get); const type = label === "review" ? "to-review" : label; button.classList.toggle("done", !!__privateGet(this, _altText2)); _AltText._l10nPromise.get(`pdfjs-editor-new-alt-text-${type}-button-label`).then((msg) => { button.setAttribute("aria-label", msg); for (const child of button.childNodes) { if (child.nodeType === Node.TEXT_NODE) { child.textContent = msg; break; } } }); if (!__privateGet(this, _altText2)) { (_a2 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a2.remove(); return; } } else { if (!__privateGet(this, _altText2) && !__privateGet(this, _altTextDecorative)) { button.classList.remove("done"); (_b = __privateGet(this, _altTextTooltip)) == null ? void 0 : _b.remove(); return; } button.classList.add("done"); _AltText._l10nPromise.get("pdfjs-editor-alt-text-edit-button-label").then((msg) => { button.setAttribute("aria-label", msg); }); } let tooltip = __privateGet(this, _altTextTooltip); if (!tooltip) { __privateSet(this, _altTextTooltip, tooltip = document.createElement("span")); tooltip.className = "tooltip"; tooltip.setAttribute("role", "tooltip"); const id = tooltip.id = `alt-text-tooltip-${__privateGet(this, _editor2).id}`; button.setAttribute("aria-describedby", id); const DELAY_TO_SHOW_TOOLTIP = 100; const signal = __privateGet(this, _editor2)._uiManager._signal; signal.addEventListener("abort", () => { clearTimeout(__privateGet(this, _altTextTooltipTimeout)); __privateSet(this, _altTextTooltipTimeout, null); }, { once: true }); button.addEventListener("mouseenter", () => { __privateSet(this, _altTextTooltipTimeout, setTimeout(() => { __privateSet(this, _altTextTooltipTimeout, null); __privateGet(this, _altTextTooltip).classList.add("show"); __privateGet(this, _editor2)._reportTelemetry({ action: "alt_text_tooltip" }); }, DELAY_TO_SHOW_TOOLTIP)); }, { signal }); button.addEventListener("mouseleave", () => { var _a3; if (__privateGet(this, _altTextTooltipTimeout)) { clearTimeout(__privateGet(this, _altTextTooltipTimeout)); __privateSet(this, _altTextTooltipTimeout, null); } (_a3 = __privateGet(this, _altTextTooltip)) == null ? void 0 : _a3.classList.remove("show"); }, { signal }); } tooltip.innerText = __privateGet(this, _altTextDecorative) ? await _AltText._l10nPromise.get("pdfjs-editor-alt-text-decorative-tooltip") : __privateGet(this, _altText2); if (!tooltip.parentNode) { button.append(tooltip); } const element = __privateGet(this, _editor2).getImageForAltText(); element == null ? void 0 : element.setAttribute("aria-describedby", tooltip.id); }; __publicField(AltText, "_l10nPromise", null); var _accessibilityData, _allResizerDivs, _altText3, _disabled, _keepAspectRatio, _resizersDiv, _savedDimensions, _focusAC, _focusedResizerName, _hasBeenClicked, _initialPosition, _isEditing, _isInEditMode, _isResizerEnabledForKeyboard, _moveInDOMTimeout, _prevDragX, _prevDragY, _telemetryTimeouts, _isDraggable, _zIndex, _translate, translate_fn, _rotatePoint, rotatePoint_fn, _getRotationMatrix, getRotationMatrix_fn, _createResizers, createResizers_fn, _resizerPointerdown, resizerPointerdown_fn, _addResizeToUndoStack, addResizeToUndoStack_fn, _resizerPointermove, resizerPointermove_fn, _selectOnPointerEvent, selectOnPointerEvent_fn, _setUpDragSession, setUpDragSession_fn, _addFocusListeners, addFocusListeners_fn, _resizerKeydown, resizerKeydown_fn, _resizerBlur, resizerBlur_fn, _resizerFocus, resizerFocus_fn, _setResizerTabIndex, setResizerTabIndex_fn, _stopResizing, stopResizing_fn; var _AnnotationEditor = class { constructor(parameters) { __privateAdd(this, _translate); __privateAdd(this, _getRotationMatrix); __privateAdd(this, _createResizers); __privateAdd(this, _resizerPointerdown); __privateAdd(this, _addResizeToUndoStack); __privateAdd(this, _resizerPointermove); __privateAdd(this, _selectOnPointerEvent); __privateAdd(this, _setUpDragSession); __privateAdd(this, _addFocusListeners); __privateAdd(this, _resizerKeydown); __privateAdd(this, _resizerBlur); __privateAdd(this, _resizerFocus); __privateAdd(this, _setResizerTabIndex); __privateAdd(this, _stopResizing); __privateAdd(this, _accessibilityData, null); __privateAdd(this, _allResizerDivs, null); __privateAdd(this, _altText3, null); __privateAdd(this, _disabled, false); __privateAdd(this, _keepAspectRatio, false); __privateAdd(this, _resizersDiv, null); __privateAdd(this, _savedDimensions, null); __privateAdd(this, _focusAC, null); __privateAdd(this, _focusedResizerName, ""); __privateAdd(this, _hasBeenClicked, false); __privateAdd(this, _initialPosition, null); __privateAdd(this, _isEditing, false); __privateAdd(this, _isInEditMode, false); __privateAdd(this, _isResizerEnabledForKeyboard, false); __privateAdd(this, _moveInDOMTimeout, null); __privateAdd(this, _prevDragX, 0); __privateAdd(this, _prevDragY, 0); __privateAdd(this, _telemetryTimeouts, null); __publicField(this, "_editToolbar", null); __publicField(this, "_initialOptions", /* @__PURE__ */ Object.create(null)); __publicField(this, "_isVisible", true); __publicField(this, "_uiManager", null); __publicField(this, "_focusEventsAllowed", true); __privateAdd(this, _isDraggable, false); __privateAdd(this, _zIndex, _AnnotationEditor._zIndex++); this.parent = parameters.parent; this.id = parameters.id; this.width = this.height = null; this.pageIndex = parameters.parent.pageIndex; this.name = parameters.name; this.div = null; this._uiManager = parameters.uiManager; this.annotationElementId = null; this._willKeepAspectRatio = false; this._initialOptions.isCentered = parameters.isCentered; this._structTreeParentId = null; const { rotation, rawDims: { pageWidth, pageHeight, pageX, pageY } } = this.parent.viewport; this.rotation = rotation; this.pageRotation = (360 + rotation - this._uiManager.viewParameters.rotation) % 360; this.pageDimensions = [pageWidth, pageHeight]; this.pageTranslation = [pageX, pageY]; const [width, height] = this.parentDimensions; this.x = parameters.x / width; this.y = parameters.y / height; this.isAttachedToDOM = false; this.deleted = false; } static get _resizerKeyboardManager() { const resize = _AnnotationEditor.prototype._resizeWithKeyboard; const small = AnnotationEditorUIManager.TRANSLATE_SMALL; const big = AnnotationEditorUIManager.TRANSLATE_BIG; return shadow(this, "_resizerKeyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], resize, { args: [-small, 0] }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], resize, { args: [-big, 0] }], [["ArrowRight", "mac+ArrowRight"], resize, { args: [small, 0] }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], resize, { args: [big, 0] }], [["ArrowUp", "mac+ArrowUp"], resize, { args: [0, -small] }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], resize, { args: [0, -big] }], [["ArrowDown", "mac+ArrowDown"], resize, { args: [0, small] }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], resize, { args: [0, big] }], [["Escape", "mac+Escape"], _AnnotationEditor.prototype._stopResizingWithKeyboard]])); } get editorType() { return Object.getPrototypeOf(this).constructor._type; } static get _defaultLineColor() { return shadow(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText")); } static deleteAnnotationElement(editor) { const fakeEditor = new FakeEditor({ id: editor.parent.getNextId(), parent: editor.parent, uiManager: editor._uiManager }); fakeEditor.annotationElementId = editor.annotationElementId; fakeEditor.deleted = true; fakeEditor._uiManager.addToAnnotationStorage(fakeEditor); } static initialize(l10n, _uiManager4, options) { _AnnotationEditor._l10nResizer || (_AnnotationEditor._l10nResizer = Object.freeze({ topLeft: "pdfjs-editor-resizer-top-left", topMiddle: "pdfjs-editor-resizer-top-middle", topRight: "pdfjs-editor-resizer-top-right", middleRight: "pdfjs-editor-resizer-middle-right", bottomRight: "pdfjs-editor-resizer-bottom-right", bottomMiddle: "pdfjs-editor-resizer-bottom-middle", bottomLeft: "pdfjs-editor-resizer-bottom-left", middleLeft: "pdfjs-editor-resizer-middle-left" })); _AnnotationEditor._l10nPromise || (_AnnotationEditor._l10nPromise = new Map([...["pdfjs-editor-alt-text-button-label", "pdfjs-editor-alt-text-edit-button-label", "pdfjs-editor-alt-text-decorative-tooltip", "pdfjs-editor-new-alt-text-added-button-label", "pdfjs-editor-new-alt-text-missing-button-label", "pdfjs-editor-new-alt-text-to-review-button-label"].map((str) => [str, l10n.get(str)]), ...["pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer"].map((str) => [str, l10n.get.bind(l10n, str)])])); if (options == null ? void 0 : options.strings) { for (const str of options.strings) { _AnnotationEditor._l10nPromise.set(str, l10n.get(str)); } } if (_AnnotationEditor._borderLineWidth !== -1) { return; } const style = getComputedStyle(document.documentElement); _AnnotationEditor._borderLineWidth = parseFloat(style.getPropertyValue("--outline-width")) || 0; } static updateDefaultParams(_type2, _value) { } static get defaultPropertiesToUpdate() { return []; } static isHandlingMimeForPasting(mime) { return false; } static paste(item, parent) { unreachable("Not implemented"); } get propertiesToUpdate() { return []; } get _isDraggable() { return __privateGet(this, _isDraggable); } set _isDraggable(value) { var _a2; __privateSet(this, _isDraggable, value); (_a2 = this.div) == null ? void 0 : _a2.classList.toggle("draggable", value); } get isEnterHandled() { return true; } center() { const [pageWidth, pageHeight] = this.pageDimensions; switch (this.parentRotation) { case 90: this.x -= this.height * pageHeight / (pageWidth * 2); this.y += this.width * pageWidth / (pageHeight * 2); break; case 180: this.x += this.width / 2; this.y += this.height / 2; break; case 270: this.x += this.height * pageHeight / (pageWidth * 2); this.y -= this.width * pageWidth / (pageHeight * 2); break; default: this.x -= this.width / 2; this.y -= this.height / 2; break; } this.fixAndSetPosition(); } addCommands(params) { this._uiManager.addCommands(params); } get currentLayer() { return this._uiManager.currentLayer; } setInBackground() { this.div.style.zIndex = 0; } setInForeground() { this.div.style.zIndex = __privateGet(this, _zIndex); } setParent(parent) { if (parent !== null) { this.pageIndex = parent.pageIndex; this.pageDimensions = parent.pageDimensions; } else { __privateMethod(this, _stopResizing, stopResizing_fn).call(this); } this.parent = parent; } focusin(event) { if (!this._focusEventsAllowed) { return; } if (!__privateGet(this, _hasBeenClicked)) { this.parent.setSelected(this); } else { __privateSet(this, _hasBeenClicked, false); } } focusout(event) { var _a2; if (!this._focusEventsAllowed) { return; } if (!this.isAttachedToDOM) { return; } const target = event.relatedTarget; if (target == null ? void 0 : target.closest(`#${this.id}`)) { return; } event.preventDefault(); if (!((_a2 = this.parent) == null ? void 0 : _a2.isMultipleSelection)) { this.commitOrRemove(); } } commitOrRemove() { if (this.isEmpty()) { this.remove(); } else { this.commit(); } } commit() { this.addToAnnotationStorage(); } addToAnnotationStorage() { this._uiManager.addToAnnotationStorage(this); } setAt(x, y, tx, ty) { const [width, height] = this.parentDimensions; [tx, ty] = this.screenToPageTranslation(tx, ty); this.x = (x + tx) / width; this.y = (y + ty) / height; this.fixAndSetPosition(); } translate(x, y) { __privateMethod(this, _translate, translate_fn).call(this, this.parentDimensions, x, y); } translateInPage(x, y) { __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]); __privateMethod(this, _translate, translate_fn).call(this, this.pageDimensions, x, y); this.div.scrollIntoView({ block: "nearest" }); } drag(tx, ty) { __privateGet(this, _initialPosition) || __privateSet(this, _initialPosition, [this.x, this.y]); const [parentWidth, parentHeight] = this.parentDimensions; this.x += tx / parentWidth; this.y += ty / parentHeight; if (this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) { const { x: x2, y: y2 } = this.div.getBoundingClientRect(); if (this.parent.findNewParent(this, x2, y2)) { this.x -= Math.floor(this.x); this.y -= Math.floor(this.y); } } let { x, y } = this; const [bx, by] = this.getBaseTranslation(); x += bx; y += by; this.div.style.left = `${(100 * x).toFixed(2)}%`; this.div.style.top = `${(100 * y).toFixed(2)}%`; this.div.scrollIntoView({ block: "nearest" }); } get _hasBeenMoved() { return !!__privateGet(this, _initialPosition) && (__privateGet(this, _initialPosition)[0] !== this.x || __privateGet(this, _initialPosition)[1] !== this.y); } getBaseTranslation() { const [parentWidth, parentHeight] = this.parentDimensions; const { _borderLineWidth } = _AnnotationEditor; const x = _borderLineWidth / parentWidth; const y = _borderLineWidth / parentHeight; switch (this.rotation) { case 90: return [-x, y]; case 180: return [x, y]; case 270: return [x, -y]; default: return [-x, -y]; } } get _mustFixPosition() { return true; } fixAndSetPosition(rotation = this.rotation) { const [pageWidth, pageHeight] = this.pageDimensions; let { x, y, width, height } = this; width *= pageWidth; height *= pageHeight; x *= pageWidth; y *= pageHeight; if (this._mustFixPosition) { switch (rotation) { case 0: x = Math.max(0, Math.min(pageWidth - width, x)); y = Math.max(0, Math.min(pageHeight - height, y)); break; case 90: x = Math.max(0, Math.min(pageWidth - height, x)); y = Math.min(pageHeight, Math.max(width, y)); break; case 180: x = Math.min(pageWidth, Math.max(width, x)); y = Math.min(pageHeight, Math.max(height, y)); break; case 270: x = Math.min(pageWidth, Math.max(height, x)); y = Math.max(0, Math.min(pageHeight - width, y)); break; } } this.x = x /= pageWidth; this.y = y /= pageHeight; const [bx, by] = this.getBaseTranslation(); x += bx; y += by; const { style } = this.div; style.left = `${(100 * x).toFixed(2)}%`; style.top = `${(100 * y).toFixed(2)}%`; this.moveInDOM(); } screenToPageTranslation(x, y) { var _a2; return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, this.parentRotation); } pageTranslationToScreen(x, y) { var _a2; return __privateMethod(_a2 = _AnnotationEditor, _rotatePoint, rotatePoint_fn).call(_a2, x, y, 360 - this.parentRotation); } get parentScale() { return this._uiManager.viewParameters.realScale; } get parentRotation() { return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360; } get parentDimensions() { const { parentScale, pageDimensions: [pageWidth, pageHeight] } = this; const scaledWidth = pageWidth * parentScale; const scaledHeight = pageHeight * parentScale; return util_FeatureTest.isCSSRoundSupported ? [Math.round(scaledWidth), Math.round(scaledHeight)] : [scaledWidth, scaledHeight]; } setDims(width, height) { const [parentWidth, parentHeight] = this.parentDimensions; this.div.style.width = `${(100 * width / parentWidth).toFixed(2)}%`; if (!__privateGet(this, _keepAspectRatio)) { this.div.style.height = `${(100 * height / parentHeight).toFixed(2)}%`; } } fixDims() { const { style } = this.div; const { height, width } = style; const widthPercent = width.endsWith("%"); const heightPercent = !__privateGet(this, _keepAspectRatio) && height.endsWith("%"); if (widthPercent && heightPercent) { return; } const [parentWidth, parentHeight] = this.parentDimensions; if (!widthPercent) { style.width = `${(100 * parseFloat(width) / parentWidth).toFixed(2)}%`; } if (!__privateGet(this, _keepAspectRatio) && !heightPercent) { style.height = `${(100 * parseFloat(height) / parentHeight).toFixed(2)}%`; } } getInitialTranslation() { return [0, 0]; } altTextFinish() { var _a2; (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.finish(); } async addEditToolbar() { if (this._editToolbar || __privateGet(this, _isInEditMode)) { return this._editToolbar; } this._editToolbar = new EditorToolbar(this); this.div.append(this._editToolbar.render()); if (__privateGet(this, _altText3)) { await this._editToolbar.addAltText(__privateGet(this, _altText3)); } return this._editToolbar; } removeEditToolbar() { var _a2; if (!this._editToolbar) { return; } this._editToolbar.remove(); this._editToolbar = null; (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.destroy(); } getClientDimensions() { return this.div.getBoundingClientRect(); } async addAltTextButton() { if (__privateGet(this, _altText3)) { return; } AltText.initialize(_AnnotationEditor._l10nPromise); __privateSet(this, _altText3, new AltText(this)); if (__privateGet(this, _accessibilityData)) { __privateGet(this, _altText3).data = __privateGet(this, _accessibilityData); __privateSet(this, _accessibilityData, null); } await this.addEditToolbar(); } get altTextData() { var _a2; return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.data; } set altTextData(data) { if (!__privateGet(this, _altText3)) { return; } __privateGet(this, _altText3).data = data; } get guessedAltText() { var _a2; return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.guessedText; } async setGuessedAltText(text) { var _a2; await ((_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.setGuessedText(text)); } serializeAltText(isForCopying) { var _a2; return (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.serialize(isForCopying); } hasAltText() { return !!__privateGet(this, _altText3) && !__privateGet(this, _altText3).isEmpty(); } hasAltTextData() { var _a2, _b; return (_b = (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.hasData()) != null ? _b : false; } render() { this.div = document.createElement("div"); this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360); this.div.className = this.name; this.div.setAttribute("id", this.id); this.div.tabIndex = __privateGet(this, _disabled) ? -1 : 0; if (!this._isVisible) { this.div.classList.add("hidden"); } this.setInForeground(); __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this); const [parentWidth, parentHeight] = this.parentDimensions; if (this.parentRotation % 180 !== 0) { this.div.style.maxWidth = `${(100 * parentHeight / parentWidth).toFixed(2)}%`; this.div.style.maxHeight = `${(100 * parentWidth / parentHeight).toFixed(2)}%`; } const [tx, ty] = this.getInitialTranslation(); this.translate(tx, ty); bindEvents(this, this.div, ["pointerdown"]); return this.div; } pointerdown(event) { const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { event.preventDefault(); return; } __privateSet(this, _hasBeenClicked, true); if (this._isDraggable) { __privateMethod(this, _setUpDragSession, setUpDragSession_fn).call(this, event); return; } __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event); } moveInDOM() { if (__privateGet(this, _moveInDOMTimeout)) { clearTimeout(__privateGet(this, _moveInDOMTimeout)); } __privateSet(this, _moveInDOMTimeout, setTimeout(() => { var _a2; __privateSet(this, _moveInDOMTimeout, null); (_a2 = this.parent) == null ? void 0 : _a2.moveEditorInDOM(this); }, 0)); } _setParentAndPosition(parent, x, y) { parent.changeParent(this); this.x = x; this.y = y; this.fixAndSetPosition(); } getRect(tx, ty, rotation = this.rotation) { const scale = this.parentScale; const [pageWidth, pageHeight] = this.pageDimensions; const [pageX, pageY] = this.pageTranslation; const shiftX = tx / scale; const shiftY = ty / scale; const x = this.x * pageWidth; const y = this.y * pageHeight; const width = this.width * pageWidth; const height = this.height * pageHeight; switch (rotation) { case 0: return [x + shiftX + pageX, pageHeight - y - shiftY - height + pageY, x + shiftX + width + pageX, pageHeight - y - shiftY + pageY]; case 90: return [x + shiftY + pageX, pageHeight - y + shiftX + pageY, x + shiftY + height + pageX, pageHeight - y + shiftX + width + pageY]; case 180: return [x - shiftX - width + pageX, pageHeight - y + shiftY + pageY, x - shiftX + pageX, pageHeight - y + shiftY + height + pageY]; case 270: return [x - shiftY - height + pageX, pageHeight - y - shiftX - width + pageY, x - shiftY + pageX, pageHeight - y - shiftX + pageY]; default: throw new Error("Invalid rotation"); } } getRectInCurrentCoords(rect, pageHeight) { const [x1, y1, x2, y2] = rect; const width = x2 - x1; const height = y2 - y1; switch (this.rotation) { case 0: return [x1, pageHeight - y2, width, height]; case 90: return [x1, pageHeight - y1, height, width]; case 180: return [x2, pageHeight - y1, width, height]; case 270: return [x2, pageHeight - y2, height, width]; default: throw new Error("Invalid rotation"); } } onceAdded() { } isEmpty() { return false; } enableEditMode() { __privateSet(this, _isInEditMode, true); } disableEditMode() { __privateSet(this, _isInEditMode, false); } isInEditMode() { return __privateGet(this, _isInEditMode); } shouldGetKeyboardEvents() { return __privateGet(this, _isResizerEnabledForKeyboard); } needsToBeRebuilt() { return this.div && !this.isAttachedToDOM; } rebuild() { __privateMethod(this, _addFocusListeners, addFocusListeners_fn).call(this); } rotate(_angle) { } serialize(isForCopying = false, context = null) { unreachable("An editor must be serializable"); } static deserialize(data, parent, uiManager) { const editor = new this.prototype.constructor({ parent, id: parent.getNextId(), uiManager }); editor.rotation = data.rotation; __privateSet(editor, _accessibilityData, data.accessibilityData); const [pageWidth, pageHeight] = editor.pageDimensions; const [x, y, width, height] = editor.getRectInCurrentCoords(data.rect, pageHeight); editor.x = x / pageWidth; editor.y = y / pageHeight; editor.width = width / pageWidth; editor.height = height / pageHeight; return editor; } get hasBeenModified() { return !!this.annotationElementId && (this.deleted || this.serialize() !== null); } remove() { var _a2; (_a2 = __privateGet(this, _focusAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _focusAC, null); if (!this.isEmpty()) { this.commit(); } if (this.parent) { this.parent.remove(this); } else { this._uiManager.removeEditor(this); } if (__privateGet(this, _moveInDOMTimeout)) { clearTimeout(__privateGet(this, _moveInDOMTimeout)); __privateSet(this, _moveInDOMTimeout, null); } __privateMethod(this, _stopResizing, stopResizing_fn).call(this); this.removeEditToolbar(); if (__privateGet(this, _telemetryTimeouts)) { for (const timeout of __privateGet(this, _telemetryTimeouts).values()) { clearTimeout(timeout); } __privateSet(this, _telemetryTimeouts, null); } this.parent = null; } get isResizable() { return false; } makeResizable() { if (this.isResizable) { __privateMethod(this, _createResizers, createResizers_fn).call(this); __privateGet(this, _resizersDiv).classList.remove("hidden"); bindEvents(this, this.div, ["keydown"]); } } get toolbarPosition() { return null; } keydown(event) { if (!this.isResizable || event.target !== this.div || event.key !== "Enter") { return; } this._uiManager.setSelected(this); __privateSet(this, _savedDimensions, { savedX: this.x, savedY: this.y, savedWidth: this.width, savedHeight: this.height }); const children = __privateGet(this, _resizersDiv).children; if (!__privateGet(this, _allResizerDivs)) { __privateSet(this, _allResizerDivs, Array.from(children)); const boundResizerKeydown = __privateMethod(this, _resizerKeydown, resizerKeydown_fn).bind(this); const boundResizerBlur = __privateMethod(this, _resizerBlur, resizerBlur_fn).bind(this); const signal = this._uiManager._signal; for (const div of __privateGet(this, _allResizerDivs)) { const name = div.getAttribute("data-resizer-name"); div.setAttribute("role", "spinbutton"); div.addEventListener("keydown", boundResizerKeydown, { signal }); div.addEventListener("blur", boundResizerBlur, { signal }); div.addEventListener("focus", __privateMethod(this, _resizerFocus, resizerFocus_fn).bind(this, name), { signal }); div.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]); } } const first = __privateGet(this, _allResizerDivs)[0]; let firstPosition = 0; for (const div of children) { if (div === first) { break; } firstPosition++; } const nextFirstPosition = (360 - this.rotation + this.parentRotation) % 360 / 90 * (__privateGet(this, _allResizerDivs).length / 4); if (nextFirstPosition !== firstPosition) { if (nextFirstPosition < firstPosition) { for (let i2 = 0; i2 < firstPosition - nextFirstPosition; i2++) { __privateGet(this, _resizersDiv).append(__privateGet(this, _resizersDiv).firstChild); } } else if (nextFirstPosition > firstPosition) { for (let i2 = 0; i2 < nextFirstPosition - firstPosition; i2++) { __privateGet(this, _resizersDiv).firstChild.before(__privateGet(this, _resizersDiv).lastChild); } } let i = 0; for (const child of children) { const div = __privateGet(this, _allResizerDivs)[i++]; const name = div.getAttribute("data-resizer-name"); child.setAttribute("data-l10n-id", _AnnotationEditor._l10nResizer[name]); } } __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, 0); __privateSet(this, _isResizerEnabledForKeyboard, true); __privateGet(this, _resizersDiv).firstChild.focus({ focusVisible: true }); event.preventDefault(); event.stopImmediatePropagation(); } _resizeWithKeyboard(x, y) { if (!__privateGet(this, _isResizerEnabledForKeyboard)) { return; } __privateMethod(this, _resizerPointermove, resizerPointermove_fn).call(this, __privateGet(this, _focusedResizerName), { movementX: x, movementY: y }); } _stopResizingWithKeyboard() { __privateMethod(this, _stopResizing, stopResizing_fn).call(this); this.div.focus(); } select() { var _a2, _b, _c; this.makeResizable(); (_a2 = this.div) == null ? void 0 : _a2.classList.add("selectedEditor"); if (!this._editToolbar) { this.addEditToolbar().then(() => { var _a3, _b2; if ((_a3 = this.div) == null ? void 0 : _a3.classList.contains("selectedEditor")) { (_b2 = this._editToolbar) == null ? void 0 : _b2.show(); } }); return; } (_b = this._editToolbar) == null ? void 0 : _b.show(); (_c = __privateGet(this, _altText3)) == null ? void 0 : _c.toggleAltTextBadge(false); } unselect() { var _a2, _b, _c, _d, _e; (_a2 = __privateGet(this, _resizersDiv)) == null ? void 0 : _a2.classList.add("hidden"); (_b = this.div) == null ? void 0 : _b.classList.remove("selectedEditor"); if ((_c = this.div) == null ? void 0 : _c.contains(document.activeElement)) { this._uiManager.currentLayer.div.focus({ preventScroll: true }); } (_d = this._editToolbar) == null ? void 0 : _d.hide(); (_e = __privateGet(this, _altText3)) == null ? void 0 : _e.toggleAltTextBadge(true); } updateParams(type, value) { } disableEditing() { } enableEditing() { } enterInEditMode() { } getImageForAltText() { return null; } get contentDiv() { return this.div; } get isEditing() { return __privateGet(this, _isEditing); } set isEditing(value) { __privateSet(this, _isEditing, value); if (!this.parent) { return; } if (value) { this.parent.setSelected(this); this.parent.setActiveEditor(this); } else { this.parent.setActiveEditor(null); } } setAspectRatio(width, height) { __privateSet(this, _keepAspectRatio, true); const aspectRatio = width / height; const { style } = this.div; style.aspectRatio = aspectRatio; style.height = "auto"; } static get MIN_SIZE() { return 16; } static canCreateNewEmptyEditor() { return true; } get telemetryInitialData() { return { action: "added" }; } get telemetryFinalData() { return null; } _reportTelemetry(data, mustWait = false) { if (mustWait) { __privateGet(this, _telemetryTimeouts) || __privateSet(this, _telemetryTimeouts, /* @__PURE__ */ new Map()); const { action } = data; let timeout = __privateGet(this, _telemetryTimeouts).get(action); if (timeout) { clearTimeout(timeout); } timeout = setTimeout(() => { this._reportTelemetry(data); __privateGet(this, _telemetryTimeouts).delete(action); if (__privateGet(this, _telemetryTimeouts).size === 0) { __privateSet(this, _telemetryTimeouts, null); } }, _AnnotationEditor._telemetryTimeout); __privateGet(this, _telemetryTimeouts).set(action, timeout); return; } data.type || (data.type = this.editorType); this._uiManager._eventBus.dispatch("reporttelemetry", { source: this, details: { type: "editing", data } }); } show(visible = this._isVisible) { this.div.classList.toggle("hidden", !visible); this._isVisible = visible; } enable() { if (this.div) { this.div.tabIndex = 0; } __privateSet(this, _disabled, false); } disable() { if (this.div) { this.div.tabIndex = -1; } __privateSet(this, _disabled, true); } renderAnnotationElement(annotation) { let content = annotation.container.querySelector(".annotationContent"); if (!content) { content = document.createElement("div"); content.classList.add("annotationContent", this.editorType); annotation.container.prepend(content); } else if (content.nodeName === "CANVAS") { const canvas = content; content = document.createElement("div"); content.classList.add("annotationContent", this.editorType); canvas.before(content); } return content; } resetAnnotationElement(annotation) { const { firstChild } = annotation.container; if (firstChild.nodeName === "DIV" && firstChild.classList.contains("annotationContent")) { firstChild.remove(); } } }; var AnnotationEditor = _AnnotationEditor; _accessibilityData = new WeakMap(); _allResizerDivs = new WeakMap(); _altText3 = new WeakMap(); _disabled = new WeakMap(); _keepAspectRatio = new WeakMap(); _resizersDiv = new WeakMap(); _savedDimensions = new WeakMap(); _focusAC = new WeakMap(); _focusedResizerName = new WeakMap(); _hasBeenClicked = new WeakMap(); _initialPosition = new WeakMap(); _isEditing = new WeakMap(); _isInEditMode = new WeakMap(); _isResizerEnabledForKeyboard = new WeakMap(); _moveInDOMTimeout = new WeakMap(); _prevDragX = new WeakMap(); _prevDragY = new WeakMap(); _telemetryTimeouts = new WeakMap(); _isDraggable = new WeakMap(); _zIndex = new WeakMap(); _translate = new WeakSet(); translate_fn = function([width, height], x, y) { [x, y] = this.screenToPageTranslation(x, y); this.x += x / width; this.y += y / height; this.fixAndSetPosition(); }; _rotatePoint = new WeakSet(); rotatePoint_fn = function(x, y, angle) { switch (angle) { case 90: return [y, -x]; case 180: return [-x, -y]; case 270: return [-y, x]; default: return [x, y]; } }; _getRotationMatrix = new WeakSet(); getRotationMatrix_fn = function(rotation) { switch (rotation) { case 90: { const [pageWidth, pageHeight] = this.pageDimensions; return [0, -pageWidth / pageHeight, pageHeight / pageWidth, 0]; } case 180: return [-1, 0, 0, -1]; case 270: { const [pageWidth, pageHeight] = this.pageDimensions; return [0, pageWidth / pageHeight, -pageHeight / pageWidth, 0]; } default: return [1, 0, 0, 1]; } }; _createResizers = new WeakSet(); createResizers_fn = function() { if (__privateGet(this, _resizersDiv)) { return; } __privateSet(this, _resizersDiv, document.createElement("div")); __privateGet(this, _resizersDiv).classList.add("resizers"); const classes = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"]; const signal = this._uiManager._signal; for (const name of classes) { const div = document.createElement("div"); __privateGet(this, _resizersDiv).append(div); div.classList.add("resizer", name); div.setAttribute("data-resizer-name", name); div.addEventListener("pointerdown", __privateMethod(this, _resizerPointerdown, resizerPointerdown_fn).bind(this, name), { signal }); div.addEventListener("contextmenu", noContextMenu, { signal }); div.tabIndex = -1; } this.div.prepend(__privateGet(this, _resizersDiv)); }; _resizerPointerdown = new WeakSet(); resizerPointerdown_fn = function(name, event) { var _a2; event.preventDefault(); const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } (_a2 = __privateGet(this, _altText3)) == null ? void 0 : _a2.toggle(false); const savedDraggable = this._isDraggable; this._isDraggable = false; const ac = new AbortController(); const signal = this._uiManager.combinedSignal(ac); this.parent.togglePointerEvents(false); window.addEventListener("pointermove", __privateMethod(this, _resizerPointermove, resizerPointermove_fn).bind(this, name), { passive: true, capture: true, signal }); window.addEventListener("contextmenu", noContextMenu, { signal }); const savedX = this.x; const savedY = this.y; const savedWidth = this.width; const savedHeight = this.height; const savedParentCursor = this.parent.div.style.cursor; const savedCursor = this.div.style.cursor; this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(event.target).cursor; const pointerUpCallback = () => { var _a3; ac.abort(); this.parent.togglePointerEvents(true); (_a3 = __privateGet(this, _altText3)) == null ? void 0 : _a3.toggle(true); this._isDraggable = savedDraggable; this.parent.div.style.cursor = savedParentCursor; this.div.style.cursor = savedCursor; __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight); }; window.addEventListener("pointerup", pointerUpCallback, { signal }); window.addEventListener("blur", pointerUpCallback, { signal }); }; _addResizeToUndoStack = new WeakSet(); addResizeToUndoStack_fn = function(savedX, savedY, savedWidth, savedHeight) { const newX = this.x; const newY = this.y; const newWidth = this.width; const newHeight = this.height; if (newX === savedX && newY === savedY && newWidth === savedWidth && newHeight === savedHeight) { return; } this.addCommands({ cmd: () => { this.width = newWidth; this.height = newHeight; this.x = newX; this.y = newY; const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(parentWidth * newWidth, parentHeight * newHeight); this.fixAndSetPosition(); }, undo: () => { this.width = savedWidth; this.height = savedHeight; this.x = savedX; this.y = savedY; const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(parentWidth * savedWidth, parentHeight * savedHeight); this.fixAndSetPosition(); }, mustExec: true }); }; _resizerPointermove = new WeakSet(); resizerPointermove_fn = function(name, event) { const [parentWidth, parentHeight] = this.parentDimensions; const savedX = this.x; const savedY = this.y; const savedWidth = this.width; const savedHeight = this.height; const minWidth = _AnnotationEditor.MIN_SIZE / parentWidth; const minHeight = _AnnotationEditor.MIN_SIZE / parentHeight; const round = (x) => Math.round(x * 1e4) / 1e4; const rotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, this.rotation); const transf = (x, y) => [rotationMatrix[0] * x + rotationMatrix[2] * y, rotationMatrix[1] * x + rotationMatrix[3] * y]; const invRotationMatrix = __privateMethod(this, _getRotationMatrix, getRotationMatrix_fn).call(this, 360 - this.rotation); const invTransf = (x, y) => [invRotationMatrix[0] * x + invRotationMatrix[2] * y, invRotationMatrix[1] * x + invRotationMatrix[3] * y]; let getPoint; let getOpposite; let isDiagonal = false; let isHorizontal = false; switch (name) { case "topLeft": isDiagonal = true; getPoint = (w, h) => [0, 0]; getOpposite = (w, h) => [w, h]; break; case "topMiddle": getPoint = (w, h) => [w / 2, 0]; getOpposite = (w, h) => [w / 2, h]; break; case "topRight": isDiagonal = true; getPoint = (w, h) => [w, 0]; getOpposite = (w, h) => [0, h]; break; case "middleRight": isHorizontal = true; getPoint = (w, h) => [w, h / 2]; getOpposite = (w, h) => [0, h / 2]; break; case "bottomRight": isDiagonal = true; getPoint = (w, h) => [w, h]; getOpposite = (w, h) => [0, 0]; break; case "bottomMiddle": getPoint = (w, h) => [w / 2, h]; getOpposite = (w, h) => [w / 2, 0]; break; case "bottomLeft": isDiagonal = true; getPoint = (w, h) => [0, h]; getOpposite = (w, h) => [w, 0]; break; case "middleLeft": isHorizontal = true; getPoint = (w, h) => [0, h / 2]; getOpposite = (w, h) => [w, h / 2]; break; } const point = getPoint(savedWidth, savedHeight); const oppositePoint = getOpposite(savedWidth, savedHeight); let transfOppositePoint = transf(...oppositePoint); const oppositeX = round(savedX + transfOppositePoint[0]); const oppositeY = round(savedY + transfOppositePoint[1]); let ratioX = 1; let ratioY = 1; let [deltaX, deltaY] = this.screenToPageTranslation(event.movementX, event.movementY); [deltaX, deltaY] = invTransf(deltaX / parentWidth, deltaY / parentHeight); if (isDiagonal) { const oldDiag = Math.hypot(savedWidth, savedHeight); ratioX = ratioY = Math.max(Math.min(Math.hypot(oppositePoint[0] - point[0] - deltaX, oppositePoint[1] - point[1] - deltaY) / oldDiag, 1 / savedWidth, 1 / savedHeight), minWidth / savedWidth, minHeight / savedHeight); } else if (isHorizontal) { ratioX = Math.max(minWidth, Math.min(1, Math.abs(oppositePoint[0] - point[0] - deltaX))) / savedWidth; } else { ratioY = Math.max(minHeight, Math.min(1, Math.abs(oppositePoint[1] - point[1] - deltaY))) / savedHeight; } const newWidth = round(savedWidth * ratioX); const newHeight = round(savedHeight * ratioY); transfOppositePoint = transf(...getOpposite(newWidth, newHeight)); const newX = oppositeX - transfOppositePoint[0]; const newY = oppositeY - transfOppositePoint[1]; this.width = newWidth; this.height = newHeight; this.x = newX; this.y = newY; this.setDims(parentWidth * newWidth, parentHeight * newHeight); this.fixAndSetPosition(); }; _selectOnPointerEvent = new WeakSet(); selectOnPointerEvent_fn = function(event) { const { isMac } = util_FeatureTest.platform; if (event.ctrlKey && !isMac || event.shiftKey || event.metaKey && isMac) { this.parent.toggleSelected(this); } else { this.parent.setSelected(this); } }; _setUpDragSession = new WeakSet(); setUpDragSession_fn = function(event) { const isSelected = this._uiManager.isSelected(this); this._uiManager.setUpDragSession(); const ac = new AbortController(); const signal = this._uiManager.combinedSignal(ac); if (isSelected) { this.div.classList.add("moving"); __privateSet(this, _prevDragX, event.clientX); __privateSet(this, _prevDragY, event.clientY); const pointerMoveCallback = (e) => { const { clientX: x, clientY: y } = e; const [tx, ty] = this.screenToPageTranslation(x - __privateGet(this, _prevDragX), y - __privateGet(this, _prevDragY)); __privateSet(this, _prevDragX, x); __privateSet(this, _prevDragY, y); this._uiManager.dragSelectedEditors(tx, ty); }; window.addEventListener("pointermove", pointerMoveCallback, { passive: true, capture: true, signal }); } const pointerUpCallback = () => { ac.abort(); if (isSelected) { this.div.classList.remove("moving"); } __privateSet(this, _hasBeenClicked, false); if (!this._uiManager.endDragSession()) { __privateMethod(this, _selectOnPointerEvent, selectOnPointerEvent_fn).call(this, event); } }; window.addEventListener("pointerup", pointerUpCallback, { signal }); window.addEventListener("blur", pointerUpCallback, { signal }); }; _addFocusListeners = new WeakSet(); addFocusListeners_fn = function() { if (__privateGet(this, _focusAC) || !this.div) { return; } __privateSet(this, _focusAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _focusAC)); this.div.addEventListener("focusin", this.focusin.bind(this), { signal }); this.div.addEventListener("focusout", this.focusout.bind(this), { signal }); }; _resizerKeydown = new WeakSet(); resizerKeydown_fn = function(event) { _AnnotationEditor._resizerKeyboardManager.exec(this, event); }; _resizerBlur = new WeakSet(); resizerBlur_fn = function(event) { var _a2; if (__privateGet(this, _isResizerEnabledForKeyboard) && ((_a2 = event.relatedTarget) == null ? void 0 : _a2.parentNode) !== __privateGet(this, _resizersDiv)) { __privateMethod(this, _stopResizing, stopResizing_fn).call(this); } }; _resizerFocus = new WeakSet(); resizerFocus_fn = function(name) { __privateSet(this, _focusedResizerName, __privateGet(this, _isResizerEnabledForKeyboard) ? name : ""); }; _setResizerTabIndex = new WeakSet(); setResizerTabIndex_fn = function(value) { if (!__privateGet(this, _allResizerDivs)) { return; } for (const div of __privateGet(this, _allResizerDivs)) { div.tabIndex = value; } }; _stopResizing = new WeakSet(); stopResizing_fn = function() { __privateSet(this, _isResizerEnabledForKeyboard, false); __privateMethod(this, _setResizerTabIndex, setResizerTabIndex_fn).call(this, -1); if (__privateGet(this, _savedDimensions)) { const { savedX, savedY, savedWidth, savedHeight } = __privateGet(this, _savedDimensions); __privateMethod(this, _addResizeToUndoStack, addResizeToUndoStack_fn).call(this, savedX, savedY, savedWidth, savedHeight); __privateSet(this, _savedDimensions, null); } }; __privateAdd(AnnotationEditor, _rotatePoint); __publicField(AnnotationEditor, "_l10nPromise", null); __publicField(AnnotationEditor, "_l10nResizer", null); __publicField(AnnotationEditor, "_borderLineWidth", -1); __publicField(AnnotationEditor, "_colorManager", new ColorManager()); __publicField(AnnotationEditor, "_zIndex", 1); __publicField(AnnotationEditor, "_telemetryTimeout", 1e3); var FakeEditor = class extends AnnotationEditor { constructor(params) { super(params); this.annotationElementId = params.annotationElementId; this.deleted = true; } serialize() { return { id: this.annotationElementId, deleted: true, pageIndex: this.pageIndex }; } }; var SEED = 3285377520; var MASK_HIGH = 4294901760; var MASK_LOW = 65535; var MurmurHash3_64 = class { constructor(seed) { this.h1 = seed ? seed & 4294967295 : SEED; this.h2 = seed ? seed & 4294967295 : 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 <= 255) { data[length++] = code; } else { data[length++] = code >>> 8; data[length++] = code & 255; } } } else if (ArrayBuffer.isView(input)) { data = input.slice(); length = data.byteLength; } else { throw new Error("Invalid data format, must be a string or TypedArray."); } 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 = 3432918353, C2 = 461845907; 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 + 3864292196; } 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 + 3864292196; } } 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 * 3981806797 & MASK_HIGH | h1 * 36045 & MASK_LOW; h2 = h2 * 4283543511 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 2950163797 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; h1 = h1 * 444984403 & MASK_HIGH | h1 * 60499 & MASK_LOW; h2 = h2 * 3301882366 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 3120437893 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; return (h1 >>> 0).toString(16).padStart(8, "0") + (h2 >>> 0).toString(16).padStart(8, "0"); } }; var SerializableEmpty = Object.freeze({ map: null, hash: "", transfer: void 0 }); var _modified, _modifiedIds, _storage, _setModified, setModified_fn; var AnnotationStorage = class { constructor() { __privateAdd(this, _setModified); __privateAdd(this, _modified, false); __privateAdd(this, _modifiedIds, null); __privateAdd(this, _storage, /* @__PURE__ */ new Map()); this.onSetModified = null; this.onResetModified = null; this.onAnnotationEditor = null; } getValue(key, defaultValue) { const value = __privateGet(this, _storage).get(key); if (value === void 0) { return defaultValue; } return Object.assign(defaultValue, value); } getRawValue(key) { return __privateGet(this, _storage).get(key); } remove(key) { __privateGet(this, _storage).delete(key); if (__privateGet(this, _storage).size === 0) { this.resetModified(); } if (typeof this.onAnnotationEditor === "function") { for (const value of __privateGet(this, _storage).values()) { if (value instanceof AnnotationEditor) { return; } } this.onAnnotationEditor(null); } } setValue(key, value) { const obj = __privateGet(this, _storage).get(key); let modified = false; if (obj !== void 0) { for (const [entry, val] of Object.entries(value)) { if (obj[entry] !== val) { modified = true; obj[entry] = val; } } } else { modified = true; __privateGet(this, _storage).set(key, value); } if (modified) { __privateMethod(this, _setModified, setModified_fn).call(this); } if (value instanceof AnnotationEditor && typeof this.onAnnotationEditor === "function") { this.onAnnotationEditor(value.constructor._type); } } has(key) { return __privateGet(this, _storage).has(key); } getAll() { return __privateGet(this, _storage).size > 0 ? objectFromMap(__privateGet(this, _storage)) : null; } setAll(obj) { for (const [key, val] of Object.entries(obj)) { this.setValue(key, val); } } get size() { return __privateGet(this, _storage).size; } resetModified() { if (__privateGet(this, _modified)) { __privateSet(this, _modified, false); if (typeof this.onResetModified === "function") { this.onResetModified(); } } } get print() { return new PrintAnnotationStorage(this); } get serializable() { if (__privateGet(this, _storage).size === 0) { return SerializableEmpty; } const map = /* @__PURE__ */ new Map(), hash = new MurmurHash3_64(), transfer = []; const context = /* @__PURE__ */ Object.create(null); let hasBitmap = false; for (const [key, val] of __privateGet(this, _storage)) { const serialized = val instanceof AnnotationEditor ? val.serialize(false, context) : val; if (serialized) { map.set(key, serialized); hash.update(`${key}:${JSON.stringify(serialized)}`); hasBitmap || (hasBitmap = !!serialized.bitmap); } } if (hasBitmap) { for (const value of map.values()) { if (value.bitmap) { transfer.push(value.bitmap); } } } return map.size > 0 ? { map, hash: hash.hexdigest(), transfer } : SerializableEmpty; } get editorStats() { var _a2; let stats = null; const typeToEditor = /* @__PURE__ */ new Map(); for (const value of __privateGet(this, _storage).values()) { if (!(value instanceof AnnotationEditor)) { continue; } const editorStats = value.telemetryFinalData; if (!editorStats) { continue; } const { type } = editorStats; if (!typeToEditor.has(type)) { typeToEditor.set(type, Object.getPrototypeOf(value).constructor); } stats || (stats = /* @__PURE__ */ Object.create(null)); const map = stats[type] || (stats[type] = /* @__PURE__ */ new Map()); for (const [key, val] of Object.entries(editorStats)) { if (key === "type") { continue; } let counters = map.get(key); if (!counters) { counters = /* @__PURE__ */ new Map(); map.set(key, counters); } const count = (_a2 = counters.get(val)) != null ? _a2 : 0; counters.set(val, count + 1); } } for (const [type, editor] of typeToEditor) { stats[type] = editor.computeTelemetryFinalData(stats[type]); } return stats; } resetModifiedIds() { __privateSet(this, _modifiedIds, null); } get modifiedIds() { if (__privateGet(this, _modifiedIds)) { return __privateGet(this, _modifiedIds); } const ids = []; for (const value of __privateGet(this, _storage).values()) { if (!(value instanceof AnnotationEditor) || !value.annotationElementId || !value.serialize()) { continue; } ids.push(value.annotationElementId); } return __privateSet(this, _modifiedIds, { ids: new Set(ids), hash: ids.join(",") }); } }; _modified = new WeakMap(); _modifiedIds = new WeakMap(); _storage = new WeakMap(); _setModified = new WeakSet(); setModified_fn = function() { if (!__privateGet(this, _modified)) { __privateSet(this, _modified, true); if (typeof this.onSetModified === "function") { this.onSetModified(); } } }; var _serializable; var PrintAnnotationStorage = class extends AnnotationStorage { constructor(parent) { super(); __privateAdd(this, _serializable, void 0); const { map, hash, transfer } = parent.serializable; const clone = structuredClone(map, transfer ? { transfer } : null); __privateSet(this, _serializable, { map: clone, hash, transfer }); } get print() { unreachable("Should not call PrintAnnotationStorage.print"); } get serializable() { return __privateGet(this, _serializable); } get modifiedIds() { return shadow(this, "modifiedIds", { ids: /* @__PURE__ */ new Set(), hash: "" }); } }; _serializable = new WeakMap(); var _systemFonts; var FontLoader = class { constructor({ ownerDocument = globalThis.document, styleElement = null }) { __privateAdd(this, _systemFonts, /* @__PURE__ */ new Set()); this._document = ownerDocument; this.nativeFontFaces = /* @__PURE__ */ new Set(); this.styleElement = null; this.loadingRequests = []; this.loadTestFontId = 0; } addNativeFontFace(nativeFontFace) { this.nativeFontFaces.add(nativeFontFace); this._document.fonts.add(nativeFontFace); } removeNativeFontFace(nativeFontFace) { this.nativeFontFaces.delete(nativeFontFace); this._document.fonts.delete(nativeFontFace); } insertRule(rule) { if (!this.styleElement) { this.styleElement = this._document.createElement("style"); this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement); } const styleSheet = this.styleElement.sheet; styleSheet.insertRule(rule, styleSheet.cssRules.length); } clear() { for (const nativeFontFace of this.nativeFontFaces) { this._document.fonts.delete(nativeFontFace); } this.nativeFontFaces.clear(); __privateGet(this, _systemFonts).clear(); if (this.styleElement) { this.styleElement.remove(); this.styleElement = null; } } async loadSystemFont({ systemFontInfo: info2, _inspectFont }) { if (!info2 || __privateGet(this, _systemFonts).has(info2.loadedName)) { return; } assert(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."); if (this.isFontLoadingAPISupported) { const { loadedName, src, style } = info2; const fontFace = new FontFace(loadedName, src, style); this.addNativeFontFace(fontFace); try { await fontFace.load(); __privateGet(this, _systemFonts).add(loadedName); _inspectFont == null ? void 0 : _inspectFont(info2); } catch (e) { warn(`Cannot load system font: ${info2.baseFontName}, installing it could help to improve PDF rendering.`); this.removeNativeFontFace(fontFace); } return; } unreachable("Not implemented: loadSystemFont without the Font Loading API."); } async bind(font) { if (font.attached || font.missingFile && !font.systemFontInfo) { return; } font.attached = true; if (font.systemFontInfo) { await this.loadSystemFont(font); return; } if (this.isFontLoadingAPISupported) { const nativeFontFace = font.createNativeFontFace(); if (nativeFontFace) { this.addNativeFontFace(nativeFontFace); try { await nativeFontFace.loaded; } catch (ex) { warn(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); font.disableFontFace = true; throw ex; } } return; } const rule = font.createFontFaceRule(); if (rule) { this.insertRule(rule); if (this.isSyncFontLoadingSupported) { return; } await new Promise((resolve) => { const request = this._queueLoadingCallback(resolve); this._prepareFontLoadEvent(font, request); }); } } get isFontLoadingAPISupported() { var _a2; const hasFonts = !!((_a2 = this._document) == null ? void 0 : _a2.fonts); return shadow(this, "isFontLoadingAPISupported", hasFonts); } get isSyncFontLoadingSupported() { let supported = false; if (isNodeJS) { supported = true; } else if (typeof navigator !== "undefined" && typeof (navigator == null ? void 0 : navigator.userAgent) === "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) { supported = true; } return shadow(this, "isSyncFontLoadingSupported", supported); } _queueLoadingCallback(callback) { function completeRequest() { assert(!request.done, "completeRequest() cannot be called twice."); request.done = true; while (loadingRequests.length > 0 && loadingRequests[0].done) { const otherRequest = loadingRequests.shift(); setTimeout(otherRequest.callback, 0); } } const { loadingRequests } = this; const request = { done: false, complete: completeRequest, callback }; loadingRequests.push(request); return request; } get _loadTestFont() { const testFont = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); return shadow(this, "_loadTestFont", testFont); } _prepareFontLoadEvent(font, request) { function int32(data2, offset) { return data2.charCodeAt(offset) << 24 | data2.charCodeAt(offset + 1) << 16 | data2.charCodeAt(offset + 2) << 8 | data2.charCodeAt(offset + 3) & 255; } function spliceString(s, offset, remove, insert) { const chunk1 = s.substring(0, offset); const chunk2 = s.substring(offset + remove); return chunk1 + insert + chunk2; } let i, ii; const canvas = this._document.createElement("canvas"); canvas.width = 1; canvas.height = 1; const ctx = canvas.getContext("2d"); let called = 0; function isFontReady(name, callback) { if (++called > 30) { warn("Load test font never loaded."); callback(); return; } ctx.font = "30px " + name; ctx.fillText(".", 0, 20); const imageData = ctx.getImageData(0, 0, 1, 1); if (imageData.data[3] > 0) { callback(); return; } setTimeout(isFontReady.bind(null, name, callback)); } const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; let data = this._loadTestFont; const COMMENT_OFFSET = 976; data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); const CFF_CHECKSUM_OFFSET = 16; const XXXX_VALUE = 1482184792; let checksum = int32(data, CFF_CHECKSUM_OFFSET); for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; } if (i < loadTestFontId.length) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; } data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum)); const url = `url(data:font/opentype;base64,${btoa(data)});`; const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; this.insertRule(rule); const div = this._document.createElement("div"); div.style.visibility = "hidden"; div.style.width = div.style.height = "10px"; div.style.position = "absolute"; div.style.top = div.style.left = "0px"; for (const name of [font.loadedName, loadTestFontId]) { const span = this._document.createElement("span"); span.textContent = "Hi"; span.style.fontFamily = name; div.append(span); } this._document.body.append(div); isFontReady(loadTestFontId, () => { div.remove(); request.complete(); }); } }; _systemFonts = new WeakMap(); var FontFaceObject = class { constructor(translatedData, { disableFontFace = false, inspectFont = null }) { this.compiledGlyphs = /* @__PURE__ */ Object.create(null); for (const i in translatedData) { this[i] = translatedData[i]; } this.disableFontFace = disableFontFace === true; this._inspectFont = inspectFont; } createNativeFontFace() { var _a2; if (!this.data || this.disableFontFace) { return null; } let nativeFontFace; if (!this.cssFontInfo) { nativeFontFace = new FontFace(this.loadedName, this.data, {}); } else { const css = { weight: this.cssFontInfo.fontWeight }; if (this.cssFontInfo.italicAngle) { css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; } nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); } (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this); return nativeFontFace; } createFontFaceRule() { var _a2; if (!this.data || this.disableFontFace) { return null; } const data = bytesToString(this.data); const url = `url(data:${this.mimetype};base64,${btoa(data)});`; let rule; if (!this.cssFontInfo) { rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; } else { let css = `font-weight: ${this.cssFontInfo.fontWeight};`; if (this.cssFontInfo.italicAngle) { css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; } rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; } (_a2 = this._inspectFont) == null ? void 0 : _a2.call(this, this, url); return rule; } getPathGenerator(objs, character) { if (this.compiledGlyphs[character] !== void 0) { return this.compiledGlyphs[character]; } let cmds; try { cmds = objs.get(this.loadedName + "_path_" + character); } catch (ex) { warn(`getPathGenerator - ignoring character: "${ex}".`); } if (!Array.isArray(cmds) || cmds.length === 0) { return this.compiledGlyphs[character] = function(c, size) { }; } const commands = []; for (let i = 0, ii = cmds.length; i < ii; ) { switch (cmds[i++]) { case FontRenderOps.BEZIER_CURVE_TO: { const [a, b, c, d, e, f] = cmds.slice(i, i + 6); commands.push((ctx) => ctx.bezierCurveTo(a, b, c, d, e, f)); i += 6; } break; case FontRenderOps.MOVE_TO: { const [a, b] = cmds.slice(i, i + 2); commands.push((ctx) => ctx.moveTo(a, b)); i += 2; } break; case FontRenderOps.LINE_TO: { const [a, b] = cmds.slice(i, i + 2); commands.push((ctx) => ctx.lineTo(a, b)); i += 2; } break; case FontRenderOps.QUADRATIC_CURVE_TO: { const [a, b, c, d] = cmds.slice(i, i + 4); commands.push((ctx) => ctx.quadraticCurveTo(a, b, c, d)); i += 4; } break; case FontRenderOps.RESTORE: commands.push((ctx) => ctx.restore()); break; case FontRenderOps.SAVE: commands.push((ctx) => ctx.save()); break; case FontRenderOps.SCALE: assert(commands.length === 2, "Scale command is only valid at the third position."); break; case FontRenderOps.TRANSFORM: { const [a, b, c, d, e, f] = cmds.slice(i, i + 6); commands.push((ctx) => ctx.transform(a, b, c, d, e, f)); i += 6; } break; case FontRenderOps.TRANSLATE: { const [a, b] = cmds.slice(i, i + 2); commands.push((ctx) => ctx.translate(a, b)); i += 2; } break; } } return this.compiledGlyphs[character] = function glyphDrawer(ctx, size) { commands[0](ctx); commands[1](ctx); ctx.scale(size, -size); for (let i = 2, ii = commands.length; i < ii; i++) { commands[i](ctx); } }; } }; if (isNodeJS) { packageCapability = Promise.withResolvers(); packageMap = null; const loadPackages = async () => { const fs = await import( /*webpackIgnore: true*/ "fs" ), http = await import( /*webpackIgnore: true*/ "http" ), https = await import( /*webpackIgnore: true*/ "https" ), url = await import( /*webpackIgnore: true*/ "url" ); let canvas, path2d; return new Map(Object.entries({ fs, http, https, url, canvas, path2d })); }; loadPackages().then((map) => { packageMap = map; packageCapability.resolve(); }, (reason) => { warn(`loadPackages: ${reason}`); packageMap = /* @__PURE__ */ new Map(); packageCapability.resolve(); }); } var packageCapability; var packageMap; var NodePackages = class { static get promise() { return packageCapability.promise; } static get(name) { return packageMap == null ? void 0 : packageMap.get(name); } }; var node_utils_fetchData = function(url) { const fs = NodePackages.get("fs"); return fs.promises.readFile(url).then((data) => new Uint8Array(data)); }; var NodeFilterFactory = class extends BaseFilterFactory { }; var NodeCanvasFactory = class extends BaseCanvasFactory { _createCanvas(width, height) { const canvas = NodePackages.get("canvas"); return canvas.createCanvas(width, height); } }; var NodeCMapReaderFactory = class extends BaseCMapReaderFactory { _fetchData(url, compressionType) { return node_utils_fetchData(url).then((data) => ({ cMapData: data, compressionType })); } }; var NodeStandardFontDataFactory = class extends BaseStandardFontDataFactory { _fetchData(url) { return node_utils_fetchData(url); } }; var PathType = { FILL: "Fill", STROKE: "Stroke", SHADING: "Shading" }; function applyBoundingBox(ctx, bbox) { if (!bbox) { return; } const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const region = new Path2D(); region.rect(bbox[0], bbox[1], width, height); ctx.clip(region); } var BaseShadingPattern = class { getPattern() { unreachable("Abstract method `getPattern` called."); } }; var RadialAxialShadingPattern = class extends BaseShadingPattern { constructor(IR) { super(); this._type = IR[1]; this._bbox = IR[2]; this._colorStops = IR[3]; this._p0 = IR[4]; this._p1 = IR[5]; this._r0 = IR[6]; this._r1 = IR[7]; this.matrix = null; } _createGradient(ctx) { let grad; if (this._type === "axial") { grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); } else if (this._type === "radial") { grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); } for (const colorStop of this._colorStops) { grad.addColorStop(colorStop[0], colorStop[1]); } return grad; } getPattern(ctx, owner, inverse, pathType) { let pattern; if (pathType === PathType.STROKE || pathType === PathType.FILL) { const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, getCurrentTransform(ctx)) || [0, 0, 0, 0]; const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); const tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.beginPath(); tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); inverse = Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); tmpCtx.transform(...owner.baseTransform); if (this.matrix) { tmpCtx.transform(...this.matrix); } applyBoundingBox(tmpCtx, this._bbox); tmpCtx.fillStyle = this._createGradient(tmpCtx); tmpCtx.fill(); pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); const domMatrix = new DOMMatrix(inverse); pattern.setTransform(domMatrix); } else { applyBoundingBox(ctx, this._bbox); pattern = this._createGradient(ctx); } return pattern; } }; function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { const coords = context.coords, colors = context.colors; const bytes = data.data, rowSize = data.width * 4; let tmp; if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } if (coords[p2 + 1] > coords[p3 + 1]) { tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp; } if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } const x1 = (coords[p1] + context.offsetX) * context.scaleX; const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; const x2 = (coords[p2] + context.offsetX) * context.scaleX; const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; const x3 = (coords[p3] + context.offsetX) * context.scaleX; const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; if (y1 >= y3) { return; } const c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; const c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; const c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; const minY = Math.round(y1), maxY = Math.round(y3); let xa, car, cag, cab; let xb, cbr, cbg, cbb; for (let y = minY; y <= maxY; y++) { if (y < y2) { const k2 = y < y1 ? 0 : (y1 - y) / (y1 - y2); xa = x1 - (x1 - x2) * k2; car = c1r - (c1r - c2r) * k2; cag = c1g - (c1g - c2g) * k2; cab = c1b - (c1b - c2b) * k2; } else { let k2; if (y > y3) { k2 = 1; } else if (y2 === y3) { k2 = 0; } else { k2 = (y2 - y) / (y2 - y3); } xa = x2 - (x2 - x3) * k2; car = c2r - (c2r - c3r) * k2; cag = c2g - (c2g - c3g) * k2; cab = c2b - (c2b - c3b) * k2; } let k; if (y < y1) { k = 0; } else if (y > y3) { k = 1; } else { k = (y1 - y) / (y1 - y3); } xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; cbb = c1b - (c1b - c3b) * k; const x1_ = Math.round(Math.min(xa, xb)); const x2_ = Math.round(Math.max(xa, xb)); let j = rowSize * y + x1_ * 4; for (let x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); if (k < 0) { k = 0; } else if (k > 1) { k = 1; } bytes[j++] = car - (car - cbr) * k | 0; bytes[j++] = cag - (cag - cbg) * k | 0; bytes[j++] = cab - (cab - cbb) * k | 0; bytes[j++] = 255; } } } function drawFigure(data, figure, context) { const ps = figure.coords; const cs = figure.colors; let i, ii; switch (figure.type) { case "lattice": const verticesPerRow = figure.verticesPerRow; const rows = Math.floor(ps.length / verticesPerRow) - 1; const cols = verticesPerRow - 1; for (i = 0; i < rows; i++) { let q = i * verticesPerRow; for (let j = 0; j < cols; j++, q++) { drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); } } break; case "triangles": for (i = 0, ii = ps.length; i < ii; i += 3) { drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); } break; default: throw new Error("illegal figure"); } } var MeshShadingPattern = class extends BaseShadingPattern { constructor(IR) { super(); this._coords = IR[2]; this._colors = IR[3]; this._figures = IR[4]; this._bounds = IR[5]; this._bbox = IR[7]; this._background = IR[8]; this.matrix = null; } _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { const EXPECTED_SCALE = 1.1; const MAX_PATTERN_SIZE = 3e3; const BORDER_SIZE = 2; const offsetX = Math.floor(this._bounds[0]); const offsetY = Math.floor(this._bounds[1]); const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); const scaleX = boundsWidth / width; const scaleY = boundsHeight / height; const context = { coords: this._coords, colors: this._colors, offsetX: -offsetX, offsetY: -offsetY, scaleX: 1 / scaleX, scaleY: 1 / scaleY }; const paddedWidth = width + BORDER_SIZE * 2; const paddedHeight = height + BORDER_SIZE * 2; const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); const tmpCtx = tmpCanvas.context; const data = tmpCtx.createImageData(width, height); if (backgroundColor) { const bytes = data.data; for (let i = 0, ii = bytes.length; i < ii; i += 4) { bytes[i] = backgroundColor[0]; bytes[i + 1] = backgroundColor[1]; bytes[i + 2] = backgroundColor[2]; bytes[i + 3] = 255; } } for (const figure of this._figures) { drawFigure(data, figure, context); } tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); const canvas = tmpCanvas.canvas; return { canvas, offsetX: offsetX - BORDER_SIZE * scaleX, offsetY: offsetY - BORDER_SIZE * scaleY, scaleX, scaleY }; } getPattern(ctx, owner, inverse, pathType) { applyBoundingBox(ctx, this._bbox); let scale; if (pathType === PathType.SHADING) { scale = Util.singularValueDecompose2dScale(getCurrentTransform(ctx)); } else { scale = Util.singularValueDecompose2dScale(owner.baseTransform); if (this.matrix) { const matrixScale = Util.singularValueDecompose2dScale(this.matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); if (pathType !== PathType.SHADING) { ctx.setTransform(...owner.baseTransform); if (this.matrix) { ctx.transform(...this.matrix); } } ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); } }; var DummyShadingPattern = class extends BaseShadingPattern { getPattern() { return "hotpink"; } }; function getShadingPattern(IR) { switch (IR[0]) { case "RadialAxial": return new RadialAxialShadingPattern(IR); case "Mesh": return new MeshShadingPattern(IR); case "Dummy": return new DummyShadingPattern(); } throw new Error(`Unknown IR type: ${IR[0]}`); } var PaintType = { COLORED: 1, UNCOLORED: 2 }; var _TilingPattern = class { constructor(IR, color2, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; this.matrix = IR[3]; this.bbox = IR[4]; this.xstep = IR[5]; this.ystep = IR[6]; this.paintType = IR[7]; this.tilingType = IR[8]; this.color = color2; this.ctx = ctx; this.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; } createPatternCanvas(owner) { const operatorList = this.operatorList; const bbox = this.bbox; const xstep = this.xstep; const ystep = this.ystep; const paintType = this.paintType; const tilingType = this.tilingType; const color2 = this.color; const canvasGraphicsFactory = this.canvasGraphicsFactory; info("TilingType: " + tilingType); const x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; const matrixScale = Util.singularValueDecompose2dScale(this.matrix); const curMatrixScale = Util.singularValueDecompose2dScale(this.baseTransform); const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); const tmpCtx = tmpCanvas.context; const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); graphics.groupLevel = owner.groupLevel; this.setFillAndStrokeStyleToContext(graphics, paintType, color2); let adjustedX0 = x0; let adjustedY0 = y0; let adjustedX1 = x1; let adjustedY1 = y1; if (x0 < 0) { adjustedX0 = 0; adjustedX1 += Math.abs(x0); } if (y0 < 0) { adjustedY0 = 0; adjustedY1 += Math.abs(y0); } tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); tmpCtx.save(); this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); graphics.baseTransform = getCurrentTransform(graphics.ctx); graphics.executeOperatorList(operatorList); graphics.endDrawing(); return { canvas: tmpCanvas.canvas, scaleX: dimx.scale, scaleY: dimy.scale, offsetX: adjustedX0, offsetY: adjustedY0 }; } getSizeAndScale(step, realOutputSize, scale) { step = Math.abs(step); const maxSize = Math.max(_TilingPattern.MAX_PATTERN_SIZE, realOutputSize); let size = Math.ceil(step * scale); if (size >= maxSize) { size = maxSize; } else { scale = size / step; } return { scale, size }; } clipBbox(graphics, x0, y0, x1, y1) { const bboxWidth = x1 - x0; const bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); graphics.current.updateRectMinMax(getCurrentTransform(graphics.ctx), [x0, y0, x1, y1]); graphics.clip(); graphics.endPath(); } setFillAndStrokeStyleToContext(graphics, paintType, color2) { const context = graphics.ctx, current = graphics.current; switch (paintType) { case PaintType.COLORED: const ctx = this.ctx; context.fillStyle = ctx.fillStyle; context.strokeStyle = ctx.strokeStyle; current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: const cssColor = Util.makeHexColor(color2[0], color2[1], color2[2]); context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; default: throw new FormatError(`Unsupported paint type: ${paintType}`); } } getPattern(ctx, owner, inverse, pathType) { let matrix = inverse; if (pathType !== PathType.SHADING) { matrix = Util.transform(matrix, owner.baseTransform); if (this.matrix) { matrix = Util.transform(matrix, this.matrix); } } const temporaryPatternCanvas = this.createPatternCanvas(owner); let domMatrix = new DOMMatrix(matrix); domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); pattern.setTransform(domMatrix); return pattern; } }; var TilingPattern = _TilingPattern; __publicField(TilingPattern, "MAX_PATTERN_SIZE", 3e3); function convertBlackAndWhiteToRGBA({ src, srcPos = 0, dest, width, height, nonBlackColor = 4294967295, inverseDecode = false }) { const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255; const [zeroMapping, oneMapping] = inverseDecode ? [nonBlackColor, black] : [black, nonBlackColor]; const widthInSource = width >> 3; const widthRemainder = width & 7; const srcLength = src.length; dest = new Uint32Array(dest.buffer); let destPos = 0; for (let i = 0; i < height; i++) { for (const max = srcPos + widthInSource; srcPos < max; srcPos++) { const elem2 = srcPos < srcLength ? src[srcPos] : 255; dest[destPos++] = elem2 & 128 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 64 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 32 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 16 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 8 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 4 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 2 ? oneMapping : zeroMapping; dest[destPos++] = elem2 & 1 ? 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 }; } var MIN_FONT_SIZE = 16; var MAX_FONT_SIZE = 100; var EXECUTION_TIME = 15; var EXECUTION_STEPS = 10; var MAX_SIZE_TO_COMPILE = 1e3; var FULL_CHUNK_HEIGHT = 16; function mirrorContextOperations(ctx, destCtx) { if (ctx._removeMirroring) { throw new Error("Context is already forwarding operations."); } ctx.__originalSave = ctx.save; ctx.__originalRestore = ctx.restore; ctx.__originalRotate = ctx.rotate; ctx.__originalScale = ctx.scale; ctx.__originalTranslate = ctx.translate; ctx.__originalTransform = ctx.transform; ctx.__originalSetTransform = ctx.setTransform; ctx.__originalResetTransform = ctx.resetTransform; ctx.__originalClip = ctx.clip; ctx.__originalMoveTo = ctx.moveTo; ctx.__originalLineTo = ctx.lineTo; ctx.__originalBezierCurveTo = ctx.bezierCurveTo; ctx.__originalRect = ctx.rect; ctx.__originalClosePath = ctx.closePath; ctx.__originalBeginPath = ctx.beginPath; ctx._removeMirroring = () => { ctx.save = ctx.__originalSave; ctx.restore = ctx.__originalRestore; ctx.rotate = ctx.__originalRotate; ctx.scale = ctx.__originalScale; ctx.translate = ctx.__originalTranslate; ctx.transform = ctx.__originalTransform; ctx.setTransform = ctx.__originalSetTransform; ctx.resetTransform = ctx.__originalResetTransform; ctx.clip = ctx.__originalClip; ctx.moveTo = ctx.__originalMoveTo; ctx.lineTo = ctx.__originalLineTo; ctx.bezierCurveTo = ctx.__originalBezierCurveTo; ctx.rect = ctx.__originalRect; ctx.closePath = ctx.__originalClosePath; ctx.beginPath = ctx.__originalBeginPath; delete ctx._removeMirroring; }; ctx.save = function ctxSave() { destCtx.save(); this.__originalSave(); }; ctx.restore = function ctxRestore() { destCtx.restore(); this.__originalRestore(); }; ctx.translate = function ctxTranslate(x, y) { destCtx.translate(x, y); this.__originalTranslate(x, y); }; ctx.scale = function ctxScale(x, y) { destCtx.scale(x, y); this.__originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { destCtx.transform(a, b, c, d, e, f); this.__originalTransform(a, b, c, d, e, f); }; ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { destCtx.setTransform(a, b, c, d, e, f); this.__originalSetTransform(a, b, c, d, e, f); }; ctx.resetTransform = function ctxResetTransform() { destCtx.resetTransform(); this.__originalResetTransform(); }; ctx.rotate = function ctxRotate(angle) { destCtx.rotate(angle); this.__originalRotate(angle); }; ctx.clip = function ctxRotate(rule) { destCtx.clip(rule); this.__originalClip(rule); }; ctx.moveTo = function(x, y) { destCtx.moveTo(x, y); this.__originalMoveTo(x, y); }; ctx.lineTo = function(x, y) { destCtx.lineTo(x, y); this.__originalLineTo(x, y); }; ctx.bezierCurveTo = function(cp1x, cp1y, cp2x, cp2y, x, y) { destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); }; ctx.rect = function(x, y, width, height) { destCtx.rect(x, y, width, height); this.__originalRect(x, y, width, height); }; ctx.closePath = function() { destCtx.closePath(); this.__originalClosePath(); }; ctx.beginPath = function() { destCtx.beginPath(); this.__originalBeginPath(); }; } var CachedCanvases = class { constructor(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = /* @__PURE__ */ Object.create(null); } getCanvas(id, width, height) { let canvasEntry; if (this.cache[id] !== void 0) { canvasEntry = this.cache[id]; this.canvasFactory.reset(canvasEntry, width, height); } else { canvasEntry = this.canvasFactory.create(width, height); this.cache[id] = canvasEntry; } return canvasEntry; } delete(id) { delete this.cache[id]; } clear() { for (const id in this.cache) { const canvasEntry = this.cache[id]; this.canvasFactory.destroy(canvasEntry); delete this.cache[id]; } } }; function drawImageAtIntegerCoords(ctx, srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH) { const [a, b, c, d, tx, ty] = getCurrentTransform(ctx); if (b === 0 && c === 0) { const tlX = destX * a + tx; const rTlX = Math.round(tlX); const tlY = destY * d + ty; const rTlY = Math.round(tlY); const brX = (destX + destW) * a + tx; const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; const brY = (destY + destH) * d + ty; const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; ctx.setTransform(Math.sign(a), 0, 0, Math.sign(d), rTlX, rTlY); ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rWidth, rHeight); ctx.setTransform(a, b, c, d, tx, ty); return [rWidth, rHeight]; } if (a === 0 && d === 0) { const tlX = destY * c + tx; const rTlX = Math.round(tlX); const tlY = destX * b + ty; const rTlY = Math.round(tlY); const brX = (destY + destH) * c + tx; const rWidth = Math.abs(Math.round(brX) - rTlX) || 1; const brY = (destX + destW) * b + ty; const rHeight = Math.abs(Math.round(brY) - rTlY) || 1; ctx.setTransform(0, Math.sign(b), Math.sign(c), 0, rTlX, rTlY); ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, 0, 0, rHeight, rWidth); ctx.setTransform(a, b, c, d, tx, ty); return [rHeight, rWidth]; } ctx.drawImage(srcImg, srcX, srcY, srcW, srcH, destX, destY, destW, destH); const scaleX = Math.hypot(a, b); const scaleY = Math.hypot(c, d); return [scaleX * destW, scaleY * destH]; } function compileType3Glyph(imgData) { const { width, height } = imgData; if (width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE) { return null; } const POINT_TO_PROCESS_LIMIT = 1e3; const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); const width1 = width + 1; let points = new Uint8Array(width1 * (height + 1)); let i, j, j0; const lineSize = width + 7 & ~7; let data = new Uint8Array(lineSize * height), pos = 0; for (const elem of imgData.data) { let mask = 128; while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } let count = 0; pos = 0; if (data[pos] !== 0) { points[0] = 1; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j] = data[pos] ? 2 : 1; ++count; } pos++; } if (data[pos] !== 0) { points[j] = 2; ++count; } for (i = 1; i < height; i++) { pos = i * lineSize; j0 = i * width1; if (data[pos - lineSize] !== data[pos]) { points[j0] = data[pos] ? 1 : 8; ++count; } let sum2 = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); for (j = 1; j < width; j++) { sum2 = (sum2 >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); if (POINT_TYPES[sum2]) { points[j0 + j] = POINT_TYPES[sum2]; ++count; } pos++; } if (data[pos - lineSize] !== data[pos]) { points[j0 + j] = data[pos] ? 2 : 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } } pos = lineSize * (height - 1); j0 = i * width1; if (data[pos] !== 0) { points[j0] = 8; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j0 + j] = data[pos] ? 4 : 8; ++count; } pos++; } if (data[pos] !== 0) { points[j0 + j] = 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); const path = new Path2D(); for (i = 0; count && i <= height; i++) { let p = i * width1; const end = p + width; while (p < end && !points[p]) { p++; } if (p === end) { continue; } path.moveTo(p % width1, i); const p0 = p; let type = points[p]; do { const step = steps[type]; do { p += step; } while (!points[p]); const pp = points[p]; if (pp !== 5 && pp !== 10) { type = pp; points[p] = 0; } else { type = pp & 51 * type >> 4; points[p] &= type >> 2 | type << 2; } path.lineTo(p % width1, p / width1 | 0); if (!points[p]) { --count; } } while (p0 !== p); --i; } data = null; points = null; const drawOutline = function(c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); c.fill(path); c.beginPath(); c.restore(); }; return drawOutline; } var CanvasExtraState = class { constructor(width, height) { this.alphaIsShape = false; this.fontSize = 0; this.fontSizeScale = 1; this.textMatrix = IDENTITY_MATRIX; this.textMatrixScale = 1; this.fontMatrix = FONT_IDENTITY_MATRIX; this.leading = 0; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRenderingMode = TextRenderingMode.FILL; this.textRise = 0; this.fillColor = "#000000"; this.strokeColor = "#000000"; this.patternFill = false; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.activeSMask = null; this.transferMaps = "none"; this.startNewPathAndClipBox([0, 0, width, height]); } clone() { const clone = Object.create(this); clone.clipBox = this.clipBox.slice(); return clone; } setCurrentPoint(x, y) { this.x = x; this.y = y; } updatePathMinMax(transform, x, y) { [x, y] = Util.applyTransform([x, y], transform); this.minX = Math.min(this.minX, x); this.minY = Math.min(this.minY, y); this.maxX = Math.max(this.maxX, x); this.maxY = Math.max(this.maxY, y); } updateRectMinMax(transform, rect) { const p1 = Util.applyTransform(rect, transform); const p2 = Util.applyTransform(rect.slice(2), transform); const p3 = Util.applyTransform([rect[0], rect[3]], transform); const p4 = Util.applyTransform([rect[2], rect[1]], transform); this.minX = Math.min(this.minX, p1[0], p2[0], p3[0], p4[0]); this.minY = Math.min(this.minY, p1[1], p2[1], p3[1], p4[1]); this.maxX = Math.max(this.maxX, p1[0], p2[0], p3[0], p4[0]); this.maxY = Math.max(this.maxY, p1[1], p2[1], p3[1], p4[1]); } updateScalingPathMinMax(transform, minMax) { Util.scaleMinMax(transform, minMax); this.minX = Math.min(this.minX, minMax[0]); this.minY = Math.min(this.minY, minMax[1]); this.maxX = Math.max(this.maxX, minMax[2]); this.maxY = Math.max(this.maxY, minMax[3]); } updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3, minMax) { const box = Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3, minMax); if (minMax) { return; } this.updateRectMinMax(transform, box); } getPathBoundingBox(pathType = PathType.FILL, transform = null) { const box = [this.minX, this.minY, this.maxX, this.maxY]; if (pathType === PathType.STROKE) { if (!transform) { unreachable("Stroke bounding box must include transform."); } const scale = Util.singularValueDecompose2dScale(transform); const xStrokePad = scale[0] * this.lineWidth / 2; const yStrokePad = scale[1] * this.lineWidth / 2; box[0] -= xStrokePad; box[1] -= yStrokePad; box[2] += xStrokePad; box[3] += yStrokePad; } return box; } updateClipFromPath() { const intersect = Util.intersect(this.clipBox, this.getPathBoundingBox()); this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); } isEmptyClip() { return this.minX === Infinity; } startNewPathAndClipBox(box) { this.clipBox = box; this.minX = Infinity; this.minY = Infinity; this.maxX = 0; this.maxY = 0; } getClippedPathBoundingBox(pathType = PathType.FILL, transform = null) { return Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); } }; function putBinaryImageData(ctx, imgData) { if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } const height = imgData.height, width = imgData.width; const partialChunkHeight = height % FULL_CHUNK_HEIGHT; const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); let srcPos = 0, destPos; const src = imgData.data; const dest = chunkImgData.data; let i, j, thisChunkHeight, elemsInThisChunk; if (imgData.kind === util_ImageKind.GRAYSCALE_1BPP) { const srcLength = src.byteLength; const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); const dest32DataLength = dest32.length; const fullSrcDiff = width + 7 >> 3; const white = 4294967295; const black = util_FeatureTest.isLittleEndian ? 4278190080 : 255; for (i = 0; i < totalChunks; i++) { thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; destPos = 0; for (j = 0; j < thisChunkHeight; j++) { const srcDiff = srcLength - srcPos; let k = 0; const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; const kEndUnrolled = kEnd & ~7; let mask = 0; let srcByte = 0; for (; k < kEndUnrolled; k += 8) { srcByte = src[srcPos++]; dest32[destPos++] = srcByte & 128 ? white : black; dest32[destPos++] = srcByte & 64 ? white : black; dest32[destPos++] = srcByte & 32 ? white : black; dest32[destPos++] = srcByte & 16 ? white : black; dest32[destPos++] = srcByte & 8 ? white : black; dest32[destPos++] = srcByte & 4 ? white : black; dest32[destPos++] = srcByte & 2 ? white : black; dest32[destPos++] = srcByte & 1 ? white : black; } for (; k < kEnd; k++) { if (mask === 0) { srcByte = src[srcPos++]; mask = 128; } dest32[destPos++] = srcByte & mask ? white : black; mask >>= 1; } } while (destPos < dest32DataLength) { dest32[destPos++] = 0; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else if (imgData.kind === util_ImageKind.RGBA_32BPP) { j = 0; elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; for (i = 0; i < fullChunks; i++) { dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); srcPos += elemsInThisChunk; ctx.putImageData(chunkImgData, 0, j); j += FULL_CHUNK_HEIGHT; } if (i < totalChunks) { elemsInThisChunk = width * partialChunkHeight * 4; dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); ctx.putImageData(chunkImgData, 0, j); } } else if (imgData.kind === util_ImageKind.RGB_24BPP) { thisChunkHeight = FULL_CHUNK_HEIGHT; elemsInThisChunk = width * thisChunkHeight; for (i = 0; i < totalChunks; i++) { if (i >= fullChunks) { thisChunkHeight = partialChunkHeight; elemsInThisChunk = width * thisChunkHeight; } destPos = 0; for (j = elemsInThisChunk; j--; ) { dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = 255; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else { throw new Error(`bad image kind: ${imgData.kind}`); } } function putBinaryImageMask(ctx, imgData) { if (imgData.bitmap) { ctx.drawImage(imgData.bitmap, 0, 0); return; } const height = imgData.height, width = imgData.width; const partialChunkHeight = height % FULL_CHUNK_HEIGHT; const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); let srcPos = 0; const src = imgData.data; const dest = chunkImgData.data; for (let i = 0; i < totalChunks; i++) { const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; ({ srcPos } = convertBlackAndWhiteToRGBA({ src, srcPos, dest, width, height: thisChunkHeight, nonBlackColor: 0 })); ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } function copyCtxState(sourceCtx, destCtx) { const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"]; for (const property of properties) { if (sourceCtx[property] !== void 0) { destCtx[property] = sourceCtx[property]; } } if (sourceCtx.setLineDash !== void 0) { destCtx.setLineDash(sourceCtx.getLineDash()); destCtx.lineDashOffset = sourceCtx.lineDashOffset; } } function resetCtxToDefault(ctx) { ctx.strokeStyle = ctx.fillStyle = "#000000"; ctx.fillRule = "nonzero"; ctx.globalAlpha = 1; ctx.lineWidth = 1; ctx.lineCap = "butt"; ctx.lineJoin = "miter"; ctx.miterLimit = 10; ctx.globalCompositeOperation = "source-over"; ctx.font = "10px sans-serif"; if (ctx.setLineDash !== void 0) { ctx.setLineDash([]); ctx.lineDashOffset = 0; } if (!isNodeJS) { const { filter } = ctx; if (filter !== "none" && filter !== "") { ctx.filter = "none"; } } } function getImageSmoothingEnabled(transform, interpolate) { if (interpolate) { return true; } const scale = Util.singularValueDecompose2dScale(transform); scale[0] = Math.fround(scale[0]); scale[1] = Math.fround(scale[1]); const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * PixelsPerInch.PDF_TO_CSS_UNITS); return scale[0] <= actualScale && scale[1] <= actualScale; } var LINE_CAP_STYLES = ["butt", "round", "square"]; var LINE_JOIN_STYLES = ["miter", "round", "bevel"]; var NORMAL_CLIP = {}; var EO_CLIP = {}; var _restoreInitialState, restoreInitialState_fn, _drawFilter, drawFilter_fn; var _CanvasGraphics = class { constructor(canvasCtx, commonObjs, objs, canvasFactory, filterFactory, { optionalContentConfig, markedContentStack = null }, annotationCanvasMap, pageColors) { __privateAdd(this, _restoreInitialState); __privateAdd(this, _drawFilter); this.ctx = canvasCtx; this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); this.stateStack = []; this.pendingClip = null; this.pendingEOFill = false; this.res = null; this.xobjs = null; this.commonObjs = commonObjs; this.objs = objs; this.canvasFactory = canvasFactory; this.filterFactory = filterFactory; this.groupStack = []; this.processingType3 = null; this.baseTransform = null; this.baseTransformStack = []; this.groupLevel = 0; this.smaskStack = []; this.smaskCounter = 0; this.tempSMask = null; this.suspendedCtx = null; this.contentVisible = true; this.markedContentStack = markedContentStack || []; this.optionalContentConfig = optionalContentConfig; this.cachedCanvases = new CachedCanvases(this.canvasFactory); this.cachedPatterns = /* @__PURE__ */ new Map(); this.annotationCanvasMap = annotationCanvasMap; this.viewportScale = 1; this.outputScaleX = 1; this.outputScaleY = 1; this.pageColors = pageColors; this._cachedScaleForStroking = [-1, 0]; this._cachedGetSinglePixelWidth = null; this._cachedBitmapsMap = /* @__PURE__ */ new Map(); } getObject(data, fallback = null) { if (typeof data === "string") { return data.startsWith("g_") ? this.commonObjs.get(data) : this.objs.get(data); } return fallback; } beginDrawing({ transform, viewport, transparency = false, background = null }) { const width = this.ctx.canvas.width; const height = this.ctx.canvas.height; const savedFillStyle = this.ctx.fillStyle; this.ctx.fillStyle = background || "#ffffff"; this.ctx.fillRect(0, 0, width, height); this.ctx.fillStyle = savedFillStyle; if (transparency) { const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height); this.compositeCtx = this.ctx; this.transparentCanvas = transparentCanvas.canvas; this.ctx = transparentCanvas.context; this.ctx.save(); this.ctx.transform(...getCurrentTransform(this.compositeCtx)); } this.ctx.save(); resetCtxToDefault(this.ctx); if (transform) { this.ctx.transform(...transform); this.outputScaleX = transform[0]; this.outputScaleY = transform[0]; } this.ctx.transform(...viewport.transform); this.viewportScale = viewport.scale; this.baseTransform = getCurrentTransform(this.ctx); } executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { const argsArray = operatorList.argsArray; const fnArray = operatorList.fnArray; let i = executionStartIdx || 0; const argsArrayLen = argsArray.length; if (argsArrayLen === i) { return i; } const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; let steps = 0; const commonObjs = this.commonObjs; const objs = this.objs; let fnId; while (true) { if (stepper !== void 0 && i === stepper.nextBreakPoint) { stepper.breakIt(i, continueCallback); return i; } fnId = fnArray[i]; if (fnId !== OPS.dependency) { this[fnId].apply(this, argsArray[i]); } else { for (const depObjId of argsArray[i]) { const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; if (!objsPool.has(depObjId)) { objsPool.get(depObjId, continueCallback); return i; } } } i++; if (i === argsArrayLen) { return i; } if (chunkOperations && ++steps > EXECUTION_STEPS) { if (Date.now() > endTime) { continueCallback(); return i; } steps = 0; } } } endDrawing() { __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this); this.cachedCanvases.clear(); this.cachedPatterns.clear(); for (const cache of this._cachedBitmapsMap.values()) { for (const canvas of cache.values()) { if (typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement) { canvas.width = canvas.height = 0; } } cache.clear(); } this._cachedBitmapsMap.clear(); __privateMethod(this, _drawFilter, drawFilter_fn).call(this); } _scaleImage(img, inverseTransform) { const width = img.width; const height = img.height; let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); let paintWidth = width, paintHeight = height; let tmpCanvasId = "prescale1"; let tmpCanvas, tmpCtx; while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { let newWidth = paintWidth, newHeight = paintHeight; if (widthScale > 2 && paintWidth > 1) { newWidth = paintWidth >= 16384 ? Math.floor(paintWidth / 2) - 1 || 1 : Math.ceil(paintWidth / 2); widthScale /= paintWidth / newWidth; } if (heightScale > 2 && paintHeight > 1) { newHeight = paintHeight >= 16384 ? Math.floor(paintHeight / 2) - 1 || 1 : Math.ceil(paintHeight) / 2; heightScale /= paintHeight / newHeight; } tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, newWidth, newHeight); tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); img = tmpCanvas.canvas; paintWidth = newWidth; paintHeight = newHeight; tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; } return { img, paintWidth, paintHeight }; } _createMaskCanvas(img) { const ctx = this.ctx; const { width, height } = img; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; const currentTransform = getCurrentTransform(ctx); let cache, cacheKey, scaled, maskCanvas; if ((img.bitmap || img.data) && img.count > 1) { const mainKey = img.bitmap || img.data.buffer; cacheKey = JSON.stringify(isPatternFill ? currentTransform : [currentTransform.slice(0, 4), fillColor]); cache = this._cachedBitmapsMap.get(mainKey); if (!cache) { cache = /* @__PURE__ */ new Map(); this._cachedBitmapsMap.set(mainKey, cache); } const cachedImage = cache.get(cacheKey); if (cachedImage && !isPatternFill) { const offsetX2 = Math.round(Math.min(currentTransform[0], currentTransform[2]) + currentTransform[4]); const offsetY2 = Math.round(Math.min(currentTransform[1], currentTransform[3]) + currentTransform[5]); return { canvas: cachedImage, offsetX: offsetX2, offsetY: offsetY2 }; } scaled = cachedImage; } if (!scaled) { maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); putBinaryImageMask(maskCanvas.context, img); } let maskToCanvas = Util.transform(currentTransform, [1 / width, 0, 0, -1 / height, 0, 0]); maskToCanvas = Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); const [minX, minY, maxX, maxY] = Util.getAxialAlignedBoundingBox([0, 0, width, height], maskToCanvas); const drawnWidth = Math.round(maxX - minX) || 1; const drawnHeight = Math.round(maxY - minY) || 1; const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight); const fillCtx = fillCanvas.context; const offsetX = minX; const offsetY = minY; fillCtx.translate(-offsetX, -offsetY); fillCtx.transform(...maskToCanvas); if (!scaled) { scaled = this._scaleImage(maskCanvas.canvas, getCurrentTransformInverse(fillCtx)); scaled = scaled.img; if (cache && isPatternFill) { cache.set(cacheKey, scaled); } } fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(fillCtx), img.interpolate); drawImageAtIntegerCoords(fillCtx, scaled, 0, 0, scaled.width, scaled.height, 0, 0, width, height); fillCtx.globalCompositeOperation = "source-in"; const inverse = Util.transform(getCurrentTransformInverse(fillCtx), [1, 0, 0, 1, -offsetX, -offsetY]); fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, PathType.FILL) : fillColor; fillCtx.fillRect(0, 0, width, height); if (cache && !isPatternFill) { this.cachedCanvases.delete("fillCanvas"); cache.set(cacheKey, fillCanvas.canvas); } return { canvas: fillCanvas.canvas, offsetX: Math.round(offsetX), offsetY: Math.round(offsetY) }; } setLineWidth(width) { if (width !== this.current.lineWidth) { this._cachedScaleForStroking[0] = -1; } this.current.lineWidth = width; this.ctx.lineWidth = width; } setLineCap(style) { this.ctx.lineCap = LINE_CAP_STYLES[style]; } setLineJoin(style) { this.ctx.lineJoin = LINE_JOIN_STYLES[style]; } setMiterLimit(limit) { this.ctx.miterLimit = limit; } setDash(dashArray, dashPhase) { const ctx = this.ctx; if (ctx.setLineDash !== void 0) { ctx.setLineDash(dashArray); ctx.lineDashOffset = dashPhase; } } setRenderingIntent(intent) { } setFlatness(flatness) { } setGState(states) { for (const [key, value] of states) { switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value[0], value[1]); break; case "CA": this.current.strokeAlpha = value; break; case "ca": this.current.fillAlpha = value; this.ctx.globalAlpha = value; break; case "BM": this.ctx.globalCompositeOperation = value; break; case "SMask": this.current.activeSMask = value ? this.tempSMask : null; this.tempSMask = null; this.checkSMaskState(); break; case "TR": this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(value); break; } } } get inSMaskMode() { return !!this.suspendedCtx; } checkSMaskState() { const inSMaskMode = this.inSMaskMode; if (this.current.activeSMask && !inSMaskMode) { this.beginSMaskMode(); } else if (!this.current.activeSMask && inSMaskMode) { this.endSMaskMode(); } } beginSMaskMode() { if (this.inSMaskMode) { throw new Error("beginSMaskMode called while already in smask mode"); } const drawnWidth = this.ctx.canvas.width; const drawnHeight = this.ctx.canvas.height; const cacheId = "smaskGroupAt" + this.groupLevel; const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); this.suspendedCtx = this.ctx; this.ctx = scratchCanvas.context; const ctx = this.ctx; ctx.setTransform(...getCurrentTransform(this.suspendedCtx)); copyCtxState(this.suspendedCtx, ctx); mirrorContextOperations(ctx, this.suspendedCtx); this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); } endSMaskMode() { if (!this.inSMaskMode) { throw new Error("endSMaskMode called while not in smask mode"); } this.ctx._removeMirroring(); copyCtxState(this.ctx, this.suspendedCtx); this.ctx = this.suspendedCtx; this.suspendedCtx = null; } compose(dirtyBox) { if (!this.current.activeSMask) { return; } if (!dirtyBox) { dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; } else { dirtyBox[0] = Math.floor(dirtyBox[0]); dirtyBox[1] = Math.floor(dirtyBox[1]); dirtyBox[2] = Math.ceil(dirtyBox[2]); dirtyBox[3] = Math.ceil(dirtyBox[3]); } const smask = this.current.activeSMask; const suspendedCtx = this.suspendedCtx; this.composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); this.ctx.restore(); } composeSMask(ctx, smask, layerCtx, layerBox) { const layerOffsetX = layerBox[0]; const layerOffsetY = layerBox[1]; const layerWidth = layerBox[2] - layerOffsetX; const layerHeight = layerBox[3] - layerOffsetY; if (layerWidth === 0 || layerHeight === 0) { return; } this.genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); ctx.save(); ctx.globalAlpha = 1; ctx.globalCompositeOperation = "source-over"; ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(layerCtx.canvas, 0, 0); ctx.restore(); } genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { let maskCanvas = maskCtx.canvas; let maskX = layerOffsetX - maskOffsetX; let maskY = layerOffsetY - maskOffsetY; if (backdrop) { if (maskX < 0 || maskY < 0 || maskX + width > maskCanvas.width || maskY + height > maskCanvas.height) { const canvas = this.cachedCanvases.getCanvas("maskExtension", width, height); const ctx = canvas.context; ctx.drawImage(maskCanvas, -maskX, -maskY); if (backdrop.some((c) => c !== 0)) { ctx.globalCompositeOperation = "destination-atop"; ctx.fillStyle = Util.makeHexColor(...backdrop); ctx.fillRect(0, 0, width, height); ctx.globalCompositeOperation = "source-over"; } maskCanvas = canvas.canvas; maskX = maskY = 0; } else if (backdrop.some((c) => c !== 0)) { maskCtx.save(); maskCtx.globalAlpha = 1; maskCtx.setTransform(1, 0, 0, 1, 0, 0); const clip2 = new Path2D(); clip2.rect(maskX, maskY, width, height); maskCtx.clip(clip2); maskCtx.globalCompositeOperation = "destination-atop"; maskCtx.fillStyle = Util.makeHexColor(...backdrop); maskCtx.fillRect(maskX, maskY, width, height); maskCtx.restore(); } } layerCtx.save(); layerCtx.globalAlpha = 1; layerCtx.setTransform(1, 0, 0, 1, 0, 0); if (subtype === "Alpha" && transferMap) { layerCtx.filter = this.filterFactory.addAlphaFilter(transferMap); } else if (subtype === "Luminosity") { layerCtx.filter = this.filterFactory.addLuminosityFilter(transferMap); } const clip = new Path2D(); clip.rect(layerOffsetX, layerOffsetY, width, height); layerCtx.clip(clip); layerCtx.globalCompositeOperation = "destination-in"; layerCtx.drawImage(maskCanvas, maskX, maskY, width, height, layerOffsetX, layerOffsetY, width, height); layerCtx.restore(); } save() { if (this.inSMaskMode) { copyCtxState(this.ctx, this.suspendedCtx); this.suspendedCtx.save(); } else { this.ctx.save(); } const old = this.current; this.stateStack.push(old); this.current = old.clone(); } restore() { if (this.stateStack.length === 0 && this.inSMaskMode) { this.endSMaskMode(); } if (this.stateStack.length !== 0) { this.current = this.stateStack.pop(); if (this.inSMaskMode) { this.suspendedCtx.restore(); copyCtxState(this.suspendedCtx, this.ctx); } else { this.ctx.restore(); } this.checkSMaskState(); this.pendingClip = null; this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; } } transform(a, b, c, d, e, f) { this.ctx.transform(a, b, c, d, e, f); this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; } constructPath(ops, args, minMax) { const ctx = this.ctx; const current = this.current; let x = current.x, y = current.y; let startX, startY; const currentTransform = getCurrentTransform(ctx); const isScalingMatrix = currentTransform[0] === 0 && currentTransform[3] === 0 || currentTransform[1] === 0 && currentTransform[2] === 0; const minMaxForBezier = isScalingMatrix ? minMax.slice(0) : null; for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { switch (ops[i] | 0) { case OPS.rectangle: x = args[j++]; y = args[j++]; const width = args[j++]; const height = args[j++]; const xw = x + width; const yh = y + height; ctx.moveTo(x, y); if (width === 0 || height === 0) { ctx.lineTo(xw, yh); } else { ctx.lineTo(xw, y); ctx.lineTo(xw, yh); ctx.lineTo(x, yh); } if (!isScalingMatrix) { current.updateRectMinMax(currentTransform, [x, y, xw, yh]); } ctx.closePath(); break; case OPS.moveTo: x = args[j++]; y = args[j++]; ctx.moveTo(x, y); if (!isScalingMatrix) { current.updatePathMinMax(currentTransform, x, y); } break; case OPS.lineTo: x = args[j++]; y = args[j++]; ctx.lineTo(x, y); if (!isScalingMatrix) { current.updatePathMinMax(currentTransform, x, y); } break; case OPS.curveTo: startX = x; startY = y; x = args[j + 4]; y = args[j + 5]; ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y, minMaxForBezier); j += 6; break; case OPS.curveTo2: startX = x; startY = y; ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); current.updateCurvePathMinMax(currentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3], minMaxForBezier); x = args[j + 2]; y = args[j + 3]; j += 4; break; case OPS.curveTo3: startX = x; startY = y; x = args[j + 2]; y = args[j + 3]; ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); current.updateCurvePathMinMax(currentTransform, startX, startY, args[j], args[j + 1], x, y, x, y, minMaxForBezier); j += 4; break; case OPS.closePath: ctx.closePath(); break; } } if (isScalingMatrix) { current.updateScalingPathMinMax(currentTransform, minMaxForBezier); } current.setCurrentPoint(x, y); } closePath() { this.ctx.closePath(); } stroke(consumePath = true) { const ctx = this.ctx; const strokeColor = this.current.strokeColor; ctx.globalAlpha = this.current.strokeAlpha; if (this.contentVisible) { if (typeof strokeColor === "object" && (strokeColor == null ? void 0 : strokeColor.getPattern)) { ctx.save(); ctx.strokeStyle = strokeColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.STROKE); this.rescaleAndStroke(false); ctx.restore(); } else { this.rescaleAndStroke(true); } } if (consumePath) { this.consumePath(this.current.getClippedPathBoundingBox()); } ctx.globalAlpha = this.current.fillAlpha; } closeStroke() { this.closePath(); this.stroke(); } fill(consumePath = true) { const ctx = this.ctx; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; let needRestore = false; if (isPatternFill) { ctx.save(); ctx.fillStyle = fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); needRestore = true; } const intersect = this.current.getClippedPathBoundingBox(); if (this.contentVisible && intersect !== null) { if (this.pendingEOFill) { ctx.fill("evenodd"); this.pendingEOFill = false; } else { ctx.fill(); } } if (needRestore) { ctx.restore(); } if (consumePath) { this.consumePath(intersect); } } eoFill() { this.pendingEOFill = true; this.fill(); } fillStroke() { this.fill(false); this.stroke(false); this.consumePath(); } eoFillStroke() { this.pendingEOFill = true; this.fillStroke(); } closeFillStroke() { this.closePath(); this.fillStroke(); } closeEOFillStroke() { this.pendingEOFill = true; this.closePath(); this.fillStroke(); } endPath() { this.consumePath(); } clip() { this.pendingClip = NORMAL_CLIP; } eoClip() { this.pendingClip = EO_CLIP; } beginText() { this.current.textMatrix = IDENTITY_MATRIX; this.current.textMatrixScale = 1; this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; } endText() { const paths = this.pendingTextPaths; const ctx = this.ctx; if (paths === void 0) { ctx.beginPath(); return; } ctx.save(); ctx.beginPath(); for (const path of paths) { ctx.setTransform(...path.transform); ctx.translate(path.x, path.y); path.addToPath(ctx, path.fontSize); } ctx.restore(); ctx.clip(); ctx.beginPath(); delete this.pendingTextPaths; } setCharSpacing(spacing) { this.current.charSpacing = spacing; } setWordSpacing(spacing) { this.current.wordSpacing = spacing; } setHScale(scale) { this.current.textHScale = scale / 100; } setLeading(leading) { this.current.leading = -leading; } setFont(fontRefName, size) { var _a2; const fontObj = this.commonObjs.get(fontRefName); const current = this.current; if (!fontObj) { throw new Error(`Can't find font for ${fontRefName}`); } current.fontMatrix = fontObj.fontMatrix || FONT_IDENTITY_MATRIX; if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { warn("Invalid font matrix for font " + fontRefName); } if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } this.current.font = fontObj; this.current.fontSize = size; if (fontObj.isType3Font) { return; } const name = fontObj.loadedName || "sans-serif"; const typeface = ((_a2 = fontObj.systemFontInfo) == null ? void 0 : _a2.css) || `"${name}", ${fontObj.fallbackName}`; let bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } const italic = fontObj.italic ? "italic" : "normal"; let browserFontSize = size; if (size < MIN_FONT_SIZE) { browserFontSize = MIN_FONT_SIZE; } else if (size > MAX_FONT_SIZE) { browserFontSize = MAX_FONT_SIZE; } this.current.fontSizeScale = size / browserFontSize; this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; } setTextRenderingMode(mode) { this.current.textRenderingMode = mode; } setTextRise(rise) { this.current.textRise = rise; } moveText(x, y) { this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; } setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); } setTextMatrix(a, b, c, d, e, f) { this.current.textMatrix = [a, b, c, d, e, f]; this.current.textMatrixScale = Math.hypot(a, b); this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; } nextLine() { this.moveText(0, this.current.leading); } paintChar(character, x, y, patternTransform) { const ctx = this.ctx; const current = this.current; const font = current.font; const textRenderingMode = current.textRenderingMode; const fontSize = current.fontSize / current.fontSizeScale; const fillStrokeMode = textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; const isAddToPathSet = !!(textRenderingMode & TextRenderingMode.ADD_TO_PATH_FLAG); const patternFill = current.patternFill && !font.missingFile; let addToPath; if (font.disableFontFace || isAddToPathSet || patternFill) { addToPath = font.getPathGenerator(this.commonObjs, character); } if (font.disableFontFace || patternFill) { ctx.save(); ctx.translate(x, y); ctx.beginPath(); addToPath(ctx, fontSize); if (patternTransform) { ctx.setTransform(...patternTransform); } if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.fill(); } if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.stroke(); } ctx.restore(); } else { if (fillStrokeMode === TextRenderingMode.FILL || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.fillText(character, x, y); } if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { ctx.strokeText(character, x, y); } } if (isAddToPathSet) { const paths = this.pendingTextPaths || (this.pendingTextPaths = []); paths.push({ transform: getCurrentTransform(ctx), x, y, fontSize, addToPath }); } } get isFontSubpixelAAEnabled() { const { context: ctx } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); ctx.scale(1.5, 1); ctx.fillText("I", 0, 10); const data = ctx.getImageData(0, 0, 10, 10).data; let enabled = false; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0 && data[i] < 255) { enabled = true; break; } } return shadow(this, "isFontSubpixelAAEnabled", enabled); } showText(glyphs) { const current = this.current; const font = current.font; if (font.isType3Font) { return this.showType3Text(glyphs); } const fontSize = current.fontSize; if (fontSize === 0) { return void 0; } const ctx = this.ctx; const fontSizeScale = current.fontSizeScale; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const fontDirection = current.fontDirection; const textHScale = current.textHScale * fontDirection; const glyphsLength = glyphs.length; const vertical = font.vertical; const spacingDir = vertical ? 1 : -1; const defaultVMetrics = font.defaultVMetrics; const widthAdvanceScale = fontSize * current.fontMatrix[0]; const simpleFillText = current.textRenderingMode === TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; ctx.save(); ctx.transform(...current.textMatrix); ctx.translate(current.x, current.y + current.textRise); if (fontDirection > 0) { ctx.scale(textHScale, -1); } else { ctx.scale(textHScale, 1); } let patternTransform; if (current.patternFill) { ctx.save(); const pattern = current.fillColor.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.FILL); patternTransform = getCurrentTransform(ctx); ctx.restore(); ctx.fillStyle = pattern; } let lineWidth = current.lineWidth; const scale = current.textMatrixScale; if (scale === 0 || lineWidth === 0) { const fillStrokeMode = current.textRenderingMode & TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === TextRenderingMode.STROKE || fillStrokeMode === TextRenderingMode.FILL_STROKE) { lineWidth = this.getSinglePixelWidth(); } } else { lineWidth /= scale; } if (fontSizeScale !== 1) { ctx.scale(fontSizeScale, fontSizeScale); lineWidth /= fontSizeScale; } ctx.lineWidth = lineWidth; if (font.isInvalidPDFjsFont) { const chars = []; let width = 0; for (const glyph of glyphs) { chars.push(glyph.unicode); width += glyph.width; } ctx.fillText(chars.join(""), 0, 0); current.x += width * widthAdvanceScale * textHScale; ctx.restore(); this.compose(); return void 0; } let x = 0, i; for (i = 0; i < glyphsLength; ++i) { const glyph = glyphs[i]; if (typeof glyph === "number") { x += spacingDir * glyph * fontSize / 1e3; continue; } let restoreNeeded = false; const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const character = glyph.fontChar; const accent = glyph.accent; let scaledX, scaledY; let width = glyph.width; if (vertical) { const vmetric = glyph.vmetric || defaultVMetrics; const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; const vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (font.remeasure && width > 0) { const measuredWidth = ctx.measureText(character).width * 1e3 / fontSize * fontSizeScale; if (width < measuredWidth && this.isFontSubpixelAAEnabled) { const characterScaleX = width / measuredWidth; restoreNeeded = true; ctx.save(); ctx.scale(characterScaleX, 1); scaledX /= characterScaleX; } else if (width !== measuredWidth) { scaledX += (width - measuredWidth) / 2e3 * fontSize / fontSizeScale; } } if (this.contentVisible && (glyph.isInFont || font.missingFile)) { if (simpleFillText && !accent) { ctx.fillText(character, scaledX, scaledY); } else { this.paintChar(character, scaledX, scaledY, patternTransform); if (accent) { const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); } } } const charWidth = vertical ? width * widthAdvanceScale - spacing * fontDirection : width * widthAdvanceScale + spacing * fontDirection; x += charWidth; if (restoreNeeded) { ctx.restore(); } } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } ctx.restore(); this.compose(); return void 0; } showType3Text(glyphs) { const ctx = this.ctx; const current = this.current; const font = current.font; const fontSize = current.fontSize; const fontDirection = current.fontDirection; const spacingDir = font.vertical ? 1 : -1; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const textHScale = current.textHScale * fontDirection; const fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX; const glyphsLength = glyphs.length; const isTextInvisible = current.textRenderingMode === TextRenderingMode.INVISIBLE; let i, glyph, width, spacingLength; if (isTextInvisible || fontSize === 0) { return; } this._cachedScaleForStroking[0] = -1; this._cachedGetSinglePixelWidth = null; ctx.save(); ctx.transform(...current.textMatrix); ctx.translate(current.x, current.y); ctx.scale(textHScale, fontDirection); for (i = 0; i < glyphsLength; ++i) { glyph = glyphs[i]; if (typeof glyph === "number") { spacingLength = spacingDir * glyph * fontSize / 1e3; this.ctx.translate(spacingLength, 0); current.x += spacingLength * textHScale; continue; } const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const operatorList = font.charProcOperatorList[glyph.operatorListId]; if (!operatorList) { warn(`Type3 character "${glyph.operatorListId}" is not available.`); continue; } if (this.contentVisible) { this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform(...fontMatrix); this.executeOperatorList(operatorList); this.restore(); } const transformed = Util.applyTransform([glyph.width, 0], fontMatrix); width = transformed[0] * fontSize + spacing; ctx.translate(width, 0); current.x += width * textHScale; } ctx.restore(); this.processingType3 = null; } setCharWidth(xWidth, yWidth) { } setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { this.ctx.rect(llx, lly, urx - llx, ury - lly); this.ctx.clip(); this.endPath(); } getColorN_Pattern(IR) { let pattern; if (IR[0] === "TilingPattern") { const color2 = IR[1]; const baseTransform = this.baseTransform || getCurrentTransform(this.ctx); const canvasGraphicsFactory = { createCanvasGraphics: (ctx) => new _CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { optionalContentConfig: this.optionalContentConfig, markedContentStack: this.markedContentStack }) }; pattern = new TilingPattern(IR, color2, this.ctx, canvasGraphicsFactory, baseTransform); } else { pattern = this._getPattern(IR[1], IR[2]); } return pattern; } setStrokeColorN() { this.current.strokeColor = this.getColorN_Pattern(arguments); } setFillColorN() { this.current.fillColor = this.getColorN_Pattern(arguments); this.current.patternFill = true; } setStrokeRGBColor(r, g, b) { this.ctx.strokeStyle = this.current.strokeColor = Util.makeHexColor(r, g, b); } setStrokeTransparent() { this.ctx.strokeStyle = this.current.strokeColor = "transparent"; } setFillRGBColor(r, g, b) { this.ctx.fillStyle = this.current.fillColor = Util.makeHexColor(r, g, b); this.current.patternFill = false; } setFillTransparent() { this.ctx.fillStyle = this.current.fillColor = "transparent"; this.current.patternFill = false; } _getPattern(objId, matrix = null) { let pattern; if (this.cachedPatterns.has(objId)) { pattern = this.cachedPatterns.get(objId); } else { pattern = getShadingPattern(this.getObject(objId)); this.cachedPatterns.set(objId, pattern); } if (matrix) { pattern.matrix = matrix; } return pattern; } shadingFill(objId) { if (!this.contentVisible) { return; } const ctx = this.ctx; this.save(); const pattern = this._getPattern(objId); ctx.fillStyle = pattern.getPattern(ctx, this, getCurrentTransformInverse(ctx), PathType.SHADING); const inv = getCurrentTransformInverse(ctx); if (inv) { const { width, height } = ctx.canvas; const [x0, y0, x1, y1] = Util.getAxialAlignedBoundingBox([0, 0, width, height], inv); this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); } else { this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); } this.compose(this.current.getClippedPathBoundingBox()); this.restore(); } beginInlineImage() { unreachable("Should not call beginInlineImage"); } beginImageData() { unreachable("Should not call beginImageData"); } paintFormXObjectBegin(matrix, bbox) { if (!this.contentVisible) { return; } this.save(); this.baseTransformStack.push(this.baseTransform); if (matrix) { this.transform(...matrix); } this.baseTransform = getCurrentTransform(this.ctx); if (bbox) { const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; this.ctx.rect(bbox[0], bbox[1], width, height); this.current.updateRectMinMax(getCurrentTransform(this.ctx), bbox); this.clip(); this.endPath(); } } paintFormXObjectEnd() { if (!this.contentVisible) { return; } this.restore(); this.baseTransform = this.baseTransformStack.pop(); } beginGroup(group) { if (!this.contentVisible) { return; } this.save(); if (this.inSMaskMode) { this.endSMaskMode(); this.current.activeSMask = null; } const currentCtx = this.ctx; if (!group.isolated) { info("TODO: Support non-isolated groups."); } if (group.knockout) { warn("Knockout groups not supported."); } const currentTransform = getCurrentTransform(currentCtx); if (group.matrix) { currentCtx.transform(...group.matrix); } if (!group.bbox) { throw new Error("Bounding box is required."); } let bounds = Util.getAxialAlignedBoundingBox(group.bbox, getCurrentTransform(currentCtx)); const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; const offsetX = Math.floor(bounds[0]); const offsetY = Math.floor(bounds[1]); const drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); const drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); let cacheId = "groupAt" + this.groupLevel; if (group.smask) { cacheId += "_smask_" + this.smaskCounter++ % 2; } const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight); const groupCtx = scratchCanvas.context; groupCtx.translate(-offsetX, -offsetY); groupCtx.transform(...currentTransform); if (group.smask) { this.smaskStack.push({ canvas: scratchCanvas.canvas, context: groupCtx, offsetX, offsetY, subtype: group.smask.subtype, backdrop: group.smask.backdrop, transferMap: group.smask.transferMap || null, startTransformInverse: null }); } else { currentCtx.setTransform(1, 0, 0, 1, 0, 0); currentCtx.translate(offsetX, offsetY); currentCtx.save(); } copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push(currentCtx); this.groupLevel++; } endGroup(group) { if (!this.contentVisible) { return; } this.groupLevel--; const groupCtx = this.ctx; const ctx = this.groupStack.pop(); this.ctx = ctx; this.ctx.imageSmoothingEnabled = false; if (group.smask) { this.tempSMask = this.smaskStack.pop(); this.restore(); } else { this.ctx.restore(); const currentMtx = getCurrentTransform(this.ctx); this.restore(); this.ctx.save(); this.ctx.setTransform(...currentMtx); const dirtyBox = Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); this.ctx.drawImage(groupCtx.canvas, 0, 0); this.ctx.restore(); this.compose(dirtyBox); } } beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { __privateMethod(this, _restoreInitialState, restoreInitialState_fn).call(this); resetCtxToDefault(this.ctx); this.ctx.save(); this.save(); if (this.baseTransform) { this.ctx.setTransform(...this.baseTransform); } if (rect) { const width = rect[2] - rect[0]; const height = rect[3] - rect[1]; if (hasOwnCanvas && this.annotationCanvasMap) { transform = transform.slice(); transform[4] -= rect[0]; transform[5] -= rect[1]; rect = rect.slice(); rect[0] = rect[1] = 0; rect[2] = width; rect[3] = height; const [scaleX, scaleY] = Util.singularValueDecompose2dScale(getCurrentTransform(this.ctx)); const { viewportScale } = this; const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); const { canvas, context } = this.annotationCanvas; this.annotationCanvasMap.set(id, canvas); this.annotationCanvas.savedCtx = this.ctx; this.ctx = context; this.ctx.save(); this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); resetCtxToDefault(this.ctx); } else { resetCtxToDefault(this.ctx); this.ctx.rect(rect[0], rect[1], width, height); this.ctx.clip(); this.endPath(); } } this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); this.transform(...transform); this.transform(...matrix); } endAnnotation() { if (this.annotationCanvas) { this.ctx.restore(); __privateMethod(this, _drawFilter, drawFilter_fn).call(this); this.ctx = this.annotationCanvas.savedCtx; delete this.annotationCanvas.savedCtx; delete this.annotationCanvas; } } paintImageMaskXObject(img) { if (!this.contentVisible) { return; } const count = img.count; img = this.getObject(img.data, img); img.count = count; const ctx = this.ctx; const glyph = this.processingType3; if (glyph) { if (glyph.compiled === void 0) { glyph.compiled = compileType3Glyph(img); } if (glyph.compiled) { glyph.compiled(ctx); return; } } const mask = this._createMaskCanvas(img); const maskCanvas = mask.canvas; ctx.save(); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); ctx.restore(); this.compose(); } paintImageMaskXObjectRepeat(img, scaleX, skewX = 0, skewY = 0, scaleY, positions) { if (!this.contentVisible) { return; } img = this.getObject(img.data, img); const ctx = this.ctx; ctx.save(); const currentTransform = getCurrentTransform(ctx); ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); const mask = this._createMaskCanvas(img); ctx.setTransform(1, 0, 0, 1, mask.offsetX - currentTransform[4], mask.offsetY - currentTransform[5]); for (let i = 0, ii = positions.length; i < ii; i += 2) { const trans = Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); const [x, y] = Util.applyTransform([0, 0], trans); ctx.drawImage(mask.canvas, x, y); } ctx.restore(); this.compose(); } paintImageMaskXObjectGroup(images) { if (!this.contentVisible) { return; } const ctx = this.ctx; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; for (const image of images) { const { data, width, height, transform } = image; const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); const maskCtx = maskCanvas.context; maskCtx.save(); const img = this.getObject(data, image); putBinaryImageMask(maskCtx, img); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, getCurrentTransformInverse(ctx), PathType.FILL) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); ctx.save(); ctx.transform(...transform); ctx.scale(1, -1); drawImageAtIntegerCoords(ctx, maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } this.compose(); } paintImageXObject(objId) { if (!this.contentVisible) { return; } const imgData = this.getObject(objId); if (!imgData) { warn("Dependent image isn't ready yet"); return; } this.paintInlineImageXObject(imgData); } paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { if (!this.contentVisible) { return; } const imgData = this.getObject(objId); if (!imgData) { warn("Dependent image isn't ready yet"); return; } const width = imgData.width; const height = imgData.height; const map = []; for (let i = 0, ii = positions.length; i < ii; i += 2) { map.push({ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], x: 0, y: 0, w: width, h: height }); } this.paintInlineImageXObjectGroup(imgData, map); } applyTransferMapsToCanvas(ctx) { if (this.current.transferMaps !== "none") { ctx.filter = this.current.transferMaps; ctx.drawImage(ctx.canvas, 0, 0); ctx.filter = "none"; } return ctx.canvas; } applyTransferMapsToBitmap(imgData) { if (this.current.transferMaps === "none") { return imgData.bitmap; } const { bitmap, width, height } = imgData; const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); const tmpCtx = tmpCanvas.context; tmpCtx.filter = this.current.transferMaps; tmpCtx.drawImage(bitmap, 0, 0); tmpCtx.filter = "none"; return tmpCanvas.canvas; } paintInlineImageXObject(imgData) { if (!this.contentVisible) { return; } const width = imgData.width; const height = imgData.height; const ctx = this.ctx; this.save(); if (!isNodeJS) { const { filter } = ctx; if (filter !== "none" && filter !== "") { ctx.filter = "none"; } } ctx.scale(1 / width, -1 / height); let imgToPaint; if (imgData.bitmap) { imgToPaint = this.applyTransferMapsToBitmap(imgData); } else if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { imgToPaint = imgData; } else { const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); const tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData); imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); } const scaled = this._scaleImage(imgToPaint, getCurrentTransformInverse(ctx)); ctx.imageSmoothingEnabled = getImageSmoothingEnabled(getCurrentTransform(ctx), imgData.interpolate); drawImageAtIntegerCoords(ctx, scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); this.compose(); this.restore(); } paintInlineImageXObjectGroup(imgData, map) { if (!this.contentVisible) { return; } const ctx = this.ctx; let imgToPaint; if (imgData.bitmap) { imgToPaint = imgData.bitmap; } else { const w = imgData.width; const h = imgData.height; const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); const tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData); imgToPaint = this.applyTransferMapsToCanvas(tmpCtx); } for (const entry of map) { ctx.save(); ctx.transform(...entry.transform); ctx.scale(1, -1); drawImageAtIntegerCoords(ctx, imgToPaint, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); ctx.restore(); } this.compose(); } paintSolidColorImageMask() { if (!this.contentVisible) { return; } this.ctx.fillRect(0, 0, 1, 1); this.compose(); } markPoint(tag) { } markPointProps(tag, properties) { } beginMarkedContent(tag) { this.markedContentStack.push({ visible: true }); } beginMarkedContentProps(tag, properties) { if (tag === "OC") { this.markedContentStack.push({ visible: this.optionalContentConfig.isVisible(properties) }); } else { this.markedContentStack.push({ visible: true }); } this.contentVisible = this.isContentVisible(); } endMarkedContent() { this.markedContentStack.pop(); this.contentVisible = this.isContentVisible(); } beginCompat() { } endCompat() { } consumePath(clipBox) { const isEmpty = this.current.isEmptyClip(); if (this.pendingClip) { this.current.updateClipFromPath(); } if (!this.pendingClip) { this.compose(clipBox); } const ctx = this.ctx; if (this.pendingClip) { if (!isEmpty) { if (this.pendingClip === EO_CLIP) { ctx.clip("evenodd"); } else { ctx.clip(); } } this.pendingClip = null; } this.current.startNewPathAndClipBox(this.current.clipBox); ctx.beginPath(); } getSinglePixelWidth() { if (!this._cachedGetSinglePixelWidth) { const m = getCurrentTransform(this.ctx); if (m[1] === 0 && m[2] === 0) { this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(m[0]), Math.abs(m[3])); } else { const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); const normX = Math.hypot(m[0], m[2]); const normY = Math.hypot(m[1], m[3]); this._cachedGetSinglePixelWidth = Math.max(normX, normY) / absDet; } } return this._cachedGetSinglePixelWidth; } getScaleForStroking() { if (this._cachedScaleForStroking[0] === -1) { const { lineWidth } = this.current; const { a, b, c, d } = this.ctx.getTransform(); let scaleX, scaleY; if (b === 0 && c === 0) { const normX = Math.abs(a); const normY = Math.abs(d); if (normX === normY) { if (lineWidth === 0) { scaleX = scaleY = 1 / normX; } else { const scaledLineWidth = normX * lineWidth; scaleX = scaleY = scaledLineWidth < 1 ? 1 / scaledLineWidth : 1; } } else if (lineWidth === 0) { scaleX = 1 / normX; scaleY = 1 / normY; } else { const scaledXLineWidth = normX * lineWidth; const scaledYLineWidth = normY * lineWidth; scaleX = scaledXLineWidth < 1 ? 1 / scaledXLineWidth : 1; scaleY = scaledYLineWidth < 1 ? 1 / scaledYLineWidth : 1; } } else { const absDet = Math.abs(a * d - b * c); const normX = Math.hypot(a, b); const normY = Math.hypot(c, d); if (lineWidth === 0) { scaleX = normY / absDet; scaleY = normX / absDet; } else { const baseArea = lineWidth * absDet; scaleX = normY > baseArea ? normY / baseArea : 1; scaleY = normX > baseArea ? normX / baseArea : 1; } } this._cachedScaleForStroking[0] = scaleX; this._cachedScaleForStroking[1] = scaleY; } return this._cachedScaleForStroking; } rescaleAndStroke(saveRestore) { const { ctx } = this; const { lineWidth } = this.current; const [scaleX, scaleY] = this.getScaleForStroking(); ctx.lineWidth = lineWidth || 1; if (scaleX === 1 && scaleY === 1) { ctx.stroke(); return; } const dashes = ctx.getLineDash(); if (saveRestore) { ctx.save(); } ctx.scale(scaleX, scaleY); if (dashes.length > 0) { const scale = Math.max(scaleX, scaleY); ctx.setLineDash(dashes.map((x) => x / scale)); ctx.lineDashOffset /= scale; } ctx.stroke(); if (saveRestore) { ctx.restore(); } } isContentVisible() { for (let i = this.markedContentStack.length - 1; i >= 0; i--) { if (!this.markedContentStack[i].visible) { return false; } } return true; } }; var CanvasGraphics = _CanvasGraphics; _restoreInitialState = new WeakSet(); restoreInitialState_fn = function() { while (this.stateStack.length || this.inSMaskMode) { this.restore(); } this.current.activeSMask = null; this.ctx.restore(); if (this.transparentCanvas) { this.ctx = this.compositeCtx; this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.drawImage(this.transparentCanvas, 0, 0); this.ctx.restore(); this.transparentCanvas = null; } }; _drawFilter = new WeakSet(); drawFilter_fn = function() { if (this.pageColors) { const hcmFilterId = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background); if (hcmFilterId !== "none") { const savedFilter = this.ctx.filter; this.ctx.filter = hcmFilterId; this.ctx.drawImage(this.ctx.canvas, 0, 0); this.ctx.filter = savedFilter; } } }; for (const op in OPS) { if (CanvasGraphics.prototype[op] !== void 0) { CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op]; } } var _port, _src; var GlobalWorkerOptions = class { static get workerPort() { return __privateGet(this, _port); } static set workerPort(val) { if (!(typeof Worker !== "undefined" && val instanceof Worker) && val !== null) { throw new Error("Invalid `workerPort` type."); } __privateSet(this, _port, val); } static get workerSrc() { return __privateGet(this, _src); } static set workerSrc(val) { if (typeof val !== "string") { throw new Error("Invalid `workerSrc` type."); } __privateSet(this, _src, val); } }; _port = new WeakMap(); _src = new WeakMap(); __privateAdd(GlobalWorkerOptions, _port, null); __privateAdd(GlobalWorkerOptions, _src, ""); var CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; var 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)) { unreachable('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); } switch (reason.name) { case "AbortException": return new AbortException(reason.message); case "MissingPDFException": return new MissingPDFException(reason.message); case "PasswordException": return new PasswordException(reason.message, reason.code); case "UnexpectedResponseException": return new UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new UnknownErrorException(reason.message, reason.details); default: return new UnknownErrorException(reason.message, reason.toString()); } } var _createStreamSink, createStreamSink_fn, _processStreamMessage, processStreamMessage_fn, _deleteStreamController, deleteStreamController_fn; var MessageHandler = class { constructor(sourceName, targetName, comObj) { __privateAdd(this, _createStreamSink); __privateAdd(this, _processStreamMessage); __privateAdd(this, _deleteStreamController); this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.streamSinks = /* @__PURE__ */ Object.create(null); this.streamControllers = /* @__PURE__ */ Object.create(null); this.callbackCapabilities = /* @__PURE__ */ Object.create(null); this.actionHandler = /* @__PURE__ */ Object.create(null); this._onComObjOnMessage = (event) => { const data = event.data; if (data.targetName !== this.sourceName) { return; } if (data.stream) { __privateMethod(this, _processStreamMessage, processStreamMessage_fn).call(this, 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) { __privateMethod(this, _createStreamSink, createStreamSink_fn).call(this, 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 = Promise.withResolvers(); 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 = Promise.withResolvers(); 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 = Promise.withResolvers(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL, streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: (reason) => { assert(reason instanceof Error, "cancel must have a valid reason"); const cancelCapability = Promise.withResolvers(); 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); } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } }; _createStreamSink = new WeakSet(); createStreamSink_fn = function(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 = Promise.withResolvers(); 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) { 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: Promise.withResolvers(), 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 = new WeakSet(); processStreamMessage_fn = function(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) { var _a2; resolve((_a2 = streamSink.onPull) == null ? void 0 : _a2.call(streamSink)); }).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: assert(streamController, "enqueue should have stream controller"); if (streamController.isClosed) { break; } streamController.controller.enqueue(data.chunk); break; case StreamKind.CLOSE: assert(streamController, "close should have stream controller"); if (streamController.isClosed) { break; } streamController.isClosed = true; streamController.controller.close(); __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); break; case StreamKind.ERROR: assert(streamController, "error should have stream controller"); streamController.controller.error(wrapReason(data.reason)); __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { streamController.cancelCall.resolve(); } else { streamController.cancelCall.reject(wrapReason(data.reason)); } __privateMethod(this, _deleteStreamController, deleteStreamController_fn).call(this, streamController, streamId); break; case StreamKind.CANCEL: if (!streamSink) { break; } new Promise(function(resolve) { var _a2; resolve((_a2 = streamSink.onCancel) == null ? void 0 : _a2.call(streamSink, 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"); } }; _deleteStreamController = new WeakSet(); deleteStreamController_fn = async function(streamController, streamId) { var _a2, _b, _c; await Promise.allSettled([(_a2 = streamController.startCall) == null ? void 0 : _a2.promise, (_b = streamController.pullCall) == null ? void 0 : _b.promise, (_c = streamController.cancelCall) == null ? void 0 : _c.promise]); delete this.streamControllers[streamId]; }; var _metadataMap, _data; var Metadata = class { constructor({ parsedData, rawData }) { __privateAdd(this, _metadataMap, void 0); __privateAdd(this, _data, void 0); __privateSet(this, _metadataMap, parsedData); __privateSet(this, _data, rawData); } getRaw() { return __privateGet(this, _data); } get(name) { var _a2; return (_a2 = __privateGet(this, _metadataMap).get(name)) != null ? _a2 : null; } getAll() { return objectFromMap(__privateGet(this, _metadataMap)); } has(name) { return __privateGet(this, _metadataMap).has(name); } }; _metadataMap = new WeakMap(); _data = new WeakMap(); var INTERNAL = Symbol("INTERNAL"); var _isDisplay, _isPrint, _userSet, _visible; var OptionalContentGroup = class { constructor(renderingIntent, { name, intent, usage }) { __privateAdd(this, _isDisplay, false); __privateAdd(this, _isPrint, false); __privateAdd(this, _userSet, false); __privateAdd(this, _visible, true); __privateSet(this, _isDisplay, !!(renderingIntent & RenderingIntentFlag.DISPLAY)); __privateSet(this, _isPrint, !!(renderingIntent & RenderingIntentFlag.PRINT)); this.name = name; this.intent = intent; this.usage = usage; } get visible() { if (__privateGet(this, _userSet)) { return __privateGet(this, _visible); } if (!__privateGet(this, _visible)) { return false; } const { print, view } = this.usage; if (__privateGet(this, _isDisplay)) { return (view == null ? void 0 : view.viewState) !== "OFF"; } else if (__privateGet(this, _isPrint)) { return (print == null ? void 0 : print.printState) !== "OFF"; } return true; } _setVisible(internal, visible, userSet = false) { if (internal !== INTERNAL) { unreachable("Internal method `_setVisible` called."); } __privateSet(this, _userSet, userSet); __privateSet(this, _visible, visible); } }; _isDisplay = new WeakMap(); _isPrint = new WeakMap(); _userSet = new WeakMap(); _visible = new WeakMap(); var _cachedGetHash, _groups, _initialHash, _order, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn; var OptionalContentConfig = class { constructor(data, renderingIntent = RenderingIntentFlag.DISPLAY) { __privateAdd(this, _evaluateVisibilityExpression); __privateAdd(this, _cachedGetHash, null); __privateAdd(this, _groups, /* @__PURE__ */ new Map()); __privateAdd(this, _initialHash, null); __privateAdd(this, _order, null); this.renderingIntent = renderingIntent; this.name = null; this.creator = null; if (data === null) { return; } this.name = data.name; this.creator = data.creator; __privateSet(this, _order, data.order); for (const group of data.groups) { __privateGet(this, _groups).set(group.id, new OptionalContentGroup(renderingIntent, group)); } if (data.baseState === "OFF") { for (const group of __privateGet(this, _groups).values()) { group._setVisible(INTERNAL, false); } } for (const on of data.on) { __privateGet(this, _groups).get(on)._setVisible(INTERNAL, true); } for (const off of data.off) { __privateGet(this, _groups).get(off)._setVisible(INTERNAL, false); } __privateSet(this, _initialHash, this.getHash()); } isVisible(group) { if (__privateGet(this, _groups).size === 0) { return true; } if (!group) { info("Optional content group not defined."); return true; } if (group.type === "OCG") { if (!__privateGet(this, _groups).has(group.id)) { warn(`Optional content group not found: ${group.id}`); return true; } return __privateGet(this, _groups).get(group.id).visible; } else if (group.type === "OCMD") { if (group.expression) { return __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, group.expression); } if (!group.policy || group.policy === "AnyOn") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (__privateGet(this, _groups).get(id).visible) { return true; } } return false; } else if (group.policy === "AllOn") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (!__privateGet(this, _groups).get(id).visible) { return false; } } return true; } else if (group.policy === "AnyOff") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (!__privateGet(this, _groups).get(id).visible) { return true; } } return false; } else if (group.policy === "AllOff") { for (const id of group.ids) { if (!__privateGet(this, _groups).has(id)) { warn(`Optional content group not found: ${id}`); return true; } if (__privateGet(this, _groups).get(id).visible) { return false; } } return true; } warn(`Unknown optional content policy ${group.policy}.`); return true; } warn(`Unknown group type ${group.type}.`); return true; } setVisibility(id, visible = true) { const group = __privateGet(this, _groups).get(id); if (!group) { warn(`Optional content group not found: ${id}`); return; } group._setVisible(INTERNAL, !!visible, true); __privateSet(this, _cachedGetHash, null); } setOCGState({ state, preserveRB }) { let operator; for (const elem of state) { switch (elem) { case "ON": case "OFF": case "Toggle": operator = elem; continue; } const group = __privateGet(this, _groups).get(elem); if (!group) { continue; } switch (operator) { case "ON": group._setVisible(INTERNAL, true); break; case "OFF": group._setVisible(INTERNAL, false); break; case "Toggle": group._setVisible(INTERNAL, !group.visible); break; } } __privateSet(this, _cachedGetHash, null); } get hasInitialVisibility() { return __privateGet(this, _initialHash) === null || this.getHash() === __privateGet(this, _initialHash); } getOrder() { if (!__privateGet(this, _groups).size) { return null; } if (__privateGet(this, _order)) { return __privateGet(this, _order).slice(); } return [...__privateGet(this, _groups).keys()]; } getGroups() { return __privateGet(this, _groups).size > 0 ? objectFromMap(__privateGet(this, _groups)) : null; } getGroup(id) { return __privateGet(this, _groups).get(id) || null; } getHash() { if (__privateGet(this, _cachedGetHash) !== null) { return __privateGet(this, _cachedGetHash); } const hash = new MurmurHash3_64(); for (const [id, group] of __privateGet(this, _groups)) { hash.update(`${id}:${group.visible}`); } return __privateSet(this, _cachedGetHash, hash.hexdigest()); } }; _cachedGetHash = new WeakMap(); _groups = new WeakMap(); _initialHash = new WeakMap(); _order = new WeakMap(); _evaluateVisibilityExpression = new WeakSet(); evaluateVisibilityExpression_fn = function(array) { const length = array.length; if (length < 2) { return true; } const operator = array[0]; for (let i = 1; i < length; i++) { const element = array[i]; let state; if (Array.isArray(element)) { state = __privateMethod(this, _evaluateVisibilityExpression, evaluateVisibilityExpression_fn).call(this, element); } else if (__privateGet(this, _groups).has(element)) { state = __privateGet(this, _groups).get(element).visible; } else { warn(`Optional content group not found: ${element}`); return true; } switch (operator) { case "And": if (!state) { return false; } break; case "Or": if (state) { return true; } break; case "Not": return !state; default: return true; } } return operator === "And"; }; var PDFDataTransportStream = class { constructor(pdfDataRangeTransport, { disableRange = false, disableStream = false }) { assert(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); const { length, initialData, progressiveDone, contentDispositionFilename } = pdfDataRangeTransport; this._queuedChunks = []; this._progressiveDone = progressiveDone; this._contentDispositionFilename = contentDispositionFilename; if ((initialData == null ? void 0 : initialData.length) > 0) { const buffer = initialData instanceof Uint8Array && initialData.byteLength === initialData.buffer.byteLength ? initialData.buffer : new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } this._pdfDataRangeTransport = pdfDataRangeTransport; this._isStreamingSupported = !disableStream; this._isRangeSupported = !disableRange; this._contentLength = length; this._fullRequestReader = null; this._rangeReaders = []; pdfDataRangeTransport.addRangeListener((begin, chunk) => { this._onReceiveData({ begin, chunk }); }); pdfDataRangeTransport.addProgressListener((loaded, total) => { this._onProgress({ loaded, total }); }); pdfDataRangeTransport.addProgressiveReadListener((chunk) => { this._onReceiveData({ chunk }); }); pdfDataRangeTransport.addProgressiveDoneListener(() => { this._onProgressiveDone(); }); pdfDataRangeTransport.transportReady(); } _onReceiveData({ begin, chunk }) { const buffer = chunk instanceof Uint8Array && chunk.byteLength === chunk.buffer.byteLength ? chunk.buffer : new Uint8Array(chunk).buffer; if (begin === void 0) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { this._queuedChunks.push(buffer); } } else { const found = this._rangeReaders.some(function(rangeReader) { if (rangeReader._begin !== begin) { return false; } rangeReader._enqueue(buffer); return true; }); assert(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } get _progressiveDataLength() { var _a2, _b; return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; } _onProgress(evt) { var _a2, _b, _c, _d; if (evt.total === void 0) { (_b = (_a2 = this._rangeReaders[0]) == null ? void 0 : _a2.onProgress) == null ? void 0 : _b.call(_a2, { loaded: evt.loaded }); } else { (_d = (_c = this._fullRequestReader) == null ? void 0 : _c.onProgress) == null ? void 0 : _d.call(_c, { loaded: evt.loaded, total: evt.total }); } } _onProgressiveDone() { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.progressiveDone(); this._progressiveDone = true; } _removeRangeReader(reader) { const i = this._rangeReaders.indexOf(reader); if (i >= 0) { this._rangeReaders.splice(i, 1); } } getFullReader() { assert(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); const queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFDataTransportStreamRangeReader(this, begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end); this._rangeReaders.push(reader); return reader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeReaders.slice(0)) { reader.cancel(reason); } this._pdfDataRangeTransport.abort(); } }; var PDFDataTransportStreamReader = class { constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { this._stream = stream; this._done = progressiveDone || false; this._filename = isPdfFile(contentDispositionFilename) ? contentDispositionFilename : null; this._queuedChunks = queuedChunks || []; this._loaded = 0; for (const chunk of this._queuedChunks) { this._loaded += chunk.byteLength; } this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunks.push(chunk); } this._loaded += chunk.byteLength; } get headersReady() { return this._headersReady; } get filename() { return this._filename; } get isRangeSupported() { return this._stream._isRangeSupported; } get isStreamingSupported() { return this._stream._isStreamingSupported; } get contentLength() { return this._stream._contentLength; } async read() { if (this._queuedChunks.length > 0) { const chunk = this._queuedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; } progressiveDone() { if (this._done) { return; } this._done = true; } }; var PDFDataTransportStreamRangeReader = class { constructor(stream, begin, end) { this._stream = stream; this._begin = begin; this._end = end; this._queuedChunk = null; this._requests = []; this._done = false; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length === 0) { this._queuedChunk = chunk; } else { const requestsCapability = this._requests.shift(); requestsCapability.resolve({ value: chunk, done: false }); for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; } this._done = true; this._stream._removeRangeReader(this); } get isStreamingSupported() { return false; } async read() { if (this._queuedChunk) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; this._stream._removeRangeReader(this); } }; function getFilenameFromContentDispositionHeader(contentDisposition) { let needsEncodingFixup = true; let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = unescape(filename); filename = rfc5987decode(filename); filename = rfc2047decode(filename); return fixupEncoding(filename); } tmp = rfc2231getparam(contentDisposition); if (tmp) { const filename = rfc2047decode(tmp); return fixupEncoding(filename); } tmp = toParamRegExp("filename", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = rfc2047decode(filename); return fixupEncoding(filename); } function toParamRegExp(attributePattern, flags) { return new RegExp("(?:^|;)\\s*" + attributePattern + '\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)', flags); } function textdecode(encoding, value) { if (encoding) { if (!/^[\x00-\xFF]+$/.test(value)) { return value; } try { const decoder = new TextDecoder(encoding, { fatal: true }); const buffer = stringToBytes(value); value = decoder.decode(buffer); needsEncodingFixup = false; } catch (e) { } } return value; } function fixupEncoding(value) { if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { value = textdecode("utf-8", value); if (needsEncodingFixup) { value = textdecode("iso-8859-1", value); } } return value; } function rfc2231getparam(contentDispositionStr) { const matches = []; let match; const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); while ((match = iter.exec(contentDispositionStr)) !== null) { let [, n, quot, part] = match; n = parseInt(n, 10); if (n in matches) { if (n === 0) { break; } continue; } matches[n] = [quot, part]; } const parts = []; for (let n = 0; n < matches.length; ++n) { if (!(n in matches)) { break; } let [quot, part] = matches[n]; part = rfc2616unquote(part); if (quot) { part = unescape(part); if (n === 0) { part = rfc5987decode(part); } } parts.push(part); } return parts.join(""); } function rfc2616unquote(value) { if (value.startsWith('"')) { const parts = value.slice(1).split('\\"'); for (let i = 0; i < parts.length; ++i) { const quotindex = parts[i].indexOf('"'); if (quotindex !== -1) { parts[i] = parts[i].slice(0, quotindex); parts.length = i + 1; } parts[i] = parts[i].replaceAll(/\\(.)/g, "$1"); } value = parts.join('"'); } return value; } function rfc5987decode(extvalue) { const encodingend = extvalue.indexOf("'"); if (encodingend === -1) { return extvalue; } const encoding = extvalue.slice(0, encodingend); const langvalue = extvalue.slice(encodingend + 1); const value = langvalue.replace(/^[^']*'/, ""); return textdecode(encoding, value); } function rfc2047decode(value) { if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { return value; } return value.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function(matches, charset, encoding, text) { if (encoding === "q" || encoding === "Q") { text = text.replaceAll("_", " "); text = text.replaceAll(/=([0-9a-fA-F]{2})/g, function(match, hex) { return String.fromCharCode(parseInt(hex, 16)); }); return textdecode(charset, text); } try { text = atob(text); } catch (e) { } return textdecode(charset, text); }); } return ""; } function validateRangeRequestCapabilities({ getResponseHeader, isHttp, rangeChunkSize, disableRange }) { const returnValues = { allowRangeRequests: false, suggestedLength: void 0 }; const length = parseInt(getResponseHeader("Content-Length"), 10); if (!Number.isInteger(length)) { return returnValues; } returnValues.suggestedLength = length; if (length <= 2 * rangeChunkSize) { return returnValues; } if (disableRange || !isHttp) { return returnValues; } if (getResponseHeader("Accept-Ranges") !== "bytes") { return returnValues; } const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; if (contentEncoding !== "identity") { return returnValues; } returnValues.allowRangeRequests = true; return returnValues; } function extractFilenameFromHeader(getResponseHeader) { const contentDisposition = getResponseHeader("Content-Disposition"); if (contentDisposition) { let filename = getFilenameFromContentDispositionHeader(contentDisposition); if (filename.includes("%")) { try { filename = decodeURIComponent(filename); } catch (e) { } } if (isPdfFile(filename)) { return filename; } } return null; } function createResponseStatusError(status, url) { if (status === 404 || status === 0 && url.startsWith("file:")) { return new MissingPDFException('Missing PDF "' + url + '".'); } return new UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); } function validateResponseStatus(status) { return status === 200 || status === 206; } function createFetchOptions(headers, withCredentials, abortController) { return { method: "GET", headers, signal: abortController.signal, mode: "cors", credentials: withCredentials ? "include" : "same-origin", redirect: "follow" }; } function createHeaders(httpHeaders) { const headers = new Headers(); for (const property in httpHeaders) { const value = httpHeaders[property]; if (value === void 0) { continue; } headers.append(property, value); } return headers; } function getArrayBuffer(val) { if (val instanceof Uint8Array) { return val.buffer; } if (val instanceof ArrayBuffer) { return val; } warn(`getArrayBuffer - unexpected data format: ${val}`); return new Uint8Array(val).buffer; } var PDFFetchStream = class { constructor(source) { this.source = source; this.isHttp = /^https?:/i.test(source.url); this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { var _a2, _b; return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; } getFullReader() { assert(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); this._fullRequestReader = new PDFFetchStreamReader(this); return this._fullRequestReader; } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFFetchStreamRangeReader(this, begin, end); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } }; var PDFFetchStreamReader = class { constructor(stream) { this._stream = stream; this._reader = null; this._loaded = 0; this._filename = null; const source = stream.source; this._withCredentials = source.withCredentials || false; this._contentLength = source.length; this._headersCapability = Promise.withResolvers(); this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._abortController = new AbortController(); this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._headers = createHeaders(this._stream.httpHeaders); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => { if (!validateResponseStatus(response.status)) { throw createResponseStatusError(response.status, url); } this._reader = response.body.getReader(); this._headersCapability.resolve(); const getResponseHeader = (name) => response.headers.get(name); const { allowRangeRequests, suggestedLength } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: this._stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = extractFilenameFromHeader(getResponseHeader); if (!this._isStreamingSupported && this._isRangeSupported) { this.cancel(new AbortException("Streaming is disabled.")); } }).catch(this._headersCapability.reject); this.onProgress = null; } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._headersCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded, total: this._contentLength }); return { value: getArrayBuffer(value), done: false }; } cancel(reason) { var _a2; (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason); this._abortController.abort(); } }; var PDFFetchStreamRangeReader = class { constructor(stream, begin, end) { this._stream = stream; this._reader = null; this._loaded = 0; const source = stream.source; this._withCredentials = source.withCredentials || false; this._readCapability = Promise.withResolvers(); this._isStreamingSupported = !source.disableStream; this._abortController = new AbortController(); this._headers = createHeaders(this._stream.httpHeaders); this._headers.append("Range", `bytes=${begin}-${end - 1}`); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then((response) => { if (!validateResponseStatus(response.status)) { throw createResponseStatusError(response.status, url); } this._readCapability.resolve(); this._reader = response.body.getReader(); }).catch(this._readCapability.reject); this.onProgress = null; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._readCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded }); return { value: getArrayBuffer(value), done: false }; } cancel(reason) { var _a2; (_a2 = this._reader) == null ? void 0 : _a2.cancel(reason); this._abortController.abort(); } }; var OK_RESPONSE = 200; var PARTIAL_CONTENT_RESPONSE = 206; function network_getArrayBuffer(xhr) { const data = xhr.response; if (typeof data !== "string") { return data; } return stringToBytes(data).buffer; } var NetworkManager = class { constructor(url, args = {}) { this.url = url; this.isHttp = /^https?:/i.test(url); this.httpHeaders = this.isHttp && args.httpHeaders || /* @__PURE__ */ Object.create(null); this.withCredentials = args.withCredentials || false; this.currXhrId = 0; this.pendingRequests = /* @__PURE__ */ Object.create(null); } requestRange(begin, end, listeners) { const args = { begin, end }; for (const prop in listeners) { args[prop] = listeners[prop]; } return this.request(args); } requestFull(listeners) { return this.request(listeners); } request(args) { const xhr = new XMLHttpRequest(); const xhrId = this.currXhrId++; const pendingRequest = this.pendingRequests[xhrId] = { xhr }; xhr.open("GET", this.url); xhr.withCredentials = this.withCredentials; for (const property in this.httpHeaders) { const value = this.httpHeaders[property]; if (value === void 0) { continue; } xhr.setRequestHeader(property, value); } if (this.isHttp && "begin" in args && "end" in args) { xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; } else { pendingRequest.expectedStatus = OK_RESPONSE; } xhr.responseType = "arraybuffer"; if (args.onError) { xhr.onerror = function(evt) { args.onError(xhr.status); }; } xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); xhr.onprogress = this.onProgress.bind(this, xhrId); pendingRequest.onHeadersReceived = args.onHeadersReceived; pendingRequest.onDone = args.onDone; pendingRequest.onError = args.onError; pendingRequest.onProgress = args.onProgress; xhr.send(null); return xhrId; } onProgress(xhrId, evt) { var _a2; const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } (_a2 = pendingRequest.onProgress) == null ? void 0 : _a2.call(pendingRequest, evt); } onStateChange(xhrId, evt) { var _a2, _b, _c; const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } const xhr = pendingRequest.xhr; if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { pendingRequest.onHeadersReceived(); delete pendingRequest.onHeadersReceived; } if (xhr.readyState !== 4) { return; } if (!(xhrId in this.pendingRequests)) { return; } delete this.pendingRequests[xhrId]; if (xhr.status === 0 && this.isHttp) { (_a2 = pendingRequest.onError) == null ? void 0 : _a2.call(pendingRequest, xhr.status); return; } const xhrStatus = xhr.status || OK_RESPONSE; const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { (_b = pendingRequest.onError) == null ? void 0 : _b.call(pendingRequest, xhr.status); return; } const chunk = network_getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { const rangeHeader = xhr.getResponseHeader("Content-Range"); const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); pendingRequest.onDone({ begin: parseInt(matches[1], 10), chunk }); } else if (chunk) { pendingRequest.onDone({ begin: 0, chunk }); } else { (_c = pendingRequest.onError) == null ? void 0 : _c.call(pendingRequest, xhr.status); } } getRequestXhr(xhrId) { return this.pendingRequests[xhrId].xhr; } isPendingRequest(xhrId) { return xhrId in this.pendingRequests; } abortRequest(xhrId) { const xhr = this.pendingRequests[xhrId].xhr; delete this.pendingRequests[xhrId]; xhr.abort(); } }; var PDFNetworkStream = class { constructor(source) { this._source = source; this._manager = new NetworkManager(source.url, { httpHeaders: source.httpHeaders, withCredentials: source.withCredentials }); this._rangeChunkSize = source.rangeChunkSize; this._fullRequestReader = null; this._rangeRequestReaders = []; } _onRangeRequestReaderClosed(reader) { const i = this._rangeRequestReaders.indexOf(reader); if (i >= 0) { this._rangeRequestReaders.splice(i, 1); } } getFullReader() { assert(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; } getRangeReader(begin, end) { const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); reader.onClosed = this._onRangeRequestReaderClosed.bind(this); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } }; var PDFNetworkStreamFullRequestReader = class { constructor(manager, source) { this._manager = manager; const args = { onHeadersReceived: this._onHeadersReceived.bind(this), onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = source.url; this._fullRequestId = manager.requestFull(args); this._headersReceivedCapability = Promise.withResolvers(); this._disableRange = source.disableRange || false; this._contentLength = source.length; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = false; this._isRangeSupported = false; this._cachedChunks = []; this._requests = []; this._done = false; this._storedError = void 0; this._filename = null; this.onProgress = null; } _onHeadersReceived() { const fullRequestXhrId = this._fullRequestId; const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); const getResponseHeader = (name) => fullRequestXhr.getResponseHeader(name); const { allowRangeRequests, suggestedLength } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); if (allowRangeRequests) { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; this._filename = extractFilenameFromHeader(getResponseHeader); if (this._isRangeSupported) { this._manager.abortRequest(fullRequestXhrId); } this._headersReceivedCapability.resolve(); } _onDone(data) { if (data) { if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: data.chunk, done: false }); } else { this._cachedChunks.push(data.chunk); } } this._done = true; if (this._cachedChunks.length > 0) { return; } for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; } _onError(status) { this._storedError = createResponseStatusError(status, this._url); this._headersReceivedCapability.reject(this._storedError); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } this._requests.length = 0; this._cachedChunks.length = 0; } _onProgress(evt) { var _a2; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: evt.loaded, total: evt.lengthComputable ? evt.total : this._contentLength }); } get filename() { return this._filename; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } get contentLength() { return this._contentLength; } get headersReady() { return this._headersReceivedCapability.promise; } async read() { if (this._storedError) { throw this._storedError; } if (this._cachedChunks.length > 0) { const chunk = this._cachedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._headersReceivedCapability.reject(reason); for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; if (this._manager.isPendingRequest(this._fullRequestId)) { this._manager.abortRequest(this._fullRequestId); } this._fullRequestReader = null; } }; var PDFNetworkStreamRangeRequestReader = class { constructor(manager, begin, end) { this._manager = manager; const args = { onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = manager.url; this._requestId = manager.requestRange(begin, end, args); this._requests = []; this._queuedChunk = null; this._done = false; this._storedError = void 0; this.onProgress = null; this.onClosed = null; } _close() { var _a2; (_a2 = this.onClosed) == null ? void 0 : _a2.call(this, this); } _onDone(data) { const chunk = data.chunk; if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunk = chunk; } this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; this._close(); } _onError(status) { this._storedError = createResponseStatusError(status, this._url); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } this._requests.length = 0; this._queuedChunk = null; } _onProgress(evt) { var _a2; if (!this.isStreamingSupported) { (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: evt.loaded }); } } get isStreamingSupported() { return false; } async read() { if (this._storedError) { throw this._storedError; } if (this._queuedChunk !== null) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: void 0, done: true }; } const requestCapability = Promise.withResolvers(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: void 0, done: true }); } this._requests.length = 0; if (this._manager.isPendingRequest(this._requestId)) { this._manager.abortRequest(this._requestId); } this._close(); } }; var urlRegex = /^[a-z][a-z0-9\-+.]+:/i; function parseUrlOrPath(sourceUrl) { if (urlRegex.test(sourceUrl)) { return new URL(sourceUrl); } const url = NodePackages.get("url"); return new URL(url.pathToFileURL(sourceUrl)); } function createRequest(url, headers, callback) { if (url.protocol === "http:") { const http = NodePackages.get("http"); return http.request(url, { headers }, callback); } const https = NodePackages.get("https"); return https.request(url, { headers }, callback); } var PDFNodeStream = class { constructor(source) { this.source = source; this.url = parseUrlOrPath(source.url); this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; this.isFsUrl = this.url.protocol === "file:"; this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { var _a2, _b; return (_b = (_a2 = this._fullRequestReader) == null ? void 0 : _a2._loaded) != null ? _b : 0; } getFullReader() { assert(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequestReader; } getRangeReader(start, end) { if (end <= this._progressiveDataLength) { return null; } const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); this._rangeRequestReaders.push(rangeReader); return rangeReader; } cancelAllRequests(reason) { var _a2; (_a2 = this._fullRequestReader) == null ? void 0 : _a2.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } }; var BaseFullReader = class { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; const source = stream.source; this._contentLength = source.length; this._loaded = 0; this._filename = null; this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._readableStream = null; this._readCapability = Promise.withResolvers(); this._headersCapability = Promise.withResolvers(); } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._readCapability.promise; if (this._done) { return { value: void 0, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = Promise.withResolvers(); return this.read(); } this._loaded += chunk.length; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded, total: this._contentLength }); const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", (reason) => { this._error(reason); }); if (!this._isStreamingSupported && this._isRangeSupported) { this._error(new AbortException("streaming is disabled")); } if (this._storedError) { this._readableStream.destroy(this._storedError); } } }; var BaseRangeReader = class { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; this._loaded = 0; this._readableStream = null; this._readCapability = Promise.withResolvers(); const source = stream.source; this._isStreamingSupported = !source.disableStream; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { var _a2; await this._readCapability.promise; if (this._done) { return { value: void 0, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = Promise.withResolvers(); return this.read(); } this._loaded += chunk.length; (_a2 = this.onProgress) == null ? void 0 : _a2.call(this, { loaded: this._loaded }); const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", (reason) => { this._error(reason); }); if (this._storedError) { this._readableStream.destroy(this._storedError); } } }; var PDFNodeStreamFullReader = class extends BaseFullReader { constructor(stream) { super(stream); const handleResponse = (response) => { if (response.statusCode === 404) { const error = new MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; this._headersCapability.reject(error); return; } this._headersCapability.resolve(); this._setReadableStream(response); const getResponseHeader = (name) => this._readableStream.headers[name.toLowerCase()]; const { allowRangeRequests, suggestedLength } = validateRangeRequestCapabilities({ getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = extractFilenameFromHeader(getResponseHeader); }; this._request = createRequest(this._url, stream.httpHeaders, handleResponse); this._request.on("error", (reason) => { this._storedError = reason; this._headersCapability.reject(reason); }); this._request.end(); } }; var PDFNodeStreamRangeReader = class extends BaseRangeReader { constructor(stream, start, end) { super(stream); this._httpHeaders = {}; for (const property in stream.httpHeaders) { const value = stream.httpHeaders[property]; if (value === void 0) { continue; } this._httpHeaders[property] = value; } this._httpHeaders.Range = `bytes=${start}-${end - 1}`; const handleResponse = (response) => { if (response.statusCode === 404) { const error = new MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; return; } this._setReadableStream(response); }; this._request = createRequest(this._url, this._httpHeaders, handleResponse); this._request.on("error", (reason) => { this._storedError = reason; }); this._request.end(); } }; var PDFNodeStreamFsFullReader = class extends BaseFullReader { constructor(stream) { super(stream); const fs = NodePackages.get("fs"); fs.promises.lstat(this._url).then((stat) => { this._contentLength = stat.size; this._setReadableStream(fs.createReadStream(this._url)); this._headersCapability.resolve(); }, (error) => { if (error.code === "ENOENT") { error = new MissingPDFException(`Missing PDF "${this._url}".`); } this._storedError = error; this._headersCapability.reject(error); }); } }; var PDFNodeStreamFsRangeReader = class extends BaseRangeReader { constructor(stream, start, end) { super(stream); const fs = NodePackages.get("fs"); this._setReadableStream(fs.createReadStream(this._url, { start, end: end - 1 })); } }; var MAX_TEXT_DIVS_TO_RENDER = 1e5; var DEFAULT_FONT_SIZE = 30; var DEFAULT_FONT_ASCENT = 0.8; var _a, _capability, _container2, _disableProcessItems, _fontInspectorEnabled, _lang, _layoutTextParams, _pageHeight, _pageWidth, _reader, _rootContainer, _rotation, _scale, _styleCache, _textContentItemsStr, _textContentSource, _textDivs, _textDivProperties, _transform, _ascentCache, _canvasContexts, _minFontSize, _pendingTextLayers, _processItems, processItems_fn, _appendText, appendText_fn, _layout, layout_fn, _getCtx, getCtx_fn, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn, _getAscent, getAscent_fn; var _TextLayer = class { constructor({ textContentSource, container, viewport }) { __privateAdd(this, _processItems); __privateAdd(this, _appendText); __privateAdd(this, _layout); __privateAdd(this, _capability, Promise.withResolvers()); __privateAdd(this, _container2, null); __privateAdd(this, _disableProcessItems, false); __privateAdd(this, _fontInspectorEnabled, !!((_a = globalThis.FontInspector) == null ? void 0 : _a.enabled)); __privateAdd(this, _lang, null); __privateAdd(this, _layoutTextParams, null); __privateAdd(this, _pageHeight, 0); __privateAdd(this, _pageWidth, 0); __privateAdd(this, _reader, null); __privateAdd(this, _rootContainer, null); __privateAdd(this, _rotation, 0); __privateAdd(this, _scale, 0); __privateAdd(this, _styleCache, /* @__PURE__ */ Object.create(null)); __privateAdd(this, _textContentItemsStr, []); __privateAdd(this, _textContentSource, null); __privateAdd(this, _textDivs, []); __privateAdd(this, _textDivProperties, /* @__PURE__ */ new WeakMap()); __privateAdd(this, _transform, null); var _a2; if (textContentSource instanceof ReadableStream) { __privateSet(this, _textContentSource, textContentSource); } else if (typeof textContentSource === "object") { __privateSet(this, _textContentSource, new ReadableStream({ start(controller) { controller.enqueue(textContentSource); controller.close(); } })); } else { throw new Error('No "textContentSource" parameter specified.'); } __privateSet(this, _container2, __privateSet(this, _rootContainer, container)); __privateSet(this, _scale, viewport.scale * (globalThis.devicePixelRatio || 1)); __privateSet(this, _rotation, viewport.rotation); __privateSet(this, _layoutTextParams, { prevFontSize: null, prevFontFamily: null, div: null, properties: null, ctx: null }); const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims; __privateSet(this, _transform, [1, 0, 0, -1, -pageX, pageY + pageHeight]); __privateSet(this, _pageWidth, pageWidth); __privateSet(this, _pageHeight, pageHeight); __privateMethod(_a2 = _TextLayer, _ensureMinFontSizeComputed, ensureMinFontSizeComputed_fn).call(_a2); setLayerDimensions(container, viewport); __privateGet(this, _capability).promise.catch(() => { }).then(() => { __privateGet(_TextLayer, _pendingTextLayers).delete(this); __privateSet(this, _layoutTextParams, null); __privateSet(this, _styleCache, null); }); } render() { const pump = () => { __privateGet(this, _reader).read().then(({ value, done }) => { var _a2; if (done) { __privateGet(this, _capability).resolve(); return; } (_a2 = __privateGet(this, _lang)) != null ? _a2 : __privateSet(this, _lang, value.lang); Object.assign(__privateGet(this, _styleCache), value.styles); __privateMethod(this, _processItems, processItems_fn).call(this, value.items); pump(); }, __privateGet(this, _capability).reject); }; __privateSet(this, _reader, __privateGet(this, _textContentSource).getReader()); __privateGet(_TextLayer, _pendingTextLayers).add(this); pump(); return __privateGet(this, _capability).promise; } update({ viewport, onBefore = null }) { var _a2; const scale = viewport.scale * (globalThis.devicePixelRatio || 1); const rotation = viewport.rotation; if (rotation !== __privateGet(this, _rotation)) { onBefore == null ? void 0 : onBefore(); __privateSet(this, _rotation, rotation); setLayerDimensions(__privateGet(this, _rootContainer), { rotation }); } if (scale !== __privateGet(this, _scale)) { onBefore == null ? void 0 : onBefore(); __privateSet(this, _scale, scale); const params = { prevFontSize: null, prevFontFamily: null, div: null, properties: null, ctx: __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang)) }; for (const div of __privateGet(this, _textDivs)) { params.properties = __privateGet(this, _textDivProperties).get(div); params.div = div; __privateMethod(this, _layout, layout_fn).call(this, params); } } } cancel() { var _a2; const abortEx = new AbortException("TextLayer task cancelled."); (_a2 = __privateGet(this, _reader)) == null ? void 0 : _a2.cancel(abortEx).catch(() => { }); __privateSet(this, _reader, null); __privateGet(this, _capability).reject(abortEx); } get textDivs() { return __privateGet(this, _textDivs); } get textContentItemsStr() { return __privateGet(this, _textContentItemsStr); } static cleanup() { if (__privateGet(this, _pendingTextLayers).size > 0) { return; } __privateGet(this, _ascentCache).clear(); for (const { canvas } of __privateGet(this, _canvasContexts).values()) { canvas.remove(); } __privateGet(this, _canvasContexts).clear(); } }; var TextLayer = _TextLayer; _capability = new WeakMap(); _container2 = new WeakMap(); _disableProcessItems = new WeakMap(); _fontInspectorEnabled = new WeakMap(); _lang = new WeakMap(); _layoutTextParams = new WeakMap(); _pageHeight = new WeakMap(); _pageWidth = new WeakMap(); _reader = new WeakMap(); _rootContainer = new WeakMap(); _rotation = new WeakMap(); _scale = new WeakMap(); _styleCache = new WeakMap(); _textContentItemsStr = new WeakMap(); _textContentSource = new WeakMap(); _textDivs = new WeakMap(); _textDivProperties = new WeakMap(); _transform = new WeakMap(); _ascentCache = new WeakMap(); _canvasContexts = new WeakMap(); _minFontSize = new WeakMap(); _pendingTextLayers = new WeakMap(); _processItems = new WeakSet(); processItems_fn = function(items) { var _a2, _b, _c; if (__privateGet(this, _disableProcessItems)) { return; } (_c = (_b = __privateGet(this, _layoutTextParams)).ctx) != null ? _c : _b.ctx = __privateMethod(_a2 = _TextLayer, _getCtx, getCtx_fn).call(_a2, __privateGet(this, _lang)); const textDivs = __privateGet(this, _textDivs), textContentItemsStr = __privateGet(this, _textContentItemsStr); for (const item of items) { if (textDivs.length > MAX_TEXT_DIVS_TO_RENDER) { warn("Ignoring additional textDivs for performance reasons."); __privateSet(this, _disableProcessItems, true); return; } if (item.str === void 0) { if (item.type === "beginMarkedContentProps" || item.type === "beginMarkedContent") { const parent = __privateGet(this, _container2); __privateSet(this, _container2, document.createElement("span")); __privateGet(this, _container2).classList.add("markedContent"); if (item.id !== null) { __privateGet(this, _container2).setAttribute("id", `${item.id}`); } parent.append(__privateGet(this, _container2)); } else if (item.type === "endMarkedContent") { __privateSet(this, _container2, __privateGet(this, _container2).parentNode); } continue; } textContentItemsStr.push(item.str); __privateMethod(this, _appendText, appendText_fn).call(this, item); } }; _appendText = new WeakSet(); appendText_fn = function(geom) { var _a2; const textDiv = document.createElement("span"); const textDivProperties = { angle: 0, canvasWidth: 0, hasText: geom.str !== "", hasEOL: geom.hasEOL, fontSize: 0 }; __privateGet(this, _textDivs).push(textDiv); const tx = Util.transform(__privateGet(this, _transform), geom.transform); let angle = Math.atan2(tx[1], tx[0]); const style = __privateGet(this, _styleCache)[geom.fontName]; if (style.vertical) { angle += Math.PI / 2; } const fontFamily = __privateGet(this, _fontInspectorEnabled) && style.fontSubstitution || style.fontFamily; const fontHeight = Math.hypot(tx[2], tx[3]); const fontAscent = fontHeight * __privateMethod(_a2 = _TextLayer, _getAscent, getAscent_fn).call(_a2, fontFamily, __privateGet(this, _lang)); let left, top; if (angle === 0) { left = tx[4]; top = tx[5] - fontAscent; } else { left = tx[4] + fontAscent * Math.sin(angle); top = tx[5] - fontAscent * Math.cos(angle); } const scaleFactorStr = "calc(var(--scale-factor)*"; const divStyle = textDiv.style; if (__privateGet(this, _container2) === __privateGet(this, _rootContainer)) { divStyle.left = `${(100 * left / __privateGet(this, _pageWidth)).toFixed(2)}%`; divStyle.top = `${(100 * top / __privateGet(this, _pageHeight)).toFixed(2)}%`; } else { divStyle.left = `${scaleFactorStr}${left.toFixed(2)}px)`; divStyle.top = `${scaleFactorStr}${top.toFixed(2)}px)`; } divStyle.fontSize = `${scaleFactorStr}${(__privateGet(_TextLayer, _minFontSize) * fontHeight).toFixed(2)}px)`; divStyle.fontFamily = fontFamily; textDivProperties.fontSize = fontHeight; textDiv.setAttribute("role", "presentation"); textDiv.textContent = geom.str; textDiv.dir = geom.dir; if (__privateGet(this, _fontInspectorEnabled)) { textDiv.dataset.fontName = style.fontSubstitutionLoadedName || geom.fontName; } if (angle !== 0) { textDivProperties.angle = angle * (180 / Math.PI); } let shouldScaleText = false; if (geom.str.length > 1) { shouldScaleText = true; } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { const absScaleX = Math.abs(geom.transform[0]), absScaleY = Math.abs(geom.transform[3]); if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { shouldScaleText = true; } } if (shouldScaleText) { textDivProperties.canvasWidth = style.vertical ? geom.height : geom.width; } __privateGet(this, _textDivProperties).set(textDiv, textDivProperties); __privateGet(this, _layoutTextParams).div = textDiv; __privateGet(this, _layoutTextParams).properties = textDivProperties; __privateMethod(this, _layout, layout_fn).call(this, __privateGet(this, _layoutTextParams)); if (textDivProperties.hasText) { __privateGet(this, _container2).append(textDiv); } if (textDivProperties.hasEOL) { const br = document.createElement("br"); br.setAttribute("role", "presentation"); __privateGet(this, _container2).append(br); } }; _layout = new WeakSet(); layout_fn = function(params) { const { div, properties, ctx, prevFontSize, prevFontFamily } = params; const { style } = div; let transform = ""; if (__privateGet(_TextLayer, _minFontSize) > 1) { transform = `scale(${1 / __privateGet(_TextLayer, _minFontSize)})`; } if (properties.canvasWidth !== 0 && properties.hasText) { const { fontFamily } = style; const { canvasWidth, fontSize } = properties; if (prevFontSize !== fontSize || prevFontFamily !== fontFamily) { ctx.font = `${fontSize * __privateGet(this, _scale)}px ${fontFamily}`; params.prevFontSize = fontSize; params.prevFontFamily = fontFamily; } const { width } = ctx.measureText(div.textContent); if (width > 0) { transform = `scaleX(${canvasWidth * __privateGet(this, _scale) / width}) ${transform}`; } } if (properties.angle !== 0) { transform = `rotate(${properties.angle}deg) ${transform}`; } if (transform.length > 0) { style.transform = transform; } }; _getCtx = new WeakSet(); getCtx_fn = function(lang = null) { let canvasContext = __privateGet(this, _canvasContexts).get(lang || (lang = "")); if (!canvasContext) { const canvas = document.createElement("canvas"); canvas.className = "hiddenCanvasElement"; canvas.lang = lang; document.body.append(canvas); canvasContext = canvas.getContext("2d", { alpha: false, willReadFrequently: true }); __privateGet(this, _canvasContexts).set(lang, canvasContext); } return canvasContext; }; _ensureMinFontSizeComputed = new WeakSet(); ensureMinFontSizeComputed_fn = function() { if (__privateGet(this, _minFontSize) !== null) { return; } const div = document.createElement("div"); div.style.opacity = 0; div.style.lineHeight = 1; div.style.fontSize = "1px"; div.style.position = "absolute"; div.textContent = "X"; document.body.append(div); __privateSet(this, _minFontSize, div.getBoundingClientRect().height); div.remove(); }; _getAscent = new WeakSet(); getAscent_fn = function(fontFamily, lang) { const cachedAscent = __privateGet(this, _ascentCache).get(fontFamily); if (cachedAscent) { return cachedAscent; } const ctx = __privateMethod(this, _getCtx, getCtx_fn).call(this, lang); const savedFont = ctx.font; ctx.canvas.width = ctx.canvas.height = DEFAULT_FONT_SIZE; ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; const metrics = ctx.measureText(""); let ascent = metrics.fontBoundingBoxAscent; let descent = Math.abs(metrics.fontBoundingBoxDescent); if (ascent) { const ratio2 = ascent / (ascent + descent); __privateGet(this, _ascentCache).set(fontFamily, ratio2); ctx.canvas.width = ctx.canvas.height = 0; ctx.font = savedFont; return ratio2; } ctx.strokeStyle = "red"; ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); ctx.strokeText("g", 0, 0); let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; descent = 0; for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { if (pixels[i] > 0) { descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); break; } } ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; ascent = 0; for (let i = 0, ii = pixels.length; i < ii; i += 4) { if (pixels[i] > 0) { ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); break; } } ctx.canvas.width = ctx.canvas.height = 0; ctx.font = savedFont; const ratio = ascent ? ascent / (ascent + descent) : DEFAULT_FONT_ASCENT; __privateGet(this, _ascentCache).set(fontFamily, ratio); return ratio; }; __privateAdd(TextLayer, _getCtx); __privateAdd(TextLayer, _ensureMinFontSizeComputed); __privateAdd(TextLayer, _getAscent); __privateAdd(TextLayer, _ascentCache, /* @__PURE__ */ new Map()); __privateAdd(TextLayer, _canvasContexts, /* @__PURE__ */ new Map()); __privateAdd(TextLayer, _minFontSize, null); __privateAdd(TextLayer, _pendingTextLayers, /* @__PURE__ */ new Set()); var XfaText = class { static textContent(xfa) { const items = []; const output = { items, styles: /* @__PURE__ */ Object.create(null) }; function walk(node) { var _a2; if (!node) { return; } let str = null; const name = node.name; if (name === "#text") { str = node.value; } else if (!XfaText.shouldBuildText(name)) { return; } else if ((_a2 = node == null ? void 0 : node.attributes) == null ? void 0 : _a2.textContent) { str = node.attributes.textContent; } else if (node.value) { str = node.value; } if (str !== null) { items.push({ str }); } if (!node.children) { return; } for (const child of node.children) { walk(child); } } walk(xfa); return output; } static shouldBuildText(name) { return !(name === "textarea" || name === "input" || name === "option" || name === "select"); } }; var DEFAULT_RANGE_CHUNK_SIZE = 65536; var RENDERING_CANCELLED_TIMEOUT = 100; var DELAYED_CLEANUP_TIMEOUT = 5e3; var DefaultCanvasFactory = isNodeJS ? NodeCanvasFactory : DOMCanvasFactory; var DefaultCMapReaderFactory = isNodeJS ? NodeCMapReaderFactory : DOMCMapReaderFactory; var DefaultFilterFactory = isNodeJS ? NodeFilterFactory : DOMFilterFactory; var DefaultStandardFontDataFactory = isNodeJS ? NodeStandardFontDataFactory : DOMStandardFontDataFactory; function getDocument(src = {}) { var _a2, _b; if (typeof src === "string" || src instanceof URL) { src = { url: src }; } else if (src instanceof ArrayBuffer || ArrayBuffer.isView(src)) { src = { data: src }; } const task = new PDFDocumentLoadingTask(); const { docId } = task; const url = src.url ? getUrlProp(src.url) : null; const data = src.data ? getDataProp(src.data) : null; const httpHeaders = src.httpHeaders || null; const withCredentials = src.withCredentials === true; const password = (_a2 = src.password) != null ? _a2 : null; const rangeTransport = src.range instanceof PDFDataRangeTransport ? src.range : null; const rangeChunkSize = Number.isInteger(src.rangeChunkSize) && src.rangeChunkSize > 0 ? src.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE; let worker = src.worker instanceof PDFWorker ? src.worker : null; const verbosity2 = src.verbosity; const docBaseUrl = typeof src.docBaseUrl === "string" && !isDataScheme(src.docBaseUrl) ? src.docBaseUrl : null; const cMapUrl = typeof src.cMapUrl === "string" ? src.cMapUrl : null; const cMapPacked = src.cMapPacked !== false; const CMapReaderFactory = src.CMapReaderFactory || DefaultCMapReaderFactory; const standardFontDataUrl = typeof src.standardFontDataUrl === "string" ? src.standardFontDataUrl : null; const StandardFontDataFactory = src.StandardFontDataFactory || DefaultStandardFontDataFactory; const ignoreErrors = src.stopAtErrors !== true; const maxImageSize = Number.isInteger(src.maxImageSize) && src.maxImageSize > -1 ? src.maxImageSize : -1; const isEvalSupported2 = src.isEvalSupported !== false; const isOffscreenCanvasSupported = typeof src.isOffscreenCanvasSupported === "boolean" ? src.isOffscreenCanvasSupported : !isNodeJS; const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes) ? src.canvasMaxAreaInBytes : -1; const disableFontFace = typeof src.disableFontFace === "boolean" ? src.disableFontFace : isNodeJS; const fontExtraProperties = src.fontExtraProperties === true; const enableXfa = src.enableXfa === true; const ownerDocument = src.ownerDocument || globalThis.document; const disableRange = src.disableRange === true; const disableStream = src.disableStream === true; const disableAutoFetch = src.disableAutoFetch === true; const pdfBug = src.pdfBug === true; const enableHWA = src.enableHWA === true; const length = rangeTransport ? rangeTransport.length : (_b = src.length) != null ? _b : NaN; const useSystemFonts = typeof src.useSystemFonts === "boolean" ? src.useSystemFonts : !isNodeJS && !disableFontFace; const useWorkerFetch = typeof src.useWorkerFetch === "boolean" ? src.useWorkerFetch : CMapReaderFactory === DOMCMapReaderFactory && StandardFontDataFactory === DOMStandardFontDataFactory && cMapUrl && standardFontDataUrl && isValidFetchUrl(cMapUrl, document.baseURI) && isValidFetchUrl(standardFontDataUrl, document.baseURI); const canvasFactory = src.canvasFactory || new DefaultCanvasFactory({ ownerDocument, enableHWA }); const filterFactory = src.filterFactory || new DefaultFilterFactory({ docId, ownerDocument }); const styleElement = null; setVerbosityLevel(verbosity2); const transportFactory = { canvasFactory, filterFactory }; if (!useWorkerFetch) { transportFactory.cMapReaderFactory = new CMapReaderFactory({ baseUrl: cMapUrl, isCompressed: cMapPacked }); transportFactory.standardFontDataFactory = new StandardFontDataFactory({ baseUrl: standardFontDataUrl }); } if (!worker) { const workerParams = { verbosity: verbosity2, port: GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } const docParams = { docId, apiVersion: "4.6.82", data, password, disableAutoFetch, rangeChunkSize, length, docBaseUrl, enableXfa, evaluatorOptions: { maxImageSize, disableFontFace, ignoreErrors, isEvalSupported: isEvalSupported2, isOffscreenCanvasSupported, canvasMaxAreaInBytes, fontExtraProperties, useSystemFonts, cMapUrl: useWorkerFetch ? cMapUrl : null, standardFontDataUrl: useWorkerFetch ? standardFontDataUrl : null } }; const transportParams = { disableFontFace, fontExtraProperties, ownerDocument, pdfBug, styleElement, loadingParams: { disableAutoFetch, enableXfa } }; worker.promise.then(function() { if (task.destroyed) { throw new Error("Loading aborted"); } if (worker.destroyed) { throw new Error("Worker was destroyed"); } const workerIdPromise = worker.messageHandler.sendWithPromise("GetDocRequest", docParams, data ? [data.buffer] : null); let networkStream; if (rangeTransport) { networkStream = new PDFDataTransportStream(rangeTransport, { disableRange, disableStream }); } else if (!data) { if (!url) { throw new Error("getDocument - no `url` parameter provided."); } const createPDFNetworkStream = (params) => { if (isNodeJS) { const isFetchSupported = function() { return typeof fetch !== "undefined" && typeof Response !== "undefined" && "body" in Response.prototype; }; return isFetchSupported() && isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNodeStream(params); } return isValidFetchUrl(params.url) ? new PDFFetchStream(params) : new PDFNetworkStream(params); }; networkStream = createPDFNetworkStream({ url, length, httpHeaders, withCredentials, rangeChunkSize, disableRange, disableStream }); } return workerIdPromise.then((workerId) => { if (task.destroyed) { throw new Error("Loading aborted"); } if (worker.destroyed) { throw new Error("Worker was destroyed"); } const messageHandler = new MessageHandler(docId, workerId, worker.port); const transport = new WorkerTransport(messageHandler, task, networkStream, transportParams, transportFactory); task._transport = transport; messageHandler.send("Ready", null); }); }).catch(task._capability.reject); return task; } function getUrlProp(val) { if (val instanceof URL) { return val.href; } try { return new URL(val, window.location).href; } catch (e) { if (isNodeJS && typeof val === "string") { return val; } } throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property."); } function getDataProp(val) { if (isNodeJS && typeof Buffer !== "undefined" && val instanceof Buffer) { throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`."); } if (val instanceof Uint8Array && val.byteLength === val.buffer.byteLength) { return val; } if (typeof val === "string") { return stringToBytes(val); } if (val instanceof ArrayBuffer || ArrayBuffer.isView(val) || typeof val === "object" && !isNaN(val == null ? void 0 : val.length)) { return new Uint8Array(val); } throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property."); } function isRefProxy(ref) { return typeof ref === "object" && Number.isInteger(ref == null ? void 0 : ref.num) && ref.num >= 0 && Number.isInteger(ref == null ? void 0 : ref.gen) && ref.gen >= 0; } var _docId2; var _PDFDocumentLoadingTask = class { constructor() { this._capability = Promise.withResolvers(); this._transport = null; this._worker = null; this.docId = `d${__privateWrapper(_PDFDocumentLoadingTask, _docId2)._++}`; this.destroyed = false; this.onPassword = null; this.onProgress = null; } get promise() { return this._capability.promise; } async destroy() { var _a2, _b, _c; this.destroyed = true; try { if ((_a2 = this._worker) == null ? void 0 : _a2.port) { this._worker._pendingDestroy = true; } await ((_b = this._transport) == null ? void 0 : _b.destroy()); } catch (ex) { if ((_c = this._worker) == null ? void 0 : _c.port) { delete this._worker._pendingDestroy; } throw ex; } this._transport = null; if (this._worker) { this._worker.destroy(); this._worker = null; } } }; var PDFDocumentLoadingTask = _PDFDocumentLoadingTask; _docId2 = new WeakMap(); __privateAdd(PDFDocumentLoadingTask, _docId2, 0); var PDFDataRangeTransport = class { constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { this.length = length; this.initialData = initialData; this.progressiveDone = progressiveDone; this.contentDispositionFilename = contentDispositionFilename; this._rangeListeners = []; this._progressListeners = []; this._progressiveReadListeners = []; this._progressiveDoneListeners = []; this._readyCapability = Promise.withResolvers(); } addRangeListener(listener) { this._rangeListeners.push(listener); } addProgressListener(listener) { this._progressListeners.push(listener); } addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } addProgressiveDoneListener(listener) { this._progressiveDoneListeners.push(listener); } onDataRange(begin, chunk) { for (const listener of this._rangeListeners) { listener(begin, chunk); } } onDataProgress(loaded, total) { this._readyCapability.promise.then(() => { for (const listener of this._progressListeners) { listener(loaded, total); } }); } onDataProgressiveRead(chunk) { this._readyCapability.promise.then(() => { for (const listener of this._progressiveReadListeners) { listener(chunk); } }); } onDataProgressiveDone() { this._readyCapability.promise.then(() => { for (const listener of this._progressiveDoneListeners) { listener(); } }); } transportReady() { this._readyCapability.resolve(); } requestDataRange(begin, end) { unreachable("Abstract method PDFDataRangeTransport.requestDataRange"); } abort() { } }; var PDFDocumentProxy = class { constructor(pdfInfo, transport) { this._pdfInfo = pdfInfo; this._transport = transport; } get annotationStorage() { return this._transport.annotationStorage; } get filterFactory() { return this._transport.filterFactory; } get numPages() { return this._pdfInfo.numPages; } get fingerprints() { return this._pdfInfo.fingerprints; } get isPureXfa() { return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); } get allXfaHtml() { return this._transport._htmlForXfa; } getPage(pageNumber) { return this._transport.getPage(pageNumber); } getPageIndex(ref) { return this._transport.getPageIndex(ref); } getDestinations() { return this._transport.getDestinations(); } getDestination(id) { return this._transport.getDestination(id); } getPageLabels() { return this._transport.getPageLabels(); } getPageLayout() { return this._transport.getPageLayout(); } getPageMode() { return this._transport.getPageMode(); } getViewerPreferences() { return this._transport.getViewerPreferences(); } getOpenAction() { return this._transport.getOpenAction(); } getAttachments() { return this._transport.getAttachments(); } getJSActions() { return this._transport.getDocJSActions(); } getOutline() { return this._transport.getOutline(); } getOptionalContentConfig({ intent = "display" } = {}) { const { renderingIntent } = this._transport.getRenderingIntent(intent); return this._transport.getOptionalContentConfig(renderingIntent); } getPermissions() { return this._transport.getPermissions(); } getMetadata() { return this._transport.getMetadata(); } getMarkInfo() { return this._transport.getMarkInfo(); } getData() { return this._transport.getData(); } saveDocument() { return this._transport.saveDocument(); } getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } cleanup(keepLoadedFonts = false) { return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); } destroy() { return this.loadingTask.destroy(); } cachedPageNumber(ref) { return this._transport.cachedPageNumber(ref); } get loadingParams() { return this._transport.loadingParams; } get loadingTask() { return this._transport.loadingTask; } getFieldObjects() { return this._transport.getFieldObjects(); } hasJSActions() { return this._transport.hasJSActions(); } getCalculationOrderIds() { return this._transport.getCalculationOrderIds(); } }; var _delayedCleanupTimeout, _pendingCleanup, _tryCleanup, tryCleanup_fn, _abortDelayedCleanup, abortDelayedCleanup_fn; var PDFPageProxy = class { constructor(pageIndex, pageInfo, transport, pdfBug = false) { __privateAdd(this, _tryCleanup); __privateAdd(this, _abortDelayedCleanup); __privateAdd(this, _delayedCleanupTimeout, null); __privateAdd(this, _pendingCleanup, false); this._pageIndex = pageIndex; this._pageInfo = pageInfo; this._transport = transport; this._stats = pdfBug ? new StatTimer() : null; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this._maybeCleanupAfterRender = false; this._intentStates = /* @__PURE__ */ new Map(); this.destroyed = false; } get pageNumber() { return this._pageIndex + 1; } get rotate() { return this._pageInfo.rotate; } get ref() { return this._pageInfo.ref; } get userUnit() { return this._pageInfo.userUnit; } get view() { return this._pageInfo.view; } getViewport({ scale, rotation = this.rotate, offsetX = 0, offsetY = 0, dontFlip = false } = {}) { return new PageViewport({ viewBox: this.view, scale, rotation, offsetX, offsetY, dontFlip }); } getAnnotations({ intent = "display" } = {}) { const { renderingIntent } = this._transport.getRenderingIntent(intent); return this._transport.getAnnotations(this._pageIndex, renderingIntent); } getJSActions() { return this._transport.getPageJSActions(this._pageIndex); } get filterFactory() { return this._transport.filterFactory; } get isPureXfa() { return shadow(this, "isPureXfa", !!this._transport._htmlForXfa); } async getXfa() { var _a2; return ((_a2 = this._transport._htmlForXfa) == null ? void 0 : _a2.children[this._pageIndex]) || null; } render({ canvasContext, viewport, intent = "display", annotationMode = AnnotationMode.ENABLE, transform = null, background = null, optionalContentConfigPromise = null, annotationCanvasMap = null, pageColors = null, printAnnotationStorage = null, isEditing = false }) { var _a2, _b; (_a2 = this._stats) == null ? void 0 : _a2.time("Overall"); const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing); const { renderingIntent, cacheKey } = intentArgs; __privateSet(this, _pendingCleanup, false); __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); optionalContentConfigPromise || (optionalContentConfigPromise = this._transport.getOptionalContentConfig(renderingIntent)); let intentState = this._intentStates.get(cacheKey); if (!intentState) { intentState = /* @__PURE__ */ Object.create(null); this._intentStates.set(cacheKey, intentState); } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } const intentPrint = !!(renderingIntent & RenderingIntentFlag.PRINT); if (!intentState.displayReadyCapability) { intentState.displayReadyCapability = Promise.withResolvers(); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false, separateAnnots: null }; (_b = this._stats) == null ? void 0 : _b.time("Page Request"); this._pumpOperatorList(intentArgs); } const complete = (error) => { var _a3; intentState.renderTasks.delete(internalRenderTask); if (this._maybeCleanupAfterRender || intentPrint) { __privateSet(this, _pendingCleanup, true); } __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, !intentPrint); if (error) { internalRenderTask.capability.reject(error); this._abortOperatorList({ intentState, reason: error instanceof Error ? error : new Error(error) }); } else { internalRenderTask.capability.resolve(); } if (this._stats) { this._stats.timeEnd("Rendering"); this._stats.timeEnd("Overall"); if ((_a3 = globalThis.Stats) == null ? void 0 : _a3.enabled) { globalThis.Stats.add(this.pageNumber, this._stats); } } }; const internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext, viewport, transform, background }, objs: this.objs, commonObjs: this.commonObjs, annotationCanvasMap, operatorList: intentState.operatorList, pageIndex: this._pageIndex, canvasFactory: this._transport.canvasFactory, filterFactory: this._transport.filterFactory, useRequestAnimationFrame: !intentPrint, pdfBug: this._pdfBug, pageColors }); (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(internalRenderTask); const renderTask = internalRenderTask.task; Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { var _a3; if (this.destroyed) { complete(); return; } (_a3 = this._stats) == null ? void 0 : _a3.time("Rendering"); if (!(optionalContentConfig.renderingIntent & renderingIntent)) { throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods."); } internalRenderTask.initializeGraphics({ transparency, optionalContentConfig }); internalRenderTask.operatorListChanged(); }).catch(complete); return renderTask; } getOperatorList({ intent = "display", annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false } = {}) { var _a2; function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); intentState.renderTasks.delete(opListTask); } } const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, printAnnotationStorage, isEditing, true); let intentState = this._intentStates.get(intentArgs.cacheKey); if (!intentState) { intentState = /* @__PURE__ */ Object.create(null); this._intentStates.set(intentArgs.cacheKey, intentState); } let opListTask; if (!intentState.opListReadCapability) { opListTask = /* @__PURE__ */ Object.create(null); opListTask.operatorListChanged = operatorListChanged; intentState.opListReadCapability = Promise.withResolvers(); (intentState.renderTasks || (intentState.renderTasks = /* @__PURE__ */ new Set())).add(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false, separateAnnots: null }; (_a2 = this._stats) == null ? void 0 : _a2.time("Page Request"); this._pumpOperatorList(intentArgs); } return intentState.opListReadCapability.promise; } streamTextContent({ includeMarkedContent = false, disableNormalization = false } = {}) { const TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream("GetTextContent", { pageIndex: this._pageIndex, includeMarkedContent: includeMarkedContent === true, disableNormalization: disableNormalization === true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, size(textContent) { return textContent.items.length; } }); } getTextContent(params = {}) { if (this._transport._htmlForXfa) { return this.getXfa().then((xfa) => XfaText.textContent(xfa)); } const readableStream = this.streamTextContent(params); return new Promise(function(resolve, reject) { function pump() { reader.read().then(function({ value, done }) { var _a2; if (done) { resolve(textContent); return; } (_a2 = textContent.lang) != null ? _a2 : textContent.lang = value.lang; Object.assign(textContent.styles, value.styles); textContent.items.push(...value.items); pump(); }, reject); } const reader = readableStream.getReader(); const textContent = { items: [], styles: /* @__PURE__ */ Object.create(null), lang: null }; pump(); }); } getStructTree() { return this._transport.getStructTree(this._pageIndex); } _destroy() { this.destroyed = true; const waitOn = []; for (const intentState of this._intentStates.values()) { this._abortOperatorList({ intentState, reason: new Error("Page was destroyed."), force: true }); if (intentState.opListReadCapability) { continue; } for (const internalRenderTask of intentState.renderTasks) { waitOn.push(internalRenderTask.completed); internalRenderTask.cancel(); } } this.objs.clear(); __privateSet(this, _pendingCleanup, false); __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); return Promise.all(waitOn); } cleanup(resetStats = false) { __privateSet(this, _pendingCleanup, true); const success = __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false); if (resetStats && success) { this._stats && (this._stats = new StatTimer()); } return success; } _startRenderPage(transparency, cacheKey) { var _a2, _b; const intentState = this._intentStates.get(cacheKey); if (!intentState) { return; } (_a2 = this._stats) == null ? void 0 : _a2.timeEnd("Page Request"); (_b = intentState.displayReadyCapability) == null ? void 0 : _b.resolve(transparency); } _renderPageChunk(operatorListChunk, intentState) { for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); } intentState.operatorList.lastChunk = operatorListChunk.lastChunk; intentState.operatorList.separateAnnots = operatorListChunk.separateAnnots; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } if (operatorListChunk.lastChunk) { __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true); } } _pumpOperatorList({ renderingIntent, cacheKey, annotationStorageSerializable, modifiedIds }) { const { map, transfer } = annotationStorageSerializable; const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { pageIndex: this._pageIndex, intent: renderingIntent, cacheKey, annotationStorage: map, modifiedIds }, transfer); const reader = readableStream.getReader(); const intentState = this._intentStates.get(cacheKey); intentState.streamReader = reader; const pump = () => { reader.read().then(({ value, done }) => { if (done) { intentState.streamReader = null; return; } if (this._transport.destroyed) { return; } this._renderPageChunk(value, intentState); pump(); }, (reason) => { intentState.streamReader = null; if (this._transport.destroyed) { return; } if (intentState.operatorList) { intentState.operatorList.lastChunk = true; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, true); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(reason); } else if (intentState.opListReadCapability) { intentState.opListReadCapability.reject(reason); } else { throw reason; } }); }; pump(); } _abortOperatorList({ intentState, reason, force = false }) { if (!intentState.streamReader) { return; } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } if (!force) { if (intentState.renderTasks.size > 0) { return; } if (reason instanceof RenderingCancelledException) { let delay = RENDERING_CANCELLED_TIMEOUT; if (reason.extraDelay > 0 && reason.extraDelay < 1e3) { delay += reason.extraDelay; } intentState.streamReaderCancelTimeout = setTimeout(() => { intentState.streamReaderCancelTimeout = null; this._abortOperatorList({ intentState, reason, force: true }); }, delay); return; } } intentState.streamReader.cancel(new AbortException(reason.message)).catch(() => { }); intentState.streamReader = null; if (this._transport.destroyed) { return; } for (const [curCacheKey, curIntentState] of this._intentStates) { if (curIntentState === intentState) { this._intentStates.delete(curCacheKey); break; } } this.cleanup(); } get stats() { return this._stats; } }; _delayedCleanupTimeout = new WeakMap(); _pendingCleanup = new WeakMap(); _tryCleanup = new WeakSet(); tryCleanup_fn = function(delayed = false) { __privateMethod(this, _abortDelayedCleanup, abortDelayedCleanup_fn).call(this); if (!__privateGet(this, _pendingCleanup) || this.destroyed) { return false; } if (delayed) { __privateSet(this, _delayedCleanupTimeout, setTimeout(() => { __privateSet(this, _delayedCleanupTimeout, null); __privateMethod(this, _tryCleanup, tryCleanup_fn).call(this, false); }, DELAYED_CLEANUP_TIMEOUT)); return false; } for (const { renderTasks, operatorList } of this._intentStates.values()) { if (renderTasks.size > 0 || !operatorList.lastChunk) { return false; } } this._intentStates.clear(); this.objs.clear(); __privateSet(this, _pendingCleanup, false); return true; }; _abortDelayedCleanup = new WeakSet(); abortDelayedCleanup_fn = function() { if (__privateGet(this, _delayedCleanupTimeout)) { clearTimeout(__privateGet(this, _delayedCleanupTimeout)); __privateSet(this, _delayedCleanupTimeout, null); } }; var _listeners, _deferred; var LoopbackPort = class { constructor() { __privateAdd(this, _listeners, /* @__PURE__ */ new Set()); __privateAdd(this, _deferred, Promise.resolve()); } postMessage(obj, transfer) { const event = { data: structuredClone(obj, transfer ? { transfer } : null) }; __privateGet(this, _deferred).then(() => { for (const listener of __privateGet(this, _listeners)) { listener.call(this, event); } }); } addEventListener(name, listener) { __privateGet(this, _listeners).add(listener); } removeEventListener(name, listener) { __privateGet(this, _listeners).delete(listener); } terminate() { __privateGet(this, _listeners).clear(); } }; _listeners = new WeakMap(); _deferred = new WeakMap(); var _fakeWorkerId, _isWorkerDisabled, _workerPorts, _resolve, resolve_fn, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get; var _PDFWorker = class { constructor({ name = null, port = null, verbosity: verbosity2 = getVerbosityLevel() } = {}) { __privateAdd(this, _resolve); var _a2; this.name = name; this.destroyed = false; this.verbosity = verbosity2; this._readyCapability = Promise.withResolvers(); this._port = null; this._webWorker = null; this._messageHandler = null; if (port) { if ((_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.has(port)) { throw new Error("Cannot use more than one PDFWorker per port."); } (__privateGet(_PDFWorker, _workerPorts) || __privateSet(_PDFWorker, _workerPorts, /* @__PURE__ */ new WeakMap())).set(port, this); this._initializeFromPort(port); return; } this._initialize(); } get promise() { if (isNodeJS) { return Promise.all([NodePackages.promise, this._readyCapability.promise]); } return this._readyCapability.promise; } get port() { return this._port; } get messageHandler() { return this._messageHandler; } _initializeFromPort(port) { this._port = port; this._messageHandler = new MessageHandler("main", "worker", port); this._messageHandler.on("ready", function() { }); __privateMethod(this, _resolve, resolve_fn).call(this); } _initialize() { if (__privateGet(_PDFWorker, _isWorkerDisabled) || __privateGet(_PDFWorker, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) { this._setupFakeWorker(); return; } let { workerSrc } = _PDFWorker; try { if (!_PDFWorker._isSameOrigin(window.location.href, workerSrc)) { workerSrc = _PDFWorker._createCDNWrapper(new URL(workerSrc, window.location).href); } const worker = new Worker(workerSrc, { type: "module" }); const messageHandler = new MessageHandler("main", "worker", worker); const terminateEarly = () => { ac.abort(); messageHandler.destroy(); worker.terminate(); if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); } else { this._setupFakeWorker(); } }; const ac = new AbortController(); worker.addEventListener("error", () => { if (!this._webWorker) { terminateEarly(); } }, { signal: ac.signal }); messageHandler.on("test", (data) => { ac.abort(); if (this.destroyed || !data) { terminateEarly(); return; } this._messageHandler = messageHandler; this._port = worker; this._webWorker = worker; __privateMethod(this, _resolve, resolve_fn).call(this); }); messageHandler.on("ready", (data) => { ac.abort(); if (this.destroyed) { terminateEarly(); return; } try { sendTest(); } catch (e) { this._setupFakeWorker(); } }); const sendTest = () => { const testObj = new Uint8Array(); messageHandler.send("test", testObj, [testObj.buffer]); }; sendTest(); return; } catch (e) { info("The worker has been disabled."); } this._setupFakeWorker(); } _setupFakeWorker() { if (!__privateGet(_PDFWorker, _isWorkerDisabled)) { warn("Setting up fake worker."); __privateSet(_PDFWorker, _isWorkerDisabled, true); } _PDFWorker._setupFakeWorkerGlobal.then((WorkerMessageHandler) => { if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); return; } const port = new LoopbackPort(); this._port = port; const id = `fake${__privateWrapper(_PDFWorker, _fakeWorkerId)._++}`; const workerHandler = new MessageHandler(id + "_worker", id, port); WorkerMessageHandler.setup(workerHandler, port); this._messageHandler = new MessageHandler(id, id + "_worker", port); __privateMethod(this, _resolve, resolve_fn).call(this); }).catch((reason) => { this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); }); } destroy() { var _a2; this.destroyed = true; if (this._webWorker) { this._webWorker.terminate(); this._webWorker = null; } (_a2 = __privateGet(_PDFWorker, _workerPorts)) == null ? void 0 : _a2.delete(this._port); this._port = null; if (this._messageHandler) { this._messageHandler.destroy(); this._messageHandler = null; } } static fromPort(params) { var _a2; if (!(params == null ? void 0 : params.port)) { throw new Error("PDFWorker.fromPort - invalid method signature."); } const cachedPort = (_a2 = __privateGet(this, _workerPorts)) == null ? void 0 : _a2.get(params.port); if (cachedPort) { if (cachedPort._pendingDestroy) { throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls."); } return cachedPort; } return new _PDFWorker(params); } static get workerSrc() { if (GlobalWorkerOptions.workerSrc) { return GlobalWorkerOptions.workerSrc; } throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); } static get _setupFakeWorkerGlobal() { const loader = async () => { if (__privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get)) { return __privateGet(this, _mainThreadWorkerMessageHandler, mainThreadWorkerMessageHandler_get); } const worker = await import( /*webpackIgnore: true*/ this.workerSrc ); return worker.WorkerMessageHandler; }; return shadow(this, "_setupFakeWorkerGlobal", loader()); } }; var PDFWorker = _PDFWorker; _fakeWorkerId = new WeakMap(); _isWorkerDisabled = new WeakMap(); _workerPorts = new WeakMap(); _resolve = new WeakSet(); resolve_fn = function() { this._readyCapability.resolve(); this._messageHandler.send("configure", { verbosity: this.verbosity }); }; _mainThreadWorkerMessageHandler = new WeakSet(); mainThreadWorkerMessageHandler_get = function() { var _a2; try { return ((_a2 = globalThis.pdfjsWorker) == null ? void 0 : _a2.WorkerMessageHandler) || null; } catch (e) { return null; } }; __privateAdd(PDFWorker, _mainThreadWorkerMessageHandler); __privateAdd(PDFWorker, _fakeWorkerId, 0); __privateAdd(PDFWorker, _isWorkerDisabled, false); __privateAdd(PDFWorker, _workerPorts, void 0); (() => { if (isNodeJS) { __privateSet(_PDFWorker, _isWorkerDisabled, true); GlobalWorkerOptions.workerSrc || (GlobalWorkerOptions.workerSrc = "./pdf.worker.mjs"); } _PDFWorker._isSameOrigin = (baseUrl, otherUrl) => { let base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } const other = new URL(otherUrl, base); return base.origin === other.origin; }; _PDFWorker._createCDNWrapper = (url) => { const wrapper = `await import("${url}");`; return URL.createObjectURL(new Blob([wrapper], { type: "text/javascript" })); }; })(); var _methodPromises, _pageCache, _pagePromises, _pageRefCache, _passwordCapability, _cacheSimpleMethod, cacheSimpleMethod_fn; var WorkerTransport = class { constructor(messageHandler, loadingTask, networkStream, params, factory) { __privateAdd(this, _cacheSimpleMethod); __privateAdd(this, _methodPromises, /* @__PURE__ */ new Map()); __privateAdd(this, _pageCache, /* @__PURE__ */ new Map()); __privateAdd(this, _pagePromises, /* @__PURE__ */ new Map()); __privateAdd(this, _pageRefCache, /* @__PURE__ */ new Map()); __privateAdd(this, _passwordCapability, null); this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new FontLoader({ ownerDocument: params.ownerDocument, styleElement: params.styleElement }); this.loadingParams = params.loadingParams; this._params = params; this.canvasFactory = factory.canvasFactory; this.filterFactory = factory.filterFactory; this.cMapReaderFactory = factory.cMapReaderFactory; this.standardFontDataFactory = factory.standardFontDataFactory; this.destroyed = false; this.destroyCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; this.downloadInfoCapability = Promise.withResolvers(); this.setupMessageHandler(); } get annotationStorage() { return shadow(this, "annotationStorage", new AnnotationStorage()); } getRenderingIntent(intent, annotationMode = AnnotationMode.ENABLE, printAnnotationStorage = null, isEditing = false, isOpList = false) { let renderingIntent = RenderingIntentFlag.DISPLAY; let annotationStorageSerializable = SerializableEmpty; switch (intent) { case "any": renderingIntent = RenderingIntentFlag.ANY; break; case "display": break; case "print": renderingIntent = RenderingIntentFlag.PRINT; break; default: warn(`getRenderingIntent - invalid intent: ${intent}`); } const annotationStorage = renderingIntent & RenderingIntentFlag.PRINT && printAnnotationStorage instanceof PrintAnnotationStorage ? printAnnotationStorage : this.annotationStorage; switch (annotationMode) { case AnnotationMode.DISABLE: renderingIntent += RenderingIntentFlag.ANNOTATIONS_DISABLE; break; case AnnotationMode.ENABLE: break; case AnnotationMode.ENABLE_FORMS: renderingIntent += RenderingIntentFlag.ANNOTATIONS_FORMS; break; case AnnotationMode.ENABLE_STORAGE: renderingIntent += RenderingIntentFlag.ANNOTATIONS_STORAGE; annotationStorageSerializable = annotationStorage.serializable; break; default: warn(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); } if (isEditing) { renderingIntent += RenderingIntentFlag.IS_EDITING; } if (isOpList) { renderingIntent += RenderingIntentFlag.OPLIST; } const { ids: modifiedIds, hash: modifiedIdsHash } = annotationStorage.modifiedIds; const cacheKeyBuf = [renderingIntent, annotationStorageSerializable.hash, modifiedIdsHash]; return { renderingIntent, cacheKey: cacheKeyBuf.join("_"), annotationStorageSerializable, modifiedIds }; } destroy() { var _a2; if (this.destroyCapability) { return this.destroyCapability.promise; } this.destroyed = true; this.destroyCapability = Promise.withResolvers(); (_a2 = __privateGet(this, _passwordCapability)) == null ? void 0 : _a2.reject(new Error("Worker was destroyed during onPassword callback")); const waitOn = []; for (const page of __privateGet(this, _pageCache).values()) { waitOn.push(page._destroy()); } __privateGet(this, _pageCache).clear(); __privateGet(this, _pagePromises).clear(); __privateGet(this, _pageRefCache).clear(); if (this.hasOwnProperty("annotationStorage")) { this.annotationStorage.resetModified(); } const terminated = this.messageHandler.sendWithPromise("Terminate", null); waitOn.push(terminated); Promise.all(waitOn).then(() => { var _a3; this.commonObjs.clear(); this.fontLoader.clear(); __privateGet(this, _methodPromises).clear(); this.filterFactory.destroy(); TextLayer.cleanup(); (_a3 = this._networkStream) == null ? void 0 : _a3.cancelAllRequests(new AbortException("Worker was terminated.")); if (this.messageHandler) { this.messageHandler.destroy(); this.messageHandler = null; } this.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } setupMessageHandler() { const { messageHandler, loadingTask } = this; messageHandler.on("GetReader", (data, sink) => { assert(this._networkStream, "GetReader - no `IPDFStream` instance available."); this._fullReader = this._networkStream.getFullReader(); this._fullReader.onProgress = (evt) => { this._lastProgress = { loaded: evt.loaded, total: evt.total }; }; sink.onPull = () => { this._fullReader.read().then(function({ value, done }) { if (done) { sink.close(); return; } assert(value instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch((reason) => { sink.error(reason); }); }; sink.onCancel = (reason) => { this._fullReader.cancel(reason); sink.ready.catch((readyReason) => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("ReaderHeadersReady", (data) => { const headersCapability = Promise.withResolvers(); const fullReader = this._fullReader; fullReader.headersReady.then(() => { var _a2; if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { if (this._lastProgress) { (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, this._lastProgress); } fullReader.onProgress = (evt) => { var _a3; (_a3 = loadingTask.onProgress) == null ? void 0 : _a3.call(loadingTask, { loaded: evt.loaded, total: evt.total }); }; } headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, contentLength: fullReader.contentLength }); }, headersCapability.reject); return headersCapability.promise; }); messageHandler.on("GetRangeReader", (data, sink) => { assert(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); if (!rangeReader) { sink.close(); return; } sink.onPull = () => { rangeReader.read().then(function({ value, done }) { if (done) { sink.close(); return; } assert(value instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch((reason) => { sink.error(reason); }); }; sink.onCancel = (reason) => { rangeReader.cancel(reason); sink.ready.catch((readyReason) => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("GetDoc", ({ pdfInfo }) => { this._numPages = pdfInfo.numPages; this._htmlForXfa = pdfInfo.htmlForXfa; delete pdfInfo.htmlForXfa; loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); }); messageHandler.on("DocException", function(ex) { let reason; switch (ex.name) { case "PasswordException": reason = new PasswordException(ex.message, ex.code); break; case "InvalidPDFException": reason = new InvalidPDFException(ex.message); break; case "MissingPDFException": reason = new MissingPDFException(ex.message); break; case "UnexpectedResponseException": reason = new UnexpectedResponseException(ex.message, ex.status); break; case "UnknownErrorException": reason = new UnknownErrorException(ex.message, ex.details); break; default: unreachable("DocException - expected a valid Error."); } loadingTask._capability.reject(reason); }); messageHandler.on("PasswordRequest", (exception) => { __privateSet(this, _passwordCapability, Promise.withResolvers()); if (loadingTask.onPassword) { const updatePassword = (password) => { if (password instanceof Error) { __privateGet(this, _passwordCapability).reject(password); } else { __privateGet(this, _passwordCapability).resolve({ password }); } }; try { loadingTask.onPassword(updatePassword, exception.code); } catch (ex) { __privateGet(this, _passwordCapability).reject(ex); } } else { __privateGet(this, _passwordCapability).reject(new PasswordException(exception.message, exception.code)); } return __privateGet(this, _passwordCapability).promise; }); messageHandler.on("DataLoaded", (data) => { var _a2; (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, { loaded: data.length, total: data.length }); this.downloadInfoCapability.resolve(data); }); messageHandler.on("StartRenderPage", (data) => { if (this.destroyed) { return; } const page = __privateGet(this, _pageCache).get(data.pageIndex); page._startRenderPage(data.transparency, data.cacheKey); }); messageHandler.on("commonobj", ([id, type, exportedData]) => { var _a2; if (this.destroyed) { return null; } if (this.commonObjs.has(id)) { return null; } switch (type) { case "Font": const { disableFontFace, fontExtraProperties, pdfBug } = this._params; if ("error" in exportedData) { const exportedError = exportedData.error; warn(`Error during font loading: ${exportedError}`); this.commonObjs.resolve(id, exportedError); break; } const inspectFont = pdfBug && ((_a2 = globalThis.FontInspector) == null ? void 0 : _a2.enabled) ? (font2, url) => globalThis.FontInspector.fontAdded(font2, url) : null; const font = new FontFaceObject(exportedData, { disableFontFace, inspectFont }); this.fontLoader.bind(font).catch(() => messageHandler.sendWithPromise("FontFallback", { id })).finally(() => { if (!fontExtraProperties && font.data) { font.data = null; } this.commonObjs.resolve(id, font); }); break; case "CopyLocalImage": const { imageRef } = exportedData; assert(imageRef, "The imageRef must be defined."); for (const pageProxy of __privateGet(this, _pageCache).values()) { for (const [, data] of pageProxy.objs) { if ((data == null ? void 0 : data.ref) !== imageRef) { continue; } if (!data.dataLen) { return null; } this.commonObjs.resolve(id, structuredClone(data)); return data.dataLen; } } break; case "FontPath": case "Image": case "Pattern": this.commonObjs.resolve(id, exportedData); break; default: throw new Error(`Got unknown common object type ${type}`); } return null; }); messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { var _a2; if (this.destroyed) { return; } const pageProxy = __privateGet(this, _pageCache).get(pageIndex); if (pageProxy.objs.has(id)) { return; } if (pageProxy._intentStates.size === 0) { (_a2 = imageData == null ? void 0 : imageData.bitmap) == null ? void 0 : _a2.close(); return; } switch (type) { case "Image": pageProxy.objs.resolve(id, imageData); if ((imageData == null ? void 0 : imageData.dataLen) > MAX_IMAGE_SIZE_TO_CACHE) { pageProxy._maybeCleanupAfterRender = true; } break; case "Pattern": pageProxy.objs.resolve(id, imageData); break; default: throw new Error(`Got unknown object type ${type}`); } }); messageHandler.on("DocProgress", (data) => { var _a2; if (this.destroyed) { return; } (_a2 = loadingTask.onProgress) == null ? void 0 : _a2.call(loadingTask, { loaded: data.loaded, total: data.total }); }); messageHandler.on("FetchBuiltInCMap", (data) => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } if (!this.cMapReaderFactory) { return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); } return this.cMapReaderFactory.fetch(data); }); messageHandler.on("FetchStandardFontData", (data) => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } if (!this.standardFontDataFactory) { return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); } return this.standardFontDataFactory.fetch(data); }); } getData() { return this.messageHandler.sendWithPromise("GetData", null); } saveDocument() { var _a2, _b; if (this.annotationStorage.size <= 0) { warn("saveDocument called while `annotationStorage` is empty, please use the getData-method instead."); } const { map, transfer } = this.annotationStorage.serializable; return this.messageHandler.sendWithPromise("SaveDocument", { isPureXfa: !!this._htmlForXfa, numPages: this._numPages, annotationStorage: map, filename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null }, transfer).finally(() => { this.annotationStorage.resetModified(); }); } getPage(pageNumber) { if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { return Promise.reject(new Error("Invalid page request.")); } const pageIndex = pageNumber - 1, cachedPromise = __privateGet(this, _pagePromises).get(pageIndex); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise("GetPage", { pageIndex }).then((pageInfo) => { if (this.destroyed) { throw new Error("Transport destroyed"); } if (pageInfo.refStr) { __privateGet(this, _pageRefCache).set(pageInfo.refStr, pageNumber); } const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.pdfBug); __privateGet(this, _pageCache).set(pageIndex, page); return page; }); __privateGet(this, _pagePromises).set(pageIndex, promise); return promise; } getPageIndex(ref) { if (!isRefProxy(ref)) { return Promise.reject(new Error("Invalid pageIndex request.")); } return this.messageHandler.sendWithPromise("GetPageIndex", { num: ref.num, gen: ref.gen }); } getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise("GetAnnotations", { pageIndex, intent }); } getFieldObjects() { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetFieldObjects"); } hasJSActions() { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "HasJSActions"); } getCalculationOrderIds() { return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); } getDestinations() { return this.messageHandler.sendWithPromise("GetDestinations", null); } getDestination(id) { if (typeof id !== "string") { return Promise.reject(new Error("Invalid destination request.")); } return this.messageHandler.sendWithPromise("GetDestination", { id }); } getPageLabels() { return this.messageHandler.sendWithPromise("GetPageLabels", null); } getPageLayout() { return this.messageHandler.sendWithPromise("GetPageLayout", null); } getPageMode() { return this.messageHandler.sendWithPromise("GetPageMode", null); } getViewerPreferences() { return this.messageHandler.sendWithPromise("GetViewerPreferences", null); } getOpenAction() { return this.messageHandler.sendWithPromise("GetOpenAction", null); } getAttachments() { return this.messageHandler.sendWithPromise("GetAttachments", null); } getDocJSActions() { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetDocJSActions"); } getPageJSActions(pageIndex) { return this.messageHandler.sendWithPromise("GetPageJSActions", { pageIndex }); } getStructTree(pageIndex) { return this.messageHandler.sendWithPromise("GetStructTree", { pageIndex }); } getOutline() { return this.messageHandler.sendWithPromise("GetOutline", null); } getOptionalContentConfig(renderingIntent) { return __privateMethod(this, _cacheSimpleMethod, cacheSimpleMethod_fn).call(this, "GetOptionalContentConfig").then((data) => new OptionalContentConfig(data, renderingIntent)); } getPermissions() { return this.messageHandler.sendWithPromise("GetPermissions", null); } getMetadata() { const name = "GetMetadata", cachedPromise = __privateGet(this, _methodPromises).get(name); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise(name, null).then((results) => { var _a2, _b, _c, _d; return { info: results[0], metadata: results[1] ? new Metadata(results[1]) : null, contentDispositionFilename: (_b = (_a2 = this._fullReader) == null ? void 0 : _a2.filename) != null ? _b : null, contentLength: (_d = (_c = this._fullReader) == null ? void 0 : _c.contentLength) != null ? _d : null }; }); __privateGet(this, _methodPromises).set(name, promise); return promise; } getMarkInfo() { return this.messageHandler.sendWithPromise("GetMarkInfo", null); } async startCleanup(keepLoadedFonts = false) { if (this.destroyed) { return; } await this.messageHandler.sendWithPromise("Cleanup", null); for (const page of __privateGet(this, _pageCache).values()) { const cleanupSuccessful = page.cleanup(); if (!cleanupSuccessful) { throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); } } this.commonObjs.clear(); if (!keepLoadedFonts) { this.fontLoader.clear(); } __privateGet(this, _methodPromises).clear(); this.filterFactory.destroy(true); TextLayer.cleanup(); } cachedPageNumber(ref) { var _a2; if (!isRefProxy(ref)) { return null; } const refStr = ref.gen === 0 ? `${ref.num}R` : `${ref.num}R${ref.gen}`; return (_a2 = __privateGet(this, _pageRefCache).get(refStr)) != null ? _a2 : null; } }; _methodPromises = new WeakMap(); _pageCache = new WeakMap(); _pagePromises = new WeakMap(); _pageRefCache = new WeakMap(); _passwordCapability = new WeakMap(); _cacheSimpleMethod = new WeakSet(); cacheSimpleMethod_fn = function(name, data = null) { const cachedPromise = __privateGet(this, _methodPromises).get(name); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise(name, data); __privateGet(this, _methodPromises).set(name, promise); return promise; }; var INITIAL_DATA = Symbol("INITIAL_DATA"); var _objs, _ensureObj, ensureObj_fn; var PDFObjects = class { constructor() { __privateAdd(this, _ensureObj); __privateAdd(this, _objs, /* @__PURE__ */ Object.create(null)); } get(objId, callback = null) { if (callback) { const obj2 = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId); obj2.promise.then(() => callback(obj2.data)); return null; } const obj = __privateGet(this, _objs)[objId]; if (!obj || obj.data === INITIAL_DATA) { throw new Error(`Requesting object that isn't resolved yet ${objId}.`); } return obj.data; } has(objId) { const obj = __privateGet(this, _objs)[objId]; return !!obj && obj.data !== INITIAL_DATA; } resolve(objId, data = null) { const obj = __privateMethod(this, _ensureObj, ensureObj_fn).call(this, objId); obj.data = data; obj.resolve(); } clear() { var _a2; for (const objId in __privateGet(this, _objs)) { const { data } = __privateGet(this, _objs)[objId]; (_a2 = data == null ? void 0 : data.bitmap) == null ? void 0 : _a2.close(); } __privateSet(this, _objs, /* @__PURE__ */ Object.create(null)); } *[Symbol.iterator]() { for (const objId in __privateGet(this, _objs)) { const { data } = __privateGet(this, _objs)[objId]; if (data === INITIAL_DATA) { continue; } yield [objId, data]; } } }; _objs = new WeakMap(); _ensureObj = new WeakSet(); ensureObj_fn = function(objId) { var _a2; return (_a2 = __privateGet(this, _objs))[objId] || (_a2[objId] = { ...Promise.withResolvers(), data: INITIAL_DATA }); }; var _internalRenderTask; var RenderTask = class { constructor(internalRenderTask) { __privateAdd(this, _internalRenderTask, null); __privateSet(this, _internalRenderTask, internalRenderTask); this.onContinue = null; } get promise() { return __privateGet(this, _internalRenderTask).capability.promise; } cancel(extraDelay = 0) { __privateGet(this, _internalRenderTask).cancel(null, extraDelay); } get separateAnnots() { const { separateAnnots } = __privateGet(this, _internalRenderTask).operatorList; if (!separateAnnots) { return false; } const { annotationCanvasMap } = __privateGet(this, _internalRenderTask); return separateAnnots.form || separateAnnots.canvas && (annotationCanvasMap == null ? void 0 : annotationCanvasMap.size) > 0; } }; _internalRenderTask = new WeakMap(); var _rAF, _canvasInUse; var _InternalRenderTask = class { constructor({ callback, params, objs, commonObjs, annotationCanvasMap, operatorList, pageIndex, canvasFactory, filterFactory, useRequestAnimationFrame = false, pdfBug = false, pageColors = null }) { __privateAdd(this, _rAF, null); this.callback = callback; this.params = params; this.objs = objs; this.commonObjs = commonObjs; this.annotationCanvasMap = annotationCanvasMap; this.operatorListIdx = null; this.operatorList = operatorList; this._pageIndex = pageIndex; this.canvasFactory = canvasFactory; this.filterFactory = filterFactory; this._pdfBug = pdfBug; this.pageColors = pageColors; this.running = false; this.graphicsReadyCallback = null; this.graphicsReady = false; this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; this.cancelled = false; this.capability = Promise.withResolvers(); this.task = new RenderTask(this); this._cancelBound = this.cancel.bind(this); this._continueBound = this._continue.bind(this); this._scheduleNextBound = this._scheduleNext.bind(this); this._nextBound = this._next.bind(this); this._canvas = params.canvasContext.canvas; } get completed() { return this.capability.promise.catch(function() { }); } initializeGraphics({ transparency = false, optionalContentConfig }) { var _a2, _b; if (this.cancelled) { return; } if (this._canvas) { if (__privateGet(_InternalRenderTask, _canvasInUse).has(this._canvas)) { throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed."); } __privateGet(_InternalRenderTask, _canvasInUse).add(this._canvas); } if (this._pdfBug && ((_a2 = globalThis.StepperManager) == null ? void 0 : _a2.enabled)) { this.stepper = globalThis.StepperManager.create(this._pageIndex); this.stepper.init(this.operatorList); this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } const { canvasContext, viewport, transform, background } = this.params; this.gfx = new CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, { optionalContentConfig }, this.annotationCanvasMap, this.pageColors); this.gfx.beginDrawing({ transform, viewport, transparency, background }); this.operatorListIdx = 0; this.graphicsReady = true; (_b = this.graphicsReadyCallback) == null ? void 0 : _b.call(this); } cancel(error = null, extraDelay = 0) { var _a2; this.running = false; this.cancelled = true; (_a2 = this.gfx) == null ? void 0 : _a2.endDrawing(); if (__privateGet(this, _rAF)) { window.cancelAnimationFrame(__privateGet(this, _rAF)); __privateSet(this, _rAF, null); } __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas); this.callback(error || new RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, extraDelay)); } operatorListChanged() { var _a2; if (!this.graphicsReady) { this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound); return; } (_a2 = this.stepper) == null ? void 0 : _a2.updateOperatorList(this.operatorList); if (this.running) { return; } this._continue(); } _continue() { this.running = true; if (this.cancelled) { return; } if (this.task.onContinue) { this.task.onContinue(this._scheduleNextBound); } else { this._scheduleNext(); } } _scheduleNext() { if (this._useRequestAnimationFrame) { __privateSet(this, _rAF, window.requestAnimationFrame(() => { __privateSet(this, _rAF, null); this._nextBound().catch(this._cancelBound); })); } else { Promise.resolve().then(this._nextBound).catch(this._cancelBound); } } async _next() { if (this.cancelled) { return; } this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); if (this.operatorListIdx === this.operatorList.argsArray.length) { this.running = false; if (this.operatorList.lastChunk) { this.gfx.endDrawing(); __privateGet(_InternalRenderTask, _canvasInUse).delete(this._canvas); this.callback(); } } } }; var InternalRenderTask = _InternalRenderTask; _rAF = new WeakMap(); _canvasInUse = new WeakMap(); __privateAdd(InternalRenderTask, _canvasInUse, /* @__PURE__ */ new WeakSet()); var version = "4.6.82"; var build = "9b541910f"; function makeColorComp(n) { return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); } function scaleAndClamp(x) { return Math.max(0, Math.min(255, 255 * x)); } var ColorConverters = class { static CMYK_G([c, y, m, k]) { return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; } static G_CMYK([g]) { return ["CMYK", 0, 0, 0, 1 - g]; } static G_RGB([g]) { return ["RGB", g, g, g]; } static G_rgb([g]) { g = scaleAndClamp(g); return [g, g, g]; } static G_HTML([g]) { const G = makeColorComp(g); return `#${G}${G}${G}`; } static RGB_G([r, g, b]) { return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; } static RGB_rgb(color2) { return color2.map(scaleAndClamp); } static RGB_HTML(color2) { return `#${color2.map(makeColorComp).join("")}`; } static T_HTML() { return "#00000000"; } static T_rgb() { return [null]; } static CMYK_RGB([c, y, m, k]) { return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; } static CMYK_rgb([c, y, m, k]) { return [scaleAndClamp(1 - Math.min(1, c + k)), scaleAndClamp(1 - Math.min(1, m + k)), scaleAndClamp(1 - Math.min(1, y + k))]; } static CMYK_HTML(components) { const rgb = this.CMYK_RGB(components).slice(1); return this.RGB_HTML(rgb); } static RGB_CMYK([r, g, b]) { const c = 1 - r; const m = 1 - g; const y = 1 - b; const k = Math.min(c, m, y); return ["CMYK", c, m, y, k]; } }; var XfaLayer = class { static setupStorage(html, id, element, storage, intent) { const storedData = storage.getValue(id, { value: null }); switch (element.name) { case "textarea": if (storedData.value !== null) { html.textContent = storedData.value; } if (intent === "print") { break; } html.addEventListener("input", (event) => { storage.setValue(id, { value: event.target.value }); }); break; case "input": if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { if (storedData.value === element.attributes.xfaOn) { html.setAttribute("checked", true); } else if (storedData.value === element.attributes.xfaOff) { html.removeAttribute("checked"); } if (intent === "print") { break; } html.addEventListener("change", (event) => { storage.setValue(id, { value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") }); }); } else { if (storedData.value !== null) { html.setAttribute("value", storedData.value); } if (intent === "print") { break; } html.addEventListener("input", (event) => { storage.setValue(id, { value: event.target.value }); }); } break; case "select": if (storedData.value !== null) { html.setAttribute("value", storedData.value); for (const option of element.children) { if (option.attributes.value === storedData.value) { option.attributes.selected = true; } else if (option.attributes.hasOwnProperty("selected")) { delete option.attributes.selected; } } } html.addEventListener("input", (event) => { const options = event.target.options; const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; storage.setValue(id, { value }); }); break; } } static setAttributes({ html, element, storage = null, intent, linkService }) { const { attributes } = element; const isHTMLAnchorElement = html instanceof HTMLAnchorElement; if (attributes.type === "radio") { attributes.name = `${attributes.name}-${intent}`; } for (const [key, value] of Object.entries(attributes)) { if (value === null || value === void 0) { continue; } switch (key) { case "class": if (value.length) { html.setAttribute(key, value.join(" ")); } break; case "dataId": break; case "id": html.setAttribute("data-element-id", value); break; case "style": Object.assign(html.style, value); break; case "textContent": html.textContent = value; break; default: if (!isHTMLAnchorElement || key !== "href" && key !== "newWindow") { html.setAttribute(key, value); } } } if (isHTMLAnchorElement) { linkService.addLinkAttributes(html, attributes.href, attributes.newWindow); } if (storage && attributes.dataId) { this.setupStorage(html, attributes.dataId, element, storage); } } static render(parameters) { var _a2, _b; const storage = parameters.annotationStorage; const linkService = parameters.linkService; const root = parameters.xfaHtml; const intent = parameters.intent || "display"; const rootHtml = document.createElement(root.name); if (root.attributes) { this.setAttributes({ html: rootHtml, element: root, intent, linkService }); } const isNotForRichText = intent !== "richText"; const rootDiv = parameters.div; rootDiv.append(rootHtml); if (parameters.viewport) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; rootDiv.style.transform = transform; } if (isNotForRichText) { rootDiv.setAttribute("class", "xfaLayer xfaFont"); } const textDivs = []; if (root.children.length === 0) { if (root.value) { const node = document.createTextNode(root.value); rootHtml.append(node); if (isNotForRichText && XfaText.shouldBuildText(root.name)) { textDivs.push(node); } } return { textDivs }; } const stack = [[root, -1, rootHtml]]; while (stack.length > 0) { const [parent, i, html] = stack.at(-1); if (i + 1 === parent.children.length) { stack.pop(); continue; } const child = parent.children[++stack.at(-1)[1]]; if (child === null) { continue; } const { name } = child; if (name === "#text") { const node = document.createTextNode(child.value); textDivs.push(node); html.append(node); continue; } const childHtml = ((_a2 = child == null ? void 0 : child.attributes) == null ? void 0 : _a2.xmlns) ? document.createElementNS(child.attributes.xmlns, name) : document.createElement(name); html.append(childHtml); if (child.attributes) { this.setAttributes({ html: childHtml, element: child, storage, intent, linkService }); } if (((_b = child.children) == null ? void 0 : _b.length) > 0) { stack.push([child, -1, childHtml]); } else if (child.value) { const node = document.createTextNode(child.value); if (isNotForRichText && XfaText.shouldBuildText(name)) { textDivs.push(node); } childHtml.append(node); } } for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { el.setAttribute("readOnly", true); } return { textDivs }; } static update(parameters) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; parameters.div.style.transform = transform; parameters.div.hidden = false; } }; var DEFAULT_TAB_INDEX = 1e3; var annotation_layer_DEFAULT_FONT_SIZE = 9; var GetElementsByNameSet = /* @__PURE__ */ new WeakSet(); function getRectDims(rect) { return { width: rect[2] - rect[0], height: rect[3] - rect[1] }; } var AnnotationElementFactory = class { static create(parameters) { const subtype = parameters.data.annotationType; switch (subtype) { case AnnotationType.LINK: return new LinkAnnotationElement(parameters); case AnnotationType.TEXT: return new TextAnnotationElement(parameters); case AnnotationType.WIDGET: const fieldType = parameters.data.fieldType; switch (fieldType) { case "Tx": return new TextWidgetAnnotationElement(parameters); case "Btn": if (parameters.data.radioButton) { return new RadioButtonWidgetAnnotationElement(parameters); } else if (parameters.data.checkBox) { return new CheckboxWidgetAnnotationElement(parameters); } return new PushButtonWidgetAnnotationElement(parameters); case "Ch": return new ChoiceWidgetAnnotationElement(parameters); case "Sig": return new SignatureWidgetAnnotationElement(parameters); } return new WidgetAnnotationElement(parameters); case AnnotationType.POPUP: return new PopupAnnotationElement(parameters); case AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); case AnnotationType.LINE: return new LineAnnotationElement(parameters); case AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); case AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); case AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); case AnnotationType.CARET: return new CaretAnnotationElement(parameters); case AnnotationType.INK: return new InkAnnotationElement(parameters); case AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); case AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); case AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); case AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); case AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); case AnnotationType.STAMP: return new StampAnnotationElement(parameters); case AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); default: return new AnnotationElement(parameters); } } }; var _updates, _hasBorder, _popupElement, _setRectEdited, setRectEdited_fn; var _AnnotationElement = class { constructor(parameters, { isRenderable = false, ignoreBorder = false, createQuadrilaterals = false } = {}) { __privateAdd(this, _setRectEdited); __privateAdd(this, _updates, null); __privateAdd(this, _hasBorder, false); __privateAdd(this, _popupElement, null); this.isRenderable = isRenderable; this.data = parameters.data; this.layer = parameters.layer; this.linkService = parameters.linkService; this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; this.renderForms = parameters.renderForms; this.svgFactory = parameters.svgFactory; this.annotationStorage = parameters.annotationStorage; this.enableScripting = parameters.enableScripting; this.hasJSActions = parameters.hasJSActions; this._fieldObjects = parameters.fieldObjects; this.parent = parameters.parent; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } if (createQuadrilaterals) { this._createQuadrilaterals(); } } static _hasPopupData({ titleObj, contentsObj, richText }) { return !!((titleObj == null ? void 0 : titleObj.str) || (contentsObj == null ? void 0 : contentsObj.str) || (richText == null ? void 0 : richText.str)); } get _isEditable() { return this.data.isEditable; } get hasPopupData() { return _AnnotationElement._hasPopupData(this.data); } updateEdited(params) { var _a2; if (!this.container) { return; } __privateGet(this, _updates) || __privateSet(this, _updates, { rect: this.data.rect.slice(0) }); const { rect } = params; if (rect) { __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, rect); } (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.updateEdited(params); } resetEdited() { var _a2; if (!__privateGet(this, _updates)) { return; } __privateMethod(this, _setRectEdited, setRectEdited_fn).call(this, __privateGet(this, _updates).rect); (_a2 = __privateGet(this, _popupElement)) == null ? void 0 : _a2.popup.resetEdited(); __privateSet(this, _updates, null); } _createContainer(ignoreBorder) { const { data, parent: { page, viewport } } = this; const container = document.createElement("section"); container.setAttribute("data-annotation-id", data.id); if (!(this instanceof WidgetAnnotationElement)) { container.tabIndex = DEFAULT_TAB_INDEX; } const { style } = container; style.zIndex = this.parent.zIndex++; if (data.popupRef) { container.setAttribute("aria-haspopup", "dialog"); } if (data.alternativeText) { container.title = data.alternativeText; } if (data.noRotate) { container.classList.add("norotate"); } if (!data.rect || this instanceof PopupAnnotationElement) { const { rotation: rotation2 } = data; if (!data.hasOwnCanvas && rotation2 !== 0) { this.setRotation(rotation2, container); } return container; } const { width, height } = getRectDims(data.rect); if (!ignoreBorder && data.borderStyle.width > 0) { style.borderWidth = `${data.borderStyle.width}px`; const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { const radius = `calc(${horizontalRadius}px * var(--scale-factor)) / calc(${verticalRadius}px * var(--scale-factor))`; style.borderRadius = radius; } else if (this instanceof RadioButtonWidgetAnnotationElement) { const radius = `calc(${width}px * var(--scale-factor)) / calc(${height}px * var(--scale-factor))`; style.borderRadius = radius; } switch (data.borderStyle.style) { case AnnotationBorderStyleType.SOLID: style.borderStyle = "solid"; break; case AnnotationBorderStyleType.DASHED: style.borderStyle = "dashed"; break; case AnnotationBorderStyleType.BEVELED: warn("Unimplemented border style: beveled"); break; case AnnotationBorderStyleType.INSET: warn("Unimplemented border style: inset"); break; case AnnotationBorderStyleType.UNDERLINE: style.borderBottomStyle = "solid"; break; default: break; } const borderColor = data.borderColor || null; if (borderColor) { __privateSet(this, _hasBorder, true); style.borderColor = Util.makeHexColor(borderColor[0] | 0, borderColor[1] | 0, borderColor[2] | 0); } else { style.borderWidth = 0; } } const rect = Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); const { pageWidth, pageHeight, pageX, pageY } = viewport.rawDims; style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; style.top = `${100 * (rect[1] - pageY) / pageHeight}%`; const { rotation } = data; if (data.hasOwnCanvas || rotation === 0) { style.width = `${100 * width / pageWidth}%`; style.height = `${100 * height / pageHeight}%`; } else { this.setRotation(rotation, container); } return container; } setRotation(angle, container = this.container) { if (!this.data.rect) { return; } const { pageWidth, pageHeight } = this.parent.viewport.rawDims; const { width, height } = getRectDims(this.data.rect); let elementWidth, elementHeight; if (angle % 180 === 0) { elementWidth = 100 * width / pageWidth; elementHeight = 100 * height / pageHeight; } else { elementWidth = 100 * height / pageWidth; elementHeight = 100 * width / pageHeight; } container.style.width = `${elementWidth}%`; container.style.height = `${elementHeight}%`; container.setAttribute("data-main-rotation", (360 - angle) % 360); } get _commonActions() { const setColor = (jsName, styleName, event) => { const color2 = event.detail[jsName]; const colorType = color2[0]; const colorArray = color2.slice(1); event.target.style[styleName] = ColorConverters[`${colorType}_HTML`](colorArray); this.annotationStorage.setValue(this.data.id, { [styleName]: ColorConverters[`${colorType}_rgb`](colorArray) }); }; return shadow(this, "_commonActions", { display: (event) => { const { display } = event.detail; const hidden = display % 2 === 1; this.container.style.visibility = hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { noView: hidden, noPrint: display === 1 || display === 2 }); }, print: (event) => { this.annotationStorage.setValue(this.data.id, { noPrint: !event.detail.print }); }, hidden: (event) => { const { hidden } = event.detail; this.container.style.visibility = hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { noPrint: hidden, noView: hidden }); }, focus: (event) => { setTimeout(() => event.target.focus({ preventScroll: false }), 0); }, userName: (event) => { event.target.title = event.detail.userName; }, readonly: (event) => { event.target.disabled = event.detail.readonly; }, required: (event) => { this._setRequired(event.target, event.detail.required); }, bgColor: (event) => { setColor("bgColor", "backgroundColor", event); }, fillColor: (event) => { setColor("fillColor", "backgroundColor", event); }, fgColor: (event) => { setColor("fgColor", "color", event); }, textColor: (event) => { setColor("textColor", "color", event); }, borderColor: (event) => { setColor("borderColor", "borderColor", event); }, strokeColor: (event) => { setColor("strokeColor", "borderColor", event); }, rotation: (event) => { const angle = event.detail.rotation; this.setRotation(angle); this.annotationStorage.setValue(this.data.id, { rotation: angle }); } }); } _dispatchEventFromSandbox(actions, jsEvent) { const commonActions = this._commonActions; for (const name of Object.keys(jsEvent.detail)) { const action = actions[name] || commonActions[name]; action == null ? void 0 : action(jsEvent); } } _setDefaultPropertiesFromJS(element) { if (!this.enableScripting) { return; } const storedData = this.annotationStorage.getRawValue(this.data.id); if (!storedData) { return; } const commonActions = this._commonActions; for (const [actionName, detail] of Object.entries(storedData)) { const action = commonActions[actionName]; if (action) { const eventProxy = { detail: { [actionName]: detail }, target: element }; action(eventProxy); delete storedData[actionName]; } } } _createQuadrilaterals() { if (!this.container) { return; } const { quadPoints } = this.data; if (!quadPoints) { return; } const [rectBlX, rectBlY, rectTrX, rectTrY] = this.data.rect.map((x) => Math.fround(x)); if (quadPoints.length === 8) { const [trX, trY, blX, blY] = quadPoints.subarray(2, 6); if (rectTrX === trX && rectTrY === trY && rectBlX === blX && rectBlY === blY) { return; } } const { style } = this.container; let svgBuffer; if (__privateGet(this, _hasBorder)) { const { borderColor, borderWidth } = style; style.borderWidth = 0; svgBuffer = ["url('data:image/svg+xml;utf8,", ``, ``]; this.container.classList.add("hasBorder"); } const width = rectTrX - rectBlX; const height = rectTrY - rectBlY; const { svgFactory } = this; const svg = svgFactory.createElement("svg"); svg.classList.add("quadrilateralsContainer"); svg.setAttribute("width", 0); svg.setAttribute("height", 0); const defs = svgFactory.createElement("defs"); svg.append(defs); const clipPath = svgFactory.createElement("clipPath"); const id = `clippath_${this.data.id}`; clipPath.setAttribute("id", id); clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); defs.append(clipPath); for (let i = 2, ii = quadPoints.length; i < ii; i += 8) { const trX = quadPoints[i]; const trY = quadPoints[i + 1]; const blX = quadPoints[i + 2]; const blY = quadPoints[i + 3]; const rect = svgFactory.createElement("rect"); const x = (blX - rectBlX) / width; const y = (rectTrY - trY) / height; const rectWidth = (trX - blX) / width; const rectHeight = (trY - blY) / height; rect.setAttribute("x", x); rect.setAttribute("y", y); rect.setAttribute("width", rectWidth); rect.setAttribute("height", rectHeight); clipPath.append(rect); svgBuffer == null ? void 0 : svgBuffer.push(``); } if (__privateGet(this, _hasBorder)) { svgBuffer.push(`')`); style.backgroundImage = svgBuffer.join(""); } this.container.append(svg); this.container.style.clipPath = `url(#${id})`; } _createPopup() { const { container, data } = this; container.setAttribute("aria-haspopup", "dialog"); const popup = __privateSet(this, _popupElement, new PopupAnnotationElement({ data: { color: data.color, titleObj: data.titleObj, modificationDate: data.modificationDate, contentsObj: data.contentsObj, richText: data.richText, parentRect: data.rect, borderStyle: 0, id: `popup_${data.id}`, rotation: data.rotation }, parent: this.parent, elements: [this] })); this.parent.div.append(popup.render()); } render() { unreachable("Abstract method `AnnotationElement.render` called"); } _getElementsByName(name, skipId = null) { const fields = []; if (this._fieldObjects) { const fieldObj = this._fieldObjects[name]; if (fieldObj) { for (const { page, id, exportValues } of fieldObj) { if (page === -1) { continue; } if (id === skipId) { continue; } const exportValue = typeof exportValues === "string" ? exportValues : null; const domElement = document.querySelector(`[data-element-id="${id}"]`); if (domElement && !GetElementsByNameSet.has(domElement)) { warn(`_getElementsByName - element not allowed: ${id}`); continue; } fields.push({ id, exportValue, domElement }); } } return fields; } for (const domElement of document.getElementsByName(name)) { const { exportValue } = domElement; const id = domElement.getAttribute("data-element-id"); if (id === skipId) { continue; } if (!GetElementsByNameSet.has(domElement)) { continue; } fields.push({ id, exportValue, domElement }); } return fields; } show() { var _a2; if (this.container) { this.container.hidden = false; } (_a2 = this.popup) == null ? void 0 : _a2.maybeShow(); } hide() { var _a2; if (this.container) { this.container.hidden = true; } (_a2 = this.popup) == null ? void 0 : _a2.forceHide(); } getElementsToTriggerPopup() { return this.container; } addHighlightArea() { const triggers = this.getElementsToTriggerPopup(); if (Array.isArray(triggers)) { for (const element of triggers) { element.classList.add("highlightArea"); } } else { triggers.classList.add("highlightArea"); } } _editOnDoubleClick() { if (!this._isEditable) { return; } const { annotationEditorType: mode, data: { id: editId } } = this; this.container.addEventListener("dblclick", () => { var _a2; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("switchannotationeditormode", { source: this, mode, editId }); }); } }; var AnnotationElement = _AnnotationElement; _updates = new WeakMap(); _hasBorder = new WeakMap(); _popupElement = new WeakMap(); _setRectEdited = new WeakSet(); setRectEdited_fn = function(rect) { const { container: { style }, data: { rect: currentRect, rotation }, parent: { viewport: { rawDims: { pageWidth, pageHeight, pageX, pageY } } } } = this; currentRect == null ? void 0 : currentRect.splice(0, 4, ...rect); const { width, height } = getRectDims(rect); style.left = `${100 * (rect[0] - pageX) / pageWidth}%`; style.top = `${100 * (pageHeight - rect[3] + pageY) / pageHeight}%`; if (rotation === 0) { style.width = `${100 * width / pageWidth}%`; style.height = `${100 * height / pageHeight}%`; } else { this.setRotation(rotation); } }; var _setInternalLink, setInternalLink_fn, _bindAttachment, bindAttachment_fn, _bindSetOCGState, bindSetOCGState_fn; var LinkAnnotationElement = class extends AnnotationElement { constructor(parameters, options = null) { super(parameters, { isRenderable: true, ignoreBorder: !!(options == null ? void 0 : options.ignoreBorder), createQuadrilaterals: true }); __privateAdd(this, _setInternalLink); __privateAdd(this, _bindAttachment); __privateAdd(this, _bindSetOCGState); this.isTooltipOnly = parameters.data.isTooltipOnly; } render() { const { data, linkService } = this; const link = document.createElement("a"); link.setAttribute("data-element-id", data.id); let isBound = false; if (data.url) { linkService.addLinkAttributes(link, data.url, data.newWindow); isBound = true; } else if (data.action) { this._bindNamedAction(link, data.action); isBound = true; } else if (data.attachment) { __privateMethod(this, _bindAttachment, bindAttachment_fn).call(this, link, data.attachment, data.attachmentDest); isBound = true; } else if (data.setOCGState) { __privateMethod(this, _bindSetOCGState, bindSetOCGState_fn).call(this, link, data.setOCGState); isBound = true; } else if (data.dest) { this._bindLink(link, data.dest); isBound = true; } else { if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { this._bindJSAction(link, data); isBound = true; } if (data.resetForm) { this._bindResetFormAction(link, data.resetForm); isBound = true; } else if (this.isTooltipOnly && !isBound) { this._bindLink(link, ""); isBound = true; } } this.container.classList.add("linkAnnotation"); if (isBound) { this.container.append(link); } return this.container; } _bindLink(link, destination) { link.href = this.linkService.getDestinationHash(destination); link.onclick = () => { if (destination) { this.linkService.goToDestination(destination); } return false; }; if (destination || destination === "") { __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); } } _bindNamedAction(link, action) { link.href = this.linkService.getAnchorUrl(""); link.onclick = () => { this.linkService.executeNamedAction(action); return false; }; __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); } _bindJSAction(link, data) { link.href = this.linkService.getAnchorUrl(""); const map = /* @__PURE__ */ new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); for (const name of Object.keys(data.actions)) { const jsName = map.get(name); if (!jsName) { continue; } link[jsName] = () => { var _a2; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: data.id, name } }); return false; }; } if (!link.onclick) { link.onclick = () => false; } __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); } _bindResetFormAction(link, resetForm) { const otherClickAction = link.onclick; if (!otherClickAction) { link.href = this.linkService.getAnchorUrl(""); } __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); if (!this._fieldObjects) { warn(`_bindResetFormAction - "resetForm" action not supported, ensure that the \`fieldObjects\` parameter is provided.`); if (!otherClickAction) { link.onclick = () => false; } return; } link.onclick = () => { var _a2; otherClickAction == null ? void 0 : otherClickAction(); const { fields: resetFormFields, refs: resetFormRefs, include } = resetForm; const allFields = []; if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { const fieldIds = new Set(resetFormRefs); for (const fieldName of resetFormFields) { const fields = this._fieldObjects[fieldName] || []; for (const { id } of fields) { fieldIds.add(id); } } for (const fields of Object.values(this._fieldObjects)) { for (const field of fields) { if (fieldIds.has(field.id) === include) { allFields.push(field); } } } } else { for (const fields of Object.values(this._fieldObjects)) { allFields.push(...fields); } } const storage = this.annotationStorage; const allIds = []; for (const field of allFields) { const { id } = field; allIds.push(id); switch (field.type) { case "text": { const value = field.defaultValue || ""; storage.setValue(id, { value }); break; } case "checkbox": case "radiobutton": { const value = field.defaultValue === field.exportValues; storage.setValue(id, { value }); break; } case "combobox": case "listbox": { const value = field.defaultValue || ""; storage.setValue(id, { value }); break; } default: continue; } const domElement = document.querySelector(`[data-element-id="${id}"]`); if (!domElement) { continue; } else if (!GetElementsByNameSet.has(domElement)) { warn(`_bindResetFormAction - element not allowed: ${id}`); continue; } domElement.dispatchEvent(new Event("resetform")); } if (this.enableScripting) { (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: "app", ids: allIds, name: "ResetForm" } }); } return false; }; } }; _setInternalLink = new WeakSet(); setInternalLink_fn = function() { this.container.setAttribute("data-internal-link", ""); }; _bindAttachment = new WeakSet(); bindAttachment_fn = function(link, attachment, dest = null) { link.href = this.linkService.getAnchorUrl(""); if (attachment.description) { link.title = attachment.description; } link.onclick = () => { var _a2; (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(attachment.content, attachment.filename, dest); return false; }; __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); }; _bindSetOCGState = new WeakSet(); bindSetOCGState_fn = function(link, action) { link.href = this.linkService.getAnchorUrl(""); link.onclick = () => { this.linkService.executeSetOCGState(action); return false; }; __privateMethod(this, _setInternalLink, setInternalLink_fn).call(this); }; var TextAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true }); } render() { this.container.classList.add("textAnnotation"); const image = document.createElement("img"); image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"); image.setAttribute("data-l10n-args", JSON.stringify({ type: this.data.name })); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.append(image); return this.container; } }; var WidgetAnnotationElement = class extends AnnotationElement { render() { return this.container; } showElementAndHideCanvas(element) { var _a2; if (this.data.hasOwnCanvas) { if (((_a2 = element.previousSibling) == null ? void 0 : _a2.nodeName) === "CANVAS") { element.previousSibling.hidden = true; } element.hidden = false; } } _getKeyModifier(event) { return util_FeatureTest.platform.isMac ? event.metaKey : event.ctrlKey; } _setEventListener(element, elementData, baseName, eventName, valueGetter) { if (baseName.includes("mouse")) { element.addEventListener(baseName, (event) => { var _a2; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: this.data.id, name: eventName, value: valueGetter(event), shift: event.shiftKey, modifier: this._getKeyModifier(event) } }); }); } else { element.addEventListener(baseName, (event) => { var _a2; if (baseName === "blur") { if (!elementData.focused || !event.relatedTarget) { return; } elementData.focused = false; } else if (baseName === "focus") { if (elementData.focused) { return; } elementData.focused = true; } if (!valueGetter) { return; } (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id: this.data.id, name: eventName, value: valueGetter(event) } }); }); } } _setEventListeners(element, elementData, names, getter) { var _a2, _b, _c; for (const [baseName, eventName] of names) { if (eventName === "Action" || ((_a2 = this.data.actions) == null ? void 0 : _a2[eventName])) { if (eventName === "Focus" || eventName === "Blur") { elementData || (elementData = { focused: false }); } this._setEventListener(element, elementData, baseName, eventName, getter); if (eventName === "Focus" && !((_b = this.data.actions) == null ? void 0 : _b.Blur)) { this._setEventListener(element, elementData, "blur", "Blur", null); } else if (eventName === "Blur" && !((_c = this.data.actions) == null ? void 0 : _c.Focus)) { this._setEventListener(element, elementData, "focus", "Focus", null); } } } } _setBackgroundColor(element) { const color2 = this.data.backgroundColor || null; element.style.backgroundColor = color2 === null ? "transparent" : Util.makeHexColor(color2[0], color2[1], color2[2]); } _setTextStyle(element) { const TEXT_ALIGNMENT = ["left", "center", "right"]; const { fontColor } = this.data.defaultAppearanceData; const fontSize = this.data.defaultAppearanceData.fontSize || annotation_layer_DEFAULT_FONT_SIZE; const style = element.style; let computedFontSize; const BORDER_SIZE = 2; const roundToOneDecimal = (x) => Math.round(10 * x) / 10; if (this.data.multiLine) { const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); const numberOfLines = Math.round(height / (LINE_FACTOR * fontSize)) || 1; const lineHeight = height / numberOfLines; computedFontSize = Math.min(fontSize, roundToOneDecimal(lineHeight / LINE_FACTOR)); } else { const height = Math.abs(this.data.rect[3] - this.data.rect[1] - BORDER_SIZE); computedFontSize = Math.min(fontSize, roundToOneDecimal(height / LINE_FACTOR)); } style.fontSize = `calc(${computedFontSize}px * var(--scale-factor))`; style.color = Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); if (this.data.textAlignment !== null) { style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } } _setRequired(element, isRequired) { if (isRequired) { element.setAttribute("required", true); } else { element.removeAttribute("required"); } element.setAttribute("aria-required", isRequired); } }; var TextWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { const isRenderable = parameters.renderForms || parameters.data.hasOwnCanvas || !parameters.data.hasAppearance && !!parameters.data.fieldValue; super(parameters, { isRenderable }); } setPropertyOnSiblings(base, key, value, keyInStorage) { const storage = this.annotationStorage; for (const element of this._getElementsByName(base.name, base.id)) { if (element.domElement) { element.domElement[key] = value; } storage.setValue(element.id, { [keyInStorage]: value }); } } render() { var _a2, _b; const storage = this.annotationStorage; const id = this.data.id; this.container.classList.add("textWidgetAnnotation"); let element = null; if (this.renderForms) { const storedData = storage.getValue(id, { value: this.data.fieldValue }); let textContent = storedData.value || ""; const maxLen = storage.getValue(id, { charLimit: this.data.maxLen }).charLimit; if (maxLen && textContent.length > maxLen) { textContent = textContent.slice(0, maxLen); } let fieldFormattedValues = storedData.formattedValue || ((_a2 = this.data.textContent) == null ? void 0 : _a2.join("\n")) || null; if (fieldFormattedValues && this.data.comb) { fieldFormattedValues = fieldFormattedValues.replaceAll(/\s+/g, ""); } const elementData = { userValue: textContent, formattedValue: fieldFormattedValues, lastCommittedValue: null, commitKey: 1, focused: false }; if (this.data.multiLine) { element = document.createElement("textarea"); element.textContent = fieldFormattedValues != null ? fieldFormattedValues : textContent; if (this.data.doNotScroll) { element.style.overflowY = "hidden"; } } else { element = document.createElement("input"); element.type = "text"; element.setAttribute("value", fieldFormattedValues != null ? fieldFormattedValues : textContent); if (this.data.doNotScroll) { element.style.overflowX = "hidden"; } } if (this.data.hasOwnCanvas) { element.hidden = true; } GetElementsByNameSet.add(element); element.setAttribute("data-element-id", id); element.disabled = this.data.readOnly; element.name = this.data.fieldName; element.tabIndex = DEFAULT_TAB_INDEX; this._setRequired(element, this.data.required); if (maxLen) { element.maxLength = maxLen; } element.addEventListener("input", (event) => { storage.setValue(id, { value: event.target.value }); this.setPropertyOnSiblings(element, "value", event.target.value, "value"); elementData.formattedValue = null; }); element.addEventListener("resetform", (event) => { var _a3; const defaultValue = (_a3 = this.data.defaultFieldValue) != null ? _a3 : ""; element.value = elementData.userValue = defaultValue; elementData.formattedValue = null; }); let blurListener = (event) => { const { formattedValue } = elementData; if (formattedValue !== null && formattedValue !== void 0) { event.target.value = formattedValue; } event.target.scrollLeft = 0; }; if (this.enableScripting && this.hasJSActions) { element.addEventListener("focus", (event) => { var _a3; if (elementData.focused) { return; } const { target } = event; if (elementData.userValue) { target.value = elementData.userValue; } elementData.lastCommittedValue = target.value; elementData.commitKey = 1; if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Focus)) { elementData.focused = true; } }); element.addEventListener("updatefromsandbox", (jsEvent) => { this.showElementAndHideCanvas(jsEvent.target); const actions = { value(event) { var _a3; elementData.userValue = (_a3 = event.detail.value) != null ? _a3 : ""; storage.setValue(id, { value: elementData.userValue.toString() }); event.target.value = elementData.userValue; }, formattedValue(event) { const { formattedValue } = event.detail; elementData.formattedValue = formattedValue; if (formattedValue !== null && formattedValue !== void 0 && event.target !== document.activeElement) { event.target.value = formattedValue; } storage.setValue(id, { formattedValue }); }, selRange(event) { event.target.setSelectionRange(...event.detail.selRange); }, charLimit: (event) => { var _a3; const { charLimit } = event.detail; const { target } = event; if (charLimit === 0) { target.removeAttribute("maxLength"); return; } target.setAttribute("maxLength", charLimit); let value = elementData.userValue; if (!value || value.length <= charLimit) { return; } value = value.slice(0, charLimit); target.value = elementData.userValue = value; storage.setValue(id, { value }); (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, willCommit: true, commitKey: 1, selStart: target.selectionStart, selEnd: target.selectionEnd } }); } }; this._dispatchEventFromSandbox(actions, jsEvent); }); element.addEventListener("keydown", (event) => { var _a3; elementData.commitKey = 1; let commitKey = -1; if (event.key === "Escape") { commitKey = 0; } else if (event.key === "Enter" && !this.data.multiLine) { commitKey = 2; } else if (event.key === "Tab") { elementData.commitKey = 3; } if (commitKey === -1) { return; } const { value } = event.target; if (elementData.lastCommittedValue === value) { return; } elementData.lastCommittedValue = value; elementData.userValue = value; (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, willCommit: true, commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); }); const _blurListener = blurListener; blurListener = null; element.addEventListener("blur", (event) => { var _a3, _b2; if (!elementData.focused || !event.relatedTarget) { return; } if (!((_a3 = this.data.actions) == null ? void 0 : _a3.Blur)) { elementData.focused = false; } const { value } = event.target; elementData.userValue = value; if (elementData.lastCommittedValue !== value) { (_b2 = this.linkService.eventBus) == null ? void 0 : _b2.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, willCommit: true, commitKey: elementData.commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); } _blurListener(event); }); if ((_b = this.data.actions) == null ? void 0 : _b.Keystroke) { element.addEventListener("beforeinput", (event) => { var _a3; elementData.lastCommittedValue = null; const { data, target } = event; const { value, selectionStart, selectionEnd } = target; let selStart = selectionStart, selEnd = selectionEnd; switch (event.inputType) { case "deleteWordBackward": { const match = value.substring(0, selectionStart).match(/\w*[^\w]*$/); if (match) { selStart -= match[0].length; } break; } case "deleteWordForward": { const match = value.substring(selectionStart).match(/^[^\w]*\w*/); if (match) { selEnd += match[0].length; } break; } case "deleteContentBackward": if (selectionStart === selectionEnd) { selStart -= 1; } break; case "deleteContentForward": if (selectionStart === selectionEnd) { selEnd += 1; } break; } event.preventDefault(); (_a3 = this.linkService.eventBus) == null ? void 0 : _a3.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, change: data || "", willCommit: false, selStart, selEnd } }); }); } this._setEventListeners(element, elementData, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.value); } if (blurListener) { element.addEventListener("blur", blurListener); } if (this.data.comb) { const fieldWidth = this.data.rect[2] - this.data.rect[0]; const combWidth = fieldWidth / maxLen; element.classList.add("comb"); element.style.letterSpacing = `calc(${combWidth}px * var(--scale-factor) - 1ch)`; } } else { element = document.createElement("div"); element.textContent = this.data.fieldValue; element.style.verticalAlign = "middle"; element.style.display = "table-cell"; if (this.data.hasOwnCanvas) { element.hidden = true; } } this._setTextStyle(element); this._setBackgroundColor(element); this._setDefaultPropertiesFromJS(element); this.container.append(element); return this.container; } }; var SignatureWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: !!parameters.data.hasOwnCanvas }); } }; var CheckboxWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.exportValue === data.fieldValue }).value; if (typeof value === "string") { value = value !== "Off"; storage.setValue(id, { value }); } this.container.classList.add("buttonWidgetAnnotation", "checkBox"); const element = document.createElement("input"); GetElementsByNameSet.add(element); element.setAttribute("data-element-id", id); element.disabled = data.readOnly; this._setRequired(element, this.data.required); element.type = "checkbox"; element.name = data.fieldName; if (value) { element.setAttribute("checked", true); } element.setAttribute("exportValue", data.exportValue); element.tabIndex = DEFAULT_TAB_INDEX; element.addEventListener("change", (event) => { const { name, checked } = event.target; for (const checkbox of this._getElementsByName(name, id)) { const curChecked = checked && checkbox.exportValue === data.exportValue; if (checkbox.domElement) { checkbox.domElement.checked = curChecked; } storage.setValue(checkbox.id, { value: curChecked }); } storage.setValue(id, { value: checked }); }); element.addEventListener("resetform", (event) => { const defaultValue = data.defaultFieldValue || "Off"; event.target.checked = defaultValue === data.exportValue; }); if (this.enableScripting && this.hasJSActions) { element.addEventListener("updatefromsandbox", (jsEvent) => { const actions = { value(event) { event.target.checked = event.detail.value !== "Off"; storage.setValue(id, { value: event.target.checked }); } }; this._dispatchEventFromSandbox(actions, jsEvent); }); this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.checked); } this._setBackgroundColor(element); this._setDefaultPropertiesFromJS(element); this.container.append(element); return this.container; } }; var RadioButtonWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { this.container.classList.add("buttonWidgetAnnotation", "radioButton"); const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.fieldValue === data.buttonValue }).value; if (typeof value === "string") { value = value !== data.buttonValue; storage.setValue(id, { value }); } if (value) { for (const radio of this._getElementsByName(data.fieldName, id)) { storage.setValue(radio.id, { value: false }); } } const element = document.createElement("input"); GetElementsByNameSet.add(element); element.setAttribute("data-element-id", id); element.disabled = data.readOnly; this._setRequired(element, this.data.required); element.type = "radio"; element.name = data.fieldName; if (value) { element.setAttribute("checked", true); } element.tabIndex = DEFAULT_TAB_INDEX; element.addEventListener("change", (event) => { const { name, checked } = event.target; for (const radio of this._getElementsByName(name, id)) { storage.setValue(radio.id, { value: false }); } storage.setValue(id, { value: checked }); }); element.addEventListener("resetform", (event) => { const defaultValue = data.defaultFieldValue; event.target.checked = defaultValue !== null && defaultValue !== void 0 && defaultValue === data.buttonValue; }); if (this.enableScripting && this.hasJSActions) { const pdfButtonValue = data.buttonValue; element.addEventListener("updatefromsandbox", (jsEvent) => { const actions = { value: (event) => { const checked = pdfButtonValue === event.detail.value; for (const radio of this._getElementsByName(event.target.name)) { const curChecked = checked && radio.id === id; if (radio.domElement) { radio.domElement.checked = curChecked; } storage.setValue(radio.id, { value: curChecked }); } } }; this._dispatchEventFromSandbox(actions, jsEvent); }); this._setEventListeners(element, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (event) => event.target.checked); } this._setBackgroundColor(element); this._setDefaultPropertiesFromJS(element); this.container.append(element); return this.container; } }; var PushButtonWidgetAnnotationElement = class extends LinkAnnotationElement { constructor(parameters) { super(parameters, { ignoreBorder: parameters.data.hasAppearance }); } render() { const container = super.render(); container.classList.add("buttonWidgetAnnotation", "pushButton"); const linkElement = container.lastChild; if (this.enableScripting && this.hasJSActions && linkElement) { this._setDefaultPropertiesFromJS(linkElement); linkElement.addEventListener("updatefromsandbox", (jsEvent) => { this._dispatchEventFromSandbox({}, jsEvent); }); } return container; } }; var ChoiceWidgetAnnotationElement = class extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { this.container.classList.add("choiceWidgetAnnotation"); const storage = this.annotationStorage; const id = this.data.id; const storedData = storage.getValue(id, { value: this.data.fieldValue }); const selectElement = document.createElement("select"); GetElementsByNameSet.add(selectElement); selectElement.setAttribute("data-element-id", id); selectElement.disabled = this.data.readOnly; this._setRequired(selectElement, this.data.required); selectElement.name = this.data.fieldName; selectElement.tabIndex = DEFAULT_TAB_INDEX; let addAnEmptyEntry = this.data.combo && this.data.options.length > 0; if (!this.data.combo) { selectElement.size = this.data.options.length; if (this.data.multiSelect) { selectElement.multiple = true; } } selectElement.addEventListener("resetform", (event) => { const defaultValue = this.data.defaultFieldValue; for (const option of selectElement.options) { option.selected = option.value === defaultValue; } }); for (const option of this.data.options) { const optionElement = document.createElement("option"); optionElement.textContent = option.displayValue; optionElement.value = option.exportValue; if (storedData.value.includes(option.exportValue)) { optionElement.setAttribute("selected", true); addAnEmptyEntry = false; } selectElement.append(optionElement); } let removeEmptyEntry = null; if (addAnEmptyEntry) { const noneOptionElement = document.createElement("option"); noneOptionElement.value = " "; noneOptionElement.setAttribute("hidden", true); noneOptionElement.setAttribute("selected", true); selectElement.prepend(noneOptionElement); removeEmptyEntry = () => { noneOptionElement.remove(); selectElement.removeEventListener("input", removeEmptyEntry); removeEmptyEntry = null; }; selectElement.addEventListener("input", removeEmptyEntry); } const getValue = (isExport) => { const name = isExport ? "value" : "textContent"; const { options, multiple } = selectElement; if (!multiple) { return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; } return Array.prototype.filter.call(options, (option) => option.selected).map((option) => option[name]); }; let selectedValues = getValue(false); const getItems = (event) => { const options = event.target.options; return Array.prototype.map.call(options, (option) => ({ displayValue: option.textContent, exportValue: option.value })); }; if (this.enableScripting && this.hasJSActions) { selectElement.addEventListener("updatefromsandbox", (jsEvent) => { const actions = { value(event) { removeEmptyEntry == null ? void 0 : removeEmptyEntry(); const value = event.detail.value; const values = new Set(Array.isArray(value) ? value : [value]); for (const option of selectElement.options) { option.selected = values.has(option.value); } storage.setValue(id, { value: getValue(true) }); selectedValues = getValue(false); }, multipleSelection(event) { selectElement.multiple = true; }, remove(event) { const options = selectElement.options; const index = event.detail.remove; options[index].selected = false; selectElement.remove(index); if (options.length > 0) { const i = Array.prototype.findIndex.call(options, (option) => option.selected); if (i === -1) { options[0].selected = true; } } storage.setValue(id, { value: getValue(true), items: getItems(event) }); selectedValues = getValue(false); }, clear(event) { while (selectElement.length !== 0) { selectElement.remove(0); } storage.setValue(id, { value: null, items: [] }); selectedValues = getValue(false); }, insert(event) { const { index, displayValue, exportValue } = event.detail.insert; const selectChild = selectElement.children[index]; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; if (selectChild) { selectChild.before(optionElement); } else { selectElement.append(optionElement); } storage.setValue(id, { value: getValue(true), items: getItems(event) }); selectedValues = getValue(false); }, items(event) { const { items } = event.detail; while (selectElement.length !== 0) { selectElement.remove(0); } for (const item of items) { const { displayValue, exportValue } = item; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; selectElement.append(optionElement); } if (selectElement.options.length > 0) { selectElement.options[0].selected = true; } storage.setValue(id, { value: getValue(true), items: getItems(event) }); selectedValues = getValue(false); }, indices(event) { const indices = new Set(event.detail.indices); for (const option of event.target.options) { option.selected = indices.has(option.index); } storage.setValue(id, { value: getValue(true) }); selectedValues = getValue(false); }, editable(event) { event.target.disabled = !event.detail.editable; } }; this._dispatchEventFromSandbox(actions, jsEvent); }); selectElement.addEventListener("input", (event) => { var _a2; const exportValue = getValue(true); const change = getValue(false); storage.setValue(id, { value: exportValue }); event.preventDefault(); (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value: selectedValues, change, changeEx: exportValue, willCommit: false, commitKey: 1, keyDown: false } }); }); this._setEventListeners(selectElement, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], (event) => event.target.value); } else { selectElement.addEventListener("input", function(event) { storage.setValue(id, { value: getValue(true) }); }); } if (this.data.combo) { this._setTextStyle(selectElement); } else { } this._setBackgroundColor(selectElement); this._setDefaultPropertiesFromJS(selectElement); this.container.append(selectElement); return this.container; } }; var PopupAnnotationElement = class extends AnnotationElement { constructor(parameters) { const { data, elements } = parameters; super(parameters, { isRenderable: AnnotationElement._hasPopupData(data) }); this.elements = elements; this.popup = null; } render() { this.container.classList.add("popupAnnotation"); const popup = this.popup = new PopupElement({ container: this.container, color: this.data.color, titleObj: this.data.titleObj, modificationDate: this.data.modificationDate, contentsObj: this.data.contentsObj, richText: this.data.richText, rect: this.data.rect, parentRect: this.data.parentRect || null, parent: this.parent, elements: this.elements, open: this.data.open }); const elementIds = []; for (const element of this.elements) { element.popup = popup; elementIds.push(element.data.id); element.addHighlightArea(); } this.container.setAttribute("aria-controls", elementIds.map((id) => `${AnnotationPrefix}${id}`).join(",")); return this.container; } }; var _boundKeyDown, _boundHide, _boundShow, _boundToggle, _color, _container3, _contentsObj, _dateObj, _elements, _parent, _parentRect, _pinned, _popup, _position2, _rect, _richText, _titleObj, _updates2, _wasVisible, _html, html_get, _fontSize, fontSize_get, _fontColor, fontColor_get, _makePopupContent, makePopupContent_fn, _keyDown, keyDown_fn, _setPosition, setPosition_fn, _toggle, toggle_fn, _show, show_fn, _hide, hide_fn; var PopupElement = class { constructor({ container, color: color2, elements, titleObj, modificationDate, contentsObj, richText, parent, rect, parentRect, open }) { __privateAdd(this, _html); __privateAdd(this, _fontSize); __privateAdd(this, _fontColor); __privateAdd(this, _makePopupContent); __privateAdd(this, _keyDown); __privateAdd(this, _setPosition); __privateAdd(this, _toggle); __privateAdd(this, _show); __privateAdd(this, _hide); __privateAdd(this, _boundKeyDown, __privateMethod(this, _keyDown, keyDown_fn).bind(this)); __privateAdd(this, _boundHide, __privateMethod(this, _hide, hide_fn).bind(this)); __privateAdd(this, _boundShow, __privateMethod(this, _show, show_fn).bind(this)); __privateAdd(this, _boundToggle, __privateMethod(this, _toggle, toggle_fn).bind(this)); __privateAdd(this, _color, null); __privateAdd(this, _container3, null); __privateAdd(this, _contentsObj, null); __privateAdd(this, _dateObj, null); __privateAdd(this, _elements, null); __privateAdd(this, _parent, null); __privateAdd(this, _parentRect, null); __privateAdd(this, _pinned, false); __privateAdd(this, _popup, null); __privateAdd(this, _position2, null); __privateAdd(this, _rect, null); __privateAdd(this, _richText, null); __privateAdd(this, _titleObj, null); __privateAdd(this, _updates2, null); __privateAdd(this, _wasVisible, false); var _a2; __privateSet(this, _container3, container); __privateSet(this, _titleObj, titleObj); __privateSet(this, _contentsObj, contentsObj); __privateSet(this, _richText, richText); __privateSet(this, _parent, parent); __privateSet(this, _color, color2); __privateSet(this, _rect, rect); __privateSet(this, _parentRect, parentRect); __privateSet(this, _elements, elements); __privateSet(this, _dateObj, PDFDateString.toDateObject(modificationDate)); this.trigger = elements.flatMap((e) => e.getElementsToTriggerPopup()); for (const element of this.trigger) { element.addEventListener("click", __privateGet(this, _boundToggle)); element.addEventListener("mouseenter", __privateGet(this, _boundShow)); element.addEventListener("mouseleave", __privateGet(this, _boundHide)); element.classList.add("popupTriggerArea"); } for (const element of elements) { (_a2 = element.container) == null ? void 0 : _a2.addEventListener("keydown", __privateGet(this, _boundKeyDown)); } __privateGet(this, _container3).hidden = true; if (open) { __privateMethod(this, _toggle, toggle_fn).call(this); } } render() { if (__privateGet(this, _popup)) { return; } const popup = __privateSet(this, _popup, document.createElement("div")); popup.className = "popup"; if (__privateGet(this, _color)) { const baseColor = popup.style.outlineColor = Util.makeHexColor(...__privateGet(this, _color)); if (CSS.supports("background-color", "color-mix(in srgb, red 30%, white)")) { popup.style.backgroundColor = `color-mix(in srgb, ${baseColor} 30%, white)`; } else { const BACKGROUND_ENLIGHT = 0.7; popup.style.backgroundColor = Util.makeHexColor(...__privateGet(this, _color).map((c) => Math.floor(BACKGROUND_ENLIGHT * (255 - c) + c))); } } const header = document.createElement("span"); header.className = "header"; const title = document.createElement("h1"); header.append(title); ({ dir: title.dir, str: title.textContent } = __privateGet(this, _titleObj)); popup.append(header); if (__privateGet(this, _dateObj)) { const modificationDate = document.createElement("span"); modificationDate.classList.add("popupDate"); modificationDate.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string"); modificationDate.setAttribute("data-l10n-args", JSON.stringify({ dateObj: __privateGet(this, _dateObj).valueOf() })); header.append(modificationDate); } const html = __privateGet(this, _html, html_get); if (html) { XfaLayer.render({ xfaHtml: html, intent: "richText", div: popup }); popup.lastChild.classList.add("richText", "popupContent"); } else { const contents = this._formatContents(__privateGet(this, _contentsObj)); popup.append(contents); } __privateGet(this, _container3).append(popup); } _formatContents({ str, dir }) { const p = document.createElement("p"); p.classList.add("popupContent"); p.dir = dir; const lines = str.split(/(?:\r\n?|\n)/); for (let i = 0, ii = lines.length; i < ii; ++i) { const line = lines[i]; p.append(document.createTextNode(line)); if (i < ii - 1) { p.append(document.createElement("br")); } } return p; } updateEdited({ rect, popupContent }) { var _a2; __privateGet(this, _updates2) || __privateSet(this, _updates2, { contentsObj: __privateGet(this, _contentsObj), richText: __privateGet(this, _richText) }); if (rect) { __privateSet(this, _position2, null); } if (popupContent) { __privateSet(this, _richText, __privateMethod(this, _makePopupContent, makePopupContent_fn).call(this, popupContent)); __privateSet(this, _contentsObj, null); } (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove(); __privateSet(this, _popup, null); } resetEdited() { var _a2; if (!__privateGet(this, _updates2)) { return; } ({ contentsObj: __privateWrapper(this, _contentsObj)._, richText: __privateWrapper(this, _richText)._ } = __privateGet(this, _updates2)); __privateSet(this, _updates2, null); (_a2 = __privateGet(this, _popup)) == null ? void 0 : _a2.remove(); __privateSet(this, _popup, null); __privateSet(this, _position2, null); } forceHide() { __privateSet(this, _wasVisible, this.isVisible); if (!__privateGet(this, _wasVisible)) { return; } __privateGet(this, _container3).hidden = true; } maybeShow() { if (!__privateGet(this, _wasVisible)) { return; } if (!__privateGet(this, _popup)) { __privateMethod(this, _show, show_fn).call(this); } __privateSet(this, _wasVisible, false); __privateGet(this, _container3).hidden = false; } get isVisible() { return __privateGet(this, _container3).hidden === false; } }; _boundKeyDown = new WeakMap(); _boundHide = new WeakMap(); _boundShow = new WeakMap(); _boundToggle = new WeakMap(); _color = new WeakMap(); _container3 = new WeakMap(); _contentsObj = new WeakMap(); _dateObj = new WeakMap(); _elements = new WeakMap(); _parent = new WeakMap(); _parentRect = new WeakMap(); _pinned = new WeakMap(); _popup = new WeakMap(); _position2 = new WeakMap(); _rect = new WeakMap(); _richText = new WeakMap(); _titleObj = new WeakMap(); _updates2 = new WeakMap(); _wasVisible = new WeakMap(); _html = new WeakSet(); html_get = function() { const richText = __privateGet(this, _richText); const contentsObj = __privateGet(this, _contentsObj); if ((richText == null ? void 0 : richText.str) && (!(contentsObj == null ? void 0 : contentsObj.str) || contentsObj.str === richText.str)) { return __privateGet(this, _richText).html || null; } return null; }; _fontSize = new WeakSet(); fontSize_get = function() { var _a2, _b, _c; return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.fontSize) || 0; }; _fontColor = new WeakSet(); fontColor_get = function() { var _a2, _b, _c; return ((_c = (_b = (_a2 = __privateGet(this, _html, html_get)) == null ? void 0 : _a2.attributes) == null ? void 0 : _b.style) == null ? void 0 : _c.color) || null; }; _makePopupContent = new WeakSet(); makePopupContent_fn = function(text) { const popupLines = []; const popupContent = { str: text, html: { name: "div", attributes: { dir: "auto" }, children: [{ name: "p", children: popupLines }] } }; const lineAttributes = { style: { color: __privateGet(this, _fontColor, fontColor_get), fontSize: __privateGet(this, _fontSize, fontSize_get) ? `calc(${__privateGet(this, _fontSize, fontSize_get)}px * var(--scale-factor))` : "" } }; for (const line of text.split("\n")) { popupLines.push({ name: "span", value: line, attributes: lineAttributes }); } return popupContent; }; _keyDown = new WeakSet(); keyDown_fn = function(event) { if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) { return; } if (event.key === "Enter" || event.key === "Escape" && __privateGet(this, _pinned)) { __privateMethod(this, _toggle, toggle_fn).call(this); } }; _setPosition = new WeakSet(); setPosition_fn = function() { if (__privateGet(this, _position2) !== null) { return; } const { page: { view }, viewport: { rawDims: { pageWidth, pageHeight, pageX, pageY } } } = __privateGet(this, _parent); let useParentRect = !!__privateGet(this, _parentRect); let rect = useParentRect ? __privateGet(this, _parentRect) : __privateGet(this, _rect); for (const element of __privateGet(this, _elements)) { if (!rect || Util.intersect(element.data.rect, rect) !== null) { rect = element.data.rect; useParentRect = true; break; } } const normalizedRect = Util.normalizeRect([rect[0], view[3] - rect[1] + view[1], rect[2], view[3] - rect[3] + view[1]]); const HORIZONTAL_SPACE_AFTER_ANNOTATION = 5; const parentWidth = useParentRect ? rect[2] - rect[0] + HORIZONTAL_SPACE_AFTER_ANNOTATION : 0; const popupLeft = normalizedRect[0] + parentWidth; const popupTop = normalizedRect[1]; __privateSet(this, _position2, [100 * (popupLeft - pageX) / pageWidth, 100 * (popupTop - pageY) / pageHeight]); const { style } = __privateGet(this, _container3); style.left = `${__privateGet(this, _position2)[0]}%`; style.top = `${__privateGet(this, _position2)[1]}%`; }; _toggle = new WeakSet(); toggle_fn = function() { __privateSet(this, _pinned, !__privateGet(this, _pinned)); if (__privateGet(this, _pinned)) { __privateMethod(this, _show, show_fn).call(this); __privateGet(this, _container3).addEventListener("click", __privateGet(this, _boundToggle)); __privateGet(this, _container3).addEventListener("keydown", __privateGet(this, _boundKeyDown)); } else { __privateMethod(this, _hide, hide_fn).call(this); __privateGet(this, _container3).removeEventListener("click", __privateGet(this, _boundToggle)); __privateGet(this, _container3).removeEventListener("keydown", __privateGet(this, _boundKeyDown)); } }; _show = new WeakSet(); show_fn = function() { if (!__privateGet(this, _popup)) { this.render(); } if (!this.isVisible) { __privateMethod(this, _setPosition, setPosition_fn).call(this); __privateGet(this, _container3).hidden = false; __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) + 1e3; } else if (__privateGet(this, _pinned)) { __privateGet(this, _container3).classList.add("focused"); } }; _hide = new WeakSet(); hide_fn = function() { __privateGet(this, _container3).classList.remove("focused"); if (__privateGet(this, _pinned) || !this.isVisible) { return; } __privateGet(this, _container3).hidden = true; __privateGet(this, _container3).style.zIndex = parseInt(__privateGet(this, _container3).style.zIndex) - 1e3; }; var FreeTextAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); this.textContent = parameters.data.textContent; this.textPosition = parameters.data.textPosition; this.annotationEditorType = AnnotationEditorType.FREETEXT; } render() { this.container.classList.add("freeTextAnnotation"); if (this.textContent) { const content = document.createElement("div"); content.classList.add("annotationTextContent"); content.setAttribute("role", "comment"); for (const line of this.textContent) { const lineSpan = document.createElement("span"); lineSpan.textContent = line; content.append(lineSpan); } this.container.append(content); } if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this._editOnDoubleClick(); return this.container; } }; var _line; var LineAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _line, null); } render() { this.container.classList.add("lineAnnotation"); const data = this.data; const { width, height } = getRectDims(data.rect); const svg = this.svgFactory.create(width, height, true); const line = __privateSet(this, _line, this.svgFactory.createElement("svg:line")); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); line.setAttribute("fill", "transparent"); svg.append(line); this.container.append(svg); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _line); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _line = new WeakMap(); var _square; var SquareAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _square, null); } render() { this.container.classList.add("squareAnnotation"); const data = this.data; const { width, height } = getRectDims(data.rect); const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; const square = __privateSet(this, _square, this.svgFactory.createElement("svg:rect")); square.setAttribute("x", borderWidth / 2); square.setAttribute("y", borderWidth / 2); square.setAttribute("width", width - borderWidth); square.setAttribute("height", height - borderWidth); square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); square.setAttribute("fill", "transparent"); svg.append(square); this.container.append(svg); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _square); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _square = new WeakMap(); var _circle; var CircleAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _circle, null); } render() { this.container.classList.add("circleAnnotation"); const data = this.data; const { width, height } = getRectDims(data.rect); const svg = this.svgFactory.create(width, height, true); const borderWidth = data.borderStyle.width; const circle = __privateSet(this, _circle, this.svgFactory.createElement("svg:ellipse")); circle.setAttribute("cx", width / 2); circle.setAttribute("cy", height / 2); circle.setAttribute("rx", width / 2 - borderWidth / 2); circle.setAttribute("ry", height / 2 - borderWidth / 2); circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); circle.setAttribute("fill", "transparent"); svg.append(circle); this.container.append(svg); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _circle); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _circle = new WeakMap(); var _polyline; var PolylineAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _polyline, null); this.containerClassName = "polylineAnnotation"; this.svgElementName = "svg:polyline"; } render() { this.container.classList.add(this.containerClassName); const { data: { rect, vertices, borderStyle, popupRef } } = this; if (!vertices) { return this.container; } const { width, height } = getRectDims(rect); const svg = this.svgFactory.create(width, height, true); let points = []; for (let i = 0, ii = vertices.length; i < ii; i += 2) { const x = vertices[i] - rect[0]; const y = rect[3] - vertices[i + 1]; points.push(`${x},${y}`); } points = points.join(" "); const polyline = __privateSet(this, _polyline, this.svgFactory.createElement(this.svgElementName)); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); svg.append(polyline); this.container.append(svg); if (!popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _polyline); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _polyline = new WeakMap(); var PolygonAnnotationElement = class extends PolylineAnnotationElement { constructor(parameters) { super(parameters); this.containerClassName = "polygonAnnotation"; this.svgElementName = "svg:polygon"; } }; var CaretAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); } render() { this.container.classList.add("caretAnnotation"); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } }; var _polylines; var InkAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); __privateAdd(this, _polylines, []); this.containerClassName = "inkAnnotation"; this.svgElementName = "svg:polyline"; this.annotationEditorType = AnnotationEditorType.INK; } render() { this.container.classList.add(this.containerClassName); const { data: { rect, inkLists, borderStyle, popupRef } } = this; const { width, height } = getRectDims(rect); const svg = this.svgFactory.create(width, height, true); for (const inkList of inkLists) { let points = []; for (let i = 0, ii = inkList.length; i < ii; i += 2) { const x = inkList[i] - rect[0]; const y = rect[3] - inkList[i + 1]; points.push(`${x},${y}`); } points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); __privateGet(this, _polylines).push(polyline); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); if (!popupRef && this.hasPopupData) { this._createPopup(); } svg.append(polyline); } this.container.append(svg); return this.container; } getElementsToTriggerPopup() { return __privateGet(this, _polylines); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _polylines = new WeakMap(); var HighlightAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("highlightAnnotation"); return this.container; } }; var UnderlineAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("underlineAnnotation"); return this.container; } }; var SquigglyAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("squigglyAnnotation"); return this.container; } }; var StrikeOutAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } this.container.classList.add("strikeoutAnnotation"); return this.container; } }; var StampAnnotationElement = class extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true, ignoreBorder: true }); } render() { this.container.classList.add("stampAnnotation"); if (!this.data.popupRef && this.hasPopupData) { this._createPopup(); } return this.container; } }; var _trigger, _download, download_fn; var FileAttachmentAnnotationElement = class extends AnnotationElement { constructor(parameters) { var _a2; super(parameters, { isRenderable: true }); __privateAdd(this, _download); __privateAdd(this, _trigger, null); const { file } = this.data; this.filename = file.filename; this.content = file.content; (_a2 = this.linkService.eventBus) == null ? void 0 : _a2.dispatch("fileattachmentannotation", { source: this, ...file }); } render() { this.container.classList.add("fileAttachmentAnnotation"); const { container, data } = this; let trigger; if (data.hasAppearance || data.fillAlpha === 0) { trigger = document.createElement("div"); } else { trigger = document.createElement("img"); trigger.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(data.name) ? "paperclip" : "pushpin"}.svg`; if (data.fillAlpha && data.fillAlpha < 1) { trigger.style = `filter: opacity(${Math.round(data.fillAlpha * 100)}%);`; } } trigger.addEventListener("dblclick", __privateMethod(this, _download, download_fn).bind(this)); __privateSet(this, _trigger, trigger); const { isMac } = util_FeatureTest.platform; container.addEventListener("keydown", (evt) => { if (evt.key === "Enter" && (isMac ? evt.metaKey : evt.ctrlKey)) { __privateMethod(this, _download, download_fn).call(this); } }); if (!data.popupRef && this.hasPopupData) { this._createPopup(); } else { trigger.classList.add("popupTriggerArea"); } container.append(trigger); return container; } getElementsToTriggerPopup() { return __privateGet(this, _trigger); } addHighlightArea() { this.container.classList.add("highlightArea"); } }; _trigger = new WeakMap(); _download = new WeakSet(); download_fn = function() { var _a2; (_a2 = this.downloadManager) == null ? void 0 : _a2.openOrDownloadData(this.content, this.filename); }; var _accessibilityManager, _annotationCanvasMap, _editableAnnotations, _appendElement, appendElement_fn, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn; var AnnotationLayer = class { constructor({ div, accessibilityManager, annotationCanvasMap, annotationEditorUIManager, page, viewport }) { __privateAdd(this, _appendElement); __privateAdd(this, _setAnnotationCanvasMap); __privateAdd(this, _accessibilityManager, null); __privateAdd(this, _annotationCanvasMap, null); __privateAdd(this, _editableAnnotations, /* @__PURE__ */ new Map()); this.div = div; __privateSet(this, _accessibilityManager, accessibilityManager); __privateSet(this, _annotationCanvasMap, annotationCanvasMap); this.page = page; this.viewport = viewport; this.zIndex = 0; this._annotationEditorUIManager = annotationEditorUIManager; } hasEditableAnnotations() { return __privateGet(this, _editableAnnotations).size > 0; } async render(params) { var _a2; const { annotations } = params; const layer = this.div; setLayerDimensions(layer, this.viewport); const popupToElements = /* @__PURE__ */ new Map(); const elementParams = { data: null, layer, linkService: params.linkService, downloadManager: params.downloadManager, imageResourcesPath: params.imageResourcesPath || "", renderForms: params.renderForms !== false, svgFactory: new DOMSVGFactory(), annotationStorage: params.annotationStorage || new AnnotationStorage(), enableScripting: params.enableScripting === true, hasJSActions: params.hasJSActions, fieldObjects: params.fieldObjects, parent: this, elements: null }; for (const data of annotations) { if (data.noHTML) { continue; } const isPopupAnnotation = data.annotationType === AnnotationType.POPUP; if (!isPopupAnnotation) { const { width, height } = getRectDims(data.rect); if (width <= 0 || height <= 0) { continue; } } else { const elements = popupToElements.get(data.id); if (!elements) { continue; } elementParams.elements = elements; } elementParams.data = data; const element = AnnotationElementFactory.create(elementParams); if (!element.isRenderable) { continue; } if (!isPopupAnnotation && data.popupRef) { const elements = popupToElements.get(data.popupRef); if (!elements) { popupToElements.set(data.popupRef, [element]); } else { elements.push(element); } } const rendered = element.render(); if (data.hidden) { rendered.style.visibility = "hidden"; } __privateMethod(this, _appendElement, appendElement_fn).call(this, rendered, data.id); if (element._isEditable) { __privateGet(this, _editableAnnotations).set(element.data.id, element); (_a2 = this._annotationEditorUIManager) == null ? void 0 : _a2.renderAnnotationElement(element); } } __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this); } update({ viewport }) { const layer = this.div; this.viewport = viewport; setLayerDimensions(layer, { rotation: viewport.rotation }); __privateMethod(this, _setAnnotationCanvasMap, setAnnotationCanvasMap_fn).call(this); layer.hidden = false; } getEditableAnnotations() { return Array.from(__privateGet(this, _editableAnnotations).values()); } getEditableAnnotation(id) { return __privateGet(this, _editableAnnotations).get(id); } }; _accessibilityManager = new WeakMap(); _annotationCanvasMap = new WeakMap(); _editableAnnotations = new WeakMap(); _appendElement = new WeakSet(); appendElement_fn = function(element, id) { var _a2; const contentElement = element.firstChild || element; contentElement.id = `${AnnotationPrefix}${id}`; this.div.append(element); (_a2 = __privateGet(this, _accessibilityManager)) == null ? void 0 : _a2.moveElementInDOM(this.div, element, contentElement, false); }; _setAnnotationCanvasMap = new WeakSet(); setAnnotationCanvasMap_fn = function() { if (!__privateGet(this, _annotationCanvasMap)) { return; } const layer = this.div; for (const [id, canvas] of __privateGet(this, _annotationCanvasMap)) { const element = layer.querySelector(`[data-annotation-id="${id}"]`); if (!element) { continue; } canvas.className = "annotationContent"; const { firstChild } = element; if (!firstChild) { element.append(canvas); } else if (firstChild.nodeName === "CANVAS") { firstChild.replaceWith(canvas); } else if (!firstChild.classList.contains("annotationContent")) { firstChild.before(canvas); } else { firstChild.after(canvas); } } __privateGet(this, _annotationCanvasMap).clear(); }; var EOL_PATTERN = /\r\n?|\n/g; var _color2, _content, _editorDivId, _editModeAC, _fontSize2, _initialData, _updateFontSize, updateFontSize_fn, _updateColor, updateColor_fn, _extractText, extractText_fn, _setEditorDimensions, setEditorDimensions_fn, _getNodeContent, getNodeContent_fn, _setContent, setContent_fn, _serializeContent, serializeContent_fn, _deserializeContent, deserializeContent_fn, _hasElementChanged, hasElementChanged_fn; var _FreeTextEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "freeTextEditor" }); __privateAdd(this, _updateFontSize); __privateAdd(this, _updateColor); __privateAdd(this, _extractText); __privateAdd(this, _setEditorDimensions); __privateAdd(this, _setContent); __privateAdd(this, _serializeContent); __privateAdd(this, _hasElementChanged); __privateAdd(this, _color2, void 0); __privateAdd(this, _content, ""); __privateAdd(this, _editorDivId, `${this.id}-editor`); __privateAdd(this, _editModeAC, null); __privateAdd(this, _fontSize2, void 0); __privateAdd(this, _initialData, null); __privateSet(this, _color2, params.color || _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor); __privateSet(this, _fontSize2, params.fontSize || _FreeTextEditor._defaultFontSize); } static get _keyboardManager() { const proto = _FreeTextEditor.prototype; const arrowChecker = (self) => self.isEmpty(); const small = AnnotationEditorUIManager.TRANSLATE_SMALL; const big = AnnotationEditorUIManager.TRANSLATE_BIG; return shadow(this, "_keyboardManager", new KeyboardManager([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], proto.commitOrRemove, { bubbles: true }], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], proto.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], proto._translateEmpty, { args: [-small, 0], checker: arrowChecker }], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], proto._translateEmpty, { args: [-big, 0], checker: arrowChecker }], [["ArrowRight", "mac+ArrowRight"], proto._translateEmpty, { args: [small, 0], checker: arrowChecker }], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], proto._translateEmpty, { args: [big, 0], checker: arrowChecker }], [["ArrowUp", "mac+ArrowUp"], proto._translateEmpty, { args: [0, -small], checker: arrowChecker }], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], proto._translateEmpty, { args: [0, -big], checker: arrowChecker }], [["ArrowDown", "mac+ArrowDown"], proto._translateEmpty, { args: [0, small], checker: arrowChecker }], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], proto._translateEmpty, { args: [0, big], checker: arrowChecker }]])); } static initialize(l10n, uiManager) { AnnotationEditor.initialize(l10n, uiManager, { strings: ["pdfjs-free-text-default-content"] }); const style = getComputedStyle(document.documentElement); this._internalPadding = parseFloat(style.getPropertyValue("--freetext-padding")); } static updateDefaultParams(type, value) { switch (type) { case AnnotationEditorParamsType.FREETEXT_SIZE: _FreeTextEditor._defaultFontSize = value; break; case AnnotationEditorParamsType.FREETEXT_COLOR: _FreeTextEditor._defaultColor = value; break; } } updateParams(type, value) { switch (type) { case AnnotationEditorParamsType.FREETEXT_SIZE: __privateMethod(this, _updateFontSize, updateFontSize_fn).call(this, value); break; case AnnotationEditorParamsType.FREETEXT_COLOR: __privateMethod(this, _updateColor, updateColor_fn).call(this, value); break; } } static get defaultPropertiesToUpdate() { return [[AnnotationEditorParamsType.FREETEXT_SIZE, _FreeTextEditor._defaultFontSize], [AnnotationEditorParamsType.FREETEXT_COLOR, _FreeTextEditor._defaultColor || AnnotationEditor._defaultLineColor]]; } get propertiesToUpdate() { return [[AnnotationEditorParamsType.FREETEXT_SIZE, __privateGet(this, _fontSize2)], [AnnotationEditorParamsType.FREETEXT_COLOR, __privateGet(this, _color2)]]; } _translateEmpty(x, y) { this._uiManager.translateSelectedEditors(x, y, true); } getInitialTranslation() { const scale = this.parentScale; return [-_FreeTextEditor._internalPadding * scale, -(_FreeTextEditor._internalPadding + __privateGet(this, _fontSize2)) * scale]; } rebuild() { if (!this.parent) { return; } super.rebuild(); if (this.div === null) { return; } if (!this.isAttachedToDOM) { this.parent.add(this); } } enableEditMode() { if (this.isInEditMode()) { return; } this.parent.setEditingState(false); this.parent.updateToolbar(AnnotationEditorType.FREETEXT); super.enableEditMode(); this.overlayDiv.classList.remove("enabled"); this.editorDiv.contentEditable = true; this._isDraggable = false; this.div.removeAttribute("aria-activedescendant"); __privateSet(this, _editModeAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _editModeAC)); this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), { signal }); this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), { signal }); this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), { signal }); this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), { signal }); this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), { signal }); } disableEditMode() { var _a2; if (!this.isInEditMode()) { return; } this.parent.setEditingState(true); super.disableEditMode(); this.overlayDiv.classList.add("enabled"); this.editorDiv.contentEditable = false; this.div.setAttribute("aria-activedescendant", __privateGet(this, _editorDivId)); this._isDraggable = true; (_a2 = __privateGet(this, _editModeAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _editModeAC, null); this.div.focus({ preventScroll: true }); this.isEditing = false; this.parent.div.classList.add("freetextEditing"); } focusin(event) { if (!this._focusEventsAllowed) { return; } super.focusin(event); if (event.target !== this.editorDiv) { this.editorDiv.focus(); } } onceAdded() { var _a2; if (this.width) { return; } this.enableEditMode(); this.editorDiv.focus(); if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) { this.center(); } this._initialOptions = null; } isEmpty() { return !this.editorDiv || this.editorDiv.innerText.trim() === ""; } remove() { this.isEditing = false; if (this.parent) { this.parent.setEditingState(true); this.parent.div.classList.add("freetextEditing"); } super.remove(); } commit() { if (!this.isInEditMode()) { return; } super.commit(); this.disableEditMode(); const savedText = __privateGet(this, _content); const newText = __privateSet(this, _content, __privateMethod(this, _extractText, extractText_fn).call(this).trimEnd()); if (savedText === newText) { return; } const setText = (text) => { __privateSet(this, _content, text); if (!text) { this.remove(); return; } __privateMethod(this, _setContent, setContent_fn).call(this); this._uiManager.rebuild(this); __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); }; this.addCommands({ cmd: () => { setText(newText); }, undo: () => { setText(savedText); }, mustExec: false }); __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); } shouldGetKeyboardEvents() { return this.isInEditMode(); } enterInEditMode() { this.enableEditMode(); this.editorDiv.focus(); } dblclick(event) { this.enterInEditMode(); } keydown(event) { if (event.target === this.div && event.key === "Enter") { this.enterInEditMode(); event.preventDefault(); } } editorDivKeydown(event) { _FreeTextEditor._keyboardManager.exec(this, event); } editorDivFocus(event) { this.isEditing = true; } editorDivBlur(event) { this.isEditing = false; } editorDivInput(event) { this.parent.div.classList.toggle("freetextEditing", this.isEmpty()); } disableEditing() { this.editorDiv.setAttribute("role", "comment"); this.editorDiv.removeAttribute("aria-multiline"); } enableEditing() { this.editorDiv.setAttribute("role", "textbox"); this.editorDiv.setAttribute("aria-multiline", true); } render() { if (this.div) { return this.div; } let baseX, baseY; if (this.width) { baseX = this.x; baseY = this.y; } super.render(); this.editorDiv = document.createElement("div"); this.editorDiv.className = "internal"; this.editorDiv.setAttribute("id", __privateGet(this, _editorDivId)); this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text"); this.enableEditing(); AnnotationEditor._l10nPromise.get("pdfjs-free-text-default-content").then((msg) => { var _a2; return (_a2 = this.editorDiv) == null ? void 0 : _a2.setAttribute("default-content", msg); }); this.editorDiv.contentEditable = true; const { style } = this.editorDiv; style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`; style.color = __privateGet(this, _color2); this.div.append(this.editorDiv); this.overlayDiv = document.createElement("div"); this.overlayDiv.classList.add("overlay", "enabled"); this.div.append(this.overlayDiv); bindEvents(this, this.div, ["dblclick", "keydown"]); if (this.width) { const [parentWidth, parentHeight] = this.parentDimensions; if (this.annotationElementId) { const { position } = __privateGet(this, _initialData); let [tx, ty] = this.getInitialTranslation(); [tx, ty] = this.pageTranslationToScreen(tx, ty); const [pageWidth, pageHeight] = this.pageDimensions; const [pageX, pageY] = this.pageTranslation; let posX, posY; switch (this.rotation) { case 0: posX = baseX + (position[0] - pageX) / pageWidth; posY = baseY + this.height - (position[1] - pageY) / pageHeight; break; case 90: posX = baseX + (position[0] - pageX) / pageWidth; posY = baseY - (position[1] - pageY) / pageHeight; [tx, ty] = [ty, -tx]; break; case 180: posX = baseX - this.width + (position[0] - pageX) / pageWidth; posY = baseY - (position[1] - pageY) / pageHeight; [tx, ty] = [-tx, -ty]; break; case 270: posX = baseX + (position[0] - pageX - this.height * pageHeight) / pageWidth; posY = baseY + (position[1] - pageY - this.width * pageWidth) / pageHeight; [tx, ty] = [-ty, tx]; break; } this.setAt(posX * parentWidth, posY * parentHeight, tx, ty); } else { this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); } __privateMethod(this, _setContent, setContent_fn).call(this); this._isDraggable = true; this.editorDiv.contentEditable = false; } else { this._isDraggable = false; this.editorDiv.contentEditable = true; } return this.div; } editorDivPaste(event) { var _a2, _b, _c; const clipboardData = event.clipboardData || window.clipboardData; const { types } = clipboardData; if (types.length === 1 && types[0] === "text/plain") { return; } event.preventDefault(); const paste = __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, clipboardData.getData("text") || "").replaceAll(EOL_PATTERN, "\n"); if (!paste) { return; } const selection = window.getSelection(); if (!selection.rangeCount) { return; } this.editorDiv.normalize(); selection.deleteFromDocument(); const range = selection.getRangeAt(0); if (!paste.includes("\n")) { range.insertNode(document.createTextNode(paste)); this.editorDiv.normalize(); selection.collapseToStart(); return; } const { startContainer, startOffset } = range; const bufferBefore = []; const bufferAfter = []; if (startContainer.nodeType === Node.TEXT_NODE) { const parent = startContainer.parentElement; bufferAfter.push(startContainer.nodeValue.slice(startOffset).replaceAll(EOL_PATTERN, "")); if (parent !== this.editorDiv) { let buffer = bufferBefore; for (const child of this.editorDiv.childNodes) { if (child === parent) { buffer = bufferAfter; continue; } buffer.push(__privateMethod(_b = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_b, child)); } } bufferBefore.push(startContainer.nodeValue.slice(0, startOffset).replaceAll(EOL_PATTERN, "")); } else if (startContainer === this.editorDiv) { let buffer = bufferBefore; let i = 0; for (const child of this.editorDiv.childNodes) { if (i++ === startOffset) { buffer = bufferAfter; } buffer.push(__privateMethod(_c = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_c, child)); } } __privateSet(this, _content, `${bufferBefore.join("\n")}${paste}${bufferAfter.join("\n")}`); __privateMethod(this, _setContent, setContent_fn).call(this); const newRange = new Range(); let beforeLength = bufferBefore.reduce((acc, line) => acc + line.length, 0); for (const { firstChild } of this.editorDiv.childNodes) { if (firstChild.nodeType === Node.TEXT_NODE) { const length = firstChild.nodeValue.length; if (beforeLength <= length) { newRange.setStart(firstChild, beforeLength); newRange.setEnd(firstChild, beforeLength); break; } beforeLength -= length; } } selection.removeAllRanges(); selection.addRange(newRange); } get contentDiv() { return this.editorDiv; } static deserialize(data, parent, uiManager) { var _a2; let initialData = null; if (data instanceof FreeTextAnnotationElement) { const { data: { defaultAppearanceData: { fontSize, fontColor }, rect, rotation, id }, textContent, textPosition, parent: { page: { pageNumber } } } = data; if (!textContent || textContent.length === 0) { return null; } initialData = data = { annotationType: AnnotationEditorType.FREETEXT, color: Array.from(fontColor), fontSize, value: textContent.join("\n"), position: textPosition, pageIndex: pageNumber - 1, rect: rect.slice(0), rotation, id, deleted: false }; } const editor = super.deserialize(data, parent, uiManager); __privateSet(editor, _fontSize2, data.fontSize); __privateSet(editor, _color2, Util.makeHexColor(...data.color)); __privateSet(editor, _content, __privateMethod(_a2 = _FreeTextEditor, _deserializeContent, deserializeContent_fn).call(_a2, data.value)); editor.annotationElementId = data.id || null; __privateSet(editor, _initialData, initialData); return editor; } serialize(isForCopying = false) { if (this.isEmpty()) { return null; } if (this.deleted) { return { pageIndex: this.pageIndex, id: this.annotationElementId, deleted: true }; } const padding = _FreeTextEditor._internalPadding * this.parentScale; const rect = this.getRect(padding, padding); const color2 = AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : __privateGet(this, _color2)); const serialized = { annotationType: AnnotationEditorType.FREETEXT, color: color2, fontSize: __privateGet(this, _fontSize2), value: __privateMethod(this, _serializeContent, serializeContent_fn).call(this), pageIndex: this.pageIndex, rect, rotation: this.rotation, structTreeParentId: this._structTreeParentId }; if (isForCopying) { return serialized; } if (this.annotationElementId && !__privateMethod(this, _hasElementChanged, hasElementChanged_fn).call(this, serialized)) { return null; } serialized.id = this.annotationElementId; return serialized; } renderAnnotationElement(annotation) { const content = super.renderAnnotationElement(annotation); if (this.deleted) { return content; } const { style } = content; style.fontSize = `calc(${__privateGet(this, _fontSize2)}px * var(--scale-factor))`; style.color = __privateGet(this, _color2); content.replaceChildren(); for (const line of __privateGet(this, _content).split("\n")) { const div = document.createElement("div"); div.append(line ? document.createTextNode(line) : document.createElement("br")); content.append(div); } const padding = _FreeTextEditor._internalPadding * this.parentScale; annotation.updateEdited({ rect: this.getRect(padding, padding), popupContent: __privateGet(this, _content) }); return content; } resetAnnotationElement(annotation) { super.resetAnnotationElement(annotation); annotation.resetEdited(); } }; var FreeTextEditor = _FreeTextEditor; _color2 = new WeakMap(); _content = new WeakMap(); _editorDivId = new WeakMap(); _editModeAC = new WeakMap(); _fontSize2 = new WeakMap(); _initialData = new WeakMap(); _updateFontSize = new WeakSet(); updateFontSize_fn = function(fontSize) { const setFontsize = (size) => { this.editorDiv.style.fontSize = `calc(${size}px * var(--scale-factor))`; this.translate(0, -(size - __privateGet(this, _fontSize2)) * this.parentScale); __privateSet(this, _fontSize2, size); __privateMethod(this, _setEditorDimensions, setEditorDimensions_fn).call(this); }; const savedFontsize = __privateGet(this, _fontSize2); this.addCommands({ cmd: setFontsize.bind(this, fontSize), undo: setFontsize.bind(this, savedFontsize), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.FREETEXT_SIZE, overwriteIfSameType: true, keepUndo: true }); }; _updateColor = new WeakSet(); updateColor_fn = function(color2) { const setColor = (col) => { __privateSet(this, _color2, this.editorDiv.style.color = col); }; const savedColor = __privateGet(this, _color2); this.addCommands({ cmd: setColor.bind(this, color2), undo: setColor.bind(this, savedColor), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.FREETEXT_COLOR, overwriteIfSameType: true, keepUndo: true }); }; _extractText = new WeakSet(); extractText_fn = function() { var _a2; const buffer = []; this.editorDiv.normalize(); for (const child of this.editorDiv.childNodes) { buffer.push(__privateMethod(_a2 = _FreeTextEditor, _getNodeContent, getNodeContent_fn).call(_a2, child)); } return buffer.join("\n"); }; _setEditorDimensions = new WeakSet(); setEditorDimensions_fn = function() { const [parentWidth, parentHeight] = this.parentDimensions; let rect; if (this.isAttachedToDOM) { rect = this.div.getBoundingClientRect(); } else { const { currentLayer, div } = this; const savedDisplay = div.style.display; const savedVisibility = div.classList.contains("hidden"); div.classList.remove("hidden"); div.style.display = "hidden"; currentLayer.div.append(this.div); rect = div.getBoundingClientRect(); div.remove(); div.style.display = savedDisplay; div.classList.toggle("hidden", savedVisibility); } if (this.rotation % 180 === this.parentRotation % 180) { this.width = rect.width / parentWidth; this.height = rect.height / parentHeight; } else { this.width = rect.height / parentWidth; this.height = rect.width / parentHeight; } this.fixAndSetPosition(); }; _getNodeContent = new WeakSet(); getNodeContent_fn = function(node) { return (node.nodeType === Node.TEXT_NODE ? node.nodeValue : node.innerText).replaceAll(EOL_PATTERN, ""); }; _setContent = new WeakSet(); setContent_fn = function() { this.editorDiv.replaceChildren(); if (!__privateGet(this, _content)) { return; } for (const line of __privateGet(this, _content).split("\n")) { const div = document.createElement("div"); div.append(line ? document.createTextNode(line) : document.createElement("br")); this.editorDiv.append(div); } }; _serializeContent = new WeakSet(); serializeContent_fn = function() { return __privateGet(this, _content).replaceAll("\xA0", " "); }; _deserializeContent = new WeakSet(); deserializeContent_fn = function(content) { return content.replaceAll(" ", "\xA0"); }; _hasElementChanged = new WeakSet(); hasElementChanged_fn = function(serialized) { const { value, fontSize, color: color2, pageIndex } = __privateGet(this, _initialData); return this._hasBeenMoved || serialized.value !== value || serialized.fontSize !== fontSize || serialized.color.some((c, i) => c !== color2[i]) || serialized.pageIndex !== pageIndex; }; __privateAdd(FreeTextEditor, _getNodeContent); __privateAdd(FreeTextEditor, _deserializeContent); __publicField(FreeTextEditor, "_freeTextDefaultContent", ""); __publicField(FreeTextEditor, "_internalPadding", 0); __publicField(FreeTextEditor, "_defaultColor", null); __publicField(FreeTextEditor, "_defaultFontSize", 10); __publicField(FreeTextEditor, "_type", "freetext"); __publicField(FreeTextEditor, "_editorType", AnnotationEditorType.FREETEXT); var _box, _verticalEdges, _intervals, _getOutlines, getOutlines_fn, _binarySearch, binarySearch_fn, _insert, insert_fn, _remove, remove_fn, _breakEdge, breakEdge_fn; var Outliner = class { constructor(boxes, borderWidth = 0, innerMargin = 0, isLTR = true) { __privateAdd(this, _getOutlines); __privateAdd(this, _binarySearch); __privateAdd(this, _insert); __privateAdd(this, _remove); __privateAdd(this, _breakEdge); __privateAdd(this, _box, void 0); __privateAdd(this, _verticalEdges, []); __privateAdd(this, _intervals, []); let minX = Infinity; let maxX = -Infinity; let minY = Infinity; let maxY = -Infinity; const NUMBER_OF_DIGITS = 4; const EPSILON = 10 ** -NUMBER_OF_DIGITS; for (const { x, y, width, height } of boxes) { const x1 = Math.floor((x - borderWidth) / EPSILON) * EPSILON; const x2 = Math.ceil((x + width + borderWidth) / EPSILON) * EPSILON; const y1 = Math.floor((y - borderWidth) / EPSILON) * EPSILON; const y2 = Math.ceil((y + height + borderWidth) / EPSILON) * EPSILON; const left = [x1, y1, y2, true]; const right = [x2, y1, y2, false]; __privateGet(this, _verticalEdges).push(left, right); minX = Math.min(minX, x1); maxX = Math.max(maxX, x2); minY = Math.min(minY, y1); maxY = Math.max(maxY, y2); } const bboxWidth = maxX - minX + 2 * innerMargin; const bboxHeight = maxY - minY + 2 * innerMargin; const shiftedMinX = minX - innerMargin; const shiftedMinY = minY - innerMargin; const lastEdge = __privateGet(this, _verticalEdges).at(isLTR ? -1 : -2); const lastPoint = [lastEdge[0], lastEdge[2]]; for (const edge of __privateGet(this, _verticalEdges)) { const [x, y1, y2] = edge; edge[0] = (x - shiftedMinX) / bboxWidth; edge[1] = (y1 - shiftedMinY) / bboxHeight; edge[2] = (y2 - shiftedMinY) / bboxHeight; } __privateSet(this, _box, { x: shiftedMinX, y: shiftedMinY, width: bboxWidth, height: bboxHeight, lastPoint }); } getOutlines() { __privateGet(this, _verticalEdges).sort((a, b) => a[0] - b[0] || a[1] - b[1] || a[2] - b[2]); const outlineVerticalEdges = []; for (const edge of __privateGet(this, _verticalEdges)) { if (edge[3]) { outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge)); __privateMethod(this, _insert, insert_fn).call(this, edge); } else { __privateMethod(this, _remove, remove_fn).call(this, edge); outlineVerticalEdges.push(...__privateMethod(this, _breakEdge, breakEdge_fn).call(this, edge)); } } return __privateMethod(this, _getOutlines, getOutlines_fn).call(this, outlineVerticalEdges); } }; _box = new WeakMap(); _verticalEdges = new WeakMap(); _intervals = new WeakMap(); _getOutlines = new WeakSet(); getOutlines_fn = function(outlineVerticalEdges) { const edges = []; const allEdges = /* @__PURE__ */ new Set(); for (const edge of outlineVerticalEdges) { const [x, y1, y2] = edge; edges.push([x, y1, edge], [x, y2, edge]); } edges.sort((a, b) => a[1] - b[1] || a[0] - b[0]); for (let i = 0, ii = edges.length; i < ii; i += 2) { const edge1 = edges[i][2]; const edge2 = edges[i + 1][2]; edge1.push(edge2); edge2.push(edge1); allEdges.add(edge1); allEdges.add(edge2); } const outlines = []; let outline; while (allEdges.size > 0) { const edge = allEdges.values().next().value; let [x, y1, y2, edge1, edge2] = edge; allEdges.delete(edge); let lastPointX = x; let lastPointY = y1; outline = [x, y2]; outlines.push(outline); while (true) { let e; if (allEdges.has(edge1)) { e = edge1; } else if (allEdges.has(edge2)) { e = edge2; } else { break; } allEdges.delete(e); [x, y1, y2, edge1, edge2] = e; if (lastPointX !== x) { outline.push(lastPointX, lastPointY, x, lastPointY === y1 ? y1 : y2); lastPointX = x; } lastPointY = lastPointY === y1 ? y2 : y1; } outline.push(lastPointX, lastPointY); } return new HighlightOutline(outlines, __privateGet(this, _box)); }; _binarySearch = new WeakSet(); binarySearch_fn = function(y) { const array = __privateGet(this, _intervals); let start = 0; let end = array.length - 1; while (start <= end) { const middle = start + end >> 1; const y1 = array[middle][0]; if (y1 === y) { return middle; } if (y1 < y) { start = middle + 1; } else { end = middle - 1; } } return end + 1; }; _insert = new WeakSet(); insert_fn = function([, y1, y2]) { const index = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1); __privateGet(this, _intervals).splice(index, 0, [y1, y2]); }; _remove = new WeakSet(); remove_fn = function([, y1, y2]) { const index = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y1); for (let i = index; i < __privateGet(this, _intervals).length; i++) { const [start, end] = __privateGet(this, _intervals)[i]; if (start !== y1) { break; } if (start === y1 && end === y2) { __privateGet(this, _intervals).splice(i, 1); return; } } for (let i = index - 1; i >= 0; i--) { const [start, end] = __privateGet(this, _intervals)[i]; if (start !== y1) { break; } if (start === y1 && end === y2) { __privateGet(this, _intervals).splice(i, 1); return; } } }; _breakEdge = new WeakSet(); breakEdge_fn = function(edge) { const [x, y1, y2] = edge; const results = [[x, y1, y2]]; const index = __privateMethod(this, _binarySearch, binarySearch_fn).call(this, y2); for (let i = 0; i < index; i++) { const [start, end] = __privateGet(this, _intervals)[i]; for (let j = 0, jj = results.length; j < jj; j++) { const [, y3, y4] = results[j]; if (end <= y3 || y4 <= start) { continue; } if (y3 >= start) { if (y4 > end) { results[j][1] = end; } else { if (jj === 1) { return []; } results.splice(j, 1); j--; jj--; } continue; } results[j][2] = start; if (y4 > end) { results.push([x, end, y4]); } } } return results; }; var Outline = class { toSVGPath() { throw new Error("Abstract method `toSVGPath` must be implemented."); } get box() { throw new Error("Abstract getter `box` must be implemented."); } serialize(_bbox2, _rotation2) { throw new Error("Abstract method `serialize` must be implemented."); } get free() { return this instanceof FreeHighlightOutline; } }; var _box2, _outlines; var HighlightOutline = class extends Outline { constructor(outlines, box) { super(); __privateAdd(this, _box2, void 0); __privateAdd(this, _outlines, void 0); __privateSet(this, _outlines, outlines); __privateSet(this, _box2, box); } toSVGPath() { const buffer = []; for (const polygon of __privateGet(this, _outlines)) { let [prevX, prevY] = polygon; buffer.push(`M${prevX} ${prevY}`); for (let i = 2; i < polygon.length; i += 2) { const x = polygon[i]; const y = polygon[i + 1]; if (x === prevX) { buffer.push(`V${y}`); prevY = y; } else if (y === prevY) { buffer.push(`H${x}`); prevX = x; } } buffer.push("Z"); } return buffer.join(" "); } serialize([blX, blY, trX, trY], _rotation2) { const outlines = []; const width = trX - blX; const height = trY - blY; for (const outline of __privateGet(this, _outlines)) { const points = new Array(outline.length); for (let i = 0; i < outline.length; i += 2) { points[i] = blX + outline[i] * width; points[i + 1] = trY - outline[i + 1] * height; } outlines.push(points); } return outlines; } get box() { return __privateGet(this, _box2); } }; _box2 = new WeakMap(); _outlines = new WeakMap(); var _box3, _bottom, _innerMargin, _isLTR, _top, _last, _lastX, _lastY, _min, _min_dist, _scaleFactor, _thickness, _points, _MIN_DIST, _MIN_DIFF, _MIN, _getLastCoords, getLastCoords_fn; var _FreeOutliner = class { constructor({ x, y }, box, scaleFactor, thickness, isLTR, innerMargin = 0) { __privateAdd(this, _getLastCoords); __privateAdd(this, _box3, void 0); __privateAdd(this, _bottom, []); __privateAdd(this, _innerMargin, void 0); __privateAdd(this, _isLTR, void 0); __privateAdd(this, _top, []); __privateAdd(this, _last, new Float64Array(18)); __privateAdd(this, _lastX, void 0); __privateAdd(this, _lastY, void 0); __privateAdd(this, _min, void 0); __privateAdd(this, _min_dist, void 0); __privateAdd(this, _scaleFactor, void 0); __privateAdd(this, _thickness, void 0); __privateAdd(this, _points, []); __privateSet(this, _box3, box); __privateSet(this, _thickness, thickness * scaleFactor); __privateSet(this, _isLTR, isLTR); __privateGet(this, _last).set([NaN, NaN, NaN, NaN, x, y], 6); __privateSet(this, _innerMargin, innerMargin); __privateSet(this, _min_dist, __privateGet(_FreeOutliner, _MIN_DIST) * scaleFactor); __privateSet(this, _min, __privateGet(_FreeOutliner, _MIN) * scaleFactor); __privateSet(this, _scaleFactor, scaleFactor); __privateGet(this, _points).push(x, y); } get free() { return true; } isEmpty() { return isNaN(__privateGet(this, _last)[8]); } add({ x, y }) { var _a2; __privateSet(this, _lastX, x); __privateSet(this, _lastY, y); const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3); let [x1, y1, x2, y2] = __privateGet(this, _last).subarray(8, 12); const diffX = x - x2; const diffY = y - y2; const d = Math.hypot(diffX, diffY); if (d < __privateGet(this, _min)) { return false; } const diffD = d - __privateGet(this, _min_dist); const K = diffD / d; const shiftX = K * diffX; const shiftY = K * diffY; let x0 = x1; let y0 = y1; x1 = x2; y1 = y2; x2 += shiftX; y2 += shiftY; (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.push(x, y); const nX = -shiftY / diffD; const nY = shiftX / diffD; const thX = nX * __privateGet(this, _thickness); const thY = nY * __privateGet(this, _thickness); __privateGet(this, _last).set(__privateGet(this, _last).subarray(2, 8), 0); __privateGet(this, _last).set([x2 + thX, y2 + thY], 4); __privateGet(this, _last).set(__privateGet(this, _last).subarray(14, 18), 12); __privateGet(this, _last).set([x2 - thX, y2 - thY], 16); if (isNaN(__privateGet(this, _last)[6])) { if (__privateGet(this, _top).length === 0) { __privateGet(this, _last).set([x1 + thX, y1 + thY], 2); __privateGet(this, _top).push(NaN, NaN, NaN, NaN, (x1 + thX - layerX) / layerWidth, (y1 + thY - layerY) / layerHeight); __privateGet(this, _last).set([x1 - thX, y1 - thY], 14); __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, (x1 - thX - layerX) / layerWidth, (y1 - thY - layerY) / layerHeight); } __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6); return !this.isEmpty(); } __privateGet(this, _last).set([x0, y0, x1, y1, x2, y2], 6); const angle = Math.abs(Math.atan2(y0 - y1, x0 - x1) - Math.atan2(shiftY, shiftX)); if (angle < Math.PI / 2) { [x1, y1, x2, y2] = __privateGet(this, _last).subarray(2, 6); __privateGet(this, _top).push(NaN, NaN, NaN, NaN, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); [x1, y1, x0, y0] = __privateGet(this, _last).subarray(14, 18); __privateGet(this, _bottom).push(NaN, NaN, NaN, NaN, ((x0 + x1) / 2 - layerX) / layerWidth, ((y0 + y1) / 2 - layerY) / layerHeight); return true; } [x0, y0, x1, y1, x2, y2] = __privateGet(this, _last).subarray(0, 6); __privateGet(this, _top).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); [x2, y2, x1, y1, x0, y0] = __privateGet(this, _last).subarray(12, 18); __privateGet(this, _bottom).push(((x0 + 5 * x1) / 6 - layerX) / layerWidth, ((y0 + 5 * y1) / 6 - layerY) / layerHeight, ((5 * x1 + x2) / 6 - layerX) / layerWidth, ((5 * y1 + y2) / 6 - layerY) / layerHeight, ((x1 + x2) / 2 - layerX) / layerWidth, ((y1 + y2) / 2 - layerY) / layerHeight); return true; } toSVGPath() { if (this.isEmpty()) { return ""; } const top = __privateGet(this, _top); const bottom = __privateGet(this, _bottom); const lastTop = __privateGet(this, _last).subarray(4, 6); const lastBottom = __privateGet(this, _last).subarray(16, 18); const [x, y, width, height] = __privateGet(this, _box3); const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this); if (isNaN(__privateGet(this, _last)[6]) && !this.isEmpty()) { return `M${(__privateGet(this, _last)[2] - x) / width} ${(__privateGet(this, _last)[3] - y) / height} L${(__privateGet(this, _last)[4] - x) / width} ${(__privateGet(this, _last)[5] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(__privateGet(this, _last)[16] - x) / width} ${(__privateGet(this, _last)[17] - y) / height} L${(__privateGet(this, _last)[14] - x) / width} ${(__privateGet(this, _last)[15] - y) / height} Z`; } const buffer = []; buffer.push(`M${top[4]} ${top[5]}`); for (let i = 6; i < top.length; i += 6) { if (isNaN(top[i])) { buffer.push(`L${top[i + 4]} ${top[i + 5]}`); } else { buffer.push(`C${top[i]} ${top[i + 1]} ${top[i + 2]} ${top[i + 3]} ${top[i + 4]} ${top[i + 5]}`); } } buffer.push(`L${(lastTop[0] - x) / width} ${(lastTop[1] - y) / height} L${lastTopX} ${lastTopY} L${lastBottomX} ${lastBottomY} L${(lastBottom[0] - x) / width} ${(lastBottom[1] - y) / height}`); for (let i = bottom.length - 6; i >= 6; i -= 6) { if (isNaN(bottom[i])) { buffer.push(`L${bottom[i + 4]} ${bottom[i + 5]}`); } else { buffer.push(`C${bottom[i]} ${bottom[i + 1]} ${bottom[i + 2]} ${bottom[i + 3]} ${bottom[i + 4]} ${bottom[i + 5]}`); } } buffer.push(`L${bottom[4]} ${bottom[5]} Z`); return buffer.join(" "); } getOutlines() { var _a2, _b; const top = __privateGet(this, _top); const bottom = __privateGet(this, _bottom); const last = __privateGet(this, _last); const lastTop = last.subarray(4, 6); const lastBottom = last.subarray(16, 18); const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box3); const points = new Float64Array(((_b = (_a2 = __privateGet(this, _points)) == null ? void 0 : _a2.length) != null ? _b : 0) + 2); for (let i = 0, ii = points.length - 2; i < ii; i += 2) { points[i] = (__privateGet(this, _points)[i] - layerX) / layerWidth; points[i + 1] = (__privateGet(this, _points)[i + 1] - layerY) / layerHeight; } points[points.length - 2] = (__privateGet(this, _lastX) - layerX) / layerWidth; points[points.length - 1] = (__privateGet(this, _lastY) - layerY) / layerHeight; const [lastTopX, lastTopY, lastBottomX, lastBottomY] = __privateMethod(this, _getLastCoords, getLastCoords_fn).call(this); if (isNaN(last[6]) && !this.isEmpty()) { const outline2 = new Float64Array(36); outline2.set([NaN, NaN, NaN, NaN, (last[2] - layerX) / layerWidth, (last[3] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[4] - layerX) / layerWidth, (last[5] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (last[16] - layerX) / layerWidth, (last[17] - layerY) / layerHeight, NaN, NaN, NaN, NaN, (last[14] - layerX) / layerWidth, (last[15] - layerY) / layerHeight], 0); return new FreeHighlightOutline(outline2, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR)); } const outline = new Float64Array(__privateGet(this, _top).length + 24 + __privateGet(this, _bottom).length); let N = top.length; for (let i = 0; i < N; i += 2) { if (isNaN(top[i])) { outline[i] = outline[i + 1] = NaN; continue; } outline[i] = top[i]; outline[i + 1] = top[i + 1]; } outline.set([NaN, NaN, NaN, NaN, (lastTop[0] - layerX) / layerWidth, (lastTop[1] - layerY) / layerHeight, NaN, NaN, NaN, NaN, lastTopX, lastTopY, NaN, NaN, NaN, NaN, lastBottomX, lastBottomY, NaN, NaN, NaN, NaN, (lastBottom[0] - layerX) / layerWidth, (lastBottom[1] - layerY) / layerHeight], N); N += 24; for (let i = bottom.length - 6; i >= 6; i -= 6) { for (let j = 0; j < 6; j += 2) { if (isNaN(bottom[i + j])) { outline[N] = outline[N + 1] = NaN; N += 2; continue; } outline[N] = bottom[i + j]; outline[N + 1] = bottom[i + j + 1]; N += 2; } } outline.set([NaN, NaN, NaN, NaN, bottom[4], bottom[5]], N); return new FreeHighlightOutline(outline, points, __privateGet(this, _box3), __privateGet(this, _scaleFactor), __privateGet(this, _innerMargin), __privateGet(this, _isLTR)); } }; var FreeOutliner = _FreeOutliner; _box3 = new WeakMap(); _bottom = new WeakMap(); _innerMargin = new WeakMap(); _isLTR = new WeakMap(); _top = new WeakMap(); _last = new WeakMap(); _lastX = new WeakMap(); _lastY = new WeakMap(); _min = new WeakMap(); _min_dist = new WeakMap(); _scaleFactor = new WeakMap(); _thickness = new WeakMap(); _points = new WeakMap(); _MIN_DIST = new WeakMap(); _MIN_DIFF = new WeakMap(); _MIN = new WeakMap(); _getLastCoords = new WeakSet(); getLastCoords_fn = function() { const lastTop = __privateGet(this, _last).subarray(4, 6); const lastBottom = __privateGet(this, _last).subarray(16, 18); const [x, y, width, height] = __privateGet(this, _box3); return [(__privateGet(this, _lastX) + (lastTop[0] - lastBottom[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastTop[1] - lastBottom[1]) / 2 - y) / height, (__privateGet(this, _lastX) + (lastBottom[0] - lastTop[0]) / 2 - x) / width, (__privateGet(this, _lastY) + (lastBottom[1] - lastTop[1]) / 2 - y) / height]; }; __privateAdd(FreeOutliner, _MIN_DIST, 8); __privateAdd(FreeOutliner, _MIN_DIFF, 2); __privateAdd(FreeOutliner, _MIN, __privateGet(_FreeOutliner, _MIN_DIST) + __privateGet(_FreeOutliner, _MIN_DIFF)); var _box4, _bbox, _innerMargin2, _isLTR2, _points2, _scaleFactor2, _outline, _rescale, rescale_fn, _rescaleAndSwap, rescaleAndSwap_fn, _computeMinMax, computeMinMax_fn; var FreeHighlightOutline = class extends Outline { constructor(outline, points, box, scaleFactor, innerMargin, isLTR) { super(); __privateAdd(this, _rescale); __privateAdd(this, _rescaleAndSwap); __privateAdd(this, _computeMinMax); __privateAdd(this, _box4, void 0); __privateAdd(this, _bbox, null); __privateAdd(this, _innerMargin2, void 0); __privateAdd(this, _isLTR2, void 0); __privateAdd(this, _points2, void 0); __privateAdd(this, _scaleFactor2, void 0); __privateAdd(this, _outline, void 0); __privateSet(this, _outline, outline); __privateSet(this, _points2, points); __privateSet(this, _box4, box); __privateSet(this, _scaleFactor2, scaleFactor); __privateSet(this, _innerMargin2, innerMargin); __privateSet(this, _isLTR2, isLTR); __privateMethod(this, _computeMinMax, computeMinMax_fn).call(this, isLTR); const { x, y, width, height } = __privateGet(this, _bbox); for (let i = 0, ii = outline.length; i < ii; i += 2) { outline[i] = (outline[i] - x) / width; outline[i + 1] = (outline[i + 1] - y) / height; } for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] = (points[i] - x) / width; points[i + 1] = (points[i + 1] - y) / height; } } toSVGPath() { const buffer = [`M${__privateGet(this, _outline)[4]} ${__privateGet(this, _outline)[5]}`]; for (let i = 6, ii = __privateGet(this, _outline).length; i < ii; i += 6) { if (isNaN(__privateGet(this, _outline)[i])) { buffer.push(`L${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`); continue; } buffer.push(`C${__privateGet(this, _outline)[i]} ${__privateGet(this, _outline)[i + 1]} ${__privateGet(this, _outline)[i + 2]} ${__privateGet(this, _outline)[i + 3]} ${__privateGet(this, _outline)[i + 4]} ${__privateGet(this, _outline)[i + 5]}`); } buffer.push("Z"); return buffer.join(" "); } serialize([blX, blY, trX, trY], rotation) { const width = trX - blX; const height = trY - blY; let outline; let points; switch (rotation) { case 0: outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), blX, trY, width, -height); points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), blX, trY, width, -height); break; case 90: outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), blX, blY, width, height); points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), blX, blY, width, height); break; case 180: outline = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _outline), trX, blY, -width, height); points = __privateMethod(this, _rescale, rescale_fn).call(this, __privateGet(this, _points2), trX, blY, -width, height); break; case 270: outline = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _outline), trX, trY, -width, -height); points = __privateMethod(this, _rescaleAndSwap, rescaleAndSwap_fn).call(this, __privateGet(this, _points2), trX, trY, -width, -height); break; } return { outline: Array.from(outline), points: [Array.from(points)] }; } get box() { return __privateGet(this, _bbox); } getNewOutline(thickness, innerMargin) { const { x, y, width, height } = __privateGet(this, _bbox); const [layerX, layerY, layerWidth, layerHeight] = __privateGet(this, _box4); const sx = width * layerWidth; const sy = height * layerHeight; const tx = x * layerWidth + layerX; const ty = y * layerHeight + layerY; const outliner = new FreeOutliner({ x: __privateGet(this, _points2)[0] * sx + tx, y: __privateGet(this, _points2)[1] * sy + ty }, __privateGet(this, _box4), __privateGet(this, _scaleFactor2), thickness, __privateGet(this, _isLTR2), innerMargin != null ? innerMargin : __privateGet(this, _innerMargin2)); for (let i = 2; i < __privateGet(this, _points2).length; i += 2) { outliner.add({ x: __privateGet(this, _points2)[i] * sx + tx, y: __privateGet(this, _points2)[i + 1] * sy + ty }); } return outliner.getOutlines(); } }; _box4 = new WeakMap(); _bbox = new WeakMap(); _innerMargin2 = new WeakMap(); _isLTR2 = new WeakMap(); _points2 = new WeakMap(); _scaleFactor2 = new WeakMap(); _outline = new WeakMap(); _rescale = new WeakSet(); rescale_fn = function(src, tx, ty, sx, sy) { const dest = new Float64Array(src.length); for (let i = 0, ii = src.length; i < ii; i += 2) { dest[i] = tx + src[i] * sx; dest[i + 1] = ty + src[i + 1] * sy; } return dest; }; _rescaleAndSwap = new WeakSet(); rescaleAndSwap_fn = function(src, tx, ty, sx, sy) { const dest = new Float64Array(src.length); for (let i = 0, ii = src.length; i < ii; i += 2) { dest[i] = tx + src[i + 1] * sx; dest[i + 1] = ty + src[i] * sy; } return dest; }; _computeMinMax = new WeakSet(); computeMinMax_fn = function(isLTR) { const outline = __privateGet(this, _outline); let lastX = outline[4]; let lastY = outline[5]; let minX = lastX; let minY = lastY; let maxX = lastX; let maxY = lastY; let lastPointX = lastX; let lastPointY = lastY; const ltrCallback = isLTR ? Math.max : Math.min; for (let i = 6, ii = outline.length; i < ii; i += 6) { if (isNaN(outline[i])) { minX = Math.min(minX, outline[i + 4]); minY = Math.min(minY, outline[i + 5]); maxX = Math.max(maxX, outline[i + 4]); maxY = Math.max(maxY, outline[i + 5]); if (lastPointY < outline[i + 5]) { lastPointX = outline[i + 4]; lastPointY = outline[i + 5]; } else if (lastPointY === outline[i + 5]) { lastPointX = ltrCallback(lastPointX, outline[i + 4]); } } else { const bbox = Util.bezierBoundingBox(lastX, lastY, ...outline.slice(i, i + 6)); minX = Math.min(minX, bbox[0]); minY = Math.min(minY, bbox[1]); maxX = Math.max(maxX, bbox[2]); maxY = Math.max(maxY, bbox[3]); if (lastPointY < bbox[3]) { lastPointX = bbox[2]; lastPointY = bbox[3]; } else if (lastPointY === bbox[3]) { lastPointX = ltrCallback(lastPointX, bbox[2]); } } lastX = outline[i + 4]; lastY = outline[i + 5]; } const x = minX - __privateGet(this, _innerMargin2), y = minY - __privateGet(this, _innerMargin2), width = maxX - minX + 2 * __privateGet(this, _innerMargin2), height = maxY - minY + 2 * __privateGet(this, _innerMargin2); __privateSet(this, _bbox, { x, y, width, height, lastPoint: [lastPointX, lastPointY] }); }; var _boundKeyDown2, _boundPointerDown, _button, _buttonSwatch, _defaultColor, _dropdown, _dropdownWasFromKeyboard, _isMainColorPicker, _editor3, _eventBus, _uiManager2, _type, _getDropdownRoot, getDropdownRoot_fn, _colorSelect, colorSelect_fn, _keyDown2, keyDown_fn2, _openDropdown, openDropdown_fn, _pointerDown2, pointerDown_fn2, _isDropdownVisible, isDropdownVisible_get; var _ColorPicker = class { constructor({ editor = null, uiManager = null }) { __privateAdd(this, _getDropdownRoot); __privateAdd(this, _colorSelect); __privateAdd(this, _keyDown2); __privateAdd(this, _openDropdown); __privateAdd(this, _pointerDown2); __privateAdd(this, _isDropdownVisible); __privateAdd(this, _boundKeyDown2, __privateMethod(this, _keyDown2, keyDown_fn2).bind(this)); __privateAdd(this, _boundPointerDown, __privateMethod(this, _pointerDown2, pointerDown_fn2).bind(this)); __privateAdd(this, _button, null); __privateAdd(this, _buttonSwatch, null); __privateAdd(this, _defaultColor, void 0); __privateAdd(this, _dropdown, null); __privateAdd(this, _dropdownWasFromKeyboard, false); __privateAdd(this, _isMainColorPicker, false); __privateAdd(this, _editor3, null); __privateAdd(this, _eventBus, void 0); __privateAdd(this, _uiManager2, null); __privateAdd(this, _type, void 0); var _a2; if (editor) { __privateSet(this, _isMainColorPicker, false); __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_COLOR); __privateSet(this, _editor3, editor); } else { __privateSet(this, _isMainColorPicker, true); __privateSet(this, _type, AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR); } __privateSet(this, _uiManager2, (editor == null ? void 0 : editor._uiManager) || uiManager); __privateSet(this, _eventBus, __privateGet(this, _uiManager2)._eventBus); __privateSet(this, _defaultColor, (editor == null ? void 0 : editor.color) || ((_a2 = __privateGet(this, _uiManager2)) == null ? void 0 : _a2.highlightColors.values().next().value) || "#FFFF98"); } static get _keyboardManager() { return shadow(this, "_keyboardManager", new KeyboardManager([[["Escape", "mac+Escape"], _ColorPicker.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], _ColorPicker.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], _ColorPicker.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], _ColorPicker.prototype._moveToPrevious], [["Home", "mac+Home"], _ColorPicker.prototype._moveToBeginning], [["End", "mac+End"], _ColorPicker.prototype._moveToEnd]])); } renderButton() { const button = __privateSet(this, _button, document.createElement("button")); button.className = "colorPicker"; button.tabIndex = "0"; button.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"); button.setAttribute("aria-haspopup", true); const signal = __privateGet(this, _uiManager2)._signal; button.addEventListener("click", __privateMethod(this, _openDropdown, openDropdown_fn).bind(this), { signal }); button.addEventListener("keydown", __privateGet(this, _boundKeyDown2), { signal }); const swatch = __privateSet(this, _buttonSwatch, document.createElement("span")); swatch.className = "swatch"; swatch.setAttribute("aria-hidden", true); swatch.style.backgroundColor = __privateGet(this, _defaultColor); button.append(swatch); return button; } renderMainDropdown() { const dropdown = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this)); dropdown.setAttribute("aria-orientation", "horizontal"); dropdown.setAttribute("aria-labelledby", "highlightColorPickerLabel"); return dropdown; } _colorSelectFromKeyboard(event) { if (event.target === __privateGet(this, _button)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } const color2 = event.target.getAttribute("data-color"); if (!color2) { return; } __privateMethod(this, _colorSelect, colorSelect_fn).call(this, color2, event); } _moveToNext(event) { var _a2, _b; if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } if (event.target === __privateGet(this, _button)) { (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus(); return; } (_b = event.target.nextSibling) == null ? void 0 : _b.focus(); } _moveToPrevious(event) { var _a2, _b; if (event.target === ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.firstChild) || event.target === __privateGet(this, _button)) { if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { this._hideDropdownFromKeyboard(); } return; } if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); } (_b = event.target.previousSibling) == null ? void 0 : _b.focus(); } _moveToBeginning(event) { var _a2; if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } (_a2 = __privateGet(this, _dropdown).firstChild) == null ? void 0 : _a2.focus(); } _moveToEnd(event) { var _a2; if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { __privateMethod(this, _openDropdown, openDropdown_fn).call(this, event); return; } (_a2 = __privateGet(this, _dropdown).lastChild) == null ? void 0 : _a2.focus(); } hideDropdown() { var _a2; (_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.classList.add("hidden"); window.removeEventListener("pointerdown", __privateGet(this, _boundPointerDown)); } _hideDropdownFromKeyboard() { var _a2; if (__privateGet(this, _isMainColorPicker)) { return; } if (!__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { (_a2 = __privateGet(this, _editor3)) == null ? void 0 : _a2.unselect(); return; } this.hideDropdown(); __privateGet(this, _button).focus({ preventScroll: true, focusVisible: __privateGet(this, _dropdownWasFromKeyboard) }); } updateColor(color2) { if (__privateGet(this, _buttonSwatch)) { __privateGet(this, _buttonSwatch).style.backgroundColor = color2; } if (!__privateGet(this, _dropdown)) { return; } const i = __privateGet(this, _uiManager2).highlightColors.values(); for (const child of __privateGet(this, _dropdown).children) { child.setAttribute("aria-selected", i.next().value === color2); } } destroy() { var _a2, _b; (_a2 = __privateGet(this, _button)) == null ? void 0 : _a2.remove(); __privateSet(this, _button, null); __privateSet(this, _buttonSwatch, null); (_b = __privateGet(this, _dropdown)) == null ? void 0 : _b.remove(); __privateSet(this, _dropdown, null); } }; var ColorPicker = _ColorPicker; _boundKeyDown2 = new WeakMap(); _boundPointerDown = new WeakMap(); _button = new WeakMap(); _buttonSwatch = new WeakMap(); _defaultColor = new WeakMap(); _dropdown = new WeakMap(); _dropdownWasFromKeyboard = new WeakMap(); _isMainColorPicker = new WeakMap(); _editor3 = new WeakMap(); _eventBus = new WeakMap(); _uiManager2 = new WeakMap(); _type = new WeakMap(); _getDropdownRoot = new WeakSet(); getDropdownRoot_fn = function() { const div = document.createElement("div"); const signal = __privateGet(this, _uiManager2)._signal; div.addEventListener("contextmenu", noContextMenu, { signal }); div.className = "dropdown"; div.role = "listbox"; div.setAttribute("aria-multiselectable", false); div.setAttribute("aria-orientation", "vertical"); div.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown"); for (const [name, color2] of __privateGet(this, _uiManager2).highlightColors) { const button = document.createElement("button"); button.tabIndex = "0"; button.role = "option"; button.setAttribute("data-color", color2); button.title = name; button.setAttribute("data-l10n-id", `pdfjs-editor-colorpicker-${name}`); const swatch = document.createElement("span"); button.append(swatch); swatch.className = "swatch"; swatch.style.backgroundColor = color2; button.setAttribute("aria-selected", color2 === __privateGet(this, _defaultColor)); button.addEventListener("click", __privateMethod(this, _colorSelect, colorSelect_fn).bind(this, color2), { signal }); div.append(button); } div.addEventListener("keydown", __privateGet(this, _boundKeyDown2), { signal }); return div; }; _colorSelect = new WeakSet(); colorSelect_fn = function(color2, event) { event.stopPropagation(); __privateGet(this, _eventBus).dispatch("switchannotationeditorparams", { source: this, type: __privateGet(this, _type), value: color2 }); }; _keyDown2 = new WeakSet(); keyDown_fn2 = function(event) { _ColorPicker._keyboardManager.exec(this, event); }; _openDropdown = new WeakSet(); openDropdown_fn = function(event) { if (__privateGet(this, _isDropdownVisible, isDropdownVisible_get)) { this.hideDropdown(); return; } __privateSet(this, _dropdownWasFromKeyboard, event.detail === 0); window.addEventListener("pointerdown", __privateGet(this, _boundPointerDown), { signal: __privateGet(this, _uiManager2)._signal }); if (__privateGet(this, _dropdown)) { __privateGet(this, _dropdown).classList.remove("hidden"); return; } const root = __privateSet(this, _dropdown, __privateMethod(this, _getDropdownRoot, getDropdownRoot_fn).call(this)); __privateGet(this, _button).append(root); }; _pointerDown2 = new WeakSet(); pointerDown_fn2 = function(event) { var _a2; if ((_a2 = __privateGet(this, _dropdown)) == null ? void 0 : _a2.contains(event.target)) { return; } this.hideDropdown(); }; _isDropdownVisible = new WeakSet(); isDropdownVisible_get = function() { return __privateGet(this, _dropdown) && !__privateGet(this, _dropdown).classList.contains("hidden"); }; var _anchorNode, _anchorOffset, _boxes, _clipPathId, _colorPicker2, _focusOutlines, _focusNode, _focusOffset, _highlightDiv, _highlightOutlines, _id4, _isFreeHighlight, _lastPoint, _opacity, _outlineId, _text, _thickness2, _methodOfCreation, _createOutlines, createOutlines_fn, _createFreeOutlines, createFreeOutlines_fn, _updateColor2, updateColor_fn2, _updateThickness, updateThickness_fn, _changeThickness, changeThickness_fn, _cleanDrawLayer, cleanDrawLayer_fn, _addToDrawLayer, addToDrawLayer_fn, _rotateBbox, rotateBbox_fn, _keydown, keydown_fn, _setCaret, setCaret_fn, _getRotation, getRotation_fn, _serializeBoxes, serializeBoxes_fn, _serializeOutlines, serializeOutlines_fn, _highlightMove, highlightMove_fn, _endHighlight, endHighlight_fn; var _HighlightEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "highlightEditor" }); __privateAdd(this, _createOutlines); __privateAdd(this, _createFreeOutlines); __privateAdd(this, _updateColor2); __privateAdd(this, _updateThickness); __privateAdd(this, _changeThickness); __privateAdd(this, _cleanDrawLayer); __privateAdd(this, _addToDrawLayer); __privateAdd(this, _keydown); __privateAdd(this, _setCaret); __privateAdd(this, _getRotation); __privateAdd(this, _serializeBoxes); __privateAdd(this, _serializeOutlines); __privateAdd(this, _anchorNode, null); __privateAdd(this, _anchorOffset, 0); __privateAdd(this, _boxes, void 0); __privateAdd(this, _clipPathId, null); __privateAdd(this, _colorPicker2, null); __privateAdd(this, _focusOutlines, null); __privateAdd(this, _focusNode, null); __privateAdd(this, _focusOffset, 0); __privateAdd(this, _highlightDiv, null); __privateAdd(this, _highlightOutlines, null); __privateAdd(this, _id4, null); __privateAdd(this, _isFreeHighlight, false); __privateAdd(this, _lastPoint, null); __privateAdd(this, _opacity, void 0); __privateAdd(this, _outlineId, null); __privateAdd(this, _text, ""); __privateAdd(this, _thickness2, void 0); __privateAdd(this, _methodOfCreation, ""); this.color = params.color || _HighlightEditor._defaultColor; __privateSet(this, _thickness2, params.thickness || _HighlightEditor._defaultThickness); __privateSet(this, _opacity, params.opacity || _HighlightEditor._defaultOpacity); __privateSet(this, _boxes, params.boxes || null); __privateSet(this, _methodOfCreation, params.methodOfCreation || ""); __privateSet(this, _text, params.text || ""); this._isDraggable = false; if (params.highlightId > -1) { __privateSet(this, _isFreeHighlight, true); __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, params); __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); } else { __privateSet(this, _anchorNode, params.anchorNode); __privateSet(this, _anchorOffset, params.anchorOffset); __privateSet(this, _focusNode, params.focusNode); __privateSet(this, _focusOffset, params.focusOffset); __privateMethod(this, _createOutlines, createOutlines_fn).call(this); __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); this.rotate(this.rotation); } } static get _keyboardManager() { const proto = _HighlightEditor.prototype; return shadow(this, "_keyboardManager", new KeyboardManager([[["ArrowLeft", "mac+ArrowLeft"], proto._moveCaret, { args: [0] }], [["ArrowRight", "mac+ArrowRight"], proto._moveCaret, { args: [1] }], [["ArrowUp", "mac+ArrowUp"], proto._moveCaret, { args: [2] }], [["ArrowDown", "mac+ArrowDown"], proto._moveCaret, { args: [3] }]])); } get telemetryInitialData() { return { action: "added", type: __privateGet(this, _isFreeHighlight) ? "free_highlight" : "highlight", color: this._uiManager.highlightColorNames.get(this.color), thickness: __privateGet(this, _thickness2), methodOfCreation: __privateGet(this, _methodOfCreation) }; } get telemetryFinalData() { return { type: "highlight", color: this._uiManager.highlightColorNames.get(this.color) }; } static computeTelemetryFinalData(data) { return { numberOfColors: data.get("color").size }; } static initialize(l10n, uiManager) { var _a2; AnnotationEditor.initialize(l10n, uiManager); _HighlightEditor._defaultColor || (_HighlightEditor._defaultColor = ((_a2 = uiManager.highlightColors) == null ? void 0 : _a2.values().next().value) || "#fff066"); } static updateDefaultParams(type, value) { switch (type) { case AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR: _HighlightEditor._defaultColor = value; break; case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: _HighlightEditor._defaultThickness = value; break; } } translateInPage(x, y) { } get toolbarPosition() { return __privateGet(this, _lastPoint); } updateParams(type, value) { switch (type) { case AnnotationEditorParamsType.HIGHLIGHT_COLOR: __privateMethod(this, _updateColor2, updateColor_fn2).call(this, value); break; case AnnotationEditorParamsType.HIGHLIGHT_THICKNESS: __privateMethod(this, _updateThickness, updateThickness_fn).call(this, value); break; } } static get defaultPropertiesToUpdate() { return [[AnnotationEditorParamsType.HIGHLIGHT_DEFAULT_COLOR, _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, _HighlightEditor._defaultThickness]]; } get propertiesToUpdate() { return [[AnnotationEditorParamsType.HIGHLIGHT_COLOR, this.color || _HighlightEditor._defaultColor], [AnnotationEditorParamsType.HIGHLIGHT_THICKNESS, __privateGet(this, _thickness2) || _HighlightEditor._defaultThickness], [AnnotationEditorParamsType.HIGHLIGHT_FREE, __privateGet(this, _isFreeHighlight)]]; } async addEditToolbar() { const toolbar = await super.addEditToolbar(); if (!toolbar) { return null; } if (this._uiManager.highlightColors) { __privateSet(this, _colorPicker2, new ColorPicker({ editor: this })); toolbar.addColorPicker(__privateGet(this, _colorPicker2)); } return toolbar; } disableEditing() { super.disableEditing(); this.div.classList.toggle("disabled", true); } enableEditing() { super.enableEditing(); this.div.classList.toggle("disabled", false); } fixAndSetPosition() { return super.fixAndSetPosition(__privateMethod(this, _getRotation, getRotation_fn).call(this)); } getBaseTranslation() { return [0, 0]; } getRect(tx, ty) { return super.getRect(tx, ty, __privateMethod(this, _getRotation, getRotation_fn).call(this)); } onceAdded() { this.parent.addUndoableEditor(this); this.div.focus(); } remove() { __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this); this._reportTelemetry({ action: "deleted" }); super.remove(); } rebuild() { if (!this.parent) { return; } super.rebuild(); if (this.div === null) { return; } __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this); if (!this.isAttachedToDOM) { this.parent.add(this); } } setParent(parent) { var _a2; let mustBeSelected = false; if (this.parent && !parent) { __privateMethod(this, _cleanDrawLayer, cleanDrawLayer_fn).call(this); } else if (parent) { __privateMethod(this, _addToDrawLayer, addToDrawLayer_fn).call(this, parent); mustBeSelected = !this.parent && ((_a2 = this.div) == null ? void 0 : _a2.classList.contains("selectedEditor")); } super.setParent(parent); this.show(this._isVisible); if (mustBeSelected) { this.select(); } } rotate(angle) { var _a2, _b, _c; const { drawLayer } = this.parent; let box; if (__privateGet(this, _isFreeHighlight)) { angle = (angle - this.rotation + 360) % 360; box = __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, angle); } else { box = __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, this, angle); } drawLayer.rotate(__privateGet(this, _id4), angle); drawLayer.rotate(__privateGet(this, _outlineId), angle); drawLayer.updateBox(__privateGet(this, _id4), box); drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_c = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_c, __privateGet(this, _focusOutlines).box, angle)); } render() { if (this.div) { return this.div; } const div = super.render(); if (__privateGet(this, _text)) { div.setAttribute("aria-label", __privateGet(this, _text)); div.setAttribute("role", "mark"); } if (__privateGet(this, _isFreeHighlight)) { div.classList.add("free"); } else { this.div.addEventListener("keydown", __privateMethod(this, _keydown, keydown_fn).bind(this), { signal: this._uiManager._signal }); } const highlightDiv = __privateSet(this, _highlightDiv, document.createElement("div")); div.append(highlightDiv); highlightDiv.setAttribute("aria-hidden", "true"); highlightDiv.className = "internal"; highlightDiv.style.clipPath = __privateGet(this, _clipPathId); const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(this.width * parentWidth, this.height * parentHeight); bindEvents(this, __privateGet(this, _highlightDiv), ["pointerover", "pointerleave"]); this.enableEditing(); return div; } pointerover() { this.parent.drawLayer.addClass(__privateGet(this, _outlineId), "hovered"); } pointerleave() { this.parent.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered"); } _moveCaret(direction) { this.parent.unselect(this); switch (direction) { case 0: case 2: __privateMethod(this, _setCaret, setCaret_fn).call(this, true); break; case 1: case 3: __privateMethod(this, _setCaret, setCaret_fn).call(this, false); break; } } select() { var _a2, _b; super.select(); if (!__privateGet(this, _outlineId)) { return; } (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "hovered"); (_b = this.parent) == null ? void 0 : _b.drawLayer.addClass(__privateGet(this, _outlineId), "selected"); } unselect() { var _a2; super.unselect(); if (!__privateGet(this, _outlineId)) { return; } (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.removeClass(__privateGet(this, _outlineId), "selected"); if (!__privateGet(this, _isFreeHighlight)) { __privateMethod(this, _setCaret, setCaret_fn).call(this, false); } } get _mustFixPosition() { return !__privateGet(this, _isFreeHighlight); } show(visible = this._isVisible) { super.show(visible); if (this.parent) { this.parent.drawLayer.show(__privateGet(this, _id4), visible); this.parent.drawLayer.show(__privateGet(this, _outlineId), visible); } } static startHighlighting(parent, isLTR, { target: textLayer, x, y }) { const { x: layerX, y: layerY, width: parentWidth, height: parentHeight } = textLayer.getBoundingClientRect(); const ac = new AbortController(); const signal = parent.combinedSignal(ac); const pointerDown = (e) => { e.preventDefault(); e.stopPropagation(); }; const pointerUpCallback = (e) => { ac.abort(); __privateMethod(this, _endHighlight, endHighlight_fn).call(this, parent, e); }; window.addEventListener("blur", pointerUpCallback, { signal }); window.addEventListener("pointerup", pointerUpCallback, { signal }); window.addEventListener("pointerdown", pointerDown, { capture: true, passive: false, signal }); window.addEventListener("contextmenu", noContextMenu, { signal }); textLayer.addEventListener("pointermove", __privateMethod(this, _highlightMove, highlightMove_fn).bind(this, parent), { signal }); this._freeHighlight = new FreeOutliner({ x, y }, [layerX, layerY, parentWidth, parentHeight], parent.scale, this._defaultThickness / 2, isLTR, 1e-3); ({ id: this._freeHighlightId, clipPathId: this._freeHighlightClipId } = parent.drawLayer.highlight(this._freeHighlight, this._defaultColor, this._defaultOpacity, true)); } static deserialize(data, parent, uiManager) { var _a2; const editor = super.deserialize(data, parent, uiManager); const { rect: [blX, blY, trX, trY], color: color2, quadPoints } = data; editor.color = Util.makeHexColor(...color2); __privateSet(editor, _opacity, data.opacity); const [pageWidth, pageHeight] = editor.pageDimensions; editor.width = (trX - blX) / pageWidth; editor.height = (trY - blY) / pageHeight; const boxes = __privateSet(editor, _boxes, []); for (let i = 0; i < quadPoints.length; i += 8) { boxes.push({ x: (quadPoints[4] - trX) / pageWidth, y: (trY - (1 - quadPoints[i + 5])) / pageHeight, width: (quadPoints[i + 2] - quadPoints[i]) / pageWidth, height: (quadPoints[i + 5] - quadPoints[i + 1]) / pageHeight }); } __privateMethod(_a2 = editor, _createOutlines, createOutlines_fn).call(_a2); return editor; } serialize(isForCopying = false) { if (this.isEmpty() || isForCopying) { return null; } const rect = this.getRect(0, 0); const color2 = AnnotationEditor._colorManager.convert(this.color); return { annotationType: AnnotationEditorType.HIGHLIGHT, color: color2, opacity: __privateGet(this, _opacity), thickness: __privateGet(this, _thickness2), quadPoints: __privateMethod(this, _serializeBoxes, serializeBoxes_fn).call(this), outlines: __privateMethod(this, _serializeOutlines, serializeOutlines_fn).call(this, rect), pageIndex: this.pageIndex, rect, rotation: __privateMethod(this, _getRotation, getRotation_fn).call(this), structTreeParentId: this._structTreeParentId }; } static canCreateNewEmptyEditor() { return false; } }; var HighlightEditor = _HighlightEditor; _anchorNode = new WeakMap(); _anchorOffset = new WeakMap(); _boxes = new WeakMap(); _clipPathId = new WeakMap(); _colorPicker2 = new WeakMap(); _focusOutlines = new WeakMap(); _focusNode = new WeakMap(); _focusOffset = new WeakMap(); _highlightDiv = new WeakMap(); _highlightOutlines = new WeakMap(); _id4 = new WeakMap(); _isFreeHighlight = new WeakMap(); _lastPoint = new WeakMap(); _opacity = new WeakMap(); _outlineId = new WeakMap(); _text = new WeakMap(); _thickness2 = new WeakMap(); _methodOfCreation = new WeakMap(); _createOutlines = new WeakSet(); createOutlines_fn = function() { const outliner = new Outliner(__privateGet(this, _boxes), 1e-3); __privateSet(this, _highlightOutlines, outliner.getOutlines()); ({ x: this.x, y: this.y, width: this.width, height: this.height } = __privateGet(this, _highlightOutlines).box); const outlinerForOutline = new Outliner(__privateGet(this, _boxes), 25e-4, 1e-3, this._uiManager.direction === "ltr"); __privateSet(this, _focusOutlines, outlinerForOutline.getOutlines()); const { lastPoint } = __privateGet(this, _focusOutlines).box; __privateSet(this, _lastPoint, [(lastPoint[0] - this.x) / this.width, (lastPoint[1] - this.y) / this.height]); }; _createFreeOutlines = new WeakSet(); createFreeOutlines_fn = function({ highlightOutlines, highlightId, clipPathId }) { var _a2, _b; __privateSet(this, _highlightOutlines, highlightOutlines); const extraThickness = 1.5; __privateSet(this, _focusOutlines, highlightOutlines.getNewOutline(__privateGet(this, _thickness2) / 2 + extraThickness, 25e-4)); if (highlightId >= 0) { __privateSet(this, _id4, highlightId); __privateSet(this, _clipPathId, clipPathId); this.parent.drawLayer.finalizeLine(highlightId, highlightOutlines); __privateSet(this, _outlineId, this.parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines))); } else if (this.parent) { const angle = this.parent.viewport.rotation; this.parent.drawLayer.updateLine(__privateGet(this, _id4), highlightOutlines); this.parent.drawLayer.updateBox(__privateGet(this, _id4), __privateMethod(_a2 = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_a2, __privateGet(this, _highlightOutlines).box, (angle - this.rotation + 360) % 360)); this.parent.drawLayer.updateLine(__privateGet(this, _outlineId), __privateGet(this, _focusOutlines)); this.parent.drawLayer.updateBox(__privateGet(this, _outlineId), __privateMethod(_b = _HighlightEditor, _rotateBbox, rotateBbox_fn).call(_b, __privateGet(this, _focusOutlines).box, angle)); } const { x, y, width, height } = highlightOutlines.box; switch (this.rotation) { case 0: this.x = x; this.y = y; this.width = width; this.height = height; break; case 90: { const [pageWidth, pageHeight] = this.parentDimensions; this.x = y; this.y = 1 - x; this.width = width * pageHeight / pageWidth; this.height = height * pageWidth / pageHeight; break; } case 180: this.x = 1 - x; this.y = 1 - y; this.width = width; this.height = height; break; case 270: { const [pageWidth, pageHeight] = this.parentDimensions; this.x = 1 - y; this.y = x; this.width = width * pageHeight / pageWidth; this.height = height * pageWidth / pageHeight; break; } } const { lastPoint } = __privateGet(this, _focusOutlines).box; __privateSet(this, _lastPoint, [(lastPoint[0] - x) / width, (lastPoint[1] - y) / height]); }; _updateColor2 = new WeakSet(); updateColor_fn2 = function(color2) { const setColor = (col) => { var _a2, _b; this.color = col; (_a2 = this.parent) == null ? void 0 : _a2.drawLayer.changeColor(__privateGet(this, _id4), col); (_b = __privateGet(this, _colorPicker2)) == null ? void 0 : _b.updateColor(col); }; const savedColor = this.color; this.addCommands({ cmd: setColor.bind(this, color2), undo: setColor.bind(this, savedColor), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.HIGHLIGHT_COLOR, overwriteIfSameType: true, keepUndo: true }); this._reportTelemetry({ action: "color_changed", color: this._uiManager.highlightColorNames.get(color2) }, true); }; _updateThickness = new WeakSet(); updateThickness_fn = function(thickness) { const savedThickness = __privateGet(this, _thickness2); const setThickness = (th) => { __privateSet(this, _thickness2, th); __privateMethod(this, _changeThickness, changeThickness_fn).call(this, th); }; this.addCommands({ cmd: setThickness.bind(this, thickness), undo: setThickness.bind(this, savedThickness), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_THICKNESS, overwriteIfSameType: true, keepUndo: true }); this._reportTelemetry({ action: "thickness_changed", thickness }, true); }; _changeThickness = new WeakSet(); changeThickness_fn = function(thickness) { if (!__privateGet(this, _isFreeHighlight)) { return; } __privateMethod(this, _createFreeOutlines, createFreeOutlines_fn).call(this, { highlightOutlines: __privateGet(this, _highlightOutlines).getNewOutline(thickness / 2) }); this.fixAndSetPosition(); const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(this.width * parentWidth, this.height * parentHeight); }; _cleanDrawLayer = new WeakSet(); cleanDrawLayer_fn = function() { if (__privateGet(this, _id4) === null || !this.parent) { return; } this.parent.drawLayer.remove(__privateGet(this, _id4)); __privateSet(this, _id4, null); this.parent.drawLayer.remove(__privateGet(this, _outlineId)); __privateSet(this, _outlineId, null); }; _addToDrawLayer = new WeakSet(); addToDrawLayer_fn = function(parent = this.parent) { if (__privateGet(this, _id4) !== null) { return; } ({ id: __privateWrapper(this, _id4)._, clipPathId: __privateWrapper(this, _clipPathId)._ } = parent.drawLayer.highlight(__privateGet(this, _highlightOutlines), this.color, __privateGet(this, _opacity))); __privateSet(this, _outlineId, parent.drawLayer.highlightOutline(__privateGet(this, _focusOutlines))); if (__privateGet(this, _highlightDiv)) { __privateGet(this, _highlightDiv).style.clipPath = __privateGet(this, _clipPathId); } }; _rotateBbox = new WeakSet(); rotateBbox_fn = function({ x, y, width, height }, angle) { switch (angle) { case 90: return { x: 1 - y - height, y: x, width: height, height: width }; case 180: return { x: 1 - x - width, y: 1 - y - height, width, height }; case 270: return { x: y, y: 1 - x - width, width: height, height: width }; } return { x, y, width, height }; }; _keydown = new WeakSet(); keydown_fn = function(event) { _HighlightEditor._keyboardManager.exec(this, event); }; _setCaret = new WeakSet(); setCaret_fn = function(start) { if (!__privateGet(this, _anchorNode)) { return; } const selection = window.getSelection(); if (start) { selection.setPosition(__privateGet(this, _anchorNode), __privateGet(this, _anchorOffset)); } else { selection.setPosition(__privateGet(this, _focusNode), __privateGet(this, _focusOffset)); } }; _getRotation = new WeakSet(); getRotation_fn = function() { return __privateGet(this, _isFreeHighlight) ? this.rotation : 0; }; _serializeBoxes = new WeakSet(); serializeBoxes_fn = function() { if (__privateGet(this, _isFreeHighlight)) { return null; } const [pageWidth, pageHeight] = this.pageDimensions; const [pageX, pageY] = this.pageTranslation; const boxes = __privateGet(this, _boxes); const quadPoints = new Float32Array(boxes.length * 8); let i = 0; for (const { x, y, width, height } of boxes) { const sx = x * pageWidth + pageX; const sy = (1 - y - height) * pageHeight + pageY; quadPoints[i] = quadPoints[i + 4] = sx; quadPoints[i + 1] = quadPoints[i + 3] = sy; quadPoints[i + 2] = quadPoints[i + 6] = sx + width * pageWidth; quadPoints[i + 5] = quadPoints[i + 7] = sy + height * pageHeight; i += 8; } return quadPoints; }; _serializeOutlines = new WeakSet(); serializeOutlines_fn = function(rect) { return __privateGet(this, _highlightOutlines).serialize(rect, __privateMethod(this, _getRotation, getRotation_fn).call(this)); }; _highlightMove = new WeakSet(); highlightMove_fn = function(parent, event) { if (this._freeHighlight.add(event)) { parent.drawLayer.updatePath(this._freeHighlightId, this._freeHighlight); } }; _endHighlight = new WeakSet(); endHighlight_fn = function(parent, event) { if (!this._freeHighlight.isEmpty()) { parent.createAndAddNewEditor(event, false, { highlightId: this._freeHighlightId, highlightOutlines: this._freeHighlight.getOutlines(), clipPathId: this._freeHighlightClipId, methodOfCreation: "main_toolbar" }); } else { parent.drawLayer.removeFreeHighlight(this._freeHighlightId); } this._freeHighlightId = -1; this._freeHighlight = null; this._freeHighlightClipId = ""; }; __privateAdd(HighlightEditor, _rotateBbox); __privateAdd(HighlightEditor, _highlightMove); __privateAdd(HighlightEditor, _endHighlight); __publicField(HighlightEditor, "_defaultColor", null); __publicField(HighlightEditor, "_defaultOpacity", 1); __publicField(HighlightEditor, "_defaultThickness", 12); __publicField(HighlightEditor, "_l10nPromise"); __publicField(HighlightEditor, "_type", "highlight"); __publicField(HighlightEditor, "_editorType", AnnotationEditorType.HIGHLIGHT); __publicField(HighlightEditor, "_freeHighlightId", -1); __publicField(HighlightEditor, "_freeHighlight", null); __publicField(HighlightEditor, "_freeHighlightClipId", ""); var _baseHeight, _baseWidth, _canvasContextMenuTimeoutId, _currentPath2D, _disableEditing, _drawingAC, _hasSomethingToDraw, _isCanvasInitialized, _observer, _pointerdownAC, _realWidth, _realHeight, _requestFrameCallback, _updateThickness2, updateThickness_fn2, _updateColor3, updateColor_fn3, _updateOpacity, updateOpacity_fn, _getInitialBBox, getInitialBBox_fn, _setStroke, setStroke_fn, _startDrawing, startDrawing_fn, _draw, draw_fn, _endPath, endPath_fn, _stopDrawing, stopDrawing_fn, _drawPoints, drawPoints_fn, _makeBezierCurve, makeBezierCurve_fn, _generateBezierPoints, generateBezierPoints_fn, _redraw, redraw_fn, _addPointerdownListener, addPointerdownListener_fn, _removePointerdownListener, removePointerdownListener_fn, _endDrawing, endDrawing_fn, _createCanvas, createCanvas_fn, _createObserver, createObserver_fn, _setCanvasDims, setCanvasDims_fn, _setScaleFactor, setScaleFactor_fn, _updateTransform, updateTransform_fn, _buildPath2D, buildPath2D_fn, _toPDFCoordinates, toPDFCoordinates_fn, _fromPDFCoordinates, fromPDFCoordinates_fn, _serializePaths, serializePaths_fn, _getBbox, getBbox_fn, _getPadding, getPadding_fn, _fitToContent, fitToContent_fn; var _InkEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "inkEditor" }); __privateAdd(this, _updateThickness2); __privateAdd(this, _updateColor3); __privateAdd(this, _updateOpacity); __privateAdd(this, _getInitialBBox); __privateAdd(this, _setStroke); __privateAdd(this, _startDrawing); __privateAdd(this, _draw); __privateAdd(this, _endPath); __privateAdd(this, _stopDrawing); __privateAdd(this, _drawPoints); __privateAdd(this, _makeBezierCurve); __privateAdd(this, _generateBezierPoints); __privateAdd(this, _redraw); __privateAdd(this, _addPointerdownListener); __privateAdd(this, _removePointerdownListener); __privateAdd(this, _endDrawing); __privateAdd(this, _createCanvas); __privateAdd(this, _createObserver); __privateAdd(this, _setCanvasDims); __privateAdd(this, _setScaleFactor); __privateAdd(this, _updateTransform); __privateAdd(this, _serializePaths); __privateAdd(this, _getBbox); __privateAdd(this, _getPadding); __privateAdd(this, _fitToContent); __privateAdd(this, _baseHeight, 0); __privateAdd(this, _baseWidth, 0); __privateAdd(this, _canvasContextMenuTimeoutId, null); __privateAdd(this, _currentPath2D, new Path2D()); __privateAdd(this, _disableEditing, false); __privateAdd(this, _drawingAC, null); __privateAdd(this, _hasSomethingToDraw, false); __privateAdd(this, _isCanvasInitialized, false); __privateAdd(this, _observer, null); __privateAdd(this, _pointerdownAC, null); __privateAdd(this, _realWidth, 0); __privateAdd(this, _realHeight, 0); __privateAdd(this, _requestFrameCallback, null); this.color = params.color || null; this.thickness = params.thickness || null; this.opacity = params.opacity || null; this.paths = []; this.bezierPath2D = []; this.allRawPaths = []; this.currentPath = []; this.scaleFactor = 1; this.translationX = this.translationY = 0; this.x = 0; this.y = 0; this._willKeepAspectRatio = true; } static initialize(l10n, uiManager) { AnnotationEditor.initialize(l10n, uiManager); } static updateDefaultParams(type, value) { switch (type) { case AnnotationEditorParamsType.INK_THICKNESS: _InkEditor._defaultThickness = value; break; case AnnotationEditorParamsType.INK_COLOR: _InkEditor._defaultColor = value; break; case AnnotationEditorParamsType.INK_OPACITY: _InkEditor._defaultOpacity = value / 100; break; } } updateParams(type, value) { switch (type) { case AnnotationEditorParamsType.INK_THICKNESS: __privateMethod(this, _updateThickness2, updateThickness_fn2).call(this, value); break; case AnnotationEditorParamsType.INK_COLOR: __privateMethod(this, _updateColor3, updateColor_fn3).call(this, value); break; case AnnotationEditorParamsType.INK_OPACITY: __privateMethod(this, _updateOpacity, updateOpacity_fn).call(this, value); break; } } static get defaultPropertiesToUpdate() { return [[AnnotationEditorParamsType.INK_THICKNESS, _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(_InkEditor._defaultOpacity * 100)]]; } get propertiesToUpdate() { var _a2; return [[AnnotationEditorParamsType.INK_THICKNESS, this.thickness || _InkEditor._defaultThickness], [AnnotationEditorParamsType.INK_COLOR, this.color || _InkEditor._defaultColor || AnnotationEditor._defaultLineColor], [AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * ((_a2 = this.opacity) != null ? _a2 : _InkEditor._defaultOpacity))]]; } rebuild() { if (!this.parent) { return; } super.rebuild(); if (this.div === null) { return; } if (!this.canvas) { __privateMethod(this, _createCanvas, createCanvas_fn).call(this); __privateMethod(this, _createObserver, createObserver_fn).call(this); } if (!this.isAttachedToDOM) { this.parent.add(this); __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); } __privateMethod(this, _fitToContent, fitToContent_fn).call(this); } remove() { var _a2; if (this.canvas === null) { return; } if (!this.isEmpty()) { this.commit(); } this.canvas.width = this.canvas.height = 0; this.canvas.remove(); this.canvas = null; if (__privateGet(this, _canvasContextMenuTimeoutId)) { clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId)); __privateSet(this, _canvasContextMenuTimeoutId, null); } (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect(); __privateSet(this, _observer, null); super.remove(); } setParent(parent) { if (!this.parent && parent) { this._uiManager.removeShouldRescale(this); } else if (this.parent && parent === null) { this._uiManager.addShouldRescale(this); } super.setParent(parent); } onScaleChanging() { const [parentWidth, parentHeight] = this.parentDimensions; const width = this.width * parentWidth; const height = this.height * parentHeight; this.setDimensions(width, height); } enableEditMode() { if (__privateGet(this, _disableEditing) || this.canvas === null) { return; } super.enableEditMode(); this._isDraggable = false; __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this); } disableEditMode() { if (!this.isInEditMode() || this.canvas === null) { return; } super.disableEditMode(); this._isDraggable = !this.isEmpty(); this.div.classList.remove("editing"); __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this); } onceAdded() { this._isDraggable = !this.isEmpty(); } isEmpty() { return this.paths.length === 0 || this.paths.length === 1 && this.paths[0].length === 0; } commit() { if (__privateGet(this, _disableEditing)) { return; } super.commit(); this.isEditing = false; this.disableEditMode(); this.setInForeground(); __privateSet(this, _disableEditing, true); this.div.classList.add("disabled"); __privateMethod(this, _fitToContent, fitToContent_fn).call(this, true); this.select(); this.parent.addInkEditorIfNeeded(true); this.moveInDOM(); this.div.focus({ preventScroll: true }); } focusin(event) { if (!this._focusEventsAllowed) { return; } super.focusin(event); this.enableEditMode(); } canvasPointerdown(event) { if (event.button !== 0 || !this.isInEditMode() || __privateGet(this, _disableEditing)) { return; } this.setInForeground(); event.preventDefault(); if (!this.div.contains(document.activeElement)) { this.div.focus({ preventScroll: true }); } __privateMethod(this, _startDrawing, startDrawing_fn).call(this, event.offsetX, event.offsetY); } canvasPointermove(event) { event.preventDefault(); __privateMethod(this, _draw, draw_fn).call(this, event.offsetX, event.offsetY); } canvasPointerup(event) { event.preventDefault(); __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event); } canvasPointerleave(event) { __privateMethod(this, _endDrawing, endDrawing_fn).call(this, event); } get isResizable() { return !this.isEmpty() && __privateGet(this, _disableEditing); } render() { if (this.div) { return this.div; } let baseX, baseY; if (this.width) { baseX = this.x; baseY = this.y; } super.render(); this.div.setAttribute("data-l10n-id", "pdfjs-ink"); const [x, y, w, h] = __privateMethod(this, _getInitialBBox, getInitialBBox_fn).call(this); this.setAt(x, y, 0, 0); this.setDims(w, h); __privateMethod(this, _createCanvas, createCanvas_fn).call(this); if (this.width) { const [parentWidth, parentHeight] = this.parentDimensions; this.setAspectRatio(this.width * parentWidth, this.height * parentHeight); this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); __privateSet(this, _isCanvasInitialized, true); __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); this.setDims(this.width * parentWidth, this.height * parentHeight); __privateMethod(this, _redraw, redraw_fn).call(this); this.div.classList.add("disabled"); } else { this.div.classList.add("editing"); this.enableEditMode(); } __privateMethod(this, _createObserver, createObserver_fn).call(this); return this.div; } setDimensions(width, height) { const roundedWidth = Math.round(width); const roundedHeight = Math.round(height); if (__privateGet(this, _realWidth) === roundedWidth && __privateGet(this, _realHeight) === roundedHeight) { return; } __privateSet(this, _realWidth, roundedWidth); __privateSet(this, _realHeight, roundedHeight); this.canvas.style.visibility = "hidden"; const [parentWidth, parentHeight] = this.parentDimensions; this.width = width / parentWidth; this.height = height / parentHeight; this.fixAndSetPosition(); if (__privateGet(this, _disableEditing)) { __privateMethod(this, _setScaleFactor, setScaleFactor_fn).call(this, width, height); } __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); __privateMethod(this, _redraw, redraw_fn).call(this); this.canvas.style.visibility = "visible"; this.fixDims(); } static deserialize(data, parent, uiManager) { var _a2, _b, _c; if (data instanceof InkAnnotationElement) { return null; } const editor = super.deserialize(data, parent, uiManager); editor.thickness = data.thickness; editor.color = Util.makeHexColor(...data.color); editor.opacity = data.opacity; const [pageWidth, pageHeight] = editor.pageDimensions; const width = editor.width * pageWidth; const height = editor.height * pageHeight; const scaleFactor = editor.parentScale; const padding = data.thickness / 2; __privateSet(editor, _disableEditing, true); __privateSet(editor, _realWidth, Math.round(width)); __privateSet(editor, _realHeight, Math.round(height)); const { paths, rect, rotation } = data; for (let { bezier } of paths) { bezier = __privateMethod(_a2 = _InkEditor, _fromPDFCoordinates, fromPDFCoordinates_fn).call(_a2, bezier, rect, rotation); const path = []; editor.paths.push(path); let p0 = scaleFactor * (bezier[0] - padding); let p1 = scaleFactor * (bezier[1] - padding); for (let i = 2, ii = bezier.length; i < ii; i += 6) { const p10 = scaleFactor * (bezier[i] - padding); const p11 = scaleFactor * (bezier[i + 1] - padding); const p20 = scaleFactor * (bezier[i + 2] - padding); const p21 = scaleFactor * (bezier[i + 3] - padding); const p30 = scaleFactor * (bezier[i + 4] - padding); const p31 = scaleFactor * (bezier[i + 5] - padding); path.push([[p0, p1], [p10, p11], [p20, p21], [p30, p31]]); p0 = p30; p1 = p31; } const path2D = __privateMethod(this, _buildPath2D, buildPath2D_fn).call(this, path); editor.bezierPath2D.push(path2D); } const bbox = __privateMethod(_b = editor, _getBbox, getBbox_fn).call(_b); __privateSet(editor, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0])); __privateSet(editor, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1])); __privateMethod(_c = editor, _setScaleFactor, setScaleFactor_fn).call(_c, width, height); return editor; } serialize() { if (this.isEmpty()) { return null; } const rect = this.getRect(0, 0); const color2 = AnnotationEditor._colorManager.convert(this.ctx.strokeStyle); return { annotationType: AnnotationEditorType.INK, color: color2, thickness: this.thickness, opacity: this.opacity, paths: __privateMethod(this, _serializePaths, serializePaths_fn).call(this, this.scaleFactor / this.parentScale, this.translationX, this.translationY, rect), pageIndex: this.pageIndex, rect, rotation: this.rotation, structTreeParentId: this._structTreeParentId }; } }; var InkEditor = _InkEditor; _baseHeight = new WeakMap(); _baseWidth = new WeakMap(); _canvasContextMenuTimeoutId = new WeakMap(); _currentPath2D = new WeakMap(); _disableEditing = new WeakMap(); _drawingAC = new WeakMap(); _hasSomethingToDraw = new WeakMap(); _isCanvasInitialized = new WeakMap(); _observer = new WeakMap(); _pointerdownAC = new WeakMap(); _realWidth = new WeakMap(); _realHeight = new WeakMap(); _requestFrameCallback = new WeakMap(); _updateThickness2 = new WeakSet(); updateThickness_fn2 = function(thickness) { const setThickness = (th) => { this.thickness = th; __privateMethod(this, _fitToContent, fitToContent_fn).call(this); }; const savedThickness = this.thickness; this.addCommands({ cmd: setThickness.bind(this, thickness), undo: setThickness.bind(this, savedThickness), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_THICKNESS, overwriteIfSameType: true, keepUndo: true }); }; _updateColor3 = new WeakSet(); updateColor_fn3 = function(color2) { const setColor = (col) => { this.color = col; __privateMethod(this, _redraw, redraw_fn).call(this); }; const savedColor = this.color; this.addCommands({ cmd: setColor.bind(this, color2), undo: setColor.bind(this, savedColor), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_COLOR, overwriteIfSameType: true, keepUndo: true }); }; _updateOpacity = new WeakSet(); updateOpacity_fn = function(opacity) { const setOpacity = (op) => { this.opacity = op; __privateMethod(this, _redraw, redraw_fn).call(this); }; opacity /= 100; const savedOpacity = this.opacity; this.addCommands({ cmd: setOpacity.bind(this, opacity), undo: setOpacity.bind(this, savedOpacity), post: this._uiManager.updateUI.bind(this._uiManager, this), mustExec: true, type: AnnotationEditorParamsType.INK_OPACITY, overwriteIfSameType: true, keepUndo: true }); }; _getInitialBBox = new WeakSet(); getInitialBBox_fn = function() { const { parentRotation, parentDimensions: [width, height] } = this; switch (parentRotation) { case 90: return [0, height, height, width]; case 180: return [width, height, width, height]; case 270: return [width, 0, height, width]; default: return [0, 0, width, height]; } }; _setStroke = new WeakSet(); setStroke_fn = function() { const { ctx, color: color2, opacity, thickness, parentScale, scaleFactor } = this; ctx.lineWidth = thickness * parentScale / scaleFactor; ctx.lineCap = "round"; ctx.lineJoin = "round"; ctx.miterLimit = 10; ctx.strokeStyle = `${color2}${opacityToHex(opacity)}`; }; _startDrawing = new WeakSet(); startDrawing_fn = function(x, y) { var _a2; this.canvas.addEventListener("contextmenu", noContextMenu, { signal: this._uiManager._signal }); __privateMethod(this, _removePointerdownListener, removePointerdownListener_fn).call(this); __privateSet(this, _drawingAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _drawingAC)); this.canvas.addEventListener("pointerleave", this.canvasPointerleave.bind(this), { signal }); this.canvas.addEventListener("pointermove", this.canvasPointermove.bind(this), { signal }); this.canvas.addEventListener("pointerup", this.canvasPointerup.bind(this), { signal }); this.isEditing = true; if (!__privateGet(this, _isCanvasInitialized)) { __privateSet(this, _isCanvasInitialized, true); __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); this.thickness || (this.thickness = _InkEditor._defaultThickness); this.color || (this.color = _InkEditor._defaultColor || AnnotationEditor._defaultLineColor); (_a2 = this.opacity) != null ? _a2 : this.opacity = _InkEditor._defaultOpacity; } this.currentPath.push([x, y]); __privateSet(this, _hasSomethingToDraw, false); __privateMethod(this, _setStroke, setStroke_fn).call(this); __privateSet(this, _requestFrameCallback, () => { __privateMethod(this, _drawPoints, drawPoints_fn).call(this); if (__privateGet(this, _requestFrameCallback)) { window.requestAnimationFrame(__privateGet(this, _requestFrameCallback)); } }); window.requestAnimationFrame(__privateGet(this, _requestFrameCallback)); }; _draw = new WeakSet(); draw_fn = function(x, y) { const [lastX, lastY] = this.currentPath.at(-1); if (this.currentPath.length > 1 && x === lastX && y === lastY) { return; } const currentPath = this.currentPath; let path2D = __privateGet(this, _currentPath2D); currentPath.push([x, y]); __privateSet(this, _hasSomethingToDraw, true); if (currentPath.length <= 2) { path2D.moveTo(...currentPath[0]); path2D.lineTo(x, y); return; } if (currentPath.length === 3) { __privateSet(this, _currentPath2D, path2D = new Path2D()); path2D.moveTo(...currentPath[0]); } __privateMethod(this, _makeBezierCurve, makeBezierCurve_fn).call(this, path2D, ...currentPath.at(-3), ...currentPath.at(-2), x, y); }; _endPath = new WeakSet(); endPath_fn = function() { if (this.currentPath.length === 0) { return; } const lastPoint = this.currentPath.at(-1); __privateGet(this, _currentPath2D).lineTo(...lastPoint); }; _stopDrawing = new WeakSet(); stopDrawing_fn = function(x, y) { __privateSet(this, _requestFrameCallback, null); x = Math.min(Math.max(x, 0), this.canvas.width); y = Math.min(Math.max(y, 0), this.canvas.height); __privateMethod(this, _draw, draw_fn).call(this, x, y); __privateMethod(this, _endPath, endPath_fn).call(this); let bezier; if (this.currentPath.length !== 1) { bezier = __privateMethod(this, _generateBezierPoints, generateBezierPoints_fn).call(this); } else { const xy = [x, y]; bezier = [[xy, xy.slice(), xy.slice(), xy]]; } const path2D = __privateGet(this, _currentPath2D); const currentPath = this.currentPath; this.currentPath = []; __privateSet(this, _currentPath2D, new Path2D()); const cmd = () => { this.allRawPaths.push(currentPath); this.paths.push(bezier); this.bezierPath2D.push(path2D); this._uiManager.rebuild(this); }; const undo = () => { this.allRawPaths.pop(); this.paths.pop(); this.bezierPath2D.pop(); if (this.paths.length === 0) { this.remove(); } else { if (!this.canvas) { __privateMethod(this, _createCanvas, createCanvas_fn).call(this); __privateMethod(this, _createObserver, createObserver_fn).call(this); } __privateMethod(this, _fitToContent, fitToContent_fn).call(this); } }; this.addCommands({ cmd, undo, mustExec: true }); }; _drawPoints = new WeakSet(); drawPoints_fn = function() { if (!__privateGet(this, _hasSomethingToDraw)) { return; } __privateSet(this, _hasSomethingToDraw, false); const thickness = Math.ceil(this.thickness * this.parentScale); const lastPoints = this.currentPath.slice(-3); const x = lastPoints.map((xy) => xy[0]); const y = lastPoints.map((xy) => xy[1]); const xMin = Math.min(...x) - thickness; const xMax = Math.max(...x) + thickness; const yMin = Math.min(...y) - thickness; const yMax = Math.max(...y) + thickness; const { ctx } = this; ctx.save(); ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); for (const path of this.bezierPath2D) { ctx.stroke(path); } ctx.stroke(__privateGet(this, _currentPath2D)); ctx.restore(); }; _makeBezierCurve = new WeakSet(); makeBezierCurve_fn = function(path2D, x0, y0, x1, y1, x2, y2) { const prevX = (x0 + x1) / 2; const prevY = (y0 + y1) / 2; const x3 = (x1 + x2) / 2; const y3 = (y1 + y2) / 2; path2D.bezierCurveTo(prevX + 2 * (x1 - prevX) / 3, prevY + 2 * (y1 - prevY) / 3, x3 + 2 * (x1 - x3) / 3, y3 + 2 * (y1 - y3) / 3, x3, y3); }; _generateBezierPoints = new WeakSet(); generateBezierPoints_fn = function() { const path = this.currentPath; if (path.length <= 2) { return [[path[0], path[0], path.at(-1), path.at(-1)]]; } const bezierPoints = []; let i; let [x0, y0] = path[0]; for (i = 1; i < path.length - 2; i++) { const [x12, y12] = path[i]; const [x22, y22] = path[i + 1]; const x3 = (x12 + x22) / 2; const y3 = (y12 + y22) / 2; const control12 = [x0 + 2 * (x12 - x0) / 3, y0 + 2 * (y12 - y0) / 3]; const control22 = [x3 + 2 * (x12 - x3) / 3, y3 + 2 * (y12 - y3) / 3]; bezierPoints.push([[x0, y0], control12, control22, [x3, y3]]); [x0, y0] = [x3, y3]; } const [x1, y1] = path[i]; const [x2, y2] = path[i + 1]; const control1 = [x0 + 2 * (x1 - x0) / 3, y0 + 2 * (y1 - y0) / 3]; const control2 = [x2 + 2 * (x1 - x2) / 3, y2 + 2 * (y1 - y2) / 3]; bezierPoints.push([[x0, y0], control1, control2, [x2, y2]]); return bezierPoints; }; _redraw = new WeakSet(); redraw_fn = function() { if (this.isEmpty()) { __privateMethod(this, _updateTransform, updateTransform_fn).call(this); return; } __privateMethod(this, _setStroke, setStroke_fn).call(this); const { canvas, ctx } = this; ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.clearRect(0, 0, canvas.width, canvas.height); __privateMethod(this, _updateTransform, updateTransform_fn).call(this); for (const path of this.bezierPath2D) { ctx.stroke(path); } }; _addPointerdownListener = new WeakSet(); addPointerdownListener_fn = function() { if (__privateGet(this, _pointerdownAC)) { return; } __privateSet(this, _pointerdownAC, new AbortController()); const signal = this._uiManager.combinedSignal(__privateGet(this, _pointerdownAC)); this.canvas.addEventListener("pointerdown", this.canvasPointerdown.bind(this), { signal }); }; _removePointerdownListener = new WeakSet(); removePointerdownListener_fn = function() { var _a2; (_a2 = this.pointerdownAC) == null ? void 0 : _a2.abort(); this.pointerdownAC = null; }; _endDrawing = new WeakSet(); endDrawing_fn = function(event) { var _a2; (_a2 = __privateGet(this, _drawingAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _drawingAC, null); __privateMethod(this, _addPointerdownListener, addPointerdownListener_fn).call(this); if (__privateGet(this, _canvasContextMenuTimeoutId)) { clearTimeout(__privateGet(this, _canvasContextMenuTimeoutId)); } __privateSet(this, _canvasContextMenuTimeoutId, setTimeout(() => { __privateSet(this, _canvasContextMenuTimeoutId, null); this.canvas.removeEventListener("contextmenu", noContextMenu); }, 10)); __privateMethod(this, _stopDrawing, stopDrawing_fn).call(this, event.offsetX, event.offsetY); this.addToAnnotationStorage(); this.setInBackground(); }; _createCanvas = new WeakSet(); createCanvas_fn = function() { this.canvas = document.createElement("canvas"); this.canvas.width = this.canvas.height = 0; this.canvas.className = "inkEditorCanvas"; this.canvas.setAttribute("data-l10n-id", "pdfjs-ink-canvas"); this.div.append(this.canvas); this.ctx = this.canvas.getContext("2d"); }; _createObserver = new WeakSet(); createObserver_fn = function() { __privateSet(this, _observer, new ResizeObserver((entries) => { const rect = entries[0].contentRect; if (rect.width && rect.height) { this.setDimensions(rect.width, rect.height); } })); __privateGet(this, _observer).observe(this.div); this._uiManager._signal.addEventListener("abort", () => { var _a2; (_a2 = __privateGet(this, _observer)) == null ? void 0 : _a2.disconnect(); __privateSet(this, _observer, null); }, { once: true }); }; _setCanvasDims = new WeakSet(); setCanvasDims_fn = function() { if (!__privateGet(this, _isCanvasInitialized)) { return; } const [parentWidth, parentHeight] = this.parentDimensions; this.canvas.width = Math.ceil(this.width * parentWidth); this.canvas.height = Math.ceil(this.height * parentHeight); __privateMethod(this, _updateTransform, updateTransform_fn).call(this); }; _setScaleFactor = new WeakSet(); setScaleFactor_fn = function(width, height) { const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this); const scaleFactorW = (width - padding) / __privateGet(this, _baseWidth); const scaleFactorH = (height - padding) / __privateGet(this, _baseHeight); this.scaleFactor = Math.min(scaleFactorW, scaleFactorH); }; _updateTransform = new WeakSet(); updateTransform_fn = function() { const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this) / 2; this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + padding, this.translationY * this.scaleFactor + padding); }; _buildPath2D = new WeakSet(); buildPath2D_fn = function(bezier) { const path2D = new Path2D(); for (let i = 0, ii = bezier.length; i < ii; i++) { const [first, control1, control2, second] = bezier[i]; if (i === 0) { path2D.moveTo(...first); } path2D.bezierCurveTo(control1[0], control1[1], control2[0], control2[1], second[0], second[1]); } return path2D; }; _toPDFCoordinates = new WeakSet(); toPDFCoordinates_fn = function(points, rect, rotation) { const [blX, blY, trX, trY] = rect; switch (rotation) { case 0: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] += blX; points[i + 1] = trY - points[i + 1]; } break; case 90: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = points[i + 1] + blX; points[i + 1] = x + blY; } break; case 180: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] = trX - points[i]; points[i + 1] += blY; } break; case 270: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = trX - points[i + 1]; points[i + 1] = trY - x; } break; default: throw new Error("Invalid rotation"); } return points; }; _fromPDFCoordinates = new WeakSet(); fromPDFCoordinates_fn = function(points, rect, rotation) { const [blX, blY, trX, trY] = rect; switch (rotation) { case 0: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] -= blX; points[i + 1] = trY - points[i + 1]; } break; case 90: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = points[i + 1] - blY; points[i + 1] = x - blX; } break; case 180: for (let i = 0, ii = points.length; i < ii; i += 2) { points[i] = trX - points[i]; points[i + 1] -= blY; } break; case 270: for (let i = 0, ii = points.length; i < ii; i += 2) { const x = points[i]; points[i] = trY - points[i + 1]; points[i + 1] = trX - x; } break; default: throw new Error("Invalid rotation"); } return points; }; _serializePaths = new WeakSet(); serializePaths_fn = function(s, tx, ty, rect) { var _a2, _b; const paths = []; const padding = this.thickness / 2; const shiftX = s * tx + padding; const shiftY = s * ty + padding; for (const bezier of this.paths) { const buffer = []; const points = []; for (let j = 0, jj = bezier.length; j < jj; j++) { const [first, control1, control2, second] = bezier[j]; if (first[0] === second[0] && first[1] === second[1] && jj === 1) { const p0 = s * first[0] + shiftX; const p1 = s * first[1] + shiftY; buffer.push(p0, p1); points.push(p0, p1); break; } const p10 = s * first[0] + shiftX; const p11 = s * first[1] + shiftY; const p20 = s * control1[0] + shiftX; const p21 = s * control1[1] + shiftY; const p30 = s * control2[0] + shiftX; const p31 = s * control2[1] + shiftY; const p40 = s * second[0] + shiftX; const p41 = s * second[1] + shiftY; if (j === 0) { buffer.push(p10, p11); points.push(p10, p11); } buffer.push(p20, p21, p30, p31, p40, p41); points.push(p20, p21); if (j === jj - 1) { points.push(p40, p41); } } paths.push({ bezier: __privateMethod(_a2 = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_a2, buffer, rect, this.rotation), points: __privateMethod(_b = _InkEditor, _toPDFCoordinates, toPDFCoordinates_fn).call(_b, points, rect, this.rotation) }); } return paths; }; _getBbox = new WeakSet(); getBbox_fn = function() { let xMin = Infinity; let xMax = -Infinity; let yMin = Infinity; let yMax = -Infinity; for (const path of this.paths) { for (const [first, control1, control2, second] of path) { const bbox = Util.bezierBoundingBox(...first, ...control1, ...control2, ...second); xMin = Math.min(xMin, bbox[0]); yMin = Math.min(yMin, bbox[1]); xMax = Math.max(xMax, bbox[2]); yMax = Math.max(yMax, bbox[3]); } } return [xMin, yMin, xMax, yMax]; }; _getPadding = new WeakSet(); getPadding_fn = function() { return __privateGet(this, _disableEditing) ? Math.ceil(this.thickness * this.parentScale) : 0; }; _fitToContent = new WeakSet(); fitToContent_fn = function(firstTime = false) { if (this.isEmpty()) { return; } if (!__privateGet(this, _disableEditing)) { __privateMethod(this, _redraw, redraw_fn).call(this); return; } const bbox = __privateMethod(this, _getBbox, getBbox_fn).call(this); const padding = __privateMethod(this, _getPadding, getPadding_fn).call(this); __privateSet(this, _baseWidth, Math.max(AnnotationEditor.MIN_SIZE, bbox[2] - bbox[0])); __privateSet(this, _baseHeight, Math.max(AnnotationEditor.MIN_SIZE, bbox[3] - bbox[1])); const width = Math.ceil(padding + __privateGet(this, _baseWidth) * this.scaleFactor); const height = Math.ceil(padding + __privateGet(this, _baseHeight) * this.scaleFactor); const [parentWidth, parentHeight] = this.parentDimensions; this.width = width / parentWidth; this.height = height / parentHeight; this.setAspectRatio(width, height); const prevTranslationX = this.translationX; const prevTranslationY = this.translationY; this.translationX = -bbox[0]; this.translationY = -bbox[1]; __privateMethod(this, _setCanvasDims, setCanvasDims_fn).call(this); __privateMethod(this, _redraw, redraw_fn).call(this); __privateSet(this, _realWidth, width); __privateSet(this, _realHeight, height); this.setDims(width, height); const unscaledPadding = firstTime ? padding / this.scaleFactor / 2 : 0; this.translate(prevTranslationX - this.translationX - unscaledPadding, prevTranslationY - this.translationY - unscaledPadding); }; __privateAdd(InkEditor, _buildPath2D); __privateAdd(InkEditor, _toPDFCoordinates); __privateAdd(InkEditor, _fromPDFCoordinates); __publicField(InkEditor, "_defaultColor", null); __publicField(InkEditor, "_defaultOpacity", 1); __publicField(InkEditor, "_defaultThickness", 1); __publicField(InkEditor, "_type", "ink"); __publicField(InkEditor, "_editorType", AnnotationEditorType.INK); var _bitmap, _bitmapId, _bitmapPromise, _bitmapUrl, _bitmapFile, _bitmapFileName, _canvas, _observer2, _resizeTimeoutId, _isSvg, _hasBeenAddedInUndoStack, _getBitmapFetched, getBitmapFetched_fn, _getBitmapDone, getBitmapDone_fn, _getBitmap, getBitmap_fn, _createCanvas2, createCanvas_fn2, _setDimensions, setDimensions_fn, _scaleBitmap, scaleBitmap_fn, _drawBitmap, drawBitmap_fn, _serializeBitmap, serializeBitmap_fn, _createObserver2, createObserver_fn2; var _StampEditor = class extends AnnotationEditor { constructor(params) { super({ ...params, name: "stampEditor" }); __privateAdd(this, _getBitmapFetched); __privateAdd(this, _getBitmapDone); __privateAdd(this, _getBitmap); __privateAdd(this, _createCanvas2); __privateAdd(this, _setDimensions); __privateAdd(this, _scaleBitmap); __privateAdd(this, _drawBitmap); __privateAdd(this, _serializeBitmap); __privateAdd(this, _createObserver2); __privateAdd(this, _bitmap, null); __privateAdd(this, _bitmapId, null); __privateAdd(this, _bitmapPromise, null); __privateAdd(this, _bitmapUrl, null); __privateAdd(this, _bitmapFile, null); __privateAdd(this, _bitmapFileName, ""); __privateAdd(this, _canvas, null); __privateAdd(this, _observer2, null); __privateAdd(this, _resizeTimeoutId, null); __privateAdd(this, _isSvg, false); __privateAdd(this, _hasBeenAddedInUndoStack, false); __privateSet(this, _bitmapUrl, params.bitmapUrl); __privateSet(this, _bitmapFile, params.bitmapFile); } static initialize(l10n, uiManager) { AnnotationEditor.initialize(l10n, uiManager); } static get supportedTypes() { const types = ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"]; return shadow(this, "supportedTypes", types.map((type) => `image/${type}`)); } static get supportedTypesStr() { return shadow(this, "supportedTypesStr", this.supportedTypes.join(",")); } static isHandlingMimeForPasting(mime) { return this.supportedTypes.includes(mime); } static paste(item, parent) { parent.pasteEditor(AnnotationEditorType.STAMP, { bitmapFile: item.getAsFile() }); } altTextFinish() { if (this._uiManager.useNewAltTextFlow) { this.div.hidden = false; } super.altTextFinish(); } get telemetryFinalData() { var _a2; return { type: "stamp", hasAltText: !!((_a2 = this.altTextData) == null ? void 0 : _a2.altText) }; } static computeTelemetryFinalData(data) { var _a2, _b; const hasAltTextStats = data.get("hasAltText"); return { hasAltText: (_a2 = hasAltTextStats.get(true)) != null ? _a2 : 0, hasNoAltText: (_b = hasAltTextStats.get(false)) != null ? _b : 0 }; } async mlGuessAltText(imageData = null, updateAltTextData = true) { if (this.hasAltTextData()) { return null; } const { mlManager } = this._uiManager; if (!mlManager) { throw new Error("No ML."); } if (!await mlManager.isEnabledFor("altText")) { throw new Error("ML isn't enabled for alt text."); } const { data, width, height } = imageData || this.copyCanvas(null, true).imageData; const response = await mlManager.guess({ name: "altText", request: { data, width, height, channels: data.length / (width * height) } }); if (!response) { throw new Error("No response from the AI service."); } if (response.error) { throw new Error("Error from the AI service."); } if (response.cancel) { return null; } if (!response.output) { throw new Error("No valid response from the AI service."); } const altText = response.output; await this.setGuessedAltText(altText); if (updateAltTextData && !this.hasAltTextData()) { this.altTextData = { alt: altText, decorative: false }; } return altText; } remove() { var _a2, _b; if (__privateGet(this, _bitmapId)) { __privateSet(this, _bitmap, null); this._uiManager.imageManager.deleteId(__privateGet(this, _bitmapId)); (_a2 = __privateGet(this, _canvas)) == null ? void 0 : _a2.remove(); __privateSet(this, _canvas, null); (_b = __privateGet(this, _observer2)) == null ? void 0 : _b.disconnect(); __privateSet(this, _observer2, null); if (__privateGet(this, _resizeTimeoutId)) { clearTimeout(__privateGet(this, _resizeTimeoutId)); __privateSet(this, _resizeTimeoutId, null); } } super.remove(); } rebuild() { if (!this.parent) { if (__privateGet(this, _bitmapId)) { __privateMethod(this, _getBitmap, getBitmap_fn).call(this); } return; } super.rebuild(); if (this.div === null) { return; } if (__privateGet(this, _bitmapId) && __privateGet(this, _canvas) === null) { __privateMethod(this, _getBitmap, getBitmap_fn).call(this); } if (!this.isAttachedToDOM) { this.parent.add(this); } } onceAdded() { this._isDraggable = true; this.div.focus(); } isEmpty() { return !(__privateGet(this, _bitmapPromise) || __privateGet(this, _bitmap) || __privateGet(this, _bitmapUrl) || __privateGet(this, _bitmapFile) || __privateGet(this, _bitmapId)); } get isResizable() { return true; } render() { if (this.div) { return this.div; } let baseX, baseY; if (this.width) { baseX = this.x; baseY = this.y; } super.render(); this.div.hidden = true; this.addAltTextButton(); if (__privateGet(this, _bitmap)) { __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this); } else { __privateMethod(this, _getBitmap, getBitmap_fn).call(this); } if (this.width) { const [parentWidth, parentHeight] = this.parentDimensions; this.setAt(baseX * parentWidth, baseY * parentHeight, this.width * parentWidth, this.height * parentHeight); } return this.div; } copyCanvas(maxDimension, createImageData = false) { var _a2; if (!maxDimension) { maxDimension = 224; } const { width: bitmapWidth, height: bitmapHeight } = __privateGet(this, _bitmap); const canvas = document.createElement("canvas"); let bitmap = __privateGet(this, _bitmap); let width = bitmapWidth, height = bitmapHeight; if (bitmapWidth > maxDimension || bitmapHeight > maxDimension) { const ratio = Math.min(maxDimension / bitmapWidth, maxDimension / bitmapHeight); width = Math.floor(bitmapWidth * ratio); height = Math.floor(bitmapHeight * ratio); if (!__privateGet(this, _isSvg)) { bitmap = __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height); } } canvas.width = width; canvas.height = height; const ctx = canvas.getContext("2d"); ctx.filter = this._uiManager.hcmFilter; let white = "white", black = "#cfcfd8"; if (this._uiManager.hcmFilter !== "none") { black = "black"; } else if ((_a2 = window.matchMedia) == null ? void 0 : _a2.call(window, "(prefers-color-scheme: dark)").matches) { white = "#8f8f9d"; black = "#42414d"; } const boxDim = 15; const pattern = new OffscreenCanvas(boxDim * 2, boxDim * 2); const patternCtx = pattern.getContext("2d"); patternCtx.fillStyle = white; patternCtx.fillRect(0, 0, boxDim * 2, boxDim * 2); patternCtx.fillStyle = black; patternCtx.fillRect(0, 0, boxDim, boxDim); patternCtx.fillRect(boxDim, boxDim, boxDim, boxDim); ctx.fillStyle = ctx.createPattern(pattern, "repeat"); ctx.fillRect(0, 0, width, height); if (createImageData) { const offscreen = new OffscreenCanvas(width, height); const offscreenCtx = offscreen.getContext("2d", { willReadFrequently: true }); offscreenCtx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); const data = offscreenCtx.getImageData(0, 0, width, height).data; ctx.drawImage(offscreen, 0, 0); return { canvas, imageData: { width, height, data } }; } ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); return { canvas, imageData: null }; } getImageForAltText() { return __privateGet(this, _canvas); } static deserialize(data, parent, uiManager) { if (data instanceof StampAnnotationElement) { return null; } const editor = super.deserialize(data, parent, uiManager); const { rect, bitmapUrl, bitmapId, isSvg, accessibilityData } = data; if (bitmapId && uiManager.imageManager.isValidId(bitmapId)) { __privateSet(editor, _bitmapId, bitmapId); } else { __privateSet(editor, _bitmapUrl, bitmapUrl); } __privateSet(editor, _isSvg, isSvg); const [parentWidth, parentHeight] = editor.pageDimensions; editor.width = (rect[2] - rect[0]) / parentWidth; editor.height = (rect[3] - rect[1]) / parentHeight; if (accessibilityData) { editor.altTextData = accessibilityData; } return editor; } serialize(isForCopying = false, context = null) { if (this.isEmpty()) { return null; } const serialized = { annotationType: AnnotationEditorType.STAMP, bitmapId: __privateGet(this, _bitmapId), pageIndex: this.pageIndex, rect: this.getRect(0, 0), rotation: this.rotation, isSvg: __privateGet(this, _isSvg), structTreeParentId: this._structTreeParentId }; if (isForCopying) { serialized.bitmapUrl = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, true); serialized.accessibilityData = this.serializeAltText(true); return serialized; } const { decorative, altText } = this.serializeAltText(false); if (!decorative && altText) { serialized.accessibilityData = { type: "Figure", alt: altText }; } if (context === null) { return serialized; } context.stamps || (context.stamps = /* @__PURE__ */ new Map()); const area = __privateGet(this, _isSvg) ? (serialized.rect[2] - serialized.rect[0]) * (serialized.rect[3] - serialized.rect[1]) : null; if (!context.stamps.has(__privateGet(this, _bitmapId))) { context.stamps.set(__privateGet(this, _bitmapId), { area, serialized }); serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false); } else if (__privateGet(this, _isSvg)) { const prevData = context.stamps.get(__privateGet(this, _bitmapId)); if (area > prevData.area) { prevData.area = area; prevData.serialized.bitmap.close(); prevData.serialized.bitmap = __privateMethod(this, _serializeBitmap, serializeBitmap_fn).call(this, false); } } return serialized; } }; var StampEditor = _StampEditor; _bitmap = new WeakMap(); _bitmapId = new WeakMap(); _bitmapPromise = new WeakMap(); _bitmapUrl = new WeakMap(); _bitmapFile = new WeakMap(); _bitmapFileName = new WeakMap(); _canvas = new WeakMap(); _observer2 = new WeakMap(); _resizeTimeoutId = new WeakMap(); _isSvg = new WeakMap(); _hasBeenAddedInUndoStack = new WeakMap(); _getBitmapFetched = new WeakSet(); getBitmapFetched_fn = function(data, fromId = false) { if (!data) { this.remove(); return; } __privateSet(this, _bitmap, data.bitmap); if (!fromId) { __privateSet(this, _bitmapId, data.id); __privateSet(this, _isSvg, data.isSvg); } if (data.file) { __privateSet(this, _bitmapFileName, data.file.name); } __privateMethod(this, _createCanvas2, createCanvas_fn2).call(this); }; _getBitmapDone = new WeakSet(); getBitmapDone_fn = function() { __privateSet(this, _bitmapPromise, null); this._uiManager.enableWaiting(false); if (!__privateGet(this, _canvas)) { return; } if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) { this._editToolbar.hide(); this._uiManager.editAltText(this, true); return; } if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && __privateGet(this, _bitmap)) { this._reportTelemetry({ action: "pdfjs.image.image_added", data: { alt_text_modal: false, alt_text_type: "empty" } }); try { this.mlGuessAltText(); } catch (e) { } } this.div.focus(); }; _getBitmap = new WeakSet(); getBitmap_fn = function() { if (__privateGet(this, _bitmapId)) { this._uiManager.enableWaiting(true); this._uiManager.imageManager.getFromId(__privateGet(this, _bitmapId)).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data, true)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this)); return; } if (__privateGet(this, _bitmapUrl)) { const url = __privateGet(this, _bitmapUrl); __privateSet(this, _bitmapUrl, null); this._uiManager.enableWaiting(true); __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromUrl(url).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); return; } if (__privateGet(this, _bitmapFile)) { const file = __privateGet(this, _bitmapFile); __privateSet(this, _bitmapFile, null); this._uiManager.enableWaiting(true); __privateSet(this, _bitmapPromise, this._uiManager.imageManager.getFromFile(file).then((data) => __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data)).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); return; } const input = document.createElement("input"); input.type = "file"; input.accept = _StampEditor.supportedTypesStr; const signal = this._uiManager._signal; __privateSet(this, _bitmapPromise, new Promise((resolve) => { input.addEventListener("change", async () => { if (!input.files || input.files.length === 0) { this.remove(); } else { this._uiManager.enableWaiting(true); const data = await this._uiManager.imageManager.getFromFile(input.files[0]); this._reportTelemetry({ action: "pdfjs.image.image_selected", data: { alt_text_modal: this._uiManager.useNewAltTextFlow } }); __privateMethod(this, _getBitmapFetched, getBitmapFetched_fn).call(this, data); } resolve(); }, { signal }); input.addEventListener("cancel", () => { this.remove(); resolve(); }, { signal }); }).finally(() => __privateMethod(this, _getBitmapDone, getBitmapDone_fn).call(this))); input.click(); }; _createCanvas2 = new WeakSet(); createCanvas_fn2 = function() { const { div } = this; let { width, height } = __privateGet(this, _bitmap); const [pageWidth, pageHeight] = this.pageDimensions; const MAX_RATIO = 0.75; if (this.width) { width = this.width * pageWidth; height = this.height * pageHeight; } else if (width > MAX_RATIO * pageWidth || height > MAX_RATIO * pageHeight) { const factor = Math.min(MAX_RATIO * pageWidth / width, MAX_RATIO * pageHeight / height); width *= factor; height *= factor; } const [parentWidth, parentHeight] = this.parentDimensions; this.setDims(width * parentWidth / pageWidth, height * parentHeight / pageHeight); this._uiManager.enableWaiting(false); const canvas = __privateSet(this, _canvas, document.createElement("canvas")); div.append(canvas); if (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow) { div.hidden = false; } __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height); __privateMethod(this, _createObserver2, createObserver_fn2).call(this); if (!__privateGet(this, _hasBeenAddedInUndoStack)) { this.parent.addUndoableEditor(this); __privateSet(this, _hasBeenAddedInUndoStack, true); } this._reportTelemetry({ action: "inserted_image" }); if (__privateGet(this, _bitmapFileName)) { canvas.setAttribute("aria-label", __privateGet(this, _bitmapFileName)); } }; _setDimensions = new WeakSet(); setDimensions_fn = function(width, height) { var _a2; const [parentWidth, parentHeight] = this.parentDimensions; this.width = width / parentWidth; this.height = height / parentHeight; this.setDims(width, height); if ((_a2 = this._initialOptions) == null ? void 0 : _a2.isCentered) { this.center(); } else { this.fixAndSetPosition(); } this._initialOptions = null; if (__privateGet(this, _resizeTimeoutId) !== null) { clearTimeout(__privateGet(this, _resizeTimeoutId)); } const TIME_TO_WAIT = 200; __privateSet(this, _resizeTimeoutId, setTimeout(() => { __privateSet(this, _resizeTimeoutId, null); __privateMethod(this, _drawBitmap, drawBitmap_fn).call(this, width, height); }, TIME_TO_WAIT)); }; _scaleBitmap = new WeakSet(); scaleBitmap_fn = function(width, height) { const { width: bitmapWidth, height: bitmapHeight } = __privateGet(this, _bitmap); let newWidth = bitmapWidth; let newHeight = bitmapHeight; let bitmap = __privateGet(this, _bitmap); while (newWidth > 2 * width || newHeight > 2 * height) { const prevWidth = newWidth; const prevHeight = newHeight; if (newWidth > 2 * width) { newWidth = newWidth >= 16384 ? Math.floor(newWidth / 2) - 1 : Math.ceil(newWidth / 2); } if (newHeight > 2 * height) { newHeight = newHeight >= 16384 ? Math.floor(newHeight / 2) - 1 : Math.ceil(newHeight / 2); } const offscreen = new OffscreenCanvas(newWidth, newHeight); const ctx = offscreen.getContext("2d"); ctx.drawImage(bitmap, 0, 0, prevWidth, prevHeight, 0, 0, newWidth, newHeight); bitmap = offscreen.transferToImageBitmap(); } return bitmap; }; _drawBitmap = new WeakSet(); drawBitmap_fn = function(width, height) { width = Math.ceil(width); height = Math.ceil(height); const canvas = __privateGet(this, _canvas); if (!canvas || canvas.width === width && canvas.height === height) { return; } canvas.width = width; canvas.height = height; const bitmap = __privateGet(this, _isSvg) ? __privateGet(this, _bitmap) : __privateMethod(this, _scaleBitmap, scaleBitmap_fn).call(this, width, height); const ctx = canvas.getContext("2d"); ctx.filter = this._uiManager.hcmFilter; ctx.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height, 0, 0, width, height); }; _serializeBitmap = new WeakSet(); serializeBitmap_fn = function(toUrl) { if (toUrl) { if (__privateGet(this, _isSvg)) { const url = this._uiManager.imageManager.getSvgUrl(__privateGet(this, _bitmapId)); if (url) { return url; } } const canvas = document.createElement("canvas"); ({ width: canvas.width, height: canvas.height } = __privateGet(this, _bitmap)); const ctx = canvas.getContext("2d"); ctx.drawImage(__privateGet(this, _bitmap), 0, 0); return canvas.toDataURL(); } if (__privateGet(this, _isSvg)) { const [pageWidth, pageHeight] = this.pageDimensions; const width = Math.round(this.width * pageWidth * PixelsPerInch.PDF_TO_CSS_UNITS); const height = Math.round(this.height * pageHeight * PixelsPerInch.PDF_TO_CSS_UNITS); const offscreen = new OffscreenCanvas(width, height); const ctx = offscreen.getContext("2d"); ctx.drawImage(__privateGet(this, _bitmap), 0, 0, __privateGet(this, _bitmap).width, __privateGet(this, _bitmap).height, 0, 0, width, height); return offscreen.transferToImageBitmap(); } return structuredClone(__privateGet(this, _bitmap)); }; _createObserver2 = new WeakSet(); createObserver_fn2 = function() { if (!this._uiManager._signal) { return; } __privateSet(this, _observer2, new ResizeObserver((entries) => { const rect = entries[0].contentRect; if (rect.width && rect.height) { __privateMethod(this, _setDimensions, setDimensions_fn).call(this, rect.width, rect.height); } })); __privateGet(this, _observer2).observe(this.div); this._uiManager._signal.addEventListener("abort", () => { var _a2; (_a2 = __privateGet(this, _observer2)) == null ? void 0 : _a2.disconnect(); __privateSet(this, _observer2, null); }, { once: true }); }; __publicField(StampEditor, "_type", "stamp"); __publicField(StampEditor, "_editorType", AnnotationEditorType.STAMP); var _accessibilityManager2, _allowClick, _annotationLayer, _clickAC, _editorFocusTimeoutId, _editors, _hadPointerDown, _isCleaningUp, _isDisabling, _textLayer, _textSelectionAC, _uiManager3, _editorTypes2, _textLayerPointerDown, textLayerPointerDown_fn, _currentEditorType, currentEditorType_get, _createNewEditor, createNewEditor_fn, _getCenterPoint, getCenterPoint_fn, _cleanup, cleanup_fn; var _AnnotationEditorLayer = class { constructor({ uiManager, pageIndex, div, accessibilityManager, annotationLayer, drawLayer, textLayer, viewport, l10n }) { __privateAdd(this, _textLayerPointerDown); __privateAdd(this, _currentEditorType); __privateAdd(this, _createNewEditor); __privateAdd(this, _getCenterPoint); __privateAdd(this, _cleanup); __privateAdd(this, _accessibilityManager2, void 0); __privateAdd(this, _allowClick, false); __privateAdd(this, _annotationLayer, null); __privateAdd(this, _clickAC, null); __privateAdd(this, _editorFocusTimeoutId, null); __privateAdd(this, _editors, /* @__PURE__ */ new Map()); __privateAdd(this, _hadPointerDown, false); __privateAdd(this, _isCleaningUp, false); __privateAdd(this, _isDisabling, false); __privateAdd(this, _textLayer, null); __privateAdd(this, _textSelectionAC, null); __privateAdd(this, _uiManager3, void 0); const editorTypes = [...__privateGet(_AnnotationEditorLayer, _editorTypes2).values()]; if (!_AnnotationEditorLayer._initialized) { _AnnotationEditorLayer._initialized = true; for (const editorType of editorTypes) { editorType.initialize(l10n, uiManager); } } uiManager.registerEditorTypes(editorTypes); __privateSet(this, _uiManager3, uiManager); this.pageIndex = pageIndex; this.div = div; __privateSet(this, _accessibilityManager2, accessibilityManager); __privateSet(this, _annotationLayer, annotationLayer); this.viewport = viewport; __privateSet(this, _textLayer, textLayer); this.drawLayer = drawLayer; __privateGet(this, _uiManager3).addLayer(this); } get isEmpty() { return __privateGet(this, _editors).size === 0; } get isInvisible() { return this.isEmpty && __privateGet(this, _uiManager3).getMode() === AnnotationEditorType.NONE; } updateToolbar(mode) { __privateGet(this, _uiManager3).updateToolbar(mode); } updateMode(mode = __privateGet(this, _uiManager3).getMode()) { __privateMethod(this, _cleanup, cleanup_fn).call(this); switch (mode) { case AnnotationEditorType.NONE: this.disableTextSelection(); this.togglePointerEvents(false); this.toggleAnnotationLayerPointerEvents(true); this.disableClick(); return; case AnnotationEditorType.INK: this.addInkEditorIfNeeded(false); this.disableTextSelection(); this.togglePointerEvents(true); this.disableClick(); break; case AnnotationEditorType.HIGHLIGHT: this.enableTextSelection(); this.togglePointerEvents(false); this.disableClick(); break; default: this.disableTextSelection(); this.togglePointerEvents(true); this.enableClick(); } this.toggleAnnotationLayerPointerEvents(false); const { classList } = this.div; for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) { classList.toggle(`${editorType._type}Editing`, mode === editorType._editorType); } this.div.hidden = false; } hasTextLayer(textLayer) { var _a2; return textLayer === ((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div); } addInkEditorIfNeeded(isCommitting) { if (__privateGet(this, _uiManager3).getMode() !== AnnotationEditorType.INK) { return; } if (!isCommitting) { for (const editor2 of __privateGet(this, _editors).values()) { if (editor2.isEmpty()) { editor2.setInBackground(); return; } } } const editor = this.createAndAddNewEditor({ offsetX: 0, offsetY: 0 }, false); editor.setInBackground(); } setEditingState(isEditing) { __privateGet(this, _uiManager3).setEditingState(isEditing); } addCommands(params) { __privateGet(this, _uiManager3).addCommands(params); } toggleDrawing(enabled = false) { this.div.classList.toggle("drawing", !enabled); } togglePointerEvents(enabled = false) { this.div.classList.toggle("disabled", !enabled); } toggleAnnotationLayerPointerEvents(enabled = false) { var _a2; (_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.div.classList.toggle("disabled", !enabled); } enable() { this.div.tabIndex = 0; this.togglePointerEvents(true); const annotationElementIds = /* @__PURE__ */ new Set(); for (const editor of __privateGet(this, _editors).values()) { editor.enableEditing(); editor.show(true); if (editor.annotationElementId) { __privateGet(this, _uiManager3).removeChangedExistingAnnotation(editor); annotationElementIds.add(editor.annotationElementId); } } if (!__privateGet(this, _annotationLayer)) { return; } const editables = __privateGet(this, _annotationLayer).getEditableAnnotations(); for (const editable of editables) { editable.hide(); if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(editable.data.id)) { continue; } if (annotationElementIds.has(editable.data.id)) { continue; } const editor = this.deserialize(editable); if (!editor) { continue; } this.addOrRebuild(editor); editor.enableEditing(); } } disable() { var _a2; __privateSet(this, _isDisabling, true); this.div.tabIndex = -1; this.togglePointerEvents(false); const changedAnnotations = /* @__PURE__ */ new Map(); const resetAnnotations = /* @__PURE__ */ new Map(); for (const editor of __privateGet(this, _editors).values()) { editor.disableEditing(); if (!editor.annotationElementId) { continue; } if (editor.serialize() !== null) { changedAnnotations.set(editor.annotationElementId, editor); continue; } else { resetAnnotations.set(editor.annotationElementId, editor); } (_a2 = this.getEditableAnnotation(editor.annotationElementId)) == null ? void 0 : _a2.show(); editor.remove(); } if (__privateGet(this, _annotationLayer)) { const editables = __privateGet(this, _annotationLayer).getEditableAnnotations(); for (const editable of editables) { const { id } = editable.data; if (__privateGet(this, _uiManager3).isDeletedAnnotationElement(id)) { continue; } let editor = resetAnnotations.get(id); if (editor) { editor.resetAnnotationElement(editable); editor.show(false); editable.show(); continue; } editor = changedAnnotations.get(id); if (editor) { __privateGet(this, _uiManager3).addChangedExistingAnnotation(editor); editor.renderAnnotationElement(editable); editor.show(false); } editable.show(); } } __privateMethod(this, _cleanup, cleanup_fn).call(this); if (this.isEmpty) { this.div.hidden = true; } const { classList } = this.div; for (const editorType of __privateGet(_AnnotationEditorLayer, _editorTypes2).values()) { classList.remove(`${editorType._type}Editing`); } this.disableTextSelection(); this.toggleAnnotationLayerPointerEvents(true); __privateSet(this, _isDisabling, false); } getEditableAnnotation(id) { var _a2; return ((_a2 = __privateGet(this, _annotationLayer)) == null ? void 0 : _a2.getEditableAnnotation(id)) || null; } setActiveEditor(editor) { const currentActive = __privateGet(this, _uiManager3).getActive(); if (currentActive === editor) { return; } __privateGet(this, _uiManager3).setActiveEditor(editor); } enableTextSelection() { var _a2; this.div.tabIndex = -1; if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && !__privateGet(this, _textSelectionAC)) { __privateSet(this, _textSelectionAC, new AbortController()); const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _textSelectionAC)); __privateGet(this, _textLayer).div.addEventListener("pointerdown", __privateMethod(this, _textLayerPointerDown, textLayerPointerDown_fn).bind(this), { signal }); __privateGet(this, _textLayer).div.classList.add("highlighting"); } } disableTextSelection() { var _a2; this.div.tabIndex = 0; if (((_a2 = __privateGet(this, _textLayer)) == null ? void 0 : _a2.div) && __privateGet(this, _textSelectionAC)) { __privateGet(this, _textSelectionAC).abort(); __privateSet(this, _textSelectionAC, null); __privateGet(this, _textLayer).div.classList.remove("highlighting"); } } enableClick() { if (__privateGet(this, _clickAC)) { return; } __privateSet(this, _clickAC, new AbortController()); const signal = __privateGet(this, _uiManager3).combinedSignal(__privateGet(this, _clickAC)); this.div.addEventListener("pointerdown", this.pointerdown.bind(this), { signal }); this.div.addEventListener("pointerup", this.pointerup.bind(this), { signal }); } disableClick() { var _a2; (_a2 = __privateGet(this, _clickAC)) == null ? void 0 : _a2.abort(); __privateSet(this, _clickAC, null); } attach(editor) { __privateGet(this, _editors).set(editor.id, editor); const { annotationElementId } = editor; if (annotationElementId && __privateGet(this, _uiManager3).isDeletedAnnotationElement(annotationElementId)) { __privateGet(this, _uiManager3).removeDeletedAnnotationElement(editor); } } detach(editor) { var _a2; __privateGet(this, _editors).delete(editor.id); (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.removePointerInTextLayer(editor.contentDiv); if (!__privateGet(this, _isDisabling) && editor.annotationElementId) { __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor); } } remove(editor) { this.detach(editor); __privateGet(this, _uiManager3).removeEditor(editor); editor.div.remove(); editor.isAttachedToDOM = false; if (!__privateGet(this, _isCleaningUp)) { this.addInkEditorIfNeeded(false); } } changeParent(editor) { var _a2; if (editor.parent === this) { return; } if (editor.parent && editor.annotationElementId) { __privateGet(this, _uiManager3).addDeletedAnnotationElement(editor.annotationElementId); AnnotationEditor.deleteAnnotationElement(editor); editor.annotationElementId = null; } this.attach(editor); (_a2 = editor.parent) == null ? void 0 : _a2.detach(editor); editor.setParent(this); if (editor.div && editor.isAttachedToDOM) { editor.div.remove(); this.div.append(editor.div); } } add(editor) { if (editor.parent === this && editor.isAttachedToDOM) { return; } this.changeParent(editor); __privateGet(this, _uiManager3).addEditor(editor); this.attach(editor); if (!editor.isAttachedToDOM) { const div = editor.render(); this.div.append(div); editor.isAttachedToDOM = true; } editor.fixAndSetPosition(); editor.onceAdded(); __privateGet(this, _uiManager3).addToAnnotationStorage(editor); editor._reportTelemetry(editor.telemetryInitialData); } moveEditorInDOM(editor) { var _a2; if (!editor.isAttachedToDOM) { return; } const { activeElement } = document; if (editor.div.contains(activeElement) && !__privateGet(this, _editorFocusTimeoutId)) { editor._focusEventsAllowed = false; __privateSet(this, _editorFocusTimeoutId, setTimeout(() => { __privateSet(this, _editorFocusTimeoutId, null); if (!editor.div.contains(document.activeElement)) { editor.div.addEventListener("focusin", () => { editor._focusEventsAllowed = true; }, { once: true, signal: __privateGet(this, _uiManager3)._signal }); activeElement.focus(); } else { editor._focusEventsAllowed = true; } }, 0)); } editor._structTreeParentId = (_a2 = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _a2.moveElementInDOM(this.div, editor.div, editor.contentDiv, true); } addOrRebuild(editor) { if (editor.needsToBeRebuilt()) { editor.parent || (editor.parent = this); editor.rebuild(); editor.show(); } else { this.add(editor); } } addUndoableEditor(editor) { const cmd = () => editor._uiManager.rebuild(editor); const undo = () => { editor.remove(); }; this.addCommands({ cmd, undo, mustExec: false }); } getNextId() { return __privateGet(this, _uiManager3).getId(); } combinedSignal(ac) { return __privateGet(this, _uiManager3).combinedSignal(ac); } canCreateNewEmptyEditor() { var _a2; return (_a2 = __privateGet(this, _currentEditorType, currentEditorType_get)) == null ? void 0 : _a2.canCreateNewEmptyEditor(); } pasteEditor(mode, params) { __privateGet(this, _uiManager3).updateToolbar(mode); __privateGet(this, _uiManager3).updateMode(mode); const { offsetX, offsetY } = __privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this); const id = this.getNextId(); const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, { parent: this, id, x: offsetX, y: offsetY, uiManager: __privateGet(this, _uiManager3), isCentered: true, ...params }); if (editor) { this.add(editor); } } deserialize(data) { var _a2, _b; return ((_b = __privateGet(_AnnotationEditorLayer, _editorTypes2).get((_a2 = data.annotationType) != null ? _a2 : data.annotationEditorType)) == null ? void 0 : _b.deserialize(data, this, __privateGet(this, _uiManager3))) || null; } createAndAddNewEditor(event, isCentered, data = {}) { const id = this.getNextId(); const editor = __privateMethod(this, _createNewEditor, createNewEditor_fn).call(this, { parent: this, id, x: event.offsetX, y: event.offsetY, uiManager: __privateGet(this, _uiManager3), isCentered, ...data }); if (editor) { this.add(editor); } return editor; } addNewEditor() { this.createAndAddNewEditor(__privateMethod(this, _getCenterPoint, getCenterPoint_fn).call(this), true); } setSelected(editor) { __privateGet(this, _uiManager3).setSelected(editor); } toggleSelected(editor) { __privateGet(this, _uiManager3).toggleSelected(editor); } isSelected(editor) { return __privateGet(this, _uiManager3).isSelected(editor); } unselect(editor) { __privateGet(this, _uiManager3).unselect(editor); } pointerup(event) { const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } if (event.target !== this.div) { return; } if (!__privateGet(this, _hadPointerDown)) { return; } __privateSet(this, _hadPointerDown, false); if (!__privateGet(this, _allowClick)) { __privateSet(this, _allowClick, true); return; } if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.STAMP) { __privateGet(this, _uiManager3).unselectAll(); return; } this.createAndAddNewEditor(event, false); } pointerdown(event) { if (__privateGet(this, _uiManager3).getMode() === AnnotationEditorType.HIGHLIGHT) { this.enableTextSelection(); } if (__privateGet(this, _hadPointerDown)) { __privateSet(this, _hadPointerDown, false); return; } const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } if (event.target !== this.div) { return; } __privateSet(this, _hadPointerDown, true); const editor = __privateGet(this, _uiManager3).getActive(); __privateSet(this, _allowClick, !editor || editor.isEmpty()); } findNewParent(editor, x, y) { const layer = __privateGet(this, _uiManager3).findParent(x, y); if (layer === null || layer === this) { return false; } layer.changeParent(editor); return true; } destroy() { var _a2, _b; if (((_a2 = __privateGet(this, _uiManager3).getActive()) == null ? void 0 : _a2.parent) === this) { __privateGet(this, _uiManager3).commitOrRemove(); __privateGet(this, _uiManager3).setActiveEditor(null); } if (__privateGet(this, _editorFocusTimeoutId)) { clearTimeout(__privateGet(this, _editorFocusTimeoutId)); __privateSet(this, _editorFocusTimeoutId, null); } for (const editor of __privateGet(this, _editors).values()) { (_b = __privateGet(this, _accessibilityManager2)) == null ? void 0 : _b.removePointerInTextLayer(editor.contentDiv); editor.setParent(null); editor.isAttachedToDOM = false; editor.div.remove(); } this.div = null; __privateGet(this, _editors).clear(); __privateGet(this, _uiManager3).removeLayer(this); } render({ viewport }) { this.viewport = viewport; setLayerDimensions(this.div, viewport); for (const editor of __privateGet(this, _uiManager3).getEditors(this.pageIndex)) { this.add(editor); editor.rebuild(); } this.updateMode(); } update({ viewport }) { __privateGet(this, _uiManager3).commitOrRemove(); __privateMethod(this, _cleanup, cleanup_fn).call(this); const oldRotation = this.viewport.rotation; const rotation = viewport.rotation; this.viewport = viewport; setLayerDimensions(this.div, { rotation }); if (oldRotation !== rotation) { for (const editor of __privateGet(this, _editors).values()) { editor.rotate(rotation); } } this.addInkEditorIfNeeded(false); } get pageDimensions() { const { pageWidth, pageHeight } = this.viewport.rawDims; return [pageWidth, pageHeight]; } get scale() { return __privateGet(this, _uiManager3).viewParameters.realScale; } }; var AnnotationEditorLayer = _AnnotationEditorLayer; _accessibilityManager2 = new WeakMap(); _allowClick = new WeakMap(); _annotationLayer = new WeakMap(); _clickAC = new WeakMap(); _editorFocusTimeoutId = new WeakMap(); _editors = new WeakMap(); _hadPointerDown = new WeakMap(); _isCleaningUp = new WeakMap(); _isDisabling = new WeakMap(); _textLayer = new WeakMap(); _textSelectionAC = new WeakMap(); _uiManager3 = new WeakMap(); _editorTypes2 = new WeakMap(); _textLayerPointerDown = new WeakSet(); textLayerPointerDown_fn = function(event) { __privateGet(this, _uiManager3).unselectAll(); const { target } = event; if (target === __privateGet(this, _textLayer).div || target.classList.contains("endOfContent") && __privateGet(this, _textLayer).div.contains(target)) { const { isMac } = util_FeatureTest.platform; if (event.button !== 0 || event.ctrlKey && isMac) { return; } __privateGet(this, _uiManager3).showAllEditors("highlight", true, true); __privateGet(this, _textLayer).div.classList.add("free"); this.toggleDrawing(); HighlightEditor.startHighlighting(this, __privateGet(this, _uiManager3).direction === "ltr", event); __privateGet(this, _textLayer).div.addEventListener("pointerup", () => { __privateGet(this, _textLayer).div.classList.remove("free"); this.toggleDrawing(true); }, { once: true, signal: __privateGet(this, _uiManager3)._signal }); event.preventDefault(); } }; _currentEditorType = new WeakSet(); currentEditorType_get = function() { return __privateGet(_AnnotationEditorLayer, _editorTypes2).get(__privateGet(this, _uiManager3).getMode()); }; _createNewEditor = new WeakSet(); createNewEditor_fn = function(params) { const editorType = __privateGet(this, _currentEditorType, currentEditorType_get); return editorType ? new editorType.prototype.constructor(params) : null; }; _getCenterPoint = new WeakSet(); getCenterPoint_fn = function() { const { x, y, width, height } = this.div.getBoundingClientRect(); const tlX = Math.max(0, x); const tlY = Math.max(0, y); const brX = Math.min(window.innerWidth, x + width); const brY = Math.min(window.innerHeight, y + height); const centerX = (tlX + brX) / 2 - x; const centerY = (tlY + brY) / 2 - y; const [offsetX, offsetY] = this.viewport.rotation % 180 === 0 ? [centerX, centerY] : [centerY, centerX]; return { offsetX, offsetY }; }; _cleanup = new WeakSet(); cleanup_fn = function() { __privateSet(this, _isCleaningUp, true); for (const editor of __privateGet(this, _editors).values()) { if (editor.isEmpty()) { editor.remove(); } } __privateSet(this, _isCleaningUp, false); }; __publicField(AnnotationEditorLayer, "_initialized", false); __privateAdd(AnnotationEditorLayer, _editorTypes2, new Map([FreeTextEditor, InkEditor, StampEditor, HighlightEditor].map((type) => [type._editorType, type]))); var _parent2, _id5, _mapping, _toUpdate, _setBox, setBox_fn, _createSVG, createSVG_fn, _createClipPath, createClipPath_fn; var _DrawLayer = class { constructor({ pageIndex }) { __privateAdd(this, _createSVG); __privateAdd(this, _createClipPath); __privateAdd(this, _parent2, null); __privateAdd(this, _id5, 0); __privateAdd(this, _mapping, /* @__PURE__ */ new Map()); __privateAdd(this, _toUpdate, /* @__PURE__ */ new Map()); this.pageIndex = pageIndex; } setParent(parent) { if (!__privateGet(this, _parent2)) { __privateSet(this, _parent2, parent); return; } if (__privateGet(this, _parent2) !== parent) { if (__privateGet(this, _mapping).size > 0) { for (const root of __privateGet(this, _mapping).values()) { root.remove(); parent.append(root); } } __privateSet(this, _parent2, parent); } } static get _svgFactory() { return shadow(this, "_svgFactory", new DOMSVGFactory()); } highlight(outlines, color2, opacity, isPathUpdatable = false) { const id = __privateWrapper(this, _id5)._++; const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box); root.classList.add("highlight"); if (outlines.free) { root.classList.add("free"); } const defs = _DrawLayer._svgFactory.createElement("defs"); root.append(defs); const path = _DrawLayer._svgFactory.createElement("path"); defs.append(path); const pathId = `path_p${this.pageIndex}_${id}`; path.setAttribute("id", pathId); path.setAttribute("d", outlines.toSVGPath()); if (isPathUpdatable) { __privateGet(this, _toUpdate).set(id, path); } const clipPathId = __privateMethod(this, _createClipPath, createClipPath_fn).call(this, defs, pathId); const use = _DrawLayer._svgFactory.createElement("use"); root.append(use); root.setAttribute("fill", color2); root.setAttribute("fill-opacity", opacity); use.setAttribute("href", `#${pathId}`); __privateGet(this, _mapping).set(id, root); return { id, clipPathId: `url(#${clipPathId})` }; } highlightOutline(outlines) { const id = __privateWrapper(this, _id5)._++; const root = __privateMethod(this, _createSVG, createSVG_fn).call(this, outlines.box); root.classList.add("highlightOutline"); const defs = _DrawLayer._svgFactory.createElement("defs"); root.append(defs); const path = _DrawLayer._svgFactory.createElement("path"); defs.append(path); const pathId = `path_p${this.pageIndex}_${id}`; path.setAttribute("id", pathId); path.setAttribute("d", outlines.toSVGPath()); path.setAttribute("vector-effect", "non-scaling-stroke"); let maskId; if (outlines.free) { root.classList.add("free"); const mask = _DrawLayer._svgFactory.createElement("mask"); defs.append(mask); maskId = `mask_p${this.pageIndex}_${id}`; mask.setAttribute("id", maskId); mask.setAttribute("maskUnits", "objectBoundingBox"); const rect = _DrawLayer._svgFactory.createElement("rect"); mask.append(rect); rect.setAttribute("width", "1"); rect.setAttribute("height", "1"); rect.setAttribute("fill", "white"); const use = _DrawLayer._svgFactory.createElement("use"); mask.append(use); use.setAttribute("href", `#${pathId}`); use.setAttribute("stroke", "none"); use.setAttribute("fill", "black"); use.setAttribute("fill-rule", "nonzero"); use.classList.add("mask"); } const use1 = _DrawLayer._svgFactory.createElement("use"); root.append(use1); use1.setAttribute("href", `#${pathId}`); if (maskId) { use1.setAttribute("mask", `url(#${maskId})`); } const use2 = use1.cloneNode(); root.append(use2); use1.classList.add("mainOutline"); use2.classList.add("secondaryOutline"); __privateGet(this, _mapping).set(id, root); return id; } finalizeLine(id, line) { const path = __privateGet(this, _toUpdate).get(id); __privateGet(this, _toUpdate).delete(id); this.updateBox(id, line.box); path.setAttribute("d", line.toSVGPath()); } updateLine(id, line) { const root = __privateGet(this, _mapping).get(id); const defs = root.firstChild; const path = defs.firstChild; path.setAttribute("d", line.toSVGPath()); } removeFreeHighlight(id) { this.remove(id); __privateGet(this, _toUpdate).delete(id); } updatePath(id, line) { __privateGet(this, _toUpdate).get(id).setAttribute("d", line.toSVGPath()); } updateBox(id, box) { var _a2; __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, __privateGet(this, _mapping).get(id), box); } show(id, visible) { __privateGet(this, _mapping).get(id).classList.toggle("hidden", !visible); } rotate(id, angle) { __privateGet(this, _mapping).get(id).setAttribute("data-main-rotation", angle); } changeColor(id, color2) { __privateGet(this, _mapping).get(id).setAttribute("fill", color2); } changeOpacity(id, opacity) { __privateGet(this, _mapping).get(id).setAttribute("fill-opacity", opacity); } addClass(id, className) { __privateGet(this, _mapping).get(id).classList.add(className); } removeClass(id, className) { __privateGet(this, _mapping).get(id).classList.remove(className); } remove(id) { if (__privateGet(this, _parent2) === null) { return; } __privateGet(this, _mapping).get(id).remove(); __privateGet(this, _mapping).delete(id); } destroy() { __privateSet(this, _parent2, null); for (const root of __privateGet(this, _mapping).values()) { root.remove(); } __privateGet(this, _mapping).clear(); } }; var DrawLayer = _DrawLayer; _parent2 = new WeakMap(); _id5 = new WeakMap(); _mapping = new WeakMap(); _toUpdate = new WeakMap(); _setBox = new WeakSet(); setBox_fn = function(element, { x = 0, y = 0, width = 1, height = 1 } = {}) { const { style } = element; style.top = `${100 * y}%`; style.left = `${100 * x}%`; style.width = `${100 * width}%`; style.height = `${100 * height}%`; }; _createSVG = new WeakSet(); createSVG_fn = function(box) { var _a2; const svg = _DrawLayer._svgFactory.create(1, 1, true); __privateGet(this, _parent2).append(svg); svg.setAttribute("aria-hidden", true); __privateMethod(_a2 = _DrawLayer, _setBox, setBox_fn).call(_a2, svg, box); return svg; }; _createClipPath = new WeakSet(); createClipPath_fn = function(defs, pathId) { const clipPath = _DrawLayer._svgFactory.createElement("clipPath"); defs.append(clipPath); const clipPathId = `clip_${pathId}`; clipPath.setAttribute("id", clipPathId); clipPath.setAttribute("clipPathUnits", "objectBoundingBox"); const clipPathUse = _DrawLayer._svgFactory.createElement("use"); clipPath.append(clipPathUse); clipPathUse.setAttribute("href", `#${pathId}`); clipPathUse.classList.add("clip"); return clipPathId; }; __privateAdd(DrawLayer, _setBox); var __webpack_exports__AbortException = __webpack_exports__.AbortException; var __webpack_exports__AnnotationEditorLayer = __webpack_exports__.AnnotationEditorLayer; var __webpack_exports__AnnotationEditorParamsType = __webpack_exports__.AnnotationEditorParamsType; var __webpack_exports__AnnotationEditorType = __webpack_exports__.AnnotationEditorType; var __webpack_exports__AnnotationEditorUIManager = __webpack_exports__.AnnotationEditorUIManager; var __webpack_exports__AnnotationLayer = __webpack_exports__.AnnotationLayer; var __webpack_exports__AnnotationMode = __webpack_exports__.AnnotationMode; var __webpack_exports__CMapCompressionType = __webpack_exports__.CMapCompressionType; var __webpack_exports__ColorPicker = __webpack_exports__.ColorPicker; var __webpack_exports__DOMSVGFactory = __webpack_exports__.DOMSVGFactory; var __webpack_exports__DrawLayer = __webpack_exports__.DrawLayer; var __webpack_exports__FeatureTest = __webpack_exports__.FeatureTest; var __webpack_exports__GlobalWorkerOptions = __webpack_exports__.GlobalWorkerOptions; var __webpack_exports__ImageKind = __webpack_exports__.ImageKind; var __webpack_exports__InvalidPDFException = __webpack_exports__.InvalidPDFException; var __webpack_exports__MissingPDFException = __webpack_exports__.MissingPDFException; var __webpack_exports__OPS = __webpack_exports__.OPS; var __webpack_exports__PDFDataRangeTransport = __webpack_exports__.PDFDataRangeTransport; var __webpack_exports__PDFDateString = __webpack_exports__.PDFDateString; var __webpack_exports__PDFWorker = __webpack_exports__.PDFWorker; var __webpack_exports__PasswordResponses = __webpack_exports__.PasswordResponses; var __webpack_exports__PermissionFlag = __webpack_exports__.PermissionFlag; var __webpack_exports__PixelsPerInch = __webpack_exports__.PixelsPerInch; var __webpack_exports__RenderingCancelledException = __webpack_exports__.RenderingCancelledException; var __webpack_exports__TextLayer = __webpack_exports__.TextLayer; var __webpack_exports__UnexpectedResponseException = __webpack_exports__.UnexpectedResponseException; var __webpack_exports__Util = __webpack_exports__.Util; var __webpack_exports__VerbosityLevel = __webpack_exports__.VerbosityLevel; var __webpack_exports__XfaLayer = __webpack_exports__.XfaLayer; var __webpack_exports__build = __webpack_exports__.build; var __webpack_exports__createValidAbsoluteUrl = __webpack_exports__.createValidAbsoluteUrl; var __webpack_exports__fetchData = __webpack_exports__.fetchData; var __webpack_exports__getDocument = __webpack_exports__.getDocument; var __webpack_exports__getFilenameFromUrl = __webpack_exports__.getFilenameFromUrl; var __webpack_exports__getPdfFilenameFromUrl = __webpack_exports__.getPdfFilenameFromUrl; var __webpack_exports__getXfaPageViewport = __webpack_exports__.getXfaPageViewport; var __webpack_exports__isDataScheme = __webpack_exports__.isDataScheme; var __webpack_exports__isPdfFile = __webpack_exports__.isPdfFile; var __webpack_exports__noContextMenu = __webpack_exports__.noContextMenu; var __webpack_exports__normalizeUnicode = __webpack_exports__.normalizeUnicode; var __webpack_exports__setLayerDimensions = __webpack_exports__.setLayerDimensions; var __webpack_exports__shadow = __webpack_exports__.shadow; var __webpack_exports__version = __webpack_exports__.version; // inline-worker:__inline-worker function inlineWorker(scriptText) { let blob = new Blob([scriptText], { type: "text/javascript" }); let url = URL.createObjectURL(blob); let worker = new Worker(url); URL.revokeObjectURL(url); return worker; } // src/processors/pdf.worker.js function Worker2() { return inlineWorker('var Rn=Object.defineProperty;var xu=Object.getOwnPropertyDescriptor;var mu=Object.getOwnPropertyNames;var pu=Object.prototype.hasOwnProperty;var wu=(e,A,t)=>A in e?Rn(e,A,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[A]=t;var yu=(e,A)=>{for(var t in A)Rn(e,t,{get:A[t],enumerable:!0})},bu=(e,A,t,i)=>{if(A&&typeof A=="object"||typeof A=="function")for(let s of mu(A))!pu.call(e,s)&&s!==t&&Rn(e,s,{get:()=>A[s],enumerable:!(i=xu(A,s))||i.enumerable});return e};var Du=e=>bu(Rn({},"__esModule",{value:!0}),e);var et=(e,A,t)=>(wu(e,typeof A!="symbol"?A+"":A,t),t),lo=(e,A,t)=>{if(!A.has(e))throw TypeError("Cannot "+t)};var ne=(e,A,t)=>(lo(e,A,"read from private field"),t?t.call(e):A.get(e)),HA=(e,A,t)=>{if(A.has(e))throw TypeError("Cannot add the same private member more than once");A instanceof WeakSet?A.add(e):A.set(e,t)},_s=(e,A,t,i)=>(lo(e,A,"write to private field"),i?i.call(e,t):A.set(e,t),t);var mA=(e,A,t)=>(lo(e,A,"access private method"),t);var Dx={};yu(Dx,{WorkerMessageHandler:()=>bx});module.exports=Du(Dx);var Ba={};Ba.d=(e,A)=>{for(var t in A)Ba.o(A,t)&&!Ba.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:A[t]})};Ba.o=(e,A)=>Object.prototype.hasOwnProperty.call(e,A);var qE=globalThis.pdfjsWorker={};Ba.d(qE,{WorkerMessageHandler:()=>H0});var ku=typeof process=="object"&&process+""=="[object process]"&&!process.versions.nw&&!(process.versions.electron&&process.type&&process.type!=="browser"),Wt=[1,0,0,1,0,0],E0=[.001,0,0,.001,0,0],Su=1e7,Qi=1.35,Cr=.35,R1=Cr/Qi,st={ANY:1,DISPLAY:2,PRINT:4,SAVE:8,ANNOTATIONS_FORMS:16,ANNOTATIONS_STORAGE:32,ANNOTATIONS_DISABLE:64,IS_EDITING:128,OPLIST:256};var TE="pdfjs_internal_editor_",bi={DISABLE:-1,NONE:0,FREETEXT:3,HIGHLIGHT:9,STAMP:13,INK:15};var N1={PRINT:4,MODIFY_CONTENTS:8,COPY:16,MODIFY_ANNOTATIONS:32,FILL_INTERACTIVE_FORMS:256,COPY_FOR_ACCESSIBILITY:512,ASSEMBLE:1024,PRINT_HIGH_QUALITY:2048},PE={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},Ke={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},Le={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},Ho={GROUP:"Group",REPLY:"R"},it={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512},Te={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864},Y0={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},WE={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"},Fu={WC:"WillClose",WS:"WillSave",DS:"DidSave",WP:"WillPrint",DP:"DidPrint"},Ru={O:"PageOpen",C:"PageClose"},Da={ERRORS:0,WARNINGS:1,INFOS:5},Br={NONE:0,BINARY:1},y={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,beginAnnotation:80,endAnnotation:81,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91,setStrokeTransparent:92,setFillTransparent:93},G1={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},Xg=Da.WARNINGS;function Nu(e){Number.isInteger(e)&&(Xg=e)}function Gu(){return Xg}function PA(e){Xg>=Da.INFOS&&console.log(`Info: ${e}`)}function k(e){Xg>=Da.WARNINGS&&console.log(`Warning: ${e}`)}function OA(e){throw new Error(e)}function gt(e,A){e||OA(A)}function Uu(e){switch(e==null?void 0:e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}function Qr(e,A=null,t=null){if(!e)return null;try{if(t&&typeof e=="string"){if(t.addDefaultProtocol&&e.startsWith("www.")){let s=e.match(/\\./g);(s==null?void 0:s.length)>=2&&(e=`http://${e}`)}if(t.tryConvertEncoding)try{e=ka(e)}catch(s){}}let i=A?new URL(e,A):new URL(e);if(Uu(i))return i}catch(i){}return null}function nA(e,A,t,i=!1){return Object.defineProperty(e,A,{value:t,enumerable:!i,configurable:!0,writable:!1}),t}var At=function(){function A(t,i){this.message=t,this.name=i}return A.prototype=new Error,A.constructor=A,A}(),bs=class extends At{constructor(A,t){super(A,"PasswordException"),this.code=t}},Ds=class extends At{constructor(A,t){super(A,"UnknownErrorException"),this.details=t}},ks=class extends At{constructor(A){super(A,"InvalidPDFException")}},Er=class extends At{constructor(A){super(A,"MissingPDFException")}},fr=class extends At{constructor(A,t){super(A,"UnexpectedResponseException"),this.status=t}},v=class extends At{constructor(A){super(A,"FormatError")}},ve=class extends At{constructor(A){super(A,"AbortException")}};function Qt(e){(typeof e!="object"||(e==null?void 0:e.length)===void 0)&&OA("Invalid argument for bytesToString");let A=e.length,t=8192;if(A>24&255,e>>16&255,e>>8&255,e&255)}function OE(e){return Object.keys(e).length}function Mu(){let e=new Uint8Array(4);return e[0]=1,new Uint32Array(e.buffer,0,1)[0]===1}function Lu(){try{return new Function(""),!0}catch(e){return!1}}var Ot=class{static get isLittleEndian(){return nA(this,"isLittleEndian",Mu())}static get isEvalSupported(){return nA(this,"isEvalSupported",Lu())}static get isOffscreenCanvasSupported(){return nA(this,"isOffscreenCanvasSupported",typeof OffscreenCanvas!="undefined")}static get platform(){return typeof navigator!="undefined"&&typeof(navigator==null?void 0:navigator.platform)=="string"?nA(this,"platform",{isMac:navigator.platform.includes("Mac")}):nA(this,"platform",{isMac:!1})}static get isCSSRoundSupported(){var A,t;return nA(this,"isCSSRoundSupported",(t=(A=globalThis.CSS)==null?void 0:A.supports)==null?void 0:t.call(A,"width: round(1.5px, 1px)"))}},ho=Array.from(Array(256).keys(),e=>e.toString(16).padStart(2,"0")),Es,zn,nn,Jo,Ce=class{static makeHexColor(A,t,i){return`#${ho[A]}${ho[t]}${ho[i]}`}static scaleMinMax(A,t){let i;A[0]?(A[0]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[0],t[2]*=A[0],A[3]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[3],t[3]*=A[3]):(i=t[0],t[0]=t[1],t[1]=i,i=t[2],t[2]=t[3],t[3]=i,A[1]<0&&(i=t[1],t[1]=t[3],t[3]=i),t[1]*=A[1],t[3]*=A[1],A[2]<0&&(i=t[0],t[0]=t[2],t[2]=i),t[0]*=A[2],t[2]*=A[2]),t[0]+=A[4],t[1]+=A[5],t[2]+=A[4],t[3]+=A[5]}static transform(A,t){return[A[0]*t[0]+A[2]*t[1],A[1]*t[0]+A[3]*t[1],A[0]*t[2]+A[2]*t[3],A[1]*t[2]+A[3]*t[3],A[0]*t[4]+A[2]*t[5]+A[4],A[1]*t[4]+A[3]*t[5]+A[5]]}static applyTransform(A,t){let i=A[0]*t[0]+A[1]*t[2]+t[4],s=A[0]*t[1]+A[1]*t[3]+t[5];return[i,s]}static applyInverseTransform(A,t){let i=t[0]*t[3]-t[1]*t[2],s=(A[0]*t[3]-A[1]*t[2]+t[2]*t[5]-t[4]*t[3])/i,a=(-A[0]*t[1]+A[1]*t[0]+t[4]*t[1]-t[5]*t[0])/i;return[s,a]}static getAxialAlignedBoundingBox(A,t){let i=this.applyTransform(A,t),s=this.applyTransform(A.slice(2,4),t),a=this.applyTransform([A[0],A[3]],t),n=this.applyTransform([A[2],A[1]],t);return[Math.min(i[0],s[0],a[0],n[0]),Math.min(i[1],s[1],a[1],n[1]),Math.max(i[0],s[0],a[0],n[0]),Math.max(i[1],s[1],a[1],n[1])]}static inverseTransform(A){let t=A[0]*A[3]-A[1]*A[2];return[A[3]/t,-A[1]/t,-A[2]/t,A[0]/t,(A[2]*A[5]-A[4]*A[3])/t,(A[4]*A[1]-A[5]*A[0])/t]}static singularValueDecompose2dScale(A){let t=[A[0],A[2],A[1],A[3]],i=A[0]*t[0]+A[1]*t[2],s=A[0]*t[1]+A[1]*t[3],a=A[2]*t[0]+A[3]*t[2],n=A[2]*t[1]+A[3]*t[3],r=(i+n)/2,g=Math.sqrt((i+n)**2-4*(i*n-a*s))/2,o=r+g||1,I=r-g||1;return[Math.sqrt(o),Math.sqrt(I)]}static normalizeRect(A){let t=A.slice(0);return A[0]>A[2]&&(t[0]=A[2],t[2]=A[0]),A[1]>A[3]&&(t[1]=A[3],t[3]=A[1]),t}static intersect(A,t){let i=Math.max(Math.min(A[0],A[2]),Math.min(t[0],t[2])),s=Math.min(Math.max(A[0],A[2]),Math.max(t[0],t[2]));if(i>s)return null;let a=Math.max(Math.min(A[1],A[3]),Math.min(t[1],t[3])),n=Math.min(Math.max(A[1],A[3]),Math.max(t[1],t[3]));return a>n?null:[i,a,s,n]}static bezierBoundingBox(A,t,i,s,a,n,r,g,o){return o?(o[0]=Math.min(o[0],A,r),o[1]=Math.min(o[1],t,g),o[2]=Math.max(o[2],A,r),o[3]=Math.max(o[3],t,g)):o=[Math.min(A,r),Math.min(t,g),Math.max(A,r),Math.max(t,g)],mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-A+3*(i-a)+r),6*(A-2*i+a),3*(i-A),o),mA(this,nn,Jo).call(this,A,i,a,r,t,s,n,g,3*(-t+3*(s-n)+g),6*(t-2*s+n),3*(s-t),o),o}};Es=new WeakSet,zn=function(A,t,i,s,a,n,r,g,o,I){if(o<=0||o>=1)return;let c=1-o,l=o*o,h=l*o,C=c*(c*(c*A+3*o*t)+3*l*i)+h*s,B=c*(c*(c*a+3*o*n)+3*l*r)+h*g;I[0]=Math.min(I[0],C),I[1]=Math.min(I[1],B),I[2]=Math.max(I[2],C),I[3]=Math.max(I[3],B)},nn=new WeakSet,Jo=function(A,t,i,s,a,n,r,g,o,I,c,l){if(Math.abs(o)<1e-12){Math.abs(I)>=1e-12&&mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,-c/I,l);return}let h=I**2-4*c*o;if(h<0)return;let C=Math.sqrt(h),B=2*o;mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I+C)/B,l),mA(this,Es,zn).call(this,A,t,i,s,a,n,r,g,(-I-C)/B,l)},HA(Ce,Es),HA(Ce,nn);var Hu=[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 jA(e){if(e[0]>="\\xEF"){let t;if(e[0]==="\\xFE"&&e[1]==="\\xFF"?(t="utf-16be",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xFF"&&e[1]==="\\xFE"?(t="utf-16le",e.length%2===1&&(e=e.slice(0,-1))):e[0]==="\\xEF"&&e[1]==="\\xBB"&&e[2]==="\\xBF"&&(t="utf-8"),t)try{let i=new TextDecoder(t,{fatal:!0}),s=Pe(e),a=i.decode(s);return a.includes("\\x1B")?a.replaceAll(/\\x1b[^\\x1b]*(?:\\x1b|$)/g,""):a}catch(i){k(`stringToPDFString: "${i}".`)}}let A=[];for(let t=0,i=e.length;tt?t.normalize("NFKC"):U1.get(i))}var Yu="pdfjs_internal_id_",_e={BEZIER_CURVE_TO:0,MOVE_TO:1,LINE_TO:2,QUADRATIC_CURVE_TO:3,RESTORE:4,SAVE:5,SCALE:6,TRANSFORM:7,TRANSLATE:8},Ku=Symbol("CIRCULAR_REF"),Ge=Symbol("EOF"),$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null);function vu(){$n=Object.create(null),Ar=Object.create(null),W0=Object.create(null)}var M=class{constructor(A){this.name=A}static get(A){return Ar[A]||(Ar[A]=new M(A))}},fe=class{constructor(A){this.cmd=A}static get(A){return $n[A]||($n[A]=new fe(A))}},ZE=function(){return ZE},F=class{constructor(A=null){this._map=Object.create(null),this.xref=A,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=ZE}assignXref(A){this.xref=A}get size(){return Object.keys(this._map).length}get(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetch(s,this.suppressEncryption):s}async getAsync(A,t,i){let s=this._map[A];return s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref?this.xref.fetchAsync(s,this.suppressEncryption):s}getArray(A,t,i){let s=this._map[A];if(s===void 0&&t!==void 0&&(s=this._map[t],s===void 0&&i!==void 0&&(s=this._map[i])),s instanceof oA&&this.xref&&(s=this.xref.fetch(s,this.suppressEncryption)),Array.isArray(s)){s=s.slice();for(let a=0,n=s.length;a{OA("Should not call `set` on the empty dictionary.")},nA(this,"empty",A)}static merge({xref:A,dictArray:t,mergeSubDicts:i=!1}){let s=new F(A),a=new Map;for(let n of t)if(n instanceof F)for(let[r,g]of Object.entries(n._map)){let o=a.get(r);if(o===void 0)o=[],a.set(r,o);else if(!i||!(g instanceof F))continue;o.push(g)}for(let[n,r]of a){if(r.length===1||!(r[0]instanceof F)){s._map[n]=r[0];continue}let g=new F(A);for(let o of r)for(let[I,c]of Object.entries(o._map))g._map[I]===void 0&&(g._map[I]=c);g.size>0&&(s._map[n]=g)}return a.clear(),s.size>0?s:F.empty}clone(){let A=new F(this.xref);for(let t of this.getKeys())A.set(t,this.getRaw(t));return A}delete(A){delete this._map[A]}},oA=class{constructor(A,t){this.num=A,this.gen=t}toString(){return this.gen===0?`${this.num}R`:`${this.num}R${this.gen}`}static fromString(A){let t=W0[A];if(t)return t;let i=/^(\\d+)R(\\d*)$/.exec(A);return!i||i[1]==="0"?null:W0[A]=new oA(parseInt(i[1]),i[2]?parseInt(i[2]):0)}static get(A,t){let i=t===0?`${A}R`:`${A}R${t}`;return W0[i]||(W0[i]=new oA(A,t))}},be=class{constructor(A=null){this._set=new Set(A==null?void 0:A._set)}has(A){return this._set.has(A.toString())}put(A){this._set.add(A.toString())}remove(A){this._set.delete(A.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}},mt=class{constructor(){this._map=new Map}get size(){return this._map.size}get(A){return this._map.get(A.toString())}has(A){return this._map.has(A.toString())}put(A,t){this._map.set(A.toString(),t)}putAlias(A,t){this._map.set(A.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}*items(){for(let[A,t]of this._map)yield[oA.fromString(A),t]}};function ye(e,A){return e instanceof M&&(A===void 0||e.name===A)}function Ne(e,A){return e instanceof fe&&(A===void 0||e.cmd===A)}function jE(e,A){return e instanceof F&&(A===void 0||ye(e.get("Type"),A))}function ur(e,A){return e.num===A.num&&e.gen===A.gen}var KA=class{get length(){OA("Abstract getter `length` accessed")}get isEmpty(){OA("Abstract getter `isEmpty` accessed")}get isDataLoaded(){return nA(this,"isDataLoaded",!0)}getByte(){OA("Abstract method `getByte` called")}getBytes(A){OA("Abstract method `getBytes` called")}async getImageData(A,t){return this.getBytes(A,t)}async asyncGetBytes(){OA("Abstract method `asyncGetBytes` called")}get isAsync(){return!1}get canAsyncDecodeImageFromBuffer(){return!1}peekByte(){let A=this.getByte();return A!==-1&&this.pos--,A}peekBytes(A){let t=this.getBytes(A);return this.pos-=t.length,t}getUint16(){let A=this.getByte(),t=this.getByte();return A===-1||t===-1?-1:(A<<8)+t}getInt32(){let A=this.getByte(),t=this.getByte(),i=this.getByte(),s=this.getByte();return(A<<24)+(t<<16)+(i<<8)+s}getByteRange(A,t){OA("Abstract method `getByteRange` called")}getString(A){return Qt(this.getBytes(A))}skip(A){this.pos+=A||1}reset(){OA("Abstract method `reset` called")}moveStart(){OA("Abstract method `moveStart` called")}makeSubStream(A,t,i=null){OA("Abstract method `makeSubStream` called")}getBaseStreams(){return null}},XE=/^[1-9]\\.\\d$/;function he(e){let A;return function(){return e&&(A=Object.create(null),e(A),e=null),A}}var ge=class extends At{constructor(A,t){super(`Missing data [${A}, ${t})`,"MissingDataException"),this.begin=A,this.end=t}},Sa=class extends At{constructor(A){super(A,"ParserEOFException")}},ti=class extends At{constructor(A){super(A,"XRefEntryException")}},Pi=class extends At{constructor(A){super(A,"XRefParseException")}};function VE(e){let A=e.length;if(A===0)return new Uint8Array(0);if(A===1)return new Uint8Array(e[0]);let t=0;for(let a=0;a0,"The number should be a positive integer.");let t=[],i;for(;e>=1e3;)e-=1e3,t.push("M");i=e/100|0,e%=100,t.push(Bo[i]),i=e/10|0,e%=10,t.push(Bo[10+i]),t.push(Bo[20+e]);let s=t.join("");return A?s.toLowerCase():s}function g1(e){return e<=0?0:Math.ceil(Math.log2(e))}function Di(e,A){return e[A]<<24>>24}function we(e,A){return e[A]<<8|e[A+1]}function le(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function pt(e){return e===32||e===9||e===13||e===10}function Tu(e,A){return Array.isArray(e)&&(A===null||e.length===A)&&e.every(t=>typeof t=="boolean")}function wt(e,A){return Array.isArray(e)?(A===null||e.length===A)&&e.every(t=>typeof t=="number"):ArrayBuffer.isView(e)&&(e.length===0||typeof e[0]=="number")&&(A===null||e.length===A)}function Ki(e,A){return wt(e,6)?e:A}function Ko(e,A){return wt(e,4)?e:A}function Ei(e,A){return wt(e,4)?Ce.normalizeRect(e):A}function _E(e){let A=/(.+)\\[(\\d+)\\]$/;return e.split(".").map(t=>{let i=t.match(A);return i?{name:i[1],pos:parseInt(i[2],10)}:{name:t,pos:0}})}function o1(e){let A=[],t=0;for(let i=0,s=e.length;i126||a===35||a===40||a===41||a===60||a===62||a===91||a===93||a===123||a===125||a===47||a===37)&&(tA===`\n`?"\\\\n":A==="\\r"?"\\\\r":`\\\\${A}`)}function dr(e,A,t,i){if(!e)return;let s=null;if(e instanceof oA){if(i.has(e))return;s=e,i.put(s),e=A.fetch(e)}if(Array.isArray(e))for(let a of e)dr(a,A,t,i);else if(e instanceof F){if(ye(e.get("S"),"JavaScript")){let a=e.get("JS"),n;a instanceof KA?n=a.getString():typeof a=="string"&&(n=a),n&&(n=jA(n).replaceAll("\\0","")),n&&t.push(n)}dr(e.getRaw("Next"),A,t,i)}s&&i.remove(s)}function Vg(e,A,t){let i=Object.create(null),s=Mt({dict:A,key:"AA",stopWhenFound:!1});if(s)for(let a=s.length-1;a>=0;a--){let n=s[a];if(n instanceof F)for(let r of n.getKeys()){let g=t[r];if(!g)continue;let o=n.getRaw(r),I=new be,c=[];dr(o,e,c,I),c.length>0&&(i[g]=c)}}if(A.has("A")){let a=A.get("A"),n=new be,r=[];dr(a,e,r,n),r.length>0&&(i.Action=r)}return OE(i)>0?i:null}var Pu={60:"<",62:">",38:"&",34:""",39:"'"};function*Wu(e){for(let A=0,t=e.length;A55295&&(i<57344||i>65533)&&A++,yield i}}function ls(e){let A=[],t=0;for(let i=0,s=e.length;i55295&&(a<57344||a>65533)&&i++,t=i+1}return A.length===0?e:(t: ${e}.`),!1;return!0}function Ou(e){let A="14",t="400",i=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:s,fontWeight:a,italicAngle:n}=e;if(!vo(s,!0))return!1;let r=a?a.toString():"";e.fontWeight=i.has(r)?r:t;let g=parseFloat(n);return e.italicAngle=isNaN(g)||g<-90||g>90?A:n.toString(),!0}function zE(e){let A=["app.launchURL","window.open","xfa.host.gotoURL"],i=new RegExp("^\\\\s*("+A.join("|").replaceAll(".","\\\\.")+`)\\\\((?:\'|")([^\'"]*)(?:\'|")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))`,"i").exec(e);if(i!=null&&i[2]){let s=i[2],a=!1;return i[3]==="true"&&i[1]==="app.launchURL"&&(a=!0),{url:s,newWindow:a}}return null}function Ae(e){if(Number.isInteger(e))return e.toString();let A=Math.round(e*100);return A%100===0?(A/100).toString():A%10===0?e.toFixed(1):e.toFixed(2)}function $E(e){if(!e)return null;let A=new Map;for(let[t,i]of e){if(!t.startsWith(TE))continue;let s=A.get(i.pageIndex);s||(s=[],A.set(i.pageIndex,s)),s.push(i)}return A.size>0?A:null}function ii(e){return Zu(e)?e:Af(e,!0)}function Zu(e){return/^[\\x00-\\x7F]*$/.test(e)}function ju(e){let A=[];for(let t=0,i=e.length;t>8&255).toString(16).padStart(2,"0"),(s&255).toString(16).padStart(2,"0"))}return A.join("")}function Af(e,A=!1){let t=[];A&&t.push("\\xFE\\xFF");for(let i=0,s=e.length;i>8&255),String.fromCharCode(a&255))}return t.join("")}function xr(e,A,t){switch(e){case 90:return[0,1,-1,0,A,0];case 180:return[-1,0,0,-1,A,t];case 270:return[0,-1,1,0,0,t];default:throw new Error("Invalid rotation")}}function M1(e){return Math.ceil(Math.ceil(Math.log2(1+e))/8)}var Ie=class extends KA{constructor(A,t,i,s){super(),this.bytes=A instanceof Uint8Array?A:new Uint8Array(A),this.start=t||0,this.pos=this.start,this.end=t+i||this.bytes.length,this.dict=s}get length(){return this.end-this.start}get isEmpty(){return this.length===0}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return t.subarray(i,s);let a=i+A;return a>s&&(a=s),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),this.bytes.subarray(A,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(A,t,i=null){return new Ie(this.bytes.buffer,A,t,i)}},It=class extends Ie{constructor(A){super(Pe(A))}},Rs=class extends Ie{constructor(){super(new Uint8Array(0))}},qo=class extends Ie{constructor(A,t,i){super(new Uint8Array(A),0,A,null),this.chunkSize=t,this._loadedChunks=new Set,this.numChunks=Math.ceil(A/t),this.manager=i,this.progressiveDataLength=0,this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){let A=[];for(let t=0,i=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let a=i;athis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new ge(A,A+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(A,t){if(A>=t||t<=this.progressiveDataLength)return;let i=Math.floor(A/this.chunkSize);if(i>this.numChunks)return;let s=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let a=i;a=this.end?-1:(A>=this.progressiveDataLength&&this.ensureByte(A),this.bytes[this.pos++])}getBytes(A){let t=this.bytes,i=this.pos,s=this.end;if(!A)return s>this.progressiveDataLength&&this.ensureRange(i,s),t.subarray(i,s);let a=i+A;return a>s&&(a=s),a>this.progressiveDataLength&&this.ensureRange(i,a),this.pos=a,t.subarray(i,a)}getByteRange(A,t){return A<0&&(A=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(A,t),this.bytes.subarray(A,t)}makeSubStream(A,t,i=null){t?A+t>this.progressiveDataLength&&this.ensureRange(A,A+t):A>=this.progressiveDataLength&&this.ensureByte(A);function s(){}s.prototype=Object.create(this),s.prototype.getMissingChunks=function(){let n=this.chunkSize,r=Math.floor(this.start/n),g=Math.floor((this.end-1)/n)+1,o=[];for(let I=r;I{let g=({value:o,done:I})=>{try{if(I){let c=VE(s);s=null,n(c);return}a+=o.byteLength,i.isStreamingSupported&&this.onProgress({loaded:a}),s.push(o),i.read().then(g,r)}catch(c){r(c)}};i.read().then(g,r)}).then(n=>{this.aborted||this.onReceiveData({chunk:n,begin:A})})}requestAllChunks(A=!1){if(!A){let t=this.stream.getMissingChunks();this._requestChunks(t)}return this._loadedStreamCapability.promise}_requestChunks(A){let t=this.currRequestId++,i=new Set;this._chunksNeededByRequest.set(t,i);for(let n of A)this.stream.hasChunk(n)||i.add(n);if(i.size===0)return Promise.resolve();let s=Promise.withResolvers();this._promisesByRequest.set(t,s);let a=[];for(let n of i){let r=this._requestsByChunk.get(n);r||(r=[],this._requestsByChunk.set(n,r),a.push(n)),r.push(t)}if(a.length>0){let n=this.groupChunks(a);for(let r of n){let g=r.beginChunk*this.chunkSize,o=Math.min(r.endChunk*this.chunkSize,this.length);this.sendRequest(g,o).catch(s.reject)}}return s.promise.catch(n=>{if(!this.aborted)throw n})}getStream(){return this.stream}requestRange(A,t){t=Math.min(t,this.length);let i=this.getBeginChunk(A),s=this.getEndChunk(t),a=[];for(let n=i;n=0&&s+1!==r&&(t.push({beginChunk:i,endChunk:s+1}),i=r),a+1===A.length&&t.push({beginChunk:i,endChunk:r+1}),s=r}return t}onProgress(A){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+A.loaded,total:this.length})}onReceiveData(A){let t=A.chunk,i=A.begin===void 0,s=i?this.progressiveDataLength:A.begin,a=s+t.byteLength,n=Math.floor(s/this.chunkSize),r=a0)&&g.push(c)}}}if(!this.disableAutoFetch&&this._requestsByChunk.size===0){let o;if(this.stream.numChunksLoaded===1){let I=this.stream.numChunks-1;this.stream.hasChunk(I)||(o=I)}else o=this.stream.nextEmptyChunk(r);Number.isInteger(o)&&this._requestChunks([o])}for(let o of g){let I=this._promisesByRequest.get(o);this._promisesByRequest.delete(o),I.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(A){this._loadedStreamCapability.reject(A)}getBeginChunk(A){return Math.floor(A/this.chunkSize)}getEndChunk(A){return Math.floor((A-1)/this.chunkSize)+1}abort(A){var t;this.aborted=!0,(t=this.pdfNetworkStream)==null||t.cancelAllRequests(A);for(let i of this._promisesByRequest.values())i.reject(A)}};function Xu(e,A,t,i,s,a,n){n=n!==1?0:n;let g=t/s,o=i/a,I=0,c,l=new Uint16Array(s),h=t*3;for(let C=0;Cl&&this.name!=="DeviceGray"&&this.name!=="DeviceRGB"){let C=r<=8?new Uint8Array(l):new Uint16Array(l);for(let Q=0;Q=.99554525?1:mA(this,Hi,Z0).call(this,0,1,(1+.055)*t**(1/2.4)-.055)},Hi=new WeakSet,Z0=function(t,i,s){return Math.max(t,Math.min(i,s))},Ji=new WeakSet,j0=function(t){return t<0?-mA(this,Ji,j0).call(this,-t):t>8?((t+16)/116)**3:t*ne(je,kg)},Rg=new WeakSet,sf=function(t,i,s){if(t[0]===0&&t[1]===0&&t[2]===0){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=mA(this,Ji,j0).call(this,0),n=a,r=mA(this,Ji,j0).call(this,t[0]),g=a,o=mA(this,Ji,j0).call(this,t[1]),I=a,c=mA(this,Ji,j0).call(this,t[2]),l=(1-n)/(1-r),h=1-l,C=(1-g)/(1-o),B=1-C,Q=(1-I)/(1-c),E=1-Q;s[0]=i[0]*l+h,s[1]=i[1]*C+B,s[2]=i[2]*Q+E},Ng=new WeakSet,af=function(t,i,s){if(t[0]===1&&t[2]===1){s[0]=i[0],s[1]=i[1],s[2]=i[2];return}let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Sg,ef).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},Gg=new WeakSet,nf=function(t,i,s){let a=s;mA(this,Li,O0).call(this,ne(je,on),i,a);let n=ne(je,cn);mA(this,Fg,tf).call(this,t,a,n),mA(this,Li,O0).call(this,ne(je,In),n,s)},hn=new WeakSet,$o=function(t,i,s,a,n){let r=mA(this,Hi,Z0).call(this,0,1,t[i]*n),g=mA(this,Hi,Z0).call(this,0,1,t[i+1]*n),o=mA(this,Hi,Z0).call(this,0,1,t[i+2]*n),I=r===1?1:r**this.GR,c=g===1?1:g**this.GG,l=o===1?1:o**this.GB,h=this.MXA*I+this.MXB*c+this.MXC*l,C=this.MYA*I+this.MYB*c+this.MYC*l,B=this.MZA*I+this.MZB*c+this.MZC*l,Q=ne(je,fs);Q[0]=h,Q[1]=C,Q[2]=B;let E=ne(je,ln);mA(this,Ng,af).call(this,this.whitePoint,Q,E);let f=ne(je,fs);mA(this,Rg,sf).call(this,this.blackPoint,E,f);let u=ne(je,ln);mA(this,Gg,nf).call(this,ne(je,Dg),f,u);let d=ne(je,fs);mA(this,Li,O0).call(this,ne(je,bg),u,d),s[a]=mA(this,us,er).call(this,d[0])*255,s[a+1]=mA(this,us,er).call(this,d[1])*255,s[a+2]=mA(this,us,er).call(this,d[2])*255},HA(vt,on,new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296])),HA(vt,In,new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867])),HA(vt,bg,new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252])),HA(vt,Dg,new Float32Array([1,1,1])),HA(vt,cn,new Float32Array(3)),HA(vt,fs,new Float32Array(3)),HA(vt,ln,new Float32Array(3)),HA(vt,kg,((8+16)/116)**3/8);var ds,tr,xs,ir,Cn,eI,AI=class extends JA{constructor(t,i,s){super("Lab",3);HA(this,ds);HA(this,xs);HA(this,Cn);if(!t)throw new v("WhitePoint missing - required for color space Lab");if([this.XW,this.YW,this.ZW]=t,[this.amin,this.amax,this.bmin,this.bmax]=s||[-100,100,-100,100],[this.XB,this.YB,this.ZB]=i||[0,0,0],this.XW<0||this.ZW<0||this.YW!==1)throw new v("Invalid WhitePoint components, no fallback available");(this.XB<0||this.YB<0||this.ZB<0)&&(PA("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0),(this.amin>this.amax||this.bmin>this.bmax)&&(PA("Invalid Range, falling back to defaults"),this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100)}getRgbItem(t,i,s,a){mA(this,Cn,eI).call(this,t,i,!1,s,a)}getRgbBuffer(t,i,s,a,n,r,g){let o=(1<=6/29?t**3:108/841*(t-4/29)},xs=new WeakSet,ir=function(t,i,s,a){return s+t*(a-s)/i},Cn=new WeakSet,eI=function(t,i,s,a,n){let r=t[i],g=t[i+1],o=t[i+2];s!==!1&&(r=mA(this,xs,ir).call(this,r,s,0,100),g=mA(this,xs,ir).call(this,g,s,this.amin,this.amax),o=mA(this,xs,ir).call(this,o,s,this.bmin,this.bmax)),g>this.amax?g=this.amax:gthis.bmax?o=this.bmax:o>>0}function Nn(e,A){return A===1?String.fromCharCode(e[0],e[1]):A===3?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,A+1))}function tt(e,A,t){let i=0;for(let s=t;s>=0;s--)i+=e[s]+A[s],e[s]=i&255,i>>=8}function e0(e,A){let t=1;for(let i=A;i>=0&&t>0;i--)t+=e[i],e[i]=t&255,t>>=8}var K0=16,Vu=19,tI=class{constructor(A){this.buffer=A,this.pos=0,this.end=A.length,this.tmpBuf=new Uint8Array(Vu)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let A=0,t;do{let i=this.readByte();if(i<0)throw new v("unexpected EOF in bcmap");t=!(i&128),A=A<<7|i&127}while(!t);return A}readSigned(){let A=this.readNumber();return A&1?~(A>>>1):A>>>1}readHex(A,t){A.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}readHexNumber(A,t){let i,s=this.tmpBuf,a=0;do{let o=this.readByte();if(o<0)throw new v("unexpected EOF in bcmap");i=!(o&128),s[a++]=o&127}while(!i);let n=t,r=0,g=0;for(;n>=0;){for(;g<8&&s.length>0;)r|=s[--a]<>=8,g-=8}}readHexSigned(A,t){this.readHexNumber(A,t);let i=A[t]&1?255:0,s=0;for(let a=0;a<=t;a++)s=(s&1)<<8|A[a],A[a]=s>>1^i}readString(){let A=this.readNumber(),t=new Array(A);for(let i=0;i=0;){let C=h>>5;if(C===7){switch(h&31){case 0:s.readString();break;case 1:n=s.readString();break}continue}let B=!!(h&16),Q=h&15;if(Q+1>K0)throw new Error("BinaryCMapReader.process: Invalid dataSize.");let E=1,f=s.readNumber();switch(C){case 0:s.readHex(r,Q),s.readHexNumber(g,Q),tt(g,r,Q),t.addCodespaceRange(Q+1,Ze(r,Q),Ze(g,Q));for(let u=1;ua&&(s=a)}else{for(;!this.eof;)this.readBlock(t);s=this.bufferLength}return this.pos=s,this.buffer.subarray(i,s)}async getImageData(A,t=null){if(!this.canAsyncDecodeImageFromBuffer)return this.getBytes(A,t);let i=await this.stream.asyncGetBytes();return this.decodeImage(i,t)}reset(){this.pos=0}makeSubStream(A,t,i=null){if(t===void 0)for(;!this.eof;)this.readBlock();else{let s=A+t;for(;this.bufferLength<=s&&!this.eof;)this.readBlock()}return new Ie(this.buffer,A,t,i)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}},sI=class extends Me{constructor(A,t=null){let i=0;for(let s of A)i+=s instanceof Me?s._rawMinBufferLength:s.length;super(i),this.streams=A,this._onError=t}readBlock(){var r;let A=this.streams;if(A.length===0){this.eof=!0;return}let t=A.shift(),i;try{i=t.getBytes()}catch(g){if(this._onError){this._onError(g,(r=t.dict)==null?void 0:r.objId);return}throw g}let s=this.bufferLength,a=s+i.length;this.ensureBuffer(a).set(i,s),this.bufferLength=a}getBaseStreams(){let A=[];for(let t of this.streams){let i=t.getBaseStreams();i&&A.push(...i)}return A.length>0?A:null}},aI=class extends Me{constructor(A,t){t&&(t*=.8),super(t),this.str=A,this.dict=A.dict,this.input=new Uint8Array(5)}readBlock(){let s=this.str,a=s.getByte();for(;pt(a);)a=s.getByte();if(a===-1||a===126){this.eof=!0;return}let n=this.bufferLength,r,g;if(a===122){for(r=this.ensureBuffer(n+4),g=0;g<4;++g)r[n+g]=0;this.bufferLength+=4}else{let o=this.input;for(o[0]=a,g=1;g<5;++g){for(a=s.getByte();pt(a);)a=s.getByte();if(o[g]=a,a===-1||a===126)break}if(r=this.ensureBuffer(n+g-1),this.bufferLength+=g-1,g<5){for(;g<5;++g)o[g]=33+84;this.eof=!0}let I=0;for(g=0;g<5;++g)I=I*85+(o[g]-33);for(g=3;g>=0;--g)r[n+g]=I&255,I>>=8}}},nI=class extends Me{constructor(A,t){t&&(t*=.5),super(t),this.str=A,this.dict=A.dict,this.firstDigit=-1}readBlock(){let t=this.str.getBytes(8e3);if(!t.length){this.eof=!0;return}let i=t.length+1>>1,s=this.ensureBuffer(this.bufferLength+i),a=this.bufferLength,n=this.firstDigit;for(let r of t){let g;if(r>=48&&r<=57)g=r&15;else if(r>=65&&r<=70||r>=97&&r<=102)g=(r&15)+9;else if(r===62){this.eof=!0;break}else continue;n<0?n=g:(s[a++]=n<<4|g,n=-1)}n>=0&&this.eof&&(s[a++]=n<<4,n=-1),this.firstDigit=n,this.bufferLength=a}},rI=-2,gi=-1,Ii=0,He=1,kA=2,Je=3,Ye=4,gI=5,oI=6,rf=7,gf=8,L1=[[-1,-1],[-1,-1],[7,gf],[7,rf],[6,oI],[6,oI],[6,gI],[6,gI],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[4,Ii],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,He],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Ye],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[3,Je],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA],[1,kA]],H1=[[-1,-1],[12,rI],[-1,-1],[-1,-1],[-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]],J1=[[-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]],Y1=[[-1,-1],[-1,-1],[12,rI],[12,rI],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-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]],K1=[[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]],v1=[[-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]],pr=class{constructor(A,t={}){var s;if(!A||typeof A.next!="function")throw new Error(\'CCITTFaxDecoder - invalid "source" parameter.\');this.source=A,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=(s=t.EndOfBlock)!=null?s:!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 i;for(;(i=this._lookBits(12))===0;)this._eatBits(1);i===1&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}readNextChar(){if(this.eof)return-1;let A=this.refLine,t=this.codingLine,i=this.columns,s,a,n,r;if(this.outputBits===0){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;this.err=!1;let o,I,c;if(this.nextLine2D){for(r=0;t[r]=64);do I+=c=this._getWhiteCode();while(c>=64)}else{do o+=c=this._getWhiteCode();while(c>=64);do I+=c=this._getBlackCode();while(c>=64)}for(this._addPixels(t[this.codingPos]+o,a),t[this.codingPos]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]0?--s:++s;A[s]<=t[this.codingPos]&&A[s]=64);else do o+=c=this._getWhiteCode();while(c>=64);this._addPixels(t[this.codingPos]+o,a),a^=1}let l=!1;if(this.byteAlign&&(this.inputBits&=-8),!this.eoblock&&this.row===this.rows-1)this.rowsDone=!0;else{if(o=this._lookBits(12),this.eoline)for(;o!==gi&&o!==1;)this._eatBits(1),o=this._lookBits(12);else for(;o===0;)this._eatBits(1),o=this._lookBits(12);o===1?(this._eatBits(12),l=!0):o===gi&&(this.eof=!0)}if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&l&&this.byteAlign){if(o=this._lookBits(12),o===1){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(r=0;r<4;++r)o=this._lookBits(12),o!==1&&PA("bad rtc code: "+o),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if(o=this._lookBits(13),o===gi)return this.eof=!0,-1;if(o>>1===1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(o&1))}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1],this.row++}let g;if(this.outputBits>=8)g=this.codingPos&1?0:255,this.outputBits-=8,this.outputBits===0&&t[this.codingPos]n?(g<<=n,this.codingPos&1||(g|=255>>8-n),this.outputBits-=n,n=0):(g<<=this.outputBits,this.codingPos&1||(g|=255>>8-this.outputBits),n-=this.outputBits,this.outputBits=0,t[this.codingPos]0&&(g<<=n,n=0))}while(n)}return this.black&&(g^=255),g}_addPixels(A,t){let i=this.codingLine,s=this.codingPos;A>i[s]&&(A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A),this.codingPos=s}_addPixelsNeg(A,t){let i=this.codingLine,s=this.codingPos;if(A>i[s])A>this.columns&&(PA("row is wrong length"),this.err=!0,A=this.columns),s&1^t&&++s,i[s]=A;else if(A0&&A=a){let g=i[r-a];if(g[0]===n)return this._eatBits(n),[!0,g[1],!0]}}return[!1,0,!1]}_getTwoDimCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(7),t=L1[A],(t==null?void 0:t[0])>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,7,L1);if(i[0]&&i[2])return i[1]}return PA("Bad two dim code"),gi}_getWhiteCode(){let A=0,t;if(this.eoblock){if(A=this._lookBits(12),A===gi)return 1;if(t=A>>5?J1[A>>3]:H1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(1,9,J1);if(i[0]||(i=this._findTableCode(11,12,H1),i[0]))return i[1]}return PA("bad white code"),this._eatBits(1),1}_getBlackCode(){let A,t;if(this.eoblock){if(A=this._lookBits(13),A===gi)return 1;if(A>>7?!(A>>9)&&A>>7?t=K1[(A>>1)-64]:t=v1[A>>7]:t=Y1[A],t[0]>0)return this._eatBits(t[0]),t[1]}else{let i=this._findTableCode(2,6,v1);if(i[0]||(i=this._findTableCode(7,12,K1,64),i[0])||(i=this._findTableCode(10,13,Y1),i[0]))return i[1]}return PA("bad black code"),this._eatBits(1),1}_lookBits(A){let t;for(;this.inputBits>16-A;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-A&65535>>16-A}_eatBits(A){(this.inputBits-=A)<0&&(this.inputBits=0)}},II=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,i instanceof F||(i=F.empty);let s={next(){return A.getByte()}};this.ccittFaxDecoder=new pr(s,{K:i.get("K"),EndOfLine:i.get("EndOfLine"),EncodedByteAlign:i.get("EncodedByteAlign"),Columns:i.get("Columns"),Rows:i.get("Rows"),EndOfBlock:i.get("EndOfBlock"),BlackIs1:i.get("BlackIs1")})}readBlock(){for(;!this.eof;){let A=this.ccittFaxDecoder.readNextChar();if(A===-1){this.eof=!0;return}this.ensureBuffer(this.bufferLength+1),this.buffer[this.bufferLength++]=A}}},q1=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),zu=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]),$u=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]),Ad=[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],ed=[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],Yi,X0,wr=class extends Me{constructor(t,i){super(i);HA(this,Yi);this.str=t,this.dict=t.dict;let s=t.getByte(),a=t.getByte();if(s===-1||a===-1)throw new v(`Invalid header in flate stream: ${s}, ${a}`);if((s&15)!==8)throw new v(`Unknown compression method in flate stream: ${s}, ${a}`);if(((s<<8)+a)%31!==0)throw new v(`Bad FCHECK in flate stream: ${s}, ${a}`);if(a&32)throw new v(`FDICT bit set in flate stream: ${s}, ${a}`);this.codeSize=0,this.codeBuf=0}async getImageData(t,i){let s=await this.asyncGetBytes();return(s==null?void 0:s.subarray(0,t))||this.getBytes(t)}async asyncGetBytes(){this.str.reset();let t=this.str.getBytes();try{let{readable:i,writable:s}=new DecompressionStream("deflate"),a=s.getWriter();a.write(t),a.close();let n=[],r=0;for await(let I of i)n.push(I),r+=I.byteLength;let g=new Uint8Array(r),o=0;for(let I of n)g.set(I,o),o+=I.byteLength;return g}catch(i){return this.str=new Ie(t,2,t.length,this.str.dict),this.reset(),null}}get isAsync(){return!0}getBits(t){let i=this.str,s=this.codeSize,a=this.codeBuf,n;for(;s>t,this.codeSize=s-=t,n}getCode(t){let i=this.str,s=t[0],a=t[1],n=this.codeSize,r=this.codeBuf,g;for(;n>16,c=o&65535;if(I<1||n>I,this.codeSize=n-I,c}generateHuffmanTable(t){let i=t.length,s=0,a;for(a=0;as&&(s=t[a]);let n=1<>=1;for(a=l;a>=1,i===0){let I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let c=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(c|=I<<8,(I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}let l=I;if((I=a.getByte())===-1){mA(this,Yi,X0).call(this,"Bad block header in flate stream");return}if(l|=I<<8,l!==(~c&65535)&&(c!==0||l!==0))throw new v("Bad uncompressed block length in flate stream");this.codeBuf=0,this.codeSize=0;let h=this.bufferLength,C=h+c;if(t=this.ensureBuffer(C),this.bufferLength=C,c===0)a.peekByte()===-1&&(this.eof=!0);else{let B=a.getBytes(c);t.set(B,h),B.length0;)E[C++]=d}n=this.generateHuffmanTable(E.subarray(0,I)),r=this.generateHuffmanTable(E.subarray(I,Q))}else throw new v("Unknown block type in flate stream");t=this.buffer;let g=t?t.length:0,o=this.bufferLength;for(;;){let I=this.getCode(n);if(I<256){o+1>=g&&(t=this.ensureBuffer(o+1),g=t.length),t[o++]=I;continue}if(I===256){this.bufferLength=o;return}I-=257,I=zu[I];let c=I>>16;c>0&&(c=this.getBits(c)),s=(I&65535)+c,I=this.getCode(r),I=$u[I],c=I>>16,c>0&&(c=this.getBits(c));let l=(I&65535)+c;o+s>=g&&(t=this.ensureBuffer(o+s),g=t.length);for(let h=0;h>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}byteIn(){let A=this.data,t=this.bp;A[t]===255?A[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=A[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}readBit(A,t){let i=A[t]>>1,s=A[t]&1,a=td[i],n=a.qe,r,g=this.a-n;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--;while(!(g&32768));return this.a=g,A[t]=i<<1|s,r}},oe=class extends At{constructor(A){super(A,"Jbig2Error")}},lI=class{getContexts(A){return A in this?this[A]:this[A]=new Int8Array(1<<16)}},g0=class{constructor(A,t,i){this.data=A,this.start=t,this.end=i}get decoder(){let A=new cI(this.data,this.start,this.end);return nA(this,"decoder",A)}get contextCache(){let A=new lI;return nA(this,"contextCache",A)}},id=2**31-1,sd=-(2**31);function Xe(e,A,t){let i=e.getContexts(A),s=1;function a(o){let I=0;for(let c=0;c>>0}let n=a(1),r=a(1)?a(1)?a(1)?a(1)?a(1)?a(32)+4436:a(12)+340:a(8)+84:a(6)+20:a(4)+4:a(2),g;return n===0?g=r:r>0&&(g=-r),g>=sd&&g<=id?g:null}function of(e,A,t){let i=e.getContexts("IAID"),s=1;for(let a=0;a=D&&R=S)for(IA=IA<<1&C,u=0;u=0&&tA=0&&(QA=K[_][tA],QA&&(IA|=QA<=e?Z<<=1:Z=Z<<1|x[U][K];for(h=0;h=u||K<0||K>=f?Z<<=1:Z=Z<<1|i[U][K];let AA=p.readBit(m,Z);w[Y]=AA}}return x}function od(e,A,t,i,s,a,n,r,g,o,I,c){if(e&&A)throw new oe("symbol refinement with Huffman is not supported");let l=[],h=0,C=g1(t.length+i),B=I.decoder,Q=I.contextCache,E,f;for(e&&(E=vi(1),f=[],C=Math.max(C,1));l.length1)Z=cf(e,A,w,h,0,AA,1,t.concat(l),C,0,0,1,0,a,g,o,I,0,c);else{let gA=of(Q,B,C),R=Xe(Q,"IARDX",B),_=Xe(Q,"IARDY",B),tA=gA1&&(K=e?f.readBits(E):Xe(m,"IAIT",p));let Z=n*D+K,AA=e?h.symbolIDTable.decode(f):of(m,p,g),gA=A&&(e?f.readBit():Xe(m,"IARI",p)),R=r[AA],_=R[0].length,tA=R.length;if(gA){let N=Xe(m,"IARDW",p),H=Xe(m,"IARDH",p),q=Xe(m,"IARDX",p),T=Xe(m,"IARDY",p);_+=N,tA+=H,R=If(_,tA,C,R,(N>>1)+q,(H>>1)+T,!1,B,Q)}let IA=0;o?c&1?IA=tA-1:U+=tA-1:c>1?U+=_-1:IA=_-1;let QA=Z-(c&1?0:tA-1),V=U-(c&2?_-1:0),lA,EA,fA;if(o)for(lA=0;lA=0;E--)e?U=I1(Y,g,o,!0):U=_g(!1,g,o,t,!1,null,S,C),w[E]=U;let K,Z,AA,gA,R,_,tA,IA,QA;for(K=0;K=0;f--)AA^=w[f][K][Z],gA|=AA<>8,tA=c+K*l-Z*h>>8,_>=0&&_+p<=i&&tA>=0&&tA+m<=s)for(E=0;E=s))for(QA=Q[lA],IA=R[E],f=0;f=0&&V>5&7,g=[n&31],o=A+6;if(n===7){r=le(e,o-1)&536870911,o+=3;let C=r+7>>3;for(g[0]=e[o++];--C>0;)g.push(e[o++])}else if(n===5||n===6)throw new oe("invalid referred-to flags");t.retainBits=g;let I=4;t.number<=256?I=1:t.number<=65536&&(I=2);let c=[],l,h;for(l=0;l>>24&255,f[3]=C.height>>16&255,f[4]=C.height>>8&255,f[5]=C.height&255,l=o,h=e.length;l>2&3,c.huffmanDWSelector=l>>4&3,c.bitmapSizeSelector=l>>6&1,c.aggregationInstancesSelector=l>>7&1,c.bitmapCodingContextUsed=!!(l&256),c.bitmapCodingContextRetained=!!(l&512),c.template=l>>10&3,c.refinementTemplate=l>>12&1,a+=2,!c.huffman){for(o=c.template===0?4:1,r=[],g=0;g>2&3,h.stripSize=1<>4&3,h.transposed=!!(C&64),h.combinationOperator=C>>7&3,h.defaultPixelValue=C>>9&1,h.dsOffset=C<<17>>27,h.refinementTemplate=C>>15&1,h.huffman){let m=we(i,a);a+=2,h.huffmanFS=m&3,h.huffmanDS=m>>2&3,h.huffmanDT=m>>4&3,h.huffmanRefinementDW=m>>6&3,h.huffmanRefinementDH=m>>8&3,h.huffmanRefinementDX=m>>10&3,h.huffmanRefinementDY=m>>12&3,h.huffmanRefinementSizeSelector=!!(m&16384)}if(h.refinement&&!h.refinementTemplate){for(r=[],g=0;g<2;g++)r.push({x:Di(i,a),y:Di(i,a+1)}),a+=2;h.refinementAt=r}h.numberOfSymbolInstances=le(i,a),a+=4,n=[h,t.referredTo,i,a,s];break;case 16:let B={},Q=i[a++];B.mmr=!!(Q&1),B.template=Q>>1&3,B.patternWidth=i[a++],B.patternHeight=i[a++],B.maxPatternIndex=le(i,a),a+=4,n=[B,t.number,i,a,s];break;case 22:case 23:let E={};E.info=sr(i,a),a+=ar;let f=i[a++];E.mmr=!!(f&1),E.template=f>>1&3,E.enableSkip=!!(f&8),E.combinationOperator=f>>4&7,E.defaultPixelValue=f>>7&1,E.gridWidth=le(i,a),a+=4,E.gridHeight=le(i,a),a+=4,E.gridOffsetX=le(i,a)&4294967295,a+=4,E.gridOffsetY=le(i,a)&4294967295,a+=4,E.gridVectorX=we(i,a),a+=2,E.gridVectorY=we(i,a),a+=2,n=[E,t.referredTo,i,a,s];break;case 38:case 39:let u={};u.info=sr(i,a),a+=ar;let d=i[a++];if(u.mmr=!!(d&1),u.template=d>>1&3,u.prediction=!!(d&8),!u.mmr){for(o=u.template===0?4:1,r=[],g=0;g>2&1,x.combinationOperator=p>>3&3,x.requiresBuffer=!!(p&32),x.combinationOperatorOverride=!!(p&64),n=[x];break;case 49:break;case 50:break;case 51:break;case 53:n=[t.number,i,a,s];break;case 62:break;default:throw new oe(`segment type ${t.typeName}(${t.type}) is not implemented`)}let I="on"+t.typeName;I in A&&A[I].apply(A,n)}function Bd(e,A){for(let t=0,i=e.length;t>3,i=new Uint8ClampedArray(t*A.height);A.defaultPixelValue&&i.fill(255),this.buffer=i}drawBitmap(A,t){let i=this.currentPageInfo,s=A.width,a=A.height,n=i.width+7>>3,r=i.combinationOperatorOverride?A.combinationOperator:i.combinationOperator,g=this.buffer,o=128>>(A.x&7),I=A.y*n+(A.x>>3),c,l,h,C;switch(r){case 0:for(c=0;c>=1,h||(h=128,C++);I+=n}break;case 2:for(c=0;c>=1,h||(h=128,C++);I+=n}break;default:throw new oe(`operator ${r} is not supported`)}}onImmediateGenericRegion(A,t,i,s){let a=A.info,n=new g0(t,i,s),r=_g(A.mmr,a.width,a.height,A.template,A.prediction,null,A.at,n);this.drawBitmap(a,r)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(A,t,i,s,a,n){let r,g;A.huffman&&(r=ud(A,i,this.customTables),g=new w0(s,a,n));let o=this.symbols;o||(this.symbols=o={});let I=[];for(let l of i){let h=o[l];h&&I.push(...h)}let c=new g0(s,a,n);o[t]=od(A.huffman,A.refinement,I,A.numberOfNewSymbols,A.numberOfExportedSymbols,r,A.template,A.at,A.refinementTemplate,A.refinementAt,c,g)}onImmediateTextRegion(A,t,i,s,a){let n=A.info,r,g,o=this.symbols,I=[];for(let C of t){let B=o[C];B&&I.push(...B)}let c=g1(I.length);A.huffman&&(g=new w0(i,s,a),r=fd(A,t,this.customTables,I.length,g));let l=new g0(i,s,a),h=cf(A.huffman,A.refinement,n.width,n.height,A.defaultPixelValue,A.numberOfSymbolInstances,A.stripSize,I,c,A.transposed,A.dsOffset,A.referenceCorner,A.combinationOperator,r,A.refinementTemplate,A.refinementAt,l,A.logStripSize,g);this.drawBitmap(n,h)}onImmediateLosslessTextRegion(){this.onImmediateTextRegion(...arguments)}onPatternDictionary(A,t,i,s,a){let n=this.patterns;n||(this.patterns=n={});let r=new g0(i,s,a);n[t]=Id(A.mmr,A.patternWidth,A.patternHeight,A.maxPatternIndex,A.template,r)}onImmediateHalftoneRegion(A,t,i,s,a){let n=this.patterns[t[0]],r=A.info,g=new g0(i,s,a),o=cd(A.mmr,n,A.template,r.width,r.height,A.defaultPixelValue,A.enableSkip,A.combinationOperator,A.gridWidth,A.gridHeight,A.gridOffsetX,A.gridOffsetY,A.gridVectorX,A.gridVectorY,g);this.drawBitmap(r,o)}onImmediateLosslessHalftoneRegion(){this.onImmediateHalftoneRegion(...arguments)}onTables(A,t,i,s){let a=this.customTables;a||(this.customTables=a={}),a[A]=Ed(t,i,s)}},si=class{constructor(A){A.length===2?(this.isOOB=!0,this.rangeLow=0,this.prefixLength=A[0],this.rangeLength=0,this.prefixCode=A[1],this.isLowerRange=!1):(this.isOOB=!1,this.rangeLow=A[0],this.prefixLength=A[1],this.rangeLength=A[2],this.prefixCode=A[3],this.isLowerRange=A[4]==="lower")}},Ns=class{constructor(A){this.children=[],A?(this.isLeaf=!0,this.rangeLength=A.rangeLength,this.rangeLow=A.rangeLow,this.isLowerRange=A.isLowerRange,this.isOOB=A.isOOB):this.isLeaf=!1}buildTree(A,t){let i=A.prefixCode>>t&1;if(t<=0)this.children[i]=new Ns(A);else{let s=this.children[i];s||(this.children[i]=s=new Ns(null)),s.buildTree(A,t-1)}}decodeNode(A){if(this.isLeaf){if(this.isOOB)return null;let i=A.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-i:i)}let t=this.children[A.readBit()];if(!t)throw new oe("invalid Huffman data");return t.decodeNode(A)}},Gs=class{constructor(A,t){t||this.assignPrefixCodes(A),this.rootNode=new Ns(null);for(let i=0,s=A.length;i0&&this.rootNode.buildTree(a,a.prefixLength-1)}}decode(A){return this.rootNode.decodeNode(A)}assignPrefixCodes(A){let t=A.length,i=0;for(let I=0;I>1&7)+1,g=(i>>4&7)+1,o=[],I,c,l=s;do I=n.readBits(r),c=n.readBits(g),o.push(new si([l,I,c,0])),l+=1<=this.end)throw new oe("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}let A=this.currentByte>>this.shift&1;return this.shift--,A}readBits(A){let t=0,i;for(i=A-1;i>=0;i--)t|=this.readBit()<=this.end?-1:this.data[this.position++]}};function h0(e,A,t){let i=0;for(let s=0,a=A.length;s=32){let C,B,Q;switch(h){case 32:if(l===0)throw new oe("no previous value in symbol ID table");B=s.readBits(2)+3,C=a[l-1].prefixLength;break;case 33:B=s.readBits(3)+3,C=0;break;case 34:B=s.readBits(7)+11,C=0;break;default:throw new oe("invalid code length in symbol ID table")}for(Q=0;Q>c&1,c--}if(i&&!g)for(let I=0;I<5&&a.readNextChar()!==-1;I++);return n}var CI=class{parseChunks(A){return Qd(A)}parse(A){throw new Error("Not implemented: Jbig2Image.parse")}},BI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);let t=new CI,i=[];if(this.params instanceof F){let n=this.params.get("JBIG2Globals");if(n instanceof KA){let r=n.getBytes();i.push({data:r,start:0,end:r.length})}}i.push({data:A,start:0,end:A.length});let s=t.parseChunks(i),a=s.length;for(let n=0;n>3,c=i&7,l=e.length;t=new Uint32Array(t.buffer);let h=0;for(let C=0;C>2,g=new Uint32Array(e.buffer,A,r);if(Ot.isLittleEndian){for(;n>>24|I<<8|4278190080,t[i+2]=I>>>16|c<<16|4278190080,t[i+3]=c>>>8|4278190080}for(let o=n*4,I=e.length;o>>8|255,t[i+2]=I<<16|c>>>16|255,t[i+3]=c<<8|255}for(let o=n*4,I=e.length;o0&&!e[a-1];)a--;let n=[{children:[],index:0}],r=n[0],g;for(i=0;i0;)r=n.pop();for(r.index++,n.push(r);n.length<=i;)n.push(g={children:[],index:0}),r.children[r.index]=g.children,r=g;t++}i+10)return C--,h>>C&1;if(h=e[A++],h===255){let CA=e[A++];if(CA){if(CA===220&&o){A+=2;let N=we(e,A);if(A+=2,N>0&&N!==t.scanLines)throw new Fa("Found DNL marker (0xFFDC) while parsing scan data",N)}else if(CA===217){if(o){let N=Y*(t.precision===8?8:0);if(N>0&&Math.round(t.scanLines/N)>=5)throw new Fa("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect `scanLines` parameter",N)}throw new yr("Found EOI marker (0xFFD9) while parsing scan data")}throw new Gt(`unexpected marker ${(h<<8|CA).toString(16)}`)}}return C=7,h>>>7}function Q(CA){let N=CA;for(;;){switch(N=N[B()],typeof N){case"number":return N;case"object":continue}throw new Gt("invalid huffman sequence")}}function E(CA){let N=0;for(;CA>0;)N=N<<1|B(),CA--;return N}function f(CA){if(CA===1)return B()===1?1:-1;let N=E(CA);return N>=1<>4;if(X===0){if(W<15)break;T+=16;continue}T+=W;let G=Qa[T];CA.blockData[N+G]=f(X),T++}}function d(CA,N){let H=Q(CA.huffmanTableDC),q=H===0?0:f(H)<0){p--;return}let H=a,q=n;for(;H<=q;){let T=Q(CA.huffmanTableAC),$=T&15,X=T>>4;if($===0){if(X<15){p=E(X)+(1<>4,$===0)T<15?(p=E(T)+(1<0){for(gA=0;gA0?"unexpected":"excessive";k(`decodeScan - ${N} MCU data, current marker is: ${V.invalid}`),A=V.offset}if(V.marker>=65488&&V.marker<=65495)A+=2;else break}return A-l}function bd(e,A,t){let i=e.quantizationTable,s=e.blockData,a,n,r,g,o,I,c,l,h,C,B,Q,E,f,u,d,x;if(!i)throw new Gt("missing required Quantization Table.");for(let p=0;p<64;p+=8){if(h=s[A+p],C=s[A+p+1],B=s[A+p+2],Q=s[A+p+3],E=s[A+p+4],f=s[A+p+5],u=s[A+p+6],d=s[A+p+7],h*=i[p],!(C|B|Q|E|f|u|d)){x=v0*h+512>>10,t[p]=x,t[p+1]=x,t[p+2]=x,t[p+3]=x,t[p+4]=x,t[p+5]=x,t[p+6]=x,t[p+7]=x;continue}C*=i[p+1],B*=i[p+2],Q*=i[p+3],E*=i[p+4],f*=i[p+5],u*=i[p+6],d*=i[p+7],a=v0*h+128>>8,n=v0*E+128>>8,r=B,g=u,o=Yn*(C-d)+128>>8,l=Yn*(C+d)+128>>8,I=Q<<4,c=f<<4,a=a+n+1>>1,n=a-n,x=r*Jn+g*Hn+128>>8,r=r*Hn-g*Jn+128>>8,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,t[p]=a+l,t[p+7]=a-l,t[p+1]=n+c,t[p+6]=n-c,t[p+2]=r+I,t[p+5]=r-I,t[p+3]=g+o,t[p+4]=g-o}for(let p=0;p<8;++p){if(h=t[p],C=t[p+8],B=t[p+16],Q=t[p+24],E=t[p+32],f=t[p+40],u=t[p+48],d=t[p+56],!(C|B|Q|E|f|u|d)){x=v0*h+8192>>14,x<-2040?x=0:x>=2024?x=255:x=x+2056>>4,s[A+p]=x,s[A+p+8]=x,s[A+p+16]=x,s[A+p+24]=x,s[A+p+32]=x,s[A+p+40]=x,s[A+p+48]=x,s[A+p+56]=x;continue}a=v0*h+2048>>12,n=v0*E+2048>>12,r=B,g=u,o=Yn*(C-d)+2048>>12,l=Yn*(C+d)+2048>>12,I=Q,c=f,a=(a+n+1>>1)+4112,n=a-n,x=r*Jn+g*Hn+2048>>12,r=r*Hn-g*Jn+2048>>12,g=x,o=o+c+1>>1,c=o-c,l=l+I+1>>1,I=l-I,a=a+g+1>>1,g=a-g,n=n+r+1>>1,r=n-r,x=o*Ln+l*Mn+2048>>12,o=o*Mn-l*Ln+2048>>12,l=x,x=I*Un+c*Gn+2048>>12,I=I*Gn-c*Un+2048>>12,c=x,h=a+l,d=a-l,C=n+c,u=n-c,B=r+I,f=r-I,Q=g+o,E=g-o,h<16?h=0:h>=4080?h=255:h>>=4,C<16?C=0:C>=4080?C=255:C>>=4,B<16?B=0:B>=4080?B=255:B>>=4,Q<16?Q=0:Q>=4080?Q=255:Q>>=4,E<16?E=0:E>=4080?E=255:E>>=4,f<16?f=0:f>=4080?f=255:f>>=4,u<16?u=0:u>=4080?u=255:u>>=4,d<16?d=0:d>=4080?d=255:d>>=4,s[A+p]=h,s[A+p+8]=C,s[A+p+16]=B,s[A+p+24]=Q,s[A+p+32]=E,s[A+p+40]=f,s[A+p+48]=u,s[A+p+56]=d}}function Dd(e,A){let t=A.blocksPerLine,i=A.blocksPerColumn,s=new Int16Array(64);for(let a=0;a=i)return null;let a=we(e,A);if(a>=65472&&a<=65534)return{invalid:null,marker:a,offset:A};let n=we(e,s);for(;!(n>=65472&&n<=65534);){if(++s>=i)return null;n=we(e,s)}return{invalid:a.toString(16),marker:n,offset:s}}var uI=class{constructor({decodeTransform:A=null,colorTransform:t=-1}={}){this._decodeTransform=A,this._colorTransform=t}parse(A,{dnlScanLines:t=null}={}){function i(){let B=we(A,a);a+=2;let Q=a+B-2,E=fI(A,Q,a);E!=null&&E.invalid&&(k("readDataBlock - incorrect length, current marker is: "+E.invalid),Q=E.offset);let f=A.subarray(a,Q);return a+=f.length,f}function s(B){let Q=Math.ceil(B.samplesPerLine/8/B.maxH),E=Math.ceil(B.scanLines/8/B.maxV);for(let f of B.components){let u=Math.ceil(Math.ceil(B.samplesPerLine/8)*f.h/B.maxH),d=Math.ceil(Math.ceil(B.scanLines/8)*f.v/B.maxV),x=Q*f.h,m=64*(E*f.v)*(x+1);f.blockData=new Int16Array(m),f.blocksPerLine=u,f.blocksPerColumn=d}B.mcusPerLine=Q,B.mcusPerColumn=E}let a=0,n=null,r=null,g,o,I=0,c=[],l=[],h=[],C=we(A,a);if(a+=2,C!==65496)throw new Gt("SOI not found");C=we(A,a),a+=2;A:for(;C!==65497;){let B,Q,E;switch(C){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:let f=i();C===65504&&f[0]===74&&f[1]===70&&f[2]===73&&f[3]===70&&f[4]===0&&(n={version:{major:f[5],minor:f[6]},densityUnits:f[7],xDensity:f[8]<<8|f[9],yDensity:f[10]<<8|f[11],thumbWidth:f[12],thumbHeight:f[13],thumbData:f.subarray(14,14+3*f[12]*f[13])}),C===65518&&f[0]===65&&f[1]===100&&f[2]===111&&f[3]===98&&f[4]===101&&(r={version:f[5]<<8|f[6],flags0:f[7]<<8|f[8],flags1:f[9]<<8|f[10],transformCode:f[11]});break;case 65499:let u=we(A,a);a+=2;let d=u+a-2,x;for(;a>4)if(_>>4===1)for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=we(A,a),a+=2;else throw new Gt("DQT - invalid table spec");else for(Q=0;Q<64;Q++)x=Qa[Q],tA[x]=A[a++];c[_&15]=tA}break;case 65472:case 65473:case 65474:if(g)throw new Gt("Only single frame JPEGs supported");a+=2,g={},g.extended=C===65473,g.progressive=C===65474,g.precision=A[a++];let p=we(A,a);a+=2,g.scanLines=t||p,g.samplesPerLine=we(A,a),a+=2,g.components=[],g.componentIds={};let m=A[a++],D=0,S=0;for(B=0;B>4,IA=A[a+1]&15;D>4?l:h)[_&15]=wd(tA,QA)}break;case 65501:a+=2,o=we(A,a),a+=2;break;case 65498:let Y=++I===1&&!t;a+=2;let U=A[a++],K=[];for(B=0;B>4],IA.huffmanTableAC=l[QA&15],K.push(IA)}let Z=A[a++],AA=A[a++],gA=A[a++];try{let _=yd(A,a,g,K,o,Z,AA,gA>>4,gA&15,Y);a+=_}catch(_){if(_ instanceof Fa)return k(`${_.message} -- attempting to re-parse the JPEG image.`),this.parse(A,{dnlScanLines:_.scanLines});if(_ instanceof yr){k(`${_.message} -- ignoring the rest of the image data.`);break A}throw _}break;case 65500:a+=4;break;case 65535:A[a]!==255&&a--;break;default:let R=fI(A,a-2,a-3);if(R!=null&&R.invalid){k("JpegImage.parse - unexpected data, current marker is: "+R.invalid),a=R.offset;break}if(!R||a>=A.length-1){k("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break A}throw new Gt("JpegImage.parse - unknown marker: "+C.toString(16))}C=we(A,a),a+=2}if(!g)throw new Gt("JpegImage.parse - no frame data found.");this.width=g.samplesPerLine,this.height=g.scanLines,this.jfif=n,this.adobe=r,this.components=[];for(let B of g.components){let Q=c[B.quantizationId];Q&&(B.quantizationTable=Q),this.components.push({index:B.index,output:Dd(g,B),scaleX:B.h/g.maxH,scaleY:B.v/g.maxV,blocksPerLine:B.blocksPerLine,blocksPerColumn:B.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(A,t,i=!1){let s=this.width/A,a=this.height/t,n,r,g,o,I,c,l,h,C,B,Q=0,E,f=this.components.length,u=A*t*f,d=new Uint8ClampedArray(u),x=new Uint32Array(A),p=4294967288,m;for(l=0;l>8)+D[C+1];return d}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:this.numComponents===3?this._colorTransform===0?!1:!(this.components[0].index===82&&this.components[1].index===71&&this.components[2].index===66):this._colorTransform===1}_convertYccToRgb(A){let t,i,s;for(let a=0,n=A.length;a4)throw new Gt("Unsupported color mode");let n=this._getLinearizedBlockData(A,t,a);if(this.numComponents===1&&(i||s)){let r=n.length*(i?4:3),g=new Uint8ClampedArray(r),o=0;if(i)pd(n,new Uint32Array(g.buffer));else for(let I of n)g[o++]=I,g[o++]=I,g[o++]=I;return g}else if(this.numComponents===3&&this._isColorConversionNeeded){if(i){let r=new Uint8ClampedArray(n.length/3*4);return this._convertYccToRgba(n,r)}return this._convertYccToRgb(n)}else if(this.numComponents===4){if(this._isColorConversionNeeded)return i?this._convertYcckToRgba(n):s?this._convertYcckToRgb(n):this._convertYcckToCmyk(n);if(i)return this._convertCmykToRgba(n);if(s)return this._convertCmykToRgb(n)}return n}},Ra=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(){this.decodeImage()}decodeImage(A){if(this.eof)return this.buffer;A||(A=this.bytes);for(let n=0,r=A.length-1;n0&&(A=A.subarray(n));break}let t={decodeTransform:void 0,colorTransform:void 0},i=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(i)){let n=this.dict.get("BPC","BitsPerComponent")||8,r=i.length,g=new Int32Array(r),o=!1,I=(1<{var A;var e=typeof document!="undefined"?(A=document.currentScript)==null?void 0:A.src:void 0;return function(t={}){var i,s=t,a,n,r=new Promise((z,rA)=>{a=z,n=rA}),g=!0,o=!1;s.decode=function(z,{numComponents:rA=4,isIndexedColormap:xA=!1,smaskInData:RA=!1}){let YA=z.length,ae=s._malloc(YA);s.HEAPU8.set(z,ae);let ee=s._jp2_decode(ae,YA,rA>0?rA:0,!!xA,!!RA);if(s._free(ae),ee){let{errorMessages:te}=s;return te?(delete s.errorMessages,te):"Unknown error"}let{imageData:Oe}=s;return s.imageData=null,Oe};var I=Object.assign({},s),c=[],l="./this.program",h=(z,rA)=>{throw rA},C="",B,Q,E;(g||o)&&(o?C=self.location.href:typeof document!="undefined"&&document.currentScript&&(C=document.currentScript.src),e&&(C=e),C.startsWith("blob:")?C="":C=C.substr(0,C.replace(/[?#].*/,"").lastIndexOf("/")+1),B=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.send(null),rA.responseText},o&&(E=z=>{var rA=new XMLHttpRequest;return rA.open("GET",z,!1),rA.responseType="arraybuffer",rA.send(null),new Uint8Array(rA.response)}),Q=(z,rA,xA)=>{fetch(z,{credentials:"same-origin"}).then(RA=>RA.ok?RA.arrayBuffer():Promise.reject(new Error(RA.status+" : "+RA.url))).then(rA,xA)});var f=s.print||console.log.bind(console),u=s.printErr||console.error.bind(console);Object.assign(s,I),I=null,s.arguments&&(c=s.arguments),s.thisProgram&&(l=s.thisProgram),s.quit&&(h=s.quit);var d;s.wasmBinary&&(d=s.wasmBinary);function x(z){for(var rA=atob(z),xA=new Uint8Array(rA.length),RA=0;RAz.startsWith(W);function BA(){var z="data:application/octet-stream;base64,AGFzbQEAAAABzgEaYAN/f38Bf2AEf39/fwF/YAF/AGACf38AYAF/AX9gA39/fwBgAn9/AX9gBH9/f38AYAN/fn8BfmAFf39/f38Bf2ACfn8Bf2ACfn8BfmAFf39/f38AYAN/fn8Bf2AAAX9gB39/f39/f38Bf2AJf39/f39/f39/AX9gC39/f39/f39/f39/AX9gBn9/f39/fwF/YAZ/fH9/f38Bf2AIf39/f39/f38AYAh/f39/f39/fwF/YAAAYAZ/f39/f38AYAd/f39/f39/AGACfH8BfAJbDwFhAWEAAgFhAWIAAQFhAWMABQFhAWQAAgFhAWUADAFhAWYABwFhAWcAAwFhAWgABwFhAWkABQFhAWoACQFhAWsABAFhAWwABgFhAW0ABgFhAW4ABAFhAW8AAwPAAb4BBwIFAAYEAAUGBAUBBAwFFAYCAgICAAYQEQQCChICBQIEBwQCDgICDQYCFQMHAAAEAwEWCQkDAAkGAQQEBQUODwEBAwADBgIQBBcYAgcGAwcHAQECAAQZBAYHBA8MAAQCAgIABgAGAQEBAQEBAQEAAAAAAAYDAgICAwMDAwMAAxMIBA4EAAgDAwkECAoLCAAAAQEBAQEBAQENAQAEBAUJDwESEQEAAAYDAwEFBQUFBQUFBQELAQEBAQEBAQEBCgQFAXABbm4FBwEBggKAgAIGCAF/AUGQ2QULBxsGAXACAAFxAEEBcgCYAQFzABABdAEAAXUAlwEJvQEBAEEBC21RzAHCAXNzNqcBnAGZAYsBigGJAYgBhwGGAYUBhAFSgQGAAX9+fXx7enl4d3Z1ywHKAckByAHHAcYBQMUBxAFAQMMBwQHAAb8BvgG9AbwBuwG6AbkBswGoAaYBpQGkAaMBogGhAaABnwGeAZ0BmwGaAUlKTFJIgwFTOFCCAU9FRk4rJ6sBqgGsAbQBuAG1Aa8BqQGtAa4BtgG3AXCwAbEBsgFRlgGVAYwBjgGNAZIBkwGUAZABjwEKkZoOvgGCAgEDfyMAQZAEayIEJAACQCAARQ0AAkACQAJAAkAgAUEBaw4EAAEEAgQLIABBDGohAQwCCyAAQRBqIQEgAEEEaiEADAELIABBFGohASAAQQhqIQALIAEoAgAiBUUNACACRQ0AIAAoAgAhBiAEQQBBgAQQFSIBIAM2AowEIwBBoAFrIgAkACAAIAE2ApQBIABB/wM2ApgBIABBAEGQARAVIgBBfzYCTCAAQeYANgIkIABBfzYCUCAAIABBnwFqNgIsIAAgAEGUAWo2AlQgAUEAOgAAIAAgAiADQecAQegAEGsgAEGgAWokACABQQA6AP8DIAEgBiAFEQMACyAEQZAEaiQAC9ACAQV/IAAEQCAAQQRrIgMoAgAiBCEBIAMhAiAAQQhrKAIAIgAgAEF+cSIARwRAIAIgAGsiAigCBCIBIAIoAggiBTYCCCAFIAE2AgQgACAEaiEBCyADIARqIgAoAgAiAyAAIANqQQRrKAIARwRAIAAoAgQiBCAAKAIIIgA2AgggACAENgIEIAEgA2ohAQsgAiABNgIAIAIgAUF8cWpBBGsgAUEBcjYCACACAn8gAigCAEEIayIAQf8ATQRAIABBA3ZBAWsMAQsgAGchAyAAQR0gA2t2QQRzIANBAnRrQe4AaiAAQf8fTQ0AGkE/IABBHiADa3ZBAnMgA0EBdGtBxwBqIgAgAEE/TxsLIgFBBHQiAEGgxwFqNgIEIAIgAEGoxwFqIgAoAgA2AgggACACNgIAIAIoAgggAjYCBEGozwFBqM8BKQMAQgEgAa2GhDcDAAsLyQIBBH8gAUEANgIAAkAgAkUNACABIAJqIQMCQCACQRBJBEAgACEBDAELAkAgACACaiABTQ0AIAAgA08NACAAIQEMAQsgA0EQayEGIAAgAkFwcSIFaiEBIAMgBWshAwNAIAYgBGsgACAEav0AAAD9DAAAAAAAAAAAAAAAAAAAAAD9DQ8ODQwLCgkIBwYFBAMCAQD9CwAAIARBEGoiBCAFRw0ACyACIAVGDQELAkAgAkEDcSIGRQRAIAUhBAwBC0EAIQAgBSEEA0AgA0EBayIDIAEtAAA6AAAgBEEBaiEEIAFBAWohASAAQQFqIgAgBkcNAAsLIAUgAmtBfEsNAANAIANBAWsgAS0AADoAACADQQJrIAEtAAE6AAAgA0EDayABLQACOgAAIANBBGsiAyABLQADOgAAIAFBBGohASAEQQRqIgQgAkcNAAsLC4AEAQN/IAJBgARPBEAgACABIAIQAiAADwsgACACaiEDAkAgACABc0EDcUUEQAJAIABBA3FFBEAgACECDAELIAJFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICQQNxRQ0BIAIgA0kNAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAswAQF/AkAgAEUNACABRQ0AQQggACABbCIBECUiAARAIABBACABEBUaCyAAIQILIAILEQAgAEUEQEEADwtBCCAAECUL8gICAn8BfgJAIAJFDQAgACABOgAAIAAgAmoiA0EBayABOgAAIAJBA0kNACAAIAE6AAIgACABOgABIANBA2sgAToAACADQQJrIAE6AAAgAkEHSQ0AIAAgAToAAyADQQRrIAE6AAAgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBBGsgATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQQhrIAE2AgAgAkEMayABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkEQayABNgIAIAJBFGsgATYCACACQRhrIAE2AgAgAkEcayABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa1CgYCAgBB+IQUgAyAEaiEBA0AgASAFNwMYIAEgBTcDECABIAU3AwggASAFNwMAIAFBIGohASACQSBrIgJBH0sNAAsLIAALJwEBfyMAQRBrIgMkACADIAI2AgwgACABIAJBAEEAEGsgA0EQaiQAC+gFAQl/IAFFBEBBAA8LAn8gAEUE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ACAEIE5BCmpBAiAFEBpBAkcEQCAFQQFBAiAAKAK4ARtBlhJBABAPIAAoArgBRSFnDAELIE5BCmogTkEMakECEBEgTigCDCIBQZD/A0YNACABQdn/A0YEQCAAQYACNgIIIABBADYCzAEMAQsgBCkDCCKGAVAEfkIABSCGASAEKQM4fQtQBEAgAEHAADYCCCAFQQJBrD9BABAPDAELQQAhZyAFQQFB7D5BABAPCyBOQRBqJAAgZwsLACAABEAgABAQCwu0AQEBfyAAKAIMRQRAIAIgACgCJCABEQMADwsCQEEIEBQiA0UNACADIAI2AgQgAyABNgIAQQgQFCIBRQRAIAMQEA8LIAEgAzYCACAAIAAoAgRB5ABsIgI2AigDQCAAKAIYIAJKDQALIAEgACgCFDYCBCAAIAE2AhQgACAAKAIYQQFqNgIYIAAoAhwiAUUNACABKAIAQQA2AgggACABKAIENgIcIAAgACgCIEEBazYCICABEBALC/oCAQR/AkAgAEUNACAAKAKsKCIBBEAgACgCqCgiAgRAQQAhAQNAIAAoAqwoIAFBA3RqKAIAIgMEQCADEBAgACgCqCghAgsgAUEBaiIBIAJJDQALIAAoAqwoIQELIABBADYCqCggARAQIABBADYCrCgLIAAoArQoIgEEQCABEBAgAEEANgK0KAsgACgC0CsiAQRAIAEQECAAQQA2AtArCyAAKALsKyIBBEAgARAQIABBADYC7CsLIAAoAugrIgEEQCABEBAgAEEANgLoKwsgACgC/CsiAQRAIAEQECAAQQA2AoQsIABCADcC/CsLIAAoAvArIgEEQCAAKAL0KyIDBH9BACECA0AgASgCDCIEBEAgBBAQIAFBADYCDCAAKAL0KyEDCyABQRRqIQEgAkEBaiICIANJDQALIAAoAvArBSABCxAQIABBADYC8CsLIAAoAuQrIgEEQCABEBAgAEEANgLkKwsgACgC3CsiAUUNACABEBAgAEIANwLcKwsLyAcCEX8BfiAAKAIQIghBIE8EQCAAKQMIpw8LAkAgACgCFCIDQQROBEAgACgCACICQQNrKAIAIQEgACADQQRrIgM2AhQgACACQQRrNgIADAELIANBAEwEQAwBCyADQQFxIQ0gACgCACECAkAgA0EBRgRAQRghBAwBCyADQf7///8HcSEJQRghBANAIAAgAkEB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IABBADYCiAEgACgCZBAQIABBADYCZCAALQC8AUECcUUEQCAAKAKoARAQCyAAQdAAakEAQfAAEBUaIAAoAsABEDIgAEEANgLAASAAKALEARAyIABBADYCwAEgACgCyAEiAQRAIAEoAhwiAgRAIAIQECABQQA2AhwLIAEoAigiAgRAIAEoAiQEQANAIAIgBUEobCIDaigCJCIEBEAgBBAQIAEoAigiAiADakEANgIkCyACIANqKAIQIgQEQCAEEBAgASgCKCICIANqQQA2AhALIAIgA2ooAhgiBARAIAQQECABKAIoIgIgA2pBADYCGAsgBUEBaiIFIAEoAiRJDQALCyACEBAgAUEANgIoCyABEBALIABBADYCyAEgACgCSBAhIABBADYCSCAAKAJMECEgAEEANgJMIAAoAtQBIgMEQAJAIAMoAghFDQAgAygCDARAIANBADYCKANAIAMoAhhBAEoNAAsLIANBATYCECADKAIAEBAgAygCHCICRQ0AA0AgAigCBCEBIAIQECADIAE2AhwgASICDQALCyADKAIkIgIEQCACKAIEIgVBAEoEQEEAIQEDQCACKAIAIAFBDGxqIgQoAggiBgRAIAQoAgQgBhECACACKAIEIQULIAFBAWoiASAFSA0ACwsgAigCABAQIAIQEAsgAxAQCyAAQQA2AtQBIAAQEAsL5gMCCH8EfiAAKAIUKAIAKAIUIAFBzABsaiIJKAIMIgggACgCGCgCGCABQTRsaiIKNQIEIhBCAX0iEiAANQI8fCAQgKciCyAIIAtJGyEMIAkoAggiCCAKNQIAIhFCAX0iEyAANQI4fCARgKciCiAIIApJGyEKIAkoAgQiCCASIAA1AjR8IBCApyILIAggC0sbIQsgCSgCACIIIBMgADUCMHwgEYCnIg0gCCANSxshDUEAIQggACgCICgC0CsgAUG4CGxqKAIUIQ4CQCAJKAIUQQAgAmtBfyACG2oiAkUEQCAKIQAgDSEIIAshAQwBCyADQQFxIAJBAWsiD3QiCSANSQRAIA0gCWutQn8gAq0iEIZCf4V8IBCIpyEIC0EAIQBBACEBIANBAXYgD3QiAyALSQRAIAsgA2utQn8gAq0iEIZCf4V8IBCIpyEBCyAJIApJBEAgCiAJa61CfyACrSIQhkJ/hXwgEIinIQALIAMgDE8EQEEAIQwMAQsgDCADa61CfyACrSIQhkJ/hXwgEIinIQwLQX8gAEECQQMgDkEBRhsiAmoiAyAAIANLGyAES0F/IAIgDGoiACAAIAxJGyAFS3EgCCACayIAQQAgACAITRsgBklxIAEgAmsiAEEAIAAgAU0bIAdJcQuiAQEGfyAABEAgACgCBCICBEAgAhAQIABBADYCBAsgAQRAIAAhAgNAIAIoAsgBIgMEQEEAIQUgAigCxAEiBAR/A0AgAygCDCIGBEAgBhAQIANBADYCDCACKALEASEECyADQRBqIQMgBUEBaiIFIARJDQALIAIoAsgBBSADCxAQIAJBADYCyAELIAJB8AFqIQIgB0EBaiIHIAFHDQALCyAAEBALC9UZAhN/A3sgACgCACIKIAAoAgwiDUEFdCIFaiEGIAogBWshFiAAKAIQIQUgACgCHCELIAAoAhQhCSAAKAIIIQ4CQAJAAkACQCADQQhJDQAgAUEPcQ0AIAZBD3FFDQELIAUgCU8NAgJAAkAgA0EBaw4CAAEDCwJAIAkgBWsiCEEYSQ0AIAEgBUECdGohByANQQV0IgQgCiAFQQZ0amogASAJQQJ0akkEQCAHIAogCUEGdGogBGpBPGtJDQELIAX9Ef0MAAAAAAEAAAACAAAAAwAAAP2uASEYIAUgCEF8cSIPaiEFQQAhBANAIAYgGEEE/asBIhf9GwBBAnRqIAcgBEECdGr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiAZ/R8BOAIAIAYgF/0bAkECdGogGf0fAjgCACAGIBf9GwNBAnRqIBn9HwM4AgAgGP0MBAAAAAQAAAAEAAAABAAAAP2uASEYIARBBGoiBCAPRw0ACyAIIA9GDQQLIAUhBCAJIAVrQQNxIgcEQEEAIQgDQCAGIARBBnRqIAEgBEECdGoqAgA4AgAgBEEBaiEEIAhBAWoiCCAHRw0ACwsgBSAJa0F8Sw0DA0AgBiAEQQZ0aiABIARBAnRqKgIAOAIAIAYgBEEBaiIFQQZ0aiABIAVBAnRqKgIAOAIAIAYgBEECaiIFQQZ0aiABIAVBAnRqKgIAOAIAIAYgBEEDaiIFQQZ0aiABIAVBAnRqKgIAOAIAIARBBGoiBCAJRw0ACwwDCyABIAJBAnRqIQgCQCAJIAVrIg9BPEkEQCAFIQQMAQsgCiAFQQZ0IA1BBXRqaiIEIAkgBUF/c2oiB0EGdCIQaiAESQRAIAUhBAwBCyAEQQRqIgQgEGogBEkEQCAFIQQMAQsgB0H///8fSwRAIAUhBAwBCyANQQV0IgQgCiAFQQZ0amoiByABIAIgCWpBAnRqSSAKIAlBBnRqIARqQThrIgQgASACIAVqQQJ0aktxBEAgBSEEDAELIAcgASAJQQJ0akkgASAFQQJ0aiAESXEEQCAFIQQMAQsgBf0R/QwAAAAAAQAAAAIAAAADAAAA/a4BIRggBSAPQXxxIhBqIQRBACEHA0AgBiAYQQT9qwEiF/0bAEECdGoiESABIAUgB2pBAnQiDGr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiITIBn9HwE4AgAgBiAX/RsCQQJ0aiIUIBn9HwI4AgAgBiAX/RsDQQJ0aiIVIBn9HwM4AgAgESAIIAxq/QACACIX/R8AOAIEIBMgF/0fATgCBCAUIBf9HwI4AgQgFSAX/R8DOAIEIBj9DAQAAAAEAAAABAAAAAQAAAD9rgEhGCAHQQRqIgcgEEcNAAsgDyAQRg0DCyAEQQFqIQUgCSAEa0EBcQRAIAYgBEEGdGoiByABIARBAnQiBGoqAgA4AgAgByAEIAhqKgIAOAIEIAUhBAsgBSAJRg0CA0AgBiAEQQZ0aiIFIAEgBEECdCIHaioCADgCACAFIAcgCGoqAgA4AgQgBiAEQQFqIgVBBnRqIgcgASAFQQJ0IgVqKgIAOAIAIAcgBSAIaioCADgCBCAEQQJqIgQgCUcNAAsMAgsgBSAJTw0BIAEgAkECdGohCANAIAYgBUEGdGoiBCABIAVBAnRqKgIAOAIAIAQgASACIAVqIgdBAnRqKgIAOAIEIAQgASACIAdqIgdBAnRqKgIAOAIIIAQgASACIAdqIgdBAnRqKgIAOAIMIAQgASACIAdqIgdBAnRqKgIAOAIQIAQgASACIAdqIgdBAnRqKgIAOAIUIAQgASACIAdqQQJ0IgdqKgIAOAIYIAQgByAIaioCADgCHCAFQQFqIgUgCUcNAAsMAQsgASACQQJ0aiEIIANBA0YhByADQQRGIQ8gA0EFRiEQIANBB0YhEQNAIAYgBUEGdGoiBCABIAVBAnRqKgIAOAIAIAQgASACIAVqIgxBAnRqKgIAOAIEIAQgASACIAxqIgxBAnRqKgIAOAIIAkAgBw0AIAQgASACIAxqIgxBAnRqKgIAOAIMIA8NACAEIAEgAiAMaiIMQQJ0aioCADgCECAQDQAgBCABIAIgDGoiDEECdGoqAgA4AhQgA0EGRg0AIAQgASACIAxqQQJ0IgxqKgIAOAIYIBENACAEIAggDGoqAgA4AhwLIAVBAWoiBSAJRw0ACwsgFkEgaiEGIAEgDkECdGohBCAAKAIYIQUCQAJAAkAgA0EISQ0AIARBD3ENACAGQQ9xRQ0BCyAFIAtPDQECQAJAAkAgA0EBaw4CAAECCwJAIAsgBWsiAEEcSQ0AIAogBUEGdEEgciANQQV0IgJraiABIAsgDmpBAnRqSQRAIAEgBSAOakECdGogC0EGdCACayAKakEca0kNAQsgBCAFQQJ0aiEDIAX9Ef0MAAAAAAEAAAACAAAAAwAAAP2uASEYIAUgAEF8cSIBaiEFQQAhAgNAIAYgGEEE/asBIhf9GwBBAnRqIAMgAkECdGr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiAZ/R8BOAIAIAYgF/0bAkECdGogGf0fAjgCACAGIBf9GwNBAnRqIBn9HwM4AgAgGP0MBAAAAAQAAAAEAAAABAAAAP2uASEYIAJBBGoiAiABRw0ACyAAIAFGDQQLIAUhAiALIAVrQQNxIgAEQEEAIQEDQCAGIAJBBnRqIAQgAkECdGoqAgA4AgAgAkEBaiECIAFBAWoiASAARw0ACwsgBSALa0F8Sw0DA0AgBiACQQZ0aiAEIAJBAnRqKgIAOAIAIAYgAkEBaiIAQQZ0aiAEIABBAnRqKgIAOAIAIAYgAkECaiIAQQZ0aiAEIABBAnRqKgIAOAIAIAYgAkEDaiIAQQZ0aiAEIABBAnRqKgIAOAIAIAJBBGoiAiALRw0ACwwDCyAEIAJBAnRqIQMCQCALIAVrIgBBxABJBEAgBSECDAELIAogBUEGdCIJQSByIA1BBXQiCGtqIgcgCyAFQX9zaiIPQQZ0IhBqIAdJBEAgBSECDAELIAogCUEkciAIa2oiCSAQaiAJSQRAIAUhAgwBCyAPQf///x9LBEAgBSECDAELIAogBUEGdEEgciANQQV0IglraiINIAEgCyAOaiIIIAJqQQJ0akkgC0EGdCAJayAKakEYayIJIAEgDkECdGogBUECdGoiCiACQQJ0aktxBEAgBSECDAELIA0gASAIQQJ0akkgCSAKS3EEQCAFIQIMAQsgBf0R/QwAAAAAAQAAAAIAAAADAAAA/a4BIRggBSAAQXxxIglqIQJBACEBA0AgBiAYQQT9qwEiF/0bAEECdGoiCiAEIAEgBWpBAnQiDWr9AAIAIhn9HwA4AgAgBiAX/RsBQQJ0aiIOIBn9HwE4AgAgBiAX/RsCQQJ0aiIIIBn9HwI4AgAgBiAX/RsDQQJ0aiIHIBn9HwM4AgAgCiADIA1q/QACACIX/R8AOAIEIA4gF/0fATgCBCAIIBf9HwI4AgQgByAX/R8DOAIEIBj9DAQAAAAEAAAABAAAAAQAAAD9rgEhGCABQQRqIgEgCUcNAAsgACAJRg0DCyACQQFqIQAgCyACa0EBcQRAIAYgAkEGdGoiASAEIAJBAnQiAmoqAgA4AgAgASACIANqKgIAOAIEIAAhAgsgACALRg0CA0AgBiACQQZ0aiIAIAQgAkECdCIBaioCADgCACAAIAEgA2oqAgA4AgQgBiACQQFqIgBBBnRqIgEgBCAAQQJ0IgBqKgIAOAIAIAEgACADaioCADgCBCACQQJqIgIgC0cNAAsMAgsgBCACQQJ0aiEBIANBA0YhCSADQQRGIQogA0EFRiENIANBB0YhDgNAIAYgBUEGdGoiACAEIAVBAnRqKgIAOAIAIAAgBCACIAVqIghBAnRqKgIAOAIEIAAgBCACIAhqIghBAnRqKgIAOAIIAkAgCQ0AIAAgBCACIAhqIghBAnRqKgIAOAIMIAoNACAAIAQgAiAIaiIIQQJ0aioCADgCECANDQAgACAEIAIgCGoiCEECdGoqAgA4AhQgA0EGRg0AIAAgBCACIAhqQQJ0IghqKgIAOAIYIA4NACAAIAEgCGoqAgA4AhwLIAVBAWoiBSALRw0ACwwBCyAFIAtPDQAgBCACQQJ0aiEBA0AgBiAFQQZ0aiIAIAQgBUECdGoqAgA4AgAgACAEIAIgBWoiA0ECdGoqAgA4AgQgACAEIAIgA2oiA0ECdGoqAgA4AgggACAEIAIgA2oiA0ECdGoqAgA4AgwgACAEIAIgA2oiA0ECdGoqAgA4AhAgACAEIAIgA2oiA0ECdGoqAgA4AhQgACAEIAIgA2pBAnQiA2oqAgA4AhggACABIANqKgIAOAIcIAVBAWoiBSALRw0ACwsLmwMBBH8gASAAQQRqIgRqQQFrQQAgAWtxIgUgAmogACAAKAIAIgFqQQRrTQR/IAAoAgQiAyAAKAIIIgY2AgggBiADNgIEIAQgBUcEQCAAIABBBGsoAgBBfnFrIgMgBSAEayIEIAMoAgBqIgU2AgAgAyAFQXxxakEEayAFNgIAIAAgBGoiACABIARrIgE2AgALAn8gASACQRhqTwRAIAAgAmpBCGoiAyABIAJrQQhrIgE2AgAgAyABQXxxakEEayABQQFyNgIAIAMCfyADKAIAQQhrIgFB/wBNBEAgAUEDdkEBawwBCyABZyEEIAFBHSAEa3ZBBHMgBEECdGtB7gBqIAFB/x9NDQAaQT8gAUEeIARrdkECcyAEQQF0a0HHAGoiASABQT9PGwsiAUEEdCIEQaDHAWo2AgQgAyAEQajHAWoiBCgCADYCCCAEIAM2AgAgAygCCCADNgIEQajPAUGozwEpAwBCASABrYaENwMAIAAgAkEIaiIBNgIAIAAgAUF8cWoMAQsgACABagtBBGsgATYCACAAQQRqBUEACwvCAQEDfwJAIAEgAigCECIDBH8gAwUgAhA+DQEgAigCEAsgAigCFCIEa0sEQCACIAAgASACKAIkEQAADwsCQAJAIAIoAlBBAEgNACABRQ0AIAEhAwNAIAAgA2oiBUEBay0AAEEKRwRAIANBAWsiAw0BDAILCyACIAAgAyACKAIkEQAAIgQgA0kNAiABIANrIQEgAigCFCEEDAELIAAhBUEAIQMLIAQgBSABEBIaIAIgAigCFCABajYCFCABIANqIQQLIAQLWQEBfyAAIAAoAkgiAUEBayABcjYCSCAAKAIAIgFBCHEEQCAAIAFBIHI2AgBBfw8LIABCADcCBCAAIAAoAiwiATYCHCAAIAE2AhQgACABIAAoAjBqNgIQQQALzAIBBH8gASAA/QACAP0LAgAgASgCGCICBEAgASgCECIDBH9BACECA0AgASgCGCACQTRsaigCLCIEBEAgBBAQIAEoAhAhAwsgAkEBaiICIANJDQALIAEoAhgFIAILEBAgAUEANgIYCyABIAAoAhAiAjYCECABIAJBNGwQFCICNgIYIAIEQCABKAIQBEBBACEDA0AgAiADQTRsIgVqIgIgACgCGCAFaiIE/QACAP0LAgAgAiAEKAIwNgIwIAIgBP0AAiD9CwIgIAIgBP0AAhD9CwIQIAEoAhgiAiAFakEANgIsIANBAWoiAyABKAIQSQ0ACwsgASAAKAIUNgIUIAEgACgCICICNgIgIAIEQCABIAIQFCICNgIcIAJFBEAgAUIANwIcDwsgAiAAKAIcIAAoAiAQEhoPCyABQQA2AhwPCyABQQA2AhAgAUEANgIYCwQAQQELxgEBA38DQCAAQQR0IgFBpMcBaiABQaDHAWoiAjYCACABQajHAWogAjYCACAAQQFqIgBBwABHDQALQTAQbRojAEEQayIAJAACQCAAQQxqIABBCGoQDA0AQbDPAUEIIAAoAgxBAnRBBGoQJSIBNgIAIAFFDQBBCCAAKAIIECUiAQRAQbDPASgCACICIAAoAgxBAnRqQQA2AgAgAiABEAtFDQELQbDPAUEANgIACyAAQRBqJABBzM8BQSo2AgBBlNABQdjQATYCAAuQBgIFfwN7IwBBEGsiBiQAAn8gACgCCEEQRgRAIAAoApwBIAAoAswBQYwsbGoMAQsgACgCDAshAAJAIAMoAgAiBUUEQEEAIQIgBEEBQcATQQAQDwwBCyAAKALQKyEJIAMgBUEBazYCACACIAZBDGpBARARIAkgAUG4CGxqIgcgBigCDCIAQQV2NgKkBiAHIABBH3EiATYCGCACQQFqIQAgAwJ/An8CQAJ/AkACQCABDgIAAwELIAMoAgAMAQsgAygCAEEBdgsiBUHiAE8EfyAGQuGAgICQDDcCBCAGIAU2AgAgBEECQcX4ACAGEA8gBygCGAUgAQsEQCAFIgENAUEADAILIAUEQCAHQRxqIQFBACECA0AgACAGQQxqQQEQESACQeAATQRAIAYoAgwhBCABIAJBA3RqIghBADYCBCAIIARBA3Y2AgALIABBAWohACACQQFqIgIgBUcNAAsLQQAhAiADKAIAIgAgBUkNAyAAIAVrDAILIAdBHGohBEEAIQIDQCAAIAZBDGpBAhARIAJB4ABNBEAgBCACQQN0aiIFIAYoAgwiCEH/D3E2AgQgBSAIQQt2NgIACyAAQQJqIQAgAkEBaiICIAFHDQALIAFBAXQLIQBBACECIAMoAgAiASAASQ0BIAEgAGsLNgIAQQEhAiAHKAIYQQFHDQAgB0EcaiEEIAf9CQIcIQwgBygCICED/QwBAAAAAgAAAAMAAAAEAAAAIQtBACEBA0AgBCABQQN0aiIAQRhqIAwgC/0M//////////////////////2uASIK/RsAQQNu/REgCv0bAUEDbv0cASAK/RsCQQNu/RwCIAr9GwNBA279HAP9sQH9DAAAAAAAAAAAAAAAAAAAAAD9uAEiCv1aAgACIABBEGogCv1aAgABIABBCGogCv1aAgAAIAQgAUEEaiIBQQN0aiIFIAr9WgIAAyAAIAM2AhwgACADNgIUIAAgAzYCDCAFIAM2AgQgC/0MBAAAAAQAAAAEAAAABAAAAP2uASELIAFB4ABHDQALCyAGQRBqJAAgAgufBgEGfyMAQSBrIgYkAAJ/IAAoAghBEEYEQCAAKAKcASAAKALMAUGMLGxqDAELIAAoAgwLIQUCQCADKAIAQQRNBEBBACEAIARBAUGdE0EAEA8MAQsgAiAFKALQKyABQbgIbGoiBSIJQQRqQQEQESAFIAUoAgRBAWoiBzYCBCAHQSJPBEAgBkEhNgIEIAYgBzYCACAEQQFB+TkgBhAPQQAhAAwBCyAHIAAoAqABIghNBEAgBiAHNgIYIAYgCDYCFCAGIAE2AhAgBEEBQbT7ACAGQRBqEA8gACAAKAIIQYCAAnI2AghBACEADAELIAJBAWogBUEIakEBEBEgBSAFKAIIQQJqNgIIIAJBAmogBUEMakEBEBEgBSAFKAIMQQJqIgA2AgwCQAJAIAUoAggiAUEKSw0AIABBCksNACAAIAFqQQ1JDQELQQAhACAEQQFBwylBABAPDAELIAJBA2ogBUEQakEBEBEgBS0AEEGAAXEEQEEAIQAgBEEBQYsyQQAQDwwBCyACQQRqIAVBFGpBARARIAUoAhRBAk8EQEEAIQAgBEEBQcoxQQAQDwwBCyADIAMoAgBBBWsiBzYCAEEBIQAgBSgCBCEBIAUtAABBAXFFBEAgAUUNASAFQbAHaiEBIAVBrAZqIQJBACEFA0AgAiAFQQJ0IgBqQQ82AgAgACABakEPNgIAQQEhACAFQQFqIgUgCSgCBEkNAAsMAQsgASAHTQRAAkAgAUUEQEEAIQEMAQsgAkEFaiAGQRxqQQEQESAFIAYoAhwiAEEEdjYCsAcgBSAAQQ9xNgKsBiAFKAIEIgFBAk8EQCAFQbAHaiEHIAVBrAZqIQggAkEGaiEAQQEhBQNAIAAgBkEcakEBEBECQCAGKAIcIgFBEE8EQCABQQ9xIgINAQtBACEAIARBAUHwLUEAEA8MBQsgCCAFQQJ0IgpqIAI2AgAgByAKaiABQQR2NgIAIABBAWohACAFQQFqIgUgCSgCBCIBSQ0ACwsgAygCACEHCyADIAcgAWs2AgBBASEADAELQQAhACAEQQFBnRNBABAPCyAGQSBqJAAgAAtSACABIAAtAAA6AAcgASAALQABOgAGIAEgAC0AAjoABSABIAAtAAM6AAQgASAALQAEOgADIAEgAC0ABToAAiABIAAtAAY6AAEgASAALQAHOgAAC5IBAQR/IAAgATYCoAECQCAAKAJIIgNFDQAgAygCGCIGRQ0AIAAoAgwiBEUNACAEKALQK0UNACADKAIQIgRFBEBBAQ8LQQAhAwNAIAEgACgCDCgC0CsgA0G4CGxqKAIETwRAIAJBAUGixQBBABAPQQAPCyAGIANBNGxqIAE2AihBASEFIANBAWoiAyAERw0ACwsgBQusBwIJfwh+IwBBEGsiCiQAAkAgAkUEQCADQQFB+tUAQQAQDwwBCyACKAIQIgsgACgCSCIGKAIQSQRAIANBAUG1zgBBABAPDAELIAQgACgCaCIFIAAoAmxsIgdPBEAgCiAENgIAIAogB0EBazYCBCADQQFB9/oAIAoQD0EAIQUMAQsgAiAAKAJUIAQgBSAEIAVuIgdsayIIIAAoAlxsaiIFNgIAIAIgBSAGKAIAIgYgBSAGSxsiBjYCACACIAAoAlQgACgCXCAIQQFqbGoiBTYCCCACIAUgACgCSCgCCCIIIAUgCEkbIgg2AgggAiAAKAJYIAAoAmAgB2xqIgU2AgQgAiAFIAAoAkgoAgQiCSAFIAlLGyIJNgIEIAIgACgCWCAAKAJgIAdBAWpsaiIFNgIMIAIgBSAAKAJIKAIMIgcgBSAHSRsiBTYCDCAAKAJIIgwoAhAiBwRAIAWsQgF9IREgCKxCAX0hEiAJrUIBfSETIAatQgF9IRQgDCgCGCEIIAIoAhghBUEAIQYDQCAFIAggBkE0bGooAigiCTYCKCAFIBQgBSgCACIMrSIOfCAOgCIVPgIQIAUgEyAFKAIEIg2tIg58IA6AIhA+AhQgBUJ/IAmtIg6GIg8gEMR9IA6HpyAPIBEgDawiEHwgEH/EfSAOh6drNgIMIAUgDyAVxH0gDoenIA8gEiAMrCIPfCAPf8R9IA6Hp2s2AgggBUE0aiEFIAZBAWoiBiAHRw0ACwsgByALSQRAIAIoAhghBQNAIAUgB0E0bCIGaigCLBAQIAIoAhgiBSAGakEANgIsIAdBAWoiByACKAIQSQ0ACyACIAAoAkgoAhA2AhALIAAoAkwiBQRAIAUQIQsgAEEBQSQQEyIHNgJMQQAhBSAHRQ0AIAIgBxA/IAAgBDYCLCAAKALAAUEXIAMQJEUNACAAKALAASIEKAIAIQYgBCgCCCEHAkAgBgRAQQEhBSAGQQFxIQsgBkEBRgR/QQAFIAZBfnEhCEEAIQYDQAJ/QQAgBUUNABpBACAAIAEgAyAHKAIAEQAARQ0AGiAAIAEgAyAHKAIEEQAAQQBHCyEFIAdBCGohByAGQQJqIgYgCEcNAAsgBUEBcwshBgJAAkAgCwRAIAYNASAAIAEgAyAHKAIAEQAAQQBHIQULIARBADYCACAFQQFxRQ0BDAMLIARBADYCAAsgACgCSBAhQQAhBSAAQQA2AkgMAgsgBEEANgIACyAAIAIQRyEFCyAKQRBqJAAgBQvyAwEFfwJAAkAgACgCPCICRQRAIAEoAhANAUEBDwsgAkE0bBAUIgVFDQEgASgCEARAIAEoAhghAgNAIAIgA0E0bCIEaigCLBAQIAEoAhgiAiAEakEANgIsIANBAWoiAyABKAIQIgRJDQALCyABIAAoAjwEfyAAKAJMKAIYIQNBACECA0AgBSACQTRsaiIEIAMgACgCQCACQQJ0aigCAEE0bCIGaiID/QACAP0LAgAgBCADKAIwNgIwIAQgA/0AAiD9CwIgIAQgA/0AAhD9CwIQIAQgACgCTCgCGCIDIAZqIgYoAiQ2AiQgBCAGKAIsNgIsIAZBADYCLCACQQFqIgIgACgCPCIGSQ0ACyABKAIQBSAECwR/IAAoAkwoAhghAkEAIQMDQCACIANBNGwiBGooAiwQECAAKAJMKAIYIgIgBGpBADYCLCADQQFqIgMgASgCEEkNAAsgACgCPAUgBgs2AhAgASgCGBAQIAEgBTYCGEEBDwsgASgCGCEEIAAoAkwoAhghA0EAIQIDQCAEIAJBNGwiBWoiBCADIAVqKAIkNgIkIAQoAiwQECABKAIYIgQgBWogACgCTCgCGCIDIAVqIgUoAiw2AiwgBUEANgIsIAJBAWoiAiABKAIQSQ0AC0EBDwsgACgCSBAhIABBADYCSEEAC84EAQh/AkAgAkUNAAJAIAAoAqABIgVFDQAgACgCSCIERQ0AIAQoAhBFDQAgBCgCGCgCKCAFRw0AIAIoAhAiCEUNACACKAIYIgYoAigNACAGKAIsDQBBACEEIAhBCE8EQCAIQXhxIQkDQCAGIARBNGxqIAU2AiggBiAEQQFyQTRsaiAFNgIoIAYgBEECckE0bGogBTYCKCAGIARBA3JBNGxqIAU2AiggBiAEQQRyQTRsaiAFNgIoIAYgBEEFckE0bGogBTYCKCAGIARBBnJBNGxqIAU2AiggBiAEQQdyQTRsaiAFNgIoIARBCGohBCAKQQhqIgogCUcNAAsLIAhBB3EiCARAA0AgBiAEQTRsaiAFNgIoIARBAWohBCALQQFqIgsgCEcNAAsLIAIgAxA3DQBBAA8LIAAoAkwiBUUEQCAAQQFBJBATIgU2AkwgBUUNAQsgAiAFED8gACgCwAFBFiADECRFDQAgACgCwAEiBigCACEEIAYoAgghBQJAIAQEQEEBIQcgBEEBcSEIIARBAUYEf0EABSAEQX5xIQlBACEEA0ACf0EAIAdFDQAaQQAgACABIAMgBSgCABEAAEUNABogACABIAMgBSgCBBEAAEEARwshByAFQQhqIQUgBEECaiIEIAlHDQALIAdBAXMLIQQCQAJAIAgEQCAEDQEgACABIAMgBSgCABEAAEEARyEHCyAGQQA2AgAgB0EBcUUNAQwDCyAGQQA2AgALIAAoAkgQISAAQQA2AkhBAA8LIAZBADYCAAsgACACEEchBwsgBwv4BAEGfwJAQQFBMBATIgIEfyACIAAoAsgBIgH9AAMA/QsDACACIAEpAxA3AxAgAiABKAIYIgE2AhggAiABQRhsEBQiATYCHCABRQRAIAIQEEEADwsCQCAAKALIASgCHCIDBEAgASADIAIoAhhBGGwQEhoMAQsgARAQIAJBADYCHAsgAiAAKALIASgCJCIBNgIkIAIgAUEoEBMiATYCKCABRQRAIAIoAhwQECACEBBBAA8LAkAgACgCyAEoAigEQCACKAIkRQ0BA0AgASAFQShsIgNqIAAoAsgBKAIoIANqKAIUIgE2AhQgAUEYbBAUIQEgAigCKCIEIANqIgYgATYCGCABRQRAIAUEf0EAIQEDQCACKAIoIAFBKGxqKAIYEBAgAUEBaiIBIAVHDQALIAIoAigFIAQLEBAMBQsCQCAAKALIASgCKCADaigCGCIEBEAgASAEIAYoAhRBGGwQEhogAigCKCEBDAELIAEQECACKAIoIgEgA2pBADYCGAsgASADaiAAKALIASgCKCADaigCBCIBNgIEIAFBGGwQFCEBIAIoAigiBCADaiIGIAE2AhAgAUUEQCAFBH9BACEBA0AgAUEobCIAIAIoAihqKAIYEBAgAigCKCAAaigCEBAQIAFBAWoiASAFRw0ACyACKAIoBSAECxAQDAULAkAgACgCyAEoAiggA2ooAhAiBARAIAEgBCAGKAIEQRhsEBIaIAIoAighAQwBCyABEBAgAigCKCIBIANqQQA2AhALIAEgA2pCADcCICAFQQFqIgUgAigCJEkNAAsMAQsgARAQIAJBADYCKAsgAgVBAAsPCyACKAIcEBAgAhAQQQALoAYCDn8BeyMAQRBrIggkACAAKAJIKAIQIQ0gCEEBQTgQEyIBNgIMAkAgAUUNACABIAAoAkgoAhAiCTYCGCABIAD9AAJU/QsCACABIAAoAmg2AhAgACgCbCECIAFBADYCNCABIAI2AhQgASAAKAIMIgwoAgA2AiAgASAMKAIENgIkIAEgDCgCCDYCKCABIAwoAhA2AiwgASAJQbgIEBMiADYCMCAABEAgDQRAA0AgDkG4CGwiACABKAIwaiIFIAwoAtArIABqIgT9AAIAIg/9CwIEIAUgBCgCEDYCFCAFIAQoAhQ2AhggD/0bASIAQSBNBEAgBUG0B2ogBEGwB2ogABASGiAFQbAGaiAEQawGaiAEKAIEEBIaCyAFIAQoAhgiADYCHCAFIAQoAqQGNgKoBkEBIQYCQCAAQQFHBEAgBCgCBEEDbCIAQQNrQd8ASw0BIABBAmshBgsgBUGkA2ohCSAFQSBqIQogBEEcaiELQQAhAAJAIAZBCEkNACAEIAZBA3RqQRxqIApLBEAgCyAFIAZBAnRqQaQDakkNAQsgBkF8cSEAQQAhAgNAIAogAkECdCIDaiALIAJBA3RqIgdBHGogB0EUaiAHQQxqIAf9CQIE/VYCAAH9VgIAAv1WAgAD/QsCACADIAlqIAdBGGogB0EQaiAHQQhqIAf9CQIA/VYCAAH9VgIAAv1WAgAD/QsCACACQQRqIgIgAEcNAAsgACAGRg0BCyAAQQFyIQMgBkEBcQRAIAogAEECdCICaiALIABBA3RqIgAoAgQ2AgAgAiAJaiAAKAIANgIAIAMhAAsgAyAGRg0AA0AgCiAAQQJ0IgJqIAsgAEEDdGoiAygCBDYCACACIAlqIAMoAgA2AgAgCiAAQQFqIgNBAnQiAmogCyADQQN0aiIDKAIENgIAIAIgCWogAygCADYCACAAQQJqIgAgBkcNAAsLIAUgBCgCqAY2AqwGIA5BAWoiDiANRw0ACwsgASEDDAELIAhBDGoEQCAIKAIMIgEoAjAiAAR/IAAQECAIKAIMBSABCxAQIAhBADYCDAsLIAhBEGokACADC/kEAQh/IwBBgAJrIgMkACAABEBB/AxBESACEB0gAyAAKAIANgLwASACQZoRIANB8AFqEBYgAyAAKAIENgLgASACQacRIANB4AFqEBYgAyAAKAIINgLQASACQYI3IANB0AFqEBYgAyAAKAIQNgLAASACQf0QIANBwAFqEBYgAUEASgRAA0AgACgC0CshBCADIAc2ArABIAJBog0gA0GwAWoQFiADIAQgB0G4CGxqIgQoAgA2AqABIAJBmREgA0GgAWoQFiADIAQoAgQ2ApABIAJB9DcgA0GQAWoQFiADIAQoAgg2AoABIAJBoDYgA0GAAWoQFiADIAQoAgw2AnAgAkGwNiADQfAAahAWIAMgBCgCEDYCYCACQYgRIANB4ABqEBYgAyAEKAIUNgJQIAJBtjggA0HQAGoQFkHVC0EXIAIQHSAEKAIEBEAgBEGwB2ohBiAEQawGaiEIQQAhBQNAIAggBUECdCIJaigCACEKIAMgBiAJaigCADYCRCADIAo2AkAgAkGLDCADQUBrEBYgBUEBaiIFIAQoAgRJDQALCyACEG4gAyAEKAIYNgIwIAJBwDYgA0EwahAWIAMgBCgCpAY2AiAgAkHxNiADQSBqEBZBASEGQe0LQRQgAhAdAkAgBCgCGEEBRwRAIAQoAgQiBUEATA0BIAVBA2xBAmshBgsgBEEcaiEIQQAhBQNAIAMgCCAFQQN0aikCAEIgiTcDECACQYsMIANBEGoQFiAFQQFqIgUgBkcNAAsLIAIQbiADIAQoAqgGNgIAIAJB4DYgAxAWQZkMQQUgAhAdIAdBAWoiByABRw0ACwtBmgxBBCACEB0LIANBgAJqJAAL5goDCX8BewF+IwBBsAFrIgUkAAJAIAFBgANxBEBBni1BCyACEB0MAQsCQCABQQFxRQ0AIAAoAkgiBkUNACMAQdAAayIDJABB7gxBDSACEB0gA0EAOgBPIANBCToATiADIAYpAgA3AkQgAyADQc4AaiIENgJAIAJBhjkgA0FAaxAWIAMgBikCCDcCNCADIAQ2AjAgAkH1OCADQTBqEBYgAyAGKAIQNgIkIAMgBDYCICACQZM3IANBIGoQFgJAIAYoAhhFDQAgBigCEEUNAANAIAMgA0HOAGoiCjYCECADIAc2AhQgAkGODSADQRBqEBYgBigCGCAHQTRsaiEIIwBBMGsiBCQAIARBCTsALiAEQQk6AC0gBCAIKQIANwIkIAQgBEEtaiIJNgIgIAJBzzYgBEEgahAWIAQgCCgCGDYCFCAEIAk2AhAgAkHFOCAEQRBqEBYgBCAIKAIgNgIEIAQgCTYCACACQao4IAQQFiAEQTBqJAAgAyAKNgIAIAJBlAwgAxAWIAdBAWoiByAGKAIQSQ0ACwtBnAxBAiACEB0gA0HQAGokAAsCQCABQQJxRQ0AIAAoAkhFDQBB+Q1BJCACEB0gBSAAKQJUNwOgASACQecRIAVBoAFqEBYgBSAAKQJcNwOQASACQcURIAVBkAFqEBYgBSAAKQNoNwOAASACQdcRIAVBgAFqEBYgACgCDCAAKAJIKAIQIAIQS0GcDEECIAIQHQsCQCABQQhxRQ0AIAAoAkhFDQAgACgCaCAAKAJsbCIERQ0AIAAoApwBIQMDQCADIAAoAkgoAhAgAhBLIANBjCxqIQMgC0EBaiILIARHDQALCyABQRBxRQ0AIAAoAsgBIQFB0w1BJSACEB0gBSAB/QADAP0LBHAgAkHJKyAFQfAAahAWQcENQREgAhAdAkAgASgCHEUNACABKAIYRQ0AQQAhAwNAIAEoAhwgA0EYbGoiAC8BACEEIAApAwghDSAFIAAoAhA2AmAgBSANNwNYIAUgBDYCUCACQYs4IAVB0ABqEBYgA0EBaiIDIAEoAhhJDQALC0GaDEEEIAIQHQJAIAEoAigiBEUNACABKAIkIgdFDQBBACEDQQAhAAJAIAdBBE8EQCAHQXxxIQADQCAEIANBA3JBKGxqQQRqIAQgA0ECckEobGpBBGogBCADQQFyQShsakEEaiAEIANBKGxq/QkCBP1WAgAB/VYCAAL9VgIAAyAM/a4BIQwgA0EEaiIDIABHDQALIAwgDCAM/Q0ICQoLDA0ODwABAgMAAQID/a4BIgwgDCAM/Q0EBQYHAAECAwABAgMAAQID/a4B/RsAIQMgACAHRg0BCwNAIAQgAEEobGooAgQgA2ohAyAAQQFqIgAgB0cNAAsLIANFDQBBsA1BECACEB0gASgCJARAIAEoAighAEEAIQcDQCAFIAAgB0EobCIEaigCBCIGNgJEIAUgBzYCQCACQdE4IAVBQGsQFiABKAIoIQACQCAGRQ0AQQAhAyAAIARqKAIQRQ0AA0AgASgCKCAEaigCECADQRhsaiIA/QADACEMIAUgACkDEDcDOCAFIAz9CwMoIAUgAzYCICACQaXRACAFQSBqEBYgA0EBaiIDIAZHDQALIAEoAighAAsCQCAAIARqIgYoAhhFDQBBACEDIAYoAhRFDQADQCAAIARqKAIYIANBGGxqIgAvAQAhBiAAKQMIIQ0gBSAAKAIQNgIQIAUgDTcDCCAFIAY2AgAgAkGLOCAFEBYgA0EBaiIDIAEoAigiACAEaigCFEkNAAsLIAdBAWoiByABKAIkSQ0ACwtBmgxBBCACEB0LQZwMQQIgAhAdCyAFQbABaiQAC48CAQN/AkBBAUHoARATIgEEfyABQQE2AgAgAUEBNgK4ASABIAEtALwBQQZyOgC8ASABQQFBjCwQEyIANgIMIABFDQEgAUEBQegHEBMiADYCECAARQ0BIAFCADcDMCABQX82AiwgAUHoBzYCFAJAQQFBMBATIgAEQCAAQQA2AhggAEHkADYCICAAQeQAQRgQEyICNgIcIAINASAAEBALIAFBADYCyAEMAgsgAEEANgIoIAEgADYCyAEgARAzIgA2AsQBIABFDQEgARAzIgA2AsABIABFDQECQBCRAUUNAAsgAUEAEGYiADYC1AEgAEUEQCABQQAQZiIANgLUASAARQ0CCyABBUEACw8LIAEQOEEAC40JAgl/AX4jAEHQAWsiByQAIAAoAkghCQJAAkACQCAAKAJoQQFHDQAgACgCbEEBRw0AIAAoApwBKALcKw0BCyAAKAIIQQhGDQAgBkEBQeHOAEEAEA8MAQsCQCABKAIQIgxFDQAgACgCoAEhCiABKAIYIQsgDEEITwRAIAxBeHEhDwNAIAsgCEE0bGogCjYCKCALIAhBAXJBNGxqIAo2AiggCyAIQQJyQTRsaiAKNgIoIAsgCEEDckE0bGogCjYCKCALIAhBBHJBNGxqIAo2AiggCyAIQQVyQTRsaiAKNgIoIAsgCEEGckE0bGogCjYCKCALIAhBB3JBNGxqIAo2AiggCEEIaiEIIA5BCGoiDiAPRw0ACwsgDEEHcSIMRQ0AA0AgCyAIQTRsaiAKNgIoIAhBAWohCCANQQFqIg0gDEcNAAsLIAIgA3IgBHIgBXJFBEAgBkEEQa8wQQAQDyAAQgA3AhwgACAAKQJoNwIkIAEgCf0AAgD9CwIAIAEgBhA3IQgMAQsgAkEASARAIAcgAjYCACAGQQFBx90AIAcQD0EAIQgMAQsgAiAJKAIIIghLBEAgByAINgIUIAcgAjYCECAGQQFBm+EAIAdBEGoQD0EAIQgMAQsCQCACIAkoAgAiCEkEQCAHIAg2AsQBIAcgAjYCwAEgBkECQfvjACAHQcABahAPIABBADYCHCAJKAIAIQIMAQsgACACIAAoAlRrIAAoAlxuNgIcCyABIAI2AgAgA0EASARAIAcgAzYCICAGQQFBh90AIAdBIGoQD0EAIQgMAQsgAyAJKAIMIgJLBEAgByACNgI0IAcgAzYCMCAGQQFB7t8AIAdBMGoQD0EAIQgMAQsCQCADIAkoAgQiAkkEQCAHIAI2ArQBIAcgAzYCsAEgBkECQcziACAHQbABahAPIABBADYCICAJKAIEIQMMAQsgACADIAAoAlhrIAAoAmBuNgIgCyABIAM2AgRBACEIIARBAEwEQCAHIAQ2AkAgBkEBQcXcACAHQUBrEA8MAQsgBCAJKAIAIgJJBEAgByACNgJUIAcgBDYCUCAGQQFBouMAIAdB0ABqEA8MAQsCQCAEIAkoAggiAksEQCAHIAI2AqQBIAcgBDYCoAEgBkECQcPgACAHQaABahAPIAAgACgCaDYCJCAJKAIIIQQMAQsgACAANQJcIhAgBCAAKAJUa618QgF9IBCAPgIkCyABIAQ2AgggBUEATARAIAcgBTYCYCAGQQFBgtwAIAdB4ABqEA8MAQsgBSAJKAIEIgJJBEAgByACNgJ0IAcgBTYCcCAGQQFB8uEAIAdB8ABqEA8MAQsCQCAFIAkoAgwiAksEQCAHIAI2ApQBIAcgBTYCkAEgBkECQZXfACAHQZABahAPIAAgACgCbDYCKCAJKAIMIQUMAQsgACAANQJgIhAgBSAAKAJYa618QgF9IBCAPgIoCyABIAU2AgwgACAALQBEQQJyOgBEIAEgBhA3IghFBEBBACEIDAELIAcgAf0AAgD9CwSAASAGQQRBtDkgB0GAAWoQDwsgB0HQAWokACAIC5UCAQd/IwBBIGsiBSQAAn8gACgCSCIERQRAIANBAUHF5gBBABAPQQAMAQtBAEEEIAQoAhAQEyIERQ0AGiABBEAgACgCSCEIA0ACQAJAIAIgBkECdGooAgAiByAIKAIQTwRAIAUgBzYCECADQQFB+REgBUEQahAPDAELIAQgB0ECdGoiCSgCAEUNASAFIAc2AgAgA0EBQY0aIAUQDwsgBBAQQQAMAwsgCUEBNgIAIAZBAWoiBiABRw0ACwsgBBAQIAAoAkAQEAJAIAEEQCAAIAFBAnQiBBAUIgM2AkAgA0UEQCAAQQA2AjxBAAwDCyADIAIgBBASGgwBCyAAQQA2AkALIAAgATYCPEEBCyEKIAVBIGokACAKC7wFAQd/IAFBAUEkEBMiBDYCSAJAAkAgBEUNAAJAIAEoAsQBQRIgAxAkBEAgASgCxAFBEyADECQNAQsMAgsgASgCxAEiBygCACEGIAcoAgghBAJAIAYEQEEBIQUgBkEBRwRAIAZBfnEhCQNAAn9BACAFRQ0AGkEAIAEgACADIAQoAgARAABFDQAaIAEgACADIAQoAgQRAABBAEcLIQUgBEEIaiEEIAhBAmoiCCAJRw0ACwsCQAJAIAZBAXEEQCAFRQ0BIAEgACADIAQoAgARAABBAEchBQsgB0EANgIAIAVFDQEMAwsgB0EANgIACwwDCyAHQQA2AgALAkAgASgCwAFBFCADECQEQCABKALAAUEVIAMQJA0BCwwCCyABKALAASIHKAIAIQYgBygCCCEEAkAgBgRAQQEhBSAGQQFxIQkgBkEBRgR/QQAFIAZBfnEhBkEAIQgDQAJ/QQAgBUUNABpBACABIAAgAyAEKAIAEQAARQ0AGiABIAAgAyAEKAIEEQAAQQBHCyEFIARBCGohBCAIQQJqIgggBkcNAAsgBUULIQYCQAJAIAkEQCAGDQEgASAAIAMgBCgCABEAAEEARyEFCyAHQQA2AgAgBUUNAQwDCyAHQQA2AgALDAMLIAdBADYCAAsgAkEBQSQQEyIANgIAIABFDQAgASgCSCAAED8gASgCyAEgASgCbCABKAJobCIANgIkIABBKBATIQMgASgCyAEiACADNgIoAkAgA0UNACAAKAIkRQRAQQEPC0EAIQQDQCADIARBKGwiBWoiAEEANgIUIABB5AA2AhxB5ABBGBATIQAgBSABKALIASIHKAIoIgNqIAA2AhggAEUNAUEBIQogBEEBaiIEIAcoAiRJDQALDAELIAIoAgAQIUEAIQogAkEANgIACyAKDwsgASgCSBAhIAFBADYCSEEACwIACwQAQQELNAACQCAARQ0AIAFFDQAgACABKAIENgKkASAAIAEoAgA2AqABIAAgASgCuEBBAnE2AuABCwu0BQEIfyAAKAIYIgQoAhAiCUUEQEEADwsgBCgCGCEFIAAoAhQoAgAoAhQhBAJAAkAgAUUEQEEAIQEDQCAFKAIYIQIgBCgCHCAEKAIYQZgBbGoiAEGMAWsoAgAiByAAQZQBaygCACIIayEDIABBkAFrKAIAIABBmAFrKAIAayEAAkAgByAIRg0AIACtIAOtfkIgiFANAAwECyAAIANsIQMCQEEEIAJBA3YgAkEHcUEAR2oiACAAQQNGGyICRQ0AIAKtIAOtfkIgiFANAAwEC0F/IQAgAiADbCICIAFBf3NLDQIgBEHMAGohBCAFQTRqIQUgASACaiIBIQAgBkEBaiIGIAlHDQALDAELQQAhASAAKAJARQRAA0AgBSgCGCECIAQoAhwgBCgCGEGYAWxqIgBBBGsoAgAiByAAQQxrKAIAIghrIQMgAEEIaygCACAAQRBrKAIAayEAAkAgByAIRg0AIACtIAOtfkIgiFANAAwECyAAIANsIQMCQEEEIAJBA3YgAkEHcUEAR2oiACAAQQNGGyICRQ0AIAKtIAOtfkIgiFANAAwEC0F/IQAgAiADbCICIAFBf3NLDQIgBEHMAGohBCAFQTRqIQUgASACaiIBIQAgBkEBaiIGIAlHDQALDAELA0AgBSgCGCECIAQoAhwgBCgCGEGYAWxqIgBBjAFrKAIAIgcgAEGUAWsoAgAiCGshAyAAQZABaygCACAAQZgBaygCAGshAAJAIAcgCEYNACAArSADrX5CIIhQDQAMAwsgACADbCEDAkBBBCACQQN2IAJBB3FBAEdqIgAgAEEDRhsiAkUNACACrSADrX5CIIhQDQAMAwtBfyEAIAIgA2wiAiABQX9zSw0BIARBzABqIQQgBUE0aiEFIAEgAmoiASEAIAZBAWoiBiAJRw0ACwsgAA8LQX8L2gQBC38gAARAIAAoAhQiAQRAIAEoAgAiBQRAIAUoAhQhAyAFKAIQBH9BEEERIAAtAChBAXEbIQgDQCADKAIcIgIEQCADKAIgIgFBmAFuIQpBACEJIAFBmAFPBH8DQCACKAIwIgEEQCACKAI0IgZBKG4hB0EAIQQgBkEoTwR/A0AgASgCIBApIAFBADYCICABKAIkECkgAUEANgIkIAEgCBECACABQShqIQEgBEEBaiIEIAdHDQALIAIoAjAFIAELEBAgAkEANgIwCyACKAJUIgEEQCACKAJYIgZBKG4hB0EAIQQgBkEoTwR/A0AgASgCIBApIAFBADYCICABKAIkECkgAUEANgIkIAEgCBECACABQShqIQEgBEEBaiIEIAdHDQALIAIoAlQFIAELEBAgAkEANgJUCyACKAJ4IgEEQCACKAJ8IgZBKG4hB0EAIQQgBkEoTwR/A0AgASgCIBApIAFBADYCICABKAIkECkgAUEANgIkIAEgCBECACABQShqIQEgBEEBaiIEIAdHDQALIAIoAngFIAELEBAgAkEANgJ4CyACQZgBaiECIAlBAWoiCSAKRw0ACyADKAIcBSACCxAQIANBADYCHAsCQCADKAIoRQ0AIAMoAiQiAUUNACABEBAgA/0MAAAAAAAAAAAAAAAAAAAAAP0LAiQLIAMoAjQQECADQcwAaiEDIAtBAWoiCyAFKAIQSQ0ACyAFKAIUBSADCxAQIAVBADYCFCAAKAIUKAIAEBAgACgCFCIBQQA2AgALIAEQECAAQQA2AhQLIAAoAkQQECAAEBALC8sTARV/IwBBIGsiDyQAIA8gBTYCGCABIAMoAhxBzABsaigCHCADKAIgQZgBbGohEQJAAkAgAygCKA0AIBEoAhhFDQAgEUEcaiEJA0ACQCAJKAIIIAkoAgBHBH8gCSgCDCAJKAIERgVBAQsNACADKAIkIgEgCSgCGEEobk8EQCAIQQFBghVBABAPDAQLIAkoAhQgAUEobGoiASgCIBBiIAEoAiQQYiABKAIUIAEoAhBsIg1FDQAgASgCGCEBIA1BCE8EQCANQXhxIQtBACEKA0AgAUIANwLoAyABQgA3AqgDIAFCADcC6AIgAUIANwKoAiABQgA3AugBIAFCADcCqAEgAUIANwJoIAFCADcCKCABQYAEaiEBIApBCGoiCiALRw0ACwtBACEKIA1BB3EiDUUNAANAIAFCADcCKCABQUBrIQEgCkEBaiIKIA1HDQALCyAJQSRqIQkgDEEBaiIMIBEoAhhJDQALCyAFIQ0CQCACLQAAQQJxRQ0AIAdBBU0EQCAIQQJBsR9BABAPDAELAkAgBS0AAEH/AUYEQCAFLQABQZEBRg0BCyAIQQJB2x9BABAPDAELIA8gBUEGaiINNgIYC0EUEBQiC0UNAAJ/IAAtAGxBAXEEQCAAQShqIQcgACgCKCENIABBLGoMAQsgAi0AiCxBAnEEQCACQbAoaiEHIAIoArAoIQ0gAkG8KGoMAQsgDyAFIAdqIA1rNgIcIA9BGGohByAPQRxqCyISKAIAIQAgC0IANwIMIAsgDTYCCCALIA02AgAgCyAAIA1qNgIEIAtBARAfRQRAIAsQZBogCygCCCALKAIAayEaIAsQLCAaIA1qIQECQCACLQAAQQRxRQ0AIAcoAgAgEigCACABa2pBAU0EQCAIQQJBmCFBABAPDAELAkAgAS0AAEH/AUYEQCABLQABQZIBRg0BCyAIQQJBwiFBABAPDAELIAFBAmohAQsgEiASKAIAIAcoAgAgAWtqNgIAIAcgATYCACAEQQA2AgAgBiAPKAIYIAVrNgIAQQEhFwwBCyARKAIYBEAgEUEcaiEQA0AgAygCJCEAIBAoAhQhAQJAIBAoAgggECgCAEcEfyAQKAIMIBAoAgRGBUEBCw0AIAEgAEEobGoiFCgCFCAUKAIQbCIYRQ0AIBQoAhghCUEAIRUDQAJAAn8gCSgCKEUEQCALIBQoAiAgFSADKAIoQQFqEGAMAQsgC0EBEB8LRQRAIAlBADYCJAwBCyAJKAIoRQRAQQAhAQNAIAEiAEEBaiEBIAsgFCgCJCAVIAAQYEUNAAsgECgCHCEBIAlBAzYCICAJIAE2AhggCSABIABrQQFqNgIcCyAJAn9BASALQQEQH0UNABpBAiALQQEQH0UNABogC0ECEB8iAEEDRwRAIABBA2oMAQsgC0EFEB8iAEEfRwRAIABBBmoMAQsgC0EHEB9BJWoLNgIkQQAhAQNAIAEiAEEBaiEBIAtBARAfDQALIAkgCSgCICAAajYCIAJAAkACfyAJKAIoIgBFBEAgAigC0CsgAygCHEG4CGxqKAIQIQAgCSgCMEUEQCAJKAIAQfABEBciAUUNBCAJIAE2AgAgASAJKAIwQRhsakEAQfABEBUaIAlBCjYCMAsgCSgCACIB/QwAAAAAAAAAAAAAAAAAAAAA/QsCACABQgA3AhBBAUEKQe0AIABBAXEbIABBBHEbIQpBAAwBCyAJKAIAIgEgAEEBayIMQRhsaiIKKAIEIAooAgxHDQEgAigC0CsgAygCHEG4CGxqKAIQIQogCSgCMCIMIABBAWpJBH8gASAMQQpqIgxBGGwQFyIBRQ0DIAkgATYCACABIAkoAjBBGGxqQQBB8AEQFRogCSAMNgIwIAkoAgAFIAELIABBGGxqIgH9DAAAAAAAAAAAAAAAAAAAAAD9CwIAIAFCADcCEAJ/QQEgCkEEcQ0AGkHtACAKQQFxRQ0AGkECQQJBASABQQxrKAIAIgpBCkYbIApBAUYbCyEKIAALIQwgASAKNgIMCyAJKAIkIQAgAigC0CsgAygCHEG4CGxqLQAQQcAAcQRAA0AgDEEYbCIOIAkoAgBqIABBASAMGyITNgIQIAkoAiAhFkEAIQogACEBIBNBAk8EQANAIApBAWohCiABQQNLIRsgAUEBdiEBIBsNAAsLIAogFmoiAUEhTwRAIA8gATYCECAIQQFBvPQAIA9BEGoQDwwDCyALIAEQHyEKIAkoAgAiASAOaiIOIAo2AhQgACAOKAIQayIAQQBMDQMgAigC0CsgAygCHEG4CGxqKAIQIQogCSgCMCIOIAxBAmpJBEAgASAOQQpqIg5BGGwQFyIBRQ0DIAkgATYCACABIAkoAjBBGGxqQQBB8AEQFRogCSAONgIwIAkoAgAhAQsgASAMQQFqIgxBGGxqIgH9DAAAAAAAAAAAAAAAAAAAAAD9CwIAIAFCADcCECABAn9BASAKQQRxDQAaQe0AIApBAXFFDQAaQQJBAkEBIAFBDGsoAgAiAUEKRhsgAUEBRhsLNgIMDAALAAsDQCAMQRhsIg4gCSgCAGoiASABKAIMIAEoAgRrIgEgACAAIAFKGyIBNgIQIAkoAiAhE0EAIQogAUECTwRAA0AgCkEBaiEKIAFBA0shHCABQQF2IQEgHA0ACwsgCiATaiIBQSFPBEAgDyABNgIAIAhBAUG89AAgDxAPDAILIAsgARAfIQogCSgCACIBIA5qIg4gCjYCFCAAIA4oAhBrIgBBAEwNAiACKALQKyADKAIcQbgIbGooAhAhCiAJKAIwIg4gDEECakkEQCABIA5BCmoiDkEYbBAXIgFFDQIgCSABNgIAIAEgCSgCMEEYbGpBAEHwARAVGiAJIA42AjAgCSgCACEBCyABIAxBAWoiDEEYbGoiAf0MAAAAAAAAAAAAAAAAAAAAAP0LAgAgAUIANwIQIAECf0EBIApBBHENABpB7QAgCkEBcUUNABpBAkECQQEgAUEMaygCACIBQQpGGyABQQFGGws2AgwMAAsACyALECwMBQsgCUFAayEJIBVBAWoiFSAYRw0ACwsgEEEkaiEQIBlBAWoiGSARKAIYSQ0ACwsgCxBkRQRAIAsQLAwBCyALKAIIIAsoAgBrIR0gCxAsIB0gDWohAQJAIAItAABBBHFFDQAgBygCACASKAIAIAFrakEBTQRAIAhBAkGYIUEAEA8MAQsCQCABLQAAQf8BRgRAIAEtAAFBkgFGDQELIAhBAkHCIUEAEA8MAQsgAUECaiEBCyASIBIoAgAgBygCACABa2o2AgAgByABNgIAQQEhFyAEQQE2AgAgBiAPKAIYIAVrNgIACyAPQSBqJAAgFwuWJAIUfw5+AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAJUDgUAAQIDBAoLAkAgACgCNCIGIAAoAsQBIgFJBEAgACgCQCIHIAFBAWpJDQELIAAoAuwBQQFB9D9BABAPDAwLIAAoAixFBEAgACgCJCECQQAhAQwFCyAAQQA2AiwgACgCRCEDQQEhAQwECwJAIAAoAjQiBiAAKALEASIBSQRAIAAoAkAiByABQQFqSQ0BCyAAKALsAUEBQaHAAEEAEA8MCwsgACgCLEUEQCAAKAIkIQRBACEBDAgLIABBADYCLCAAKAIwIQNBASEBDAcLAkAgACgCNCIEIAAoAsQBIgpJBEAgACgCQCIOIApBAWpJDQELIAAoAuwBQQFBqMEAQQAQDwwKCyAAKAIsRQRAIAAoAighCwwGCyAAQgA3AuQBIABBADYCLCAAKALIASEMA0AgDCAHQQR0aiIFKAIIIg8EQCAFKAIMIRJBACEBA0ACQCAPIAFBf3NqIhAgEiABQQR0aiIRKAIAaiIJQR9LDQAgBSgCACITQX8gCXZLDQAgACACIBMgCXQiCSACIAlJGyAJIAIbIgI2AuQBCwJAIBEoAgQgEGoiCUEfSw0AIAUoAgQiEEF/IAl2Sw0AIAAgAyAQIAl0IgkgAyAJSRsgCSADGyIDNgLoAQsgAUEBaiIBIA9HDQALCyAHQQFqIgcgCkcNAAsgAkUNByADRQ0HIAAtAABFBEAgACAAKALQATYCbCAAIAAoAswBNgJkIAAgACgC2AE2AnAgACAAKALUATYCaAsgACgCMCEFQQEhAQwFCwJAIAAoAjQiBSAAKALEASIJSQRAIAAoAkAiEiAJQQFqSQ0BCyAAKALsAUEBQfvAAEEAEA8MCQsgACgCLEUEQCAAKALIASINIAAoAhwiBEEEdGohCyAAKAIoIQgMBAsgAEIANwLkASAAQQA2AiwgACgCyAEhDQNAIA0gBkEEdGoiCigCCCIOBEAgCigCDCEQQQAhAQNAAkAgDiABQX9zaiIRIBAgAUEEdGoiEygCAGoiDEEfSw0AIAooAgAiFEF/IAx2Sw0AIAAgAiAUIAx0IgwgAiAMSRsgDCACGyICNgLkAQsCQCATKAIEIBFqIgxBH0sNACAKKAIEIhFBfyAMdksNACAAIAMgESAMdCIMIAMgDEkbIAwgAxsiAzYC6AELIAFBAWoiASAORw0ACwsgBkEBaiIGIAlHDQALIAJFDQYgA0UNBgJAIAAtAAAEQCAAKAJsIQYMAQsgACAAKALQASIGNgJsIAAgACgCzAE2AmQgACAAKALYATYCcCAAIAAoAtQBNgJoC0EBIQEMAwsCQCAAKAI0IgYgACgCxAEiAUkEQCAAKAJAIg8gAUEBakkNAQsgACgC7AFBAUHOwABBABAPDAYLIAAoAixFBEAgACgCyAEgACgCHCIGQQR0aiEFIAAoAighB0EAIQEMAgsgACAGNgIcIABBADYCLEEBIQEMAQsDQAJ/AkAgAUUEQCACQQFqIQIMAQsgACADNgIoIAAoAjggA00NCSAAKAIwIQRBAAwBC0EBCyEBA0ACQAJAAkACQCABRQRAIAAgBDYCICAEIAAoAjxPDQEgACAGNgIcIAYhAUEAIQUMBAsgACACNgIkIAAoAkwgAk0EQCAAKAIcIQFBASEFDAQLIAAoAhAgACgCIGwgACgCDCAAKAIobGogACgCFCAAKAIcbGogACgCGCACbGoiASAAKAIITwRADAwLIAAoAgQgAUEBdGoiAS8BAA0BDA0LIAAoAihBAWohAwwBC0EAIQEMAwtBASEBDAILA0ACQAJAAkAgBUUEQCABIAdPDQEgACgCICIFIAAoAsgBIAFBBHRqIg0oAghPDQMgAC0AAEUEQCAAIA0oAgwgBUEEdGoiASgCDCABKAIIbDYCTAsgACgCSCECQQEhAQwFCyAAIAFBAWoiATYCHAwBCyAAKAIgQQFqIQRBACEBDAMLQQAhBQwBC0EBIQUMAAsACwALAAsDQAJ/AkAgAUUEQCAAIAdBAWoiBzYCKAwBCyAGIA9PDQggAEIANwLkASAAKALIASAGQQR0aiIFKAIIIgtFDQggBSgCDCEKQQAhAkEAIQRBACEBA0ACQCALIAFBf3NqIgkgCiABQQR0aiIOKAIAaiIIQR9LDQAgBSgCACIMQX8gCHZLDQAgACAEIAwgCHQiCCAEIAhJGyAIIAQbIgQ2AuQBCwJAIA4oAgQgCWoiCEEfSw0AIAUoAgQiCUF/IAh2Sw0AIAAgAiAJIAh0IgggAiAISRsgCCACGyICNgLoAQsgAUEBaiIBIAtHDQALIARFDQYgAkUNBgJAIAAtAAAEQCAAKAJsIQIMAQsgACAAKALQASICNgJsIAAgACgCzAE2AmQgACAAKALYATYCcCAAIAAoAtQBNgJoC0EADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACACNgLgASACIAAoAnBPDQEgACgCZCENQQAhAQwECyAAKAI4IAdNBEAgACgCICEDQQEhAQwECyAAKAIQIAAoAiBsIAAoAgwgB2xqIAAoAhQgBmxqIAAoAhggACgCJGxqIgEgACgCCE8EQAwLCyAAKAIEIAFBAXRqIgEvAQANAQwMCyAAIAZBAWoiBjYCHAwBC0EAIQEMAwtBASEBDAILA0ACQAJAAkAgAAJ/IAFFBEAgACANNgLcASANIAAoAmhPDQIgACgCMAwBCyADQQFqCyIDNgIgIAAoAjwiASAFKAIIIgQgASAESRsgA0sEQCAFKAIAIgEgAa0iHiAEIANBf3NqIgitIhaGIhcgFoinRw0DIAUoAgQiBEJ/IBaIp3EgBEcNAyAErSIVIBaGIhhCAX0iGSAANQLYAXwgGIAhHyAZIAAoAtABIgmtfCAYgCEaIBdCAX0iGyAANQLUAXwgF4AhICAbIAAoAswBIg6tfCAXgCEcIAFCfyAFKAIMIANBBHRqIgsoAgAiCiAIaq0iHYincSABRw0DIAQgFSALKAIEIgEgCGqtIhWGIiEgFYinRw0DIAAoAuABIgStIiIgIYJCAFIEQCAEIAlHDQRCfyAVhkJ/hSAaQv////8PgyAWhoNQDQQLIAAoAtwBIgStIhUgHiAdhoJCAFIEQCAEIA5HDQRCfyAdhkJ/hSAcQv////8PgyAWhoNQDQQLIAsoAggiBEUNAyALKAIMRQ0DIBynIgsgIKdGDQMgGqciCCAfp0YNAyAAIAAoAkQiBzYCKCAAIBUgG3wgF4CnIAp2IAsgCnZrIBkgInwgGICnIAF2IAggAXZrIARsajYCJEEBIQEMBQsgACgC3AEiASAAKALkASIEaiABIARwayENDAELIAAoAuABIgEgACgC6AEiBGogASAEcGshAkEAIQEMAwtBACEBDAELQQEhAQwACwALAAsACwNAAn8CQCABRQRAIAAgCEEBaiIINgIoDAELIAAgBjYC4AEgACgCcCAGTQ0HIAAoAmQhD0EADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACAPNgLcASAPIAAoAmhPDQEgACAFNgIcIAUhBEEAIQEMBAsgACgCOCAITQRAIAAoAiAhB0EBIQEMBAsgACgCECAAKAIgbCAAKAIMIAhsaiAAKAIUIARsaiAAKAIYIAAoAiRsaiIBIAAoAghPBEAMCgsgACgCBCABQQF0aiIBLwEADQEMCwsgACgC4AEiASAAKALoASIGaiABIAZwayEGDAELQQAhAQwDC0EBIQEMAgsDQAJAAkACQAJAIAFFBEAgBCASTw0CIAAgACgCMCIHNgIgIA0gBEEEdGohCwwBCyAAIAdBAWoiBzYCIAsgACgCPCIBIAsoAggiAiABIAJJGyAHSwRAIAsoAgAiASABrSIeIAIgB0F/c2oiCq0iFoYiFyAWiKdHDQMgCygCBCICQn8gFoincSACRw0DIAKtIhUgFoYiGEIBfSIZIAA1AtgBfCAYgCEfIBkgACgC0AEiDq18IBiAIRogF0IBfSIbIAA1AtQBfCAXgCEgIBsgACgCzAEiDK18IBeAIRwgAUJ/IAsoAgwgB0EEdGoiAygCACIJIApqrSIdiKdxIAFHDQMgAiAVIAMoAgQiASAKaq0iFYYiISAViKdHDQMgACgC4AEiAq0iIiAhgkIAUgRAIAIgDkcNBEJ/IBWGQn+FIBpC/////w+DIBaGg1ANBAsgACgC3AEiAq0iFSAeIB2GgkIAUgRAIAIgDEcNBEJ/IB2GQn+FIBxC/////w+DIBaGg1ANBAsgAygCCCICRQ0DIAMoAgxFDQMgHKciAyAgp0YNAyAapyIKIB+nRg0DIAAgACgCRCIINgIoIAAgFSAbfCAXgKcgCXYgAyAJdmsgGSAifCAYgKcgAXYgCiABdmsgAmxqNgIkQQEhAQwFCyAAIARBAWoiBDYCHAwBCyAAKALcASIBIAAoAuQBIgJqIAEgAnBrIQ9BACEBDAMLQQAhAQwBC0EBIQEMAAsACwALAAsDQAJ/AkAgAUUEQCAAIAtBAWoiCzYCKAwBCyAAIAU2AiAgACgCPCAFTQ0GIAAoAmwhCEEADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACAINgLgASAIIAAoAnBPDQEgACgCZCENQQAhAQwECyAAKAI4IAtNBEAgACgCHCEGQQEhAQwECyAAKAIQIAAoAiBsIAAoAgwgC2xqIAAoAhQgACgCHGxqIAAoAhggACgCJGxqIgEgACgCCE8EQAwJCyAAKAIEIAFBAXRqIgEvAQANAQwKCyAAKAIgQQFqIQUMAQtBACEBDAMLQQEhAQwCCwNAAkACQAJAAkAgAUUEQCAAIA02AtwBIA0gACgCaE8NAiAAIAQ2AhwgBCEGDAELIAAgBkEBaiIGNgIcCyAGIA5JBEAgACgCICIHIAAoAsgBIAZBBHRqIgEoAggiA08NAyABKAIAIgIgAq0iHiADIAdBf3NqIgqtIhaGIhcgFoinRw0DIAEoAgQiA0J/IBaIp3EgA0cNAyADrSIVIBaGIhhCAX0iGSAANQLYAXwgGIAhHyAZIAAoAtABIg+tfCAYgCEaIBdCAX0iGyAANQLUAXwgF4AhICAbIAAoAswBIgmtfCAXgCEcIAJCfyABKAIMIAdBBHRqIgEoAgAiByAKaq0iHYincSACRw0DIAMgFSABKAIEIgIgCmqtIhWGIiEgFYinRw0DIAAoAuABIgOtIiIgIYJCAFIEQCADIA9HDQRCfyAVhkJ/hSAaQv////8PgyAWhoNQDQQLIAAoAtwBIgOtIhUgHiAdhoJCAFIEQCADIAlHDQRCfyAdhkJ/hSAcQv////8PgyAWhoNQDQQLIAEoAggiA0UNAyABKAIMRQ0DIBynIgEgIKdGDQMgGqciCiAfp0YNAyAAIAAoAkQiCzYCKCAAIBUgG3wgF4CnIAd2IAEgB3ZrIBkgInwgGICnIAJ2IAogAnZrIANsajYCJEEBIQEMBQsgACgC3AEiASAAKALkASICaiABIAJwayENDAELIAAoAuABIgEgACgC6AEiAmogASACcGshCEEAIQEMAwtBACEBDAELQQEhAQwACwALAAsACwNAAn8CQCABRQRAIARBAWohBAwBCyAAIAM2AiAgACgCPCADTQ0FIAAoAkQhAkEADAELQQELIQEDQAJAAkACQAJAIAFFBEAgACACNgIoIAIgACgCOE8NASAAIAY2AhwgBiEBQQAhBQwECyAAIAQ2AiQgACgCTCAETQRAIAAoAhwhAUEBIQUMBAsgACgCECAAKAIgbCAAKAIMIAAoAihsaiAAKAIUIAAoAhxsaiAAKAIYIARsaiIBIAAoAghPBEAMCAsgACgCBCABQQF0aiIBLwEADQEMCQsgACgCIEEBaiEDDAELQQAhAQwDC0EBIQEMAgsDQAJAAkACQCAFRQRAIAEgB08NASAAKAIgIgUgACgCyAEgAUEEdGoiDSgCCE8NAyAALQAARQRAIAAgDSgCDCAFQQR0aiIBKAIMIAEoAghsNgJMCyAAKAJIIQRBASEBDAULIAAgAUEBaiIBNgIcDAELIAAoAihBAWohAkEAIQEMAwtBACEFDAELQQEhBQwACwALAAsAC0EADwsgACgC7AFBAUGaCkEAEA8LQQAPCyABQQE7AQBBAQuRCwEKfwJAIAEoAgAgBEEDbCIMdiIGQZCAgAFxDQAgACAAQRxqIg4gACgCbCAGQe8DcWotAABBAnRqIgo2AmggACAAKAIEIAooAgAiCSgCACIIayIGNgIEAkAgCCAAKAIAIgdBEHZLBEAgCSgCBCELIAAgCDYCBCAKIAlBCEEMIAYgCEkiBhtqKAIANgIAIAsgC0UgBhshCSAAKAIIIQYDQAJAIAYNACAAKAIQIgZBAWohCyAGLQABIQogBi0AAEH/AUYEQCAKQZABTwRAIAAgACgCDEEBajYCDCAHQYD+A2ohB0EIIQYMAgsgACALNgIQIAcgCkEJdGohB0EHIQYMAQsgACALNgIQQQghBiAHIApBCHRqIQcLIAAgBkEBayIGNgIIIAAgB0EBdCIHNgIAIAAgCEEBdCIINgIEIAhBgIACSQ0ACyAIIQYMAQsgACAHIAhBEHRrIgc2AgAgBkGAgAJxRQRAIAkoAgQhCyAKIAlBDEEIIAYgCEkiCBtqKAIANgIAIAtFIAsgCBshCSAAKAIIIQgDQAJAIAgNACAAKAIQIghBAWohCyAILQABIQogCC0AAEH/AUYEQCAKQZABTwRAIAAgACgCDEEBajYCDCAHQYD+A2ohB0EIIQgMAgsgACALNgIQIAcgCkEJdGohB0EHIQgMAQsgACALNgIQQQghCCAHIApBCHRqIQcLIAAgCEEBayIINgIIIAAgB0EBdCIHNgIAIAAgBkEBdCIGNgIEIAZBgIACSQ0ACwwBCyAJKAIEIQkLIAlFDQAgACAOIAEoAgQgDEERanZBBHEgAUEEayINKAIAIAxBE2p2QQFxIAEoAgAiCCAMQRBqdkHAAHEgCCAMdkGqAXFyIAggDEEMakEOIAQbdkEQcXJyciIPQdC5AWotAABBAnRqIgs2AmggACAGIAsoAgAiCigCACIIayIGNgIEAkAgCCAHQRB2SwRAIAooAgQhCSAAIAg2AgQgCyAKQQhBDCAGIAhJIgYbaigCADYCACAJIAlFIAYbIQogACgCCCEGA0ACQCAGDQAgACgCECIGQQFqIQsgBi0AASEJIAYtAABB/wFGBEAgCUGQAU8EQCAAIAAoAgxBAWo2AgwgB0GA/gNqIQdBCCEGDAILIAAgCzYCECAHIAlBCXRqIQdBByEGDAELIAAgCzYCEEEIIQYgByAJQQh0aiEHCyAAIAZBAWsiBjYCCCAAIAdBAXQiBzYCACAAIAhBAXQiCDYCBCAIQYCAAkkNAAsMAQsgACAHIAhBEHRrIgk2AgAgBkGAgAJxRQRAIAooAgQhByALIApBDEEIIAYgCEkiCBtqKAIANgIAIAdFIAcgCBshCiAAKAIIIQcDQAJAIAcNACAAKAIQIgdBAWohCyAHLQABIQggBy0AAEH/AUYEQCAIQZABTwRAIAAgACgCDEEBajYCDCAJQYD+A2ohCUEIIQcMAgsgACALNgIQIAkgCEEJdGohCUEHIQcMAQsgACALNgIQQQghByAJIAhBCHRqIQkLIAAgB0EBayIHNgIIIAAgCUEBdCIJNgIAIAAgBkEBdCIGNgIEIAZBgIACSQ0ACwwBCyAKKAIEIQoLIAJBACADayADIAogD0HQuwFqLQAAcyIDGzYCACANIA0oAgBBICAMdHI2AgAgASABKAIAIANBE3RBEHIgDHRyNgIAIAEgASgCBEEIIAx0cjYCBCAEIAVyRQRAIAFBfiAAKAJ8a0ECdGoiAiACKAIEQYCAAnI2AgQgAiACKAIAIANBH3RyQYCABHI2AgAgAkEEayICIAIoAgBBgIAIcjYCAAsgBEEDRw0AIAEgACgCfEECdGoiAEEEaiAAKAIEQQRyNgIAIAAgACgCDEEBcjYCDCAAIAAoAgggA0ESdHJBAnI2AggLC6sLAQl/AkAgASgCACAEQQNsIg12IgdBkICAAXENACAHQe8DcSIHRQ0AIAAgAEEcaiIOIAAoAmwgB2otAABBAnRqIgs2AmggACAAKAIEIAsoAgAiCigCACIJayIHNgIEAkAgCSAAKAIAIghBEHZLBEAgCigCBCEMIAAgCTYCBCALIApBCEEMIAcgCUkiBxtqKAIANgIAIAwgDEUgBxshCiAAKAIIIQcDQAJAIAcNACAAKAIQIgdBAWohDCAHLQABIQsgBy0AAEH/AUYEQCALQZABTwRAIAAgACgCDEEBajYCDCAIQYD+A2ohCEEIIQcMAgsgACAMNgIQIAggC0EJdGohCEEHIQcMAQsgACAMNgIQQQghByAIIAtBCHRqIQgLIAAgB0EBayIHNgIIIAAgCEEBdCIINgIAIAAgCUEBdCIJNgIEIAlBgIACSQ0ACyAJIQcMAQsgACAIIAlBEHRrIgg2AgAgB0GAgAJxRQRAIAooAgQhDCALIApBDEEIIAcgCUkiCRtqKAIANgIAIAxFIAwgCRshCiAAKAIIIQkDQAJAIAkNACAAKAIQIglBAWohDCAJLQABIQsgCS0AAEH/AUYEQCALQZABTwRAIAAgACgCDEEBajYCDCAIQYD+A2ohCEEIIQkMAgsgACAMNgIQIAggC0EJdGohCEEHIQkMAQsgACAMNgIQQQghCSAIIAtBCHRqIQgLIAAgCUEBayIJNgIIIAAgCEEBdCIINgIAIAAgB0EBdCIHNgIEIAdBgIACSQ0ACwwBCyAKKAIEIQoLAkAgCkUNACAAIA4gASgCBCANQRFqdkEEcSABQQRrIg8oAgAgDUETanZBAXEgASgCACIJIA1BEGp2QcAAcSAJIA12QaoBcXIgCSANQQxqQQ4gBBt2QRBxcnJyIgpB0LkBai0AAEECdGoiDDYCaCAAIAcgDCgCACILKAIAIglrIgc2AgQgCkHQuwFqLQAAIQ4CQCAJIAhBEHZLBEAgCygCBCEKIAAgCTYCBCAMIAtBCEEMIAcgCUkiBxtqKAIANgIAIAogCkUgBxshCyAAKAIIIQcDQAJAIAcNACAAKAIQIgdBAWohDCAHLQABIQogBy0AAEH/AUYEQCAKQZABTwRAIAAgACgCDEEBajYCDCAIQYD+A2ohCEEIIQcMAgsgACAMNgIQIAggCkEJdGohCEEHIQcMAQsgACAMNgIQQQghByAIIApBCHRqIQgLIAAgB0EBayIHNgIIIAAgCEEBdCIINgIAIAAgCUEBdCIJNgIEIAlBgIACSQ0ACwwBCyAAIAggCUEQdGsiCjYCACAHQYCAAnFFBEAgCygCBCEIIAwgC0EMQQggByAJSSIJG2ooAgA2AgAgCEUgCCAJGyELIAAoAgghCANAAkAgCA0AIAAoAhAiCEEBaiEMIAgtAAEhCSAILQAAQf8BRgRAIAlBkAFPBEAgACAAKAIMQQFqNgIMIApBgP4DaiEKQQghCAwCCyAAIAw2AhAgCiAJQQl0aiEKQQchCAwBCyAAIAw2AhBBCCEIIAogCUEIdGohCgsgACAIQQFrIgg2AgggACAKQQF0Igo2AgAgACAHQQF0Igc2AgQgB0GAgAJJDQALDAELIAsoAgQhCwsgAkEAIANrIAMgCyAOcyICGzYCACAPIA8oAgBBICANdHI2AgAgASABKAIAIAJBE3RBEHIgDXRyNgIAIAEgASgCBEEIIA10cjYCBCAEIAZyRQRAIAEgBUECdGsiACAAKAIEQYCAAnI2AgQgACAAKAIAIAJBH3RyQYCABHI2AgAgAEEEayIAIAAoAgBBgIAIcjYCAAsgBEEDRw0AIAEgBUECdGoiACAAKAIEQQFyNgIEIAAgACgCACACQRJ0ckECcjYCACAAQQRrIgAgACgCAEEEcjYCAAsgASABKAIAQYCAgAEgDXRyNgIACwutAQAgAEHwnQE2AmQgAEHwnQE2AmAgAEHwnQE2AlwgAEHwnQE2AlggAEHwnQE2AlQgAEHwnQE2AlAgAEHwnQE2AkwgAEHwnQE2AkggAEHwnQE2AkQgAEHwnQE2AkAgAEHwnQE2AjwgAEHwnQE2AjggAEHwnQE2AjQgAEHwnQE2AjAgAEHwnQE2AiwgAEHwnQE2AiggAEHwnQE2AiQgAEHwnQE2AiAgAEHwnQE2AhwLkgYCCX8EfiAAIAE2AgAgAP0MAAAAAAAAAAAAAAAAAAAAAP0LAwggACADNgIcIAAgAkEBayIFNgIYIAFBA3EhCgJ/IAJBAEwEQCABIQQgAwwBCyAAIAFBAWoiBDYCACABLQAACyEBQQghByAAQQg2AhAgACABrSINNwMIIAAgDUL/AYMiDkL/AVEiCTYCFAJAIApBA0YNACAAIAJBAmsiCDYCGAJ/IAJBAkgEQCAEIQEgAwwBCyAAIARBAWoiATYCACAELQAACyEEIABBD0EQIA5C/wFRGyIHNgIQIAAgBK0iDkL/AYMiD0L/AVEiCTYCFCAAIA5CCIYgDYQiDTcDCCAKQQJGBEAgASEEIAUhAiAIIQUMAQsgACACQQNrIgs2AhggAAJ/IAJBA0gEQCABIQYgAwwBCyAAIAFBAWoiBjYCACABLQAAC60iDkL/AYMiEEL/AVEiCTYCFCAAQQdBCCAPQv8BURsgB2oiATYCECAAIA4gB62GIA2EIg03AwggCkEBRgRAIAYhBCABIQcgCCECIAshBQwBCyAAIAJBBGsiBTYCGCAAAn8gAkEESARAIAYhBCADDAELIAAgBkEBaiIENgIAIAYtAAALrSIOQv8Bg0L/AVEiCTYCFCAAQQdBCCAQQv8BURsgAWoiBzYCECAAIA4gAa2GIA2EIg03AwggCyECCwJAIAJBBU4EQCAEKAIAIQMgACACQQVrNgIYIAAgBEEEajYCAAwBC0EAIQFBf0EAIAMbIQMgAkECSA0AA0AgACAEQQFqIgI2AgAgBC0AACEEIAAgBUEBayIGNgIYIANB/wEgAXRBf3NxIAQgAXRyIQMgAUEIaiEBIAVBAUshDCACIQQgBiEFIAwNAAsLIAAgA0EYdiIBQf8BRjYCFCAAQQdBCCAJGyICQQdBCCADQf8BcSIEQf8BRhtqIgVBB0EIIANBCHZB/wFxIgZB/wFGG2oiCEEHQQggA0EQdkH/AXEiA0H/AUYbIAdqajYCECAAIAYgAnQgAyAFdHIgASAIdHIgBHKtIAethiANhDcDCAu2BQISfwJ+An8gACgCHCABQZgBbGoiAkGQAWsoAgAgAkGYAWsoAgBrIgMhBSACQYwBaygCACACQZQBaygCAGsiAiEGQcAAIAMgA0HAAE8bIQNBwAAgAiACQcAATxshBAJAIAVFDQAgBkUNACADRQ0AIARFDQBBfyAEbkECdiADSQ0AQQFBHBATIgIgBDYCDCACIAM2AgggAiAGNgIEIAIgBTYCACACIAStIhQgBq18QgF9IBSAIhSnIgQ2AhQgAiADrSIVIAWtfEIBfSAVgCIVpyIDNgIQAkAgFEL/////D4MgFUL/////D4N+QiCIpw0AIAJBBCADIARsEBMiAzYCGCADRQ0AIAIMAgsgAhAQC0EACyIJRQRAQQAPCwJAIAEEQANAIA5BmAFsIg8gACgCHGoiBSgCGCICBEAgBUEcaiEQIAUoAhQhAyAFKAIQIQRBACEKA0AgAyAEbARAIBAgCkEkbGohBkEAIQsDQCAGKAIUIAtBKGxqIggoAhQiAiAIKAIQIgdsBEBBACEEA0AgCCgCGCAEQQZ0aiIDKAI8IhEEQCADKAIMIQcgAygCFCESIAMoAhAhDCADKAIIIhMgBigCAGshAyAGKAIQIg1BAXEEQCAAKAIcIA9qIgJBkAFrKAIAIANqIAJBmAFrKAIAayEDCyAHIAYoAgRrIQIgDUECcQRAIAIgACgCHCAPaiINQYwBaygCAGogDUGUAWsoAgBrIQILIAkgAyACIAMgDCATayIMaiASIAdrIAJqIBFBASAMQQAQJkUNCSAIKAIQIQcgCCgCFCECCyAEQQFqIgQgAiAHbEkNAAsgBSgCECEEIAUoAhQhAwsgC0EBaiILIAMgBGxJDQALIAUoAhghAgsgCkEBaiIKIAJJDQALCyAOQQFqIg4gAUcNAAsLIAkPCyAJECNBAAvQDAIQfwZ7IAAoAggiCyAAKAIEaiEHAkAgACgCDEUEQCAHQQJIDQEgASgCACABIAtBAnRqIg0oAgAiBEEBakEBdWshAyAAKAIAIQYCQCAHQQRJBEAgBCECDAELIAdBBGsiAEEBdiIJQQFqIQwCQCAAQRZJBEBBASEADAELIAYgASALQQJ0aiIFIAlBAnQiAmpBCGpJIAYgCUEDdGpBCGoiACAFQQRqS3EEQEEBIQAMAQsgBiABIAJqQQhqSSABQQRqIABJcQRAQQEhAAwBCyAMQfz///8HcSIFQQFyIQAgBUEBdCEIIAT9ESESIAP9ESET/QwAAAAAAgAAAAQAAAAGAAAAIRZBACECA0AgASACQQJ0QQRyIgNq/QACACEVIAMgDWr9AAIAIRQgBiACQQN0aiIDIBP9WgIAAyADQQhqIBUgFCASIBT9DQwNDg8QERITFBUWFxgZGhsiFf2uAf0MAgAAAAIAAAACAAAAAgAAAP2uAUEC/awB/bEBIhL9WgIAACADQRBqIBL9WgIAASADQRhqIBL9WgIAAiAGIBb9DAEAAAABAAAAAQAAAAEAAAD9UCIX/RsAQQJ0aiASIBMgEv0NDA0ODxAREhMUFRYXGBkaG/2uAUEB/awBIBX9rgEiE/1aAgAAIAYgF/0bAUECdGogE/1aAgABIAYgF/0bAkECdGogE/1aAgACIAYgF/0bA0ECdGogE/1aAgADIBb9DAgAAAAIAAAACAAAAAgAAAD9rgEhFiASIRMgFCESIAJBBGoiAiAFRw0ACyAS/RsDIQIgE/0bAyEDIAUgDEYNASACIQQLA0AgASAAQQJ0IgJqKAIAIQkgAiANaigCACECIAYgCEECdGoiBSADNgIAIAUgAyAJIAIgBGpBAmpBAnVrIgNqQQF1IARqNgIEIAhBAmohCCAAIAxHIRAgAiEEIABBAWohACAQDQALCyAGIAhBAnRqIAM2AgBBfCEAIAdBAXEEfyAGIAdBAWsiAEECdGogASAAQQF0aigCACACQQFqQQF1ayIANgIAIAAgA2pBAXUhA0F4BUF8CyAGIAdBAnQiAGpqIAIgA2o2AgAgASAGIAAQEhoPCwJAAkACQCAHQQFrDgIAAQILIAEgASgCAEECbTYCAA8LIAAoAgAiBCABKAIAIAEgC0ECdGoiAygCAEEBakEBdWsiADYCBCAEIAAgAygCAGo2AgAgASAEKQIANwIADwsgB0EDSA0AIAAoAgAiCiABKAIAIAEgC0ECdGoiDigCBCIEIA4oAgAiAGpBAmpBAnVrIgMgAGo2AgBBASEIAkAgB0ECayIGIAdBAXEiDEUiAGtBAkkEQCAEIQIMAQsgByAAa0EEayIAQQF2IgJBAWohDwJAAkAgAEEWSQ0AIApBBGoiBSABIAJBAnQiAGpBCGpJIAogAkEDdGpBDGoiAiABQQRqS3ENACAFIAAgASALQQJ0aiIAakEMakkgAEEIaiACSXENACAPQXxxIgVBAXIhACAFQQF0QQFyIQggBP0RIRMgA/0RIRJBACECA0AgCiACQQN0aiIEIAEgAkECdCIDav0AAgQgEyADIA5q/QACCCIT/Q0MDQ4PEBESExQVFhcYGRobIhUgE/2uAf0MAgAAAAIAAAACAAAAAgAAAP2uAUEC/awB/bEBIhQgFCASIBT9DQwNDg8QERITFBUWFxgZGhv9rgFBAf2sASAV/a4BIhX9DQQFBgcYGRobCAkKCxwdHh/9CwIUIAQgEiAV/Q0MDQ4PEBESEwABAgMUFRYXIBT9DQABAgMEBQYHEBESEwwNDg/9CwIEIBQhEiACQQRqIgIgBUcNAAsgE/0bAyECIBL9GwMhAyAFIA9GDQIgAiEEDAELQQEhAAsDQCABIABBAnRqKAIAIQ0gDiAAQQFqIgVBAnRqKAIAIQIgCiAIQQJ0aiIJIAM2AgAgCSADIA0gAiAEakECakECdWsiA2pBAXUgBGo2AgQgCEECaiEIIAAgD0chESACIQQgBSEAIBENAAsLIAogCEECdGogAzYCAAJAIAxFBEAgCiAGQQJ0aiABIAdBAXRqQQRrKAIAIAJBAWpBAXVrIgAgA2pBAXUgAmo2AgAMAQsgAiADaiEACyAKIAdBAnQiA2pBBGsgADYCACABIAogAxASGgsLoAcDA30DewJ/IANBCE8EQCADQQN2IQsDQCAB/QAEACEHIAAgAP0ABAAiCCAC/QAEACIJ/Qy8dLM/vHSzP7x0sz+8dLM//eYB/eQB/QsEACABIAggB/0MzzGwPs8xsD7PMbA+zzGwPv3mAf3lASAJ/Qzh0TY/4dE2P+HRNj/h0TY//eYB/eUB/QsEACACIAggB/0M5dDiP+XQ4j/l0OI/5dDiP/3mAf3kAf0LBAAgAf0ABBAhByAAIAD9AAQQIgggAv0ABBAiCf0MvHSzP7x0sz+8dLM/vHSzP/3mAf3kAf0LBBAgASAIIAf9DM8xsD7PMbA+zzGwPs8xsD795gH95QEgCf0M4dE2P+HRNj/h0TY/4dE2P/3mAf3lAf0LBBAgAiAIIAf9DOXQ4j/l0OI/5dDiP+XQ4j/95gH95AH9CwQQIAJBIGohAiABQSBqIQEgAEEgaiEAIApBAWoiCiALRw0ACwsCQCADQQdxIgNFDQAgASoCACEEIAAgAioCACIGQ7x0sz+UIAAqAgAiBZI4AgAgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIAIAIgBSAEQ+XQ4j+UkjgCACADQQFGDQAgASoCBCEEIAAgAioCBCIGQ7x0sz+UIAAqAgQiBZI4AgQgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIEIAIgBSAEQ+XQ4j+UkjgCBCADQQJGDQAgASoCCCEEIAAgAioCCCIGQ7x0sz+UIAAqAggiBZI4AgggASAFIARDzzGwvpSSIAZD4dE2v5SSOAIIIAIgBSAEQ+XQ4j+UkjgCCCADQQNGDQAgASoCDCEEIAAgAioCDCIGQ7x0sz+UIAAqAgwiBZI4AgwgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIMIAIgBSAEQ+XQ4j+UkjgCDCADQQRGDQAgASoCECEEIAAgAioCECIGQ7x0sz+UIAAqAhAiBZI4AhAgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIQIAIgBSAEQ+XQ4j+UkjgCECADQQVGDQAgASoCFCEEIAAgAioCFCIGQ7x0sz+UIAAqAhQiBZI4AhQgASAFIARDzzGwvpSSIAZD4dE2v5SSOAIUIAIgBSAEQ+XQ4j+UkjgCFCADQQZGDQAgASoCGCEEIAAgAioCGCIGQ7x0sz+UIAAqAhgiBZI4AhggASAFIARDzzGwvpSSIAZD4dE2v5SSOAIYIAIgBSAEQ+XQ4j+UkjgCGAsL4AECBn8DewJAIANFDQAgA0EETwRAIANBfHEhBgNAIAAgBEECdCIFaiIHIAf9AAIAIAIgBWoiB/0AAgAiCyABIAVqIgX9AAIAIgz9rgFBAv2sAf2xASIKIAv9rgH9CwIAIAUgCv0LAgAgByAKIAz9rgH9CwIAIARBBGoiBCAGRw0ACyADIAZGDQELA0AgACAGQQJ0IgRqIgUgBSgCACACIARqIgUoAgAiByABIARqIggoAgAiCWpBAnVrIgQgB2o2AgAgCCAENgIAIAUgBCAJajYCACAGQQFqIgYgA0cNAAsLC90BAQR/IwBBgAFrIgYkACAGIQUCQCABKAIMIAJBBHRqIgIoAgAiBEUEQCACIQEMAQsDQCAFIAI2AgAgBUEEaiEFIAQiASICKAIAIgQNAAsLQQAhBANAIAEoAggiAiAESARAIAEgBDYCCCAEIQILAkAgAiADTg0AA0AgAiABKAIETg0BAkAgAEEBEB8EQCABIAI2AgQMAQsgAkEBaiECCyACIANIDQALCyABIAI2AgggBSAGRwRAIAVBBGsiBSgCACEBIAIhBAwBCwsgASgCBCEHIAZBgAFqJAAgByADSAv9BgELfyMAQYACayIKJAACQCAARQRAQQAhAAwBCwJAIAEgACgCAEYEQCAAKAIEIAJGDQELIAAgAjYCBCAAIAE2AgAgCiACNgIAIAogATYCgAEgAiEEIAEhBQNAIAogByIMQQFqIgdBAnQiCGogBEEBakECbSIJNgIAIApBgAFqIAhqIAVBAWpBAm0iCDYCACAGIAQgBWwiC2ohBiAJIQQgCCEFIAtBAUsNAAsgACAGNgIIAkACQAJAAkAgBkUEQCAAKAIMIgRFDQIgAEEMaiEFDAELIAZBBHQiBCAAKAIQTQ0DIAAoAgwgBBAXIgENAiADQQFBmjFBABAPIABBDGoiBSgCACIERQ0BCyAEEBAgBUEANgIACyAAEBBBACEADAMLIAAgATYCDCABIAAoAhAiAmpBACAEIAJrEBUaIAAgBDYCECAAKAIEIQIgACgCACEBCyAAKAIMIQUgDARAQQAhAyAFIAEgAmxBBHRqIgQhBgNAAkAgCiADQQJ0IgFqKAIAIghBAEwNACAIQQFrIQtBACEJAkACQCAKQYABaiABaigCACICQQBMBEAgCEEBcSENQQAhByAIQQFHDQEgBiEBDAILA0AgBiEBIAIhBgNAAkAgBSAENgIAIAZBAUYEQCAFQRBqIQUgBEEQaiEEDAELIAUgBDYCECAEQRBqIQQgBUEgaiEFIAZBAkohDiAGQQJrIQYgDg0BCwsgBCABIAJBBHRqIAkgCSALRnJBAXEiBxshBiAEIAEgBxshBCAJQQFqIgkgCEcNAAsMAgsgCEH+////B3EhCANAIAcgC0YhASAHQQJqIQcgBCAGIAEbIgQhBiAEIQEgCUECaiIJIAhHDQALCyANRQRAIAQhBgwBCyAEIAEgAkEEdGogByAHIAtGckEBcSICGyEGIAQgASACGyEECyADQQFqIgMgDEcNAAsLIAVBADYCAAsgACgCCCIBRQ0AIAAoAgwhBCABQQRPBEAgAUF8cSECQQAhBQNAIARBADYCPCAEQucHNwI0IARBADYCLCAEQucHNwIkIARBADYCHCAEQucHNwIUIARBADYCDCAEQucHNwIEIARBQGshBCAFQQRqIgUgAkcNAAsLIAFBA3EiAUUNAEEAIQUDQCAEQQA2AgwgBELnBzcCBCAEQRBqIQQgBUEBaiIFIAFHDQALCyAKQYACaiQAIAALsQEBA38CQCAARQ0AIAAoAggiAUUNACAAKAIMIQAgAUEETwRAIAFBfHEhAwNAIABBADYCPCAAQucHNwI0IABBADYCLCAAQucHNwIkIABBADYCHCAAQucHNwIUIABBADYCDCAAQucHNwIEIABBQGshACACQQRqIgIgA0cNAAsLIAFBA3EiAUUNAEEAIQIDQCAAQQA2AgwgAELnBzcCBCAAQRBqIQAgAkEBaiICIAFHDQALCwv7BQEQfyMAQYACayIIJAACf0EBQRQQEyIGRQRAIAJBAUH0MEEAEA9BAAwBCyAGIAE2AgQgBiAANgIAIAggATYCACAIIAA2AoABA0AgCCAFIg1BAWoiBUECdCIHaiABQQFqQQJtIgM2AgAgCEGAAWogB2ogAEEBakECbSIHNgIAIAQgACABbCIJaiEEIAMhASAHIQAgCUEBSw0ACyAGIAQ2AgggBEUEQCAGEBBBAAwBCyAGIARBEBATIgM2AgwgA0UEQCACQQFB2hpBABAPIAYQEEEADAELIAYgBigCCCILQQR0NgIQIAMhACANBEAgAyAGKAIEIAYoAgBsQQR0aiIEIQEDQAJAIAggDkECdCICaigCACIJQQBMDQAgCUEBayEMQQAhBwJAIAhBgAFqIAJqKAIAIgJBAEwEQEEAIQUgCUEBRwRAIAlB/v///wdxIQoDQCAFIAxGIQ8gBUECaiEFIAEgBCAPGyIEIQEgB0ECaiIHIApHDQALCyAJQQFxDQEgBCEBDAILA0AgBCEFIAIhBANAAkAgACABNgIAIARBAUYEQCAAQRBqIQAgAUEQaiEBDAELIAAgATYCECABQRBqIQEgAEEgaiEAIARBAkohECAEQQJrIQQgEA0BCwsgASAFIAJBBHRqIAcgByAMRnJBAXEiChshBCABIAUgChshASAHQQFqIgcgCUcNAAsMAQsgASAEIAJBBHRqIAUgBSAMRnJBAXEiBRshESABIAQgBRshASARIQQLIA5BAWoiDiANRw0ACwsgAEEANgIAAkAgC0UNACALQQRPBEAgC0F8cSEAQQAhAQNAIANBADYCPCADQucHNwI0IANBADYCLCADQucHNwIkIANBADYCHCADQucHNwIUIANBADYCDCADQucHNwIEIANBQGshAyABQQRqIgEgAEcNAAsLIAtBA3EiAEUNAEEAIQEDQCADQQA2AgwgA0LnBzcCBCADQRBqIQMgAUEBaiIBIABHDQALCyAGCyESIAhBgAJqJAAgEgtTAQF/An8gAC0ADEH/AUYEQCAAQoD+g4DwADcCDEEAIAAoAggiASAAKAIETw0BGiAAIAFBAWo2AgggACABLQAAQYD+A3I2AgwLIABBADYCEEEBCwt+AgF/AX4gAL0iA0I0iKdB/w9xIgJB/w9HBHwgAkUEQCABIABEAAAAAAAAAABhBH9BAAUgAEQAAAAAAADwQ6IgARBlIQAgASgCAEFAags2AgAgAA8LIAEgAkH+B2s2AgAgA0L/////////h4B/g0KAgICAgICA8D+EvwUgAAsLSQEBfwJAQQFBLBATIgEEQCABQQA2AhACQCAAQQBMBEAgAUEBQQgQEyIANgIkIABFDQEMAwsgAUEANgIMCyABEBALQQAhAQsgAQuRAgAgAEUEQEEADwsCfwJAIAFB/wBNDQACQEGU0AEoAgAoAgBFBEAgAUGAf3FBgL8DRg0CDAELIAFB/w9NBEAgACABQT9xQYABcjoAASAAIAFBBnZBwAFyOgAAQQIMAwsgAUGAQHFBgMADRyABQYCwA09xRQRAIAAgAUE/cUGAAXI6AAIgACABQQx2QeABcjoAACAAIAFBBnZBP3FBgAFyOgABQQMMAwsgAUGAgARrQf//P00EQCAAIAFBP3FBgAFyOgADIAAgAUESdkHwAXI6AAAgACABQQZ2QT9xQYABcjoAAiAAIAFBDHZBP3FBgAFyOgABQQQMAwsLQZTHAUEZNgIAQX8MAQsgACABOgAAQQELC7wCAAJAAkACQAJAAkACQAJAAkACQAJAAkAgAUEJaw4SAAgJCggJAQIDBAoJCgoICQUGBwsgAiACKAIAIgFBBGo2AgAgACABKAIANgIADwsgAiACKAIAIgFBBGo2AgAgACABMgEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMwEANwMADwsgAiACKAIAIgFBBGo2AgAgACABMAAANwMADwsgAiACKAIAIgFBBGo2AgAgACABMQAANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKwMAOQMADwsgACACIAMRAwALDwsgAiACKAIAIgFBBGo2AgAgACABNAIANwMADwsgAiACKAIAIgFBBGo2AgAgACABNQIANwMADwsgAiACKAIAQQdqQXhxIgFBCGo2AgAgACABKQMANwMAC3MBBn8gACgCACIDLAAAQTBrIgFBCUsE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AyAAQRh2NgIUIAMgBDYCECADIABBCHZB/wFxNgIcIAMgAEEQdkH/AXE2AhggAkEBQc31ACADQRBqEA8MBwsgBSAITQRAIAYhBAwECyAFIQggBiAFEBciBA0DIAYQECACQQFB/w9BABAPQQAMBwsgBEECcUUEQCACQQFBwg9BABAPIAYQEEEADAcLIAAgBEH/////B3I2AmQgASAHIAVrrSINIAIgASgCKBEIACANUQ0DIAAtAGRBCHFFDQEgAkECQZIcQQAQDwsgBhAQQQEMBQsgAkEBQZIcQQAQDyAGEBBBAAwECyABIAQgBSACEBogBUcEQCACQQFBxBxBABAPIAQQEEEADAQLIAAgBCIGIAUgAiAKKAIEEQEADQALIAQQEEEADAILIAJBAUGiJUEAEA9BAAwBCyAGEBBBAAshDCADQfAAaiQAIAwL5gEBBn8gACgCCEE1IAIQJARAAkAgACgCCCIGKAIAIQMgBigCCCEFAkACQAJ/AkAgAwRAQQEhBCADQQFxIQcgA0EBRw0BQQAMAgsgBkEANgIADAILIANBfnEhAwNAAn9BACAERQ0AGkEAIAAgASACIAUoAgARAABFDQAaIAAgASACIAUoAgQRAABBAEcLIQQgBUEIaiEFIAhBAmoiCCADRw0ACyAERQshAyAHBEAgAw0CIAAgASACIAUoAgARAABBAEchBAsgBkEANgIAIARFDQILIAAoAgAaQQEPCyAGQQA2AgALC0EACwoAIAAoAgAaQQALFAAgACgCACIABEAgACABNgK4AQsLIQAgACgCACABEFMgAEEAOgB8IAAgASgCuEBBAXE2AoABCzIAIAJFBEBBAA8LIAAoAgAgASACIAMQSEUEQCADQQFBqS9BABAPQQAPCyAAIAIgAxBxC2kCAn8BfCMAQRBrIgMkACACBEADQCAAIANBCGoQRCABAn8gAysDCCIFmUQAAAAAAADgQWMEQCAFqgwBC0GAgICAeAs2AgAgAUEEaiEBIABBCGohACAEQQFqIgQgAkcNAAsLIANBEGokAAuEAQICfwF9IwBBEGsiAyQAIAIEQANAIAMgAC0AADoADyADIAAtAAE6AA4gAyAALQACOgANIAMgAC0AAzoADCABAn8gAyoCDCIFi0MAAABPXQRAIAWoDAELQYCAgIB4CzYCACABQQRqIQEgAEEEaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC0sBAn8jAEEQayIDJAAgAgRAA0AgACADQQxqQQQQESABIAMoAgw2AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtLAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMNgIAIAFBBGohASAAQQJqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALSgECfyMAQRBrIgMkACACBEADQCAAIANBCGoQRCABIAMrAwi2OAIAIAFBBGohASAAQQhqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALaAECfyMAQRBrIgMkACACBEADQCADIAAtAAA6AA8gAyAALQABOgAOIAMgAC0AAjoADSADIAAtAAM6AAwgASADKgIMOAIAIAFBBGohASAAQQRqIQAgBEEBaiIEIAJHDQALCyADQRBqJAALTAECfyMAQRBrIgMkACACBEADQCAAIANBDGpBBBARIAEgAygCDLM4AgAgAUEEaiEBIABBBGohACAEQQFqIgQgAkcNAAsLIANBEGokAAtMAQJ/IwBBEGsiAyQAIAIEQANAIAAgA0EMakECEBEgASADKAIMszgCACABQQRqIQEgAEECaiEAIARBAWoiBCACRw0ACwsgA0EQaiQAC6oIAg1/AXsjAEEQayIIJAACfyAAKAIIQRBGBEAgACgCnAEgACgCzAFBjCxsagwBCyAAKAIMCyEJAkAgAkUEQCADQQFB8B9BABAPDAELIAAoAkghBkEBIQQgASAIQQhqQQEQESAIKAIIIgVBAk8EQCADQQJBxsgAQQAQDwwBCyACIAVBAWpHBEBBACEEIANBAkHwH0EAEA8MAQsCQCAGKAIQIgNFDQAgCSgC0CshBCADQQhPBEAgA0F4cSEGQQAhAgNAIARBADYCvEMgBEEANgKEOyAEQQA2AswyIARBADYClCogBEEANgLcISAEQQA2AqQZIARBADYC7BAgBEEANgK0CCAEQcDDAGohBCACQQhqIgIgBkcNAAsLIANBB3EiA0UNAEEAIQIDQCAEQQA2ArQIIARBuAhqIQQgAkEBaiICIANHDQALCyAJKALoKyICBH8gAhAQIAlBADYC6CsgCCgCCAUgBQtFBEBBASEEDAELA0AgAUEBaiIBIAhBDGpBARARAkAgCSgCgCxF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KT0ALgAobnVsbCkAKCVkLCVkKSAAJXN9CgAJCSB9CgBbREVWXSBEdW1wIGFuIGltYWdlX2NvbXBfaGVhZGVyIHN0cnVjdCB7CgBbREVWXSBEdW1wIGFuIGltYWdlX2hlYWRlciBzdHJ1Y3QgewoASW1hZ2UgaW5mbyB7CgAJIGRlZmF1bHQgdGlsZSB7CgAlcwkgY29tcG9uZW50ICVkIHsKAAkJIGNvbXAgJWQgewoACSBUaWxlIGluZGV4OiB7CgAJIE1hcmtlciBsaXN0OiB7CgBDb2Rlc3RyZWFtIGluZGV4IGZyb20gbWFpbiBoZWFkZXI6IHsKAENvZGVzdHJlYW0gaW5mbyBmcm9tIG1haW4gaGVhZGVyOiB7CgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveAoARm91bmQgYSBtaXNwbGFjZWQgJyVjJWMlYyVjJyBib3ggb3V0c2lkZSBqcDJoIGJveAoATWFsZm9ybWVkIEpQMiBmaWxlIGZvcm1hdDogZmlyc3QgYm94IG11c3QgYmUgSlBFRyAyMDAwIHNpZ25hdHVyZSBib3gKAE1hbGZvcm1lZCBKUDIgZmlsZSBmb3JtYXQ6IHNlY29uZCBib3ggbXVzdCBiZSBmaWxlIHR5cGUgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB0byBoYW5kbGUganBlZzIwMDAgYm94CgBOb3QgZW5vdWdoIG1lbW9yeSB3aXRoIEZUWVAgQm94CgBBIG1hcmtlciBJRCB3YXMgZXhwZWN0ZWQgKDB4ZmYtLSkgaW5zdGVhZCBvZiAlLjh4CgAJCSBtY3Q9JXgKAAkJCSBjYmxrc3R5PSUjeAoACQkJIGNzdHk9JSN4CgAJCSBwcmc9JSN4CgBJbnRlZ2VyIG92ZXJmbG93CgAJIHRkeD0ldSwgdGR5PSV1CgAJIHR3PSV1LCB0aD0ldQoACSB0eDA9JXUsIHR5MD0ldQoASW52YWxpZCBjb21wb25lbnQgaW5kZXg6ICV1CgBTdHJlYW0gdG9vIHNob3J0CgBNYXJrZXIgaGFuZGxlciBmdW5jdGlvbiBmYWlsZWQgdG8gcmVhZCB0aGUgbWFya2VyIHNlZ21lbnQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjdXJyZW50IHByZWNpbmN0IGNvZGVibG9jayBlbGVtZW50CgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQKAEVycm9yIHJlYWRpbmcgU1FjZCBvciBTUWNjIGVsZW1lbnQKAEEgQlBDQyBoZWFkZXIgYm94IGlzIGF2YWlsYWJsZSBhbHRob3VnaCBCUEMgZ2l2ZW4gYnkgdGhlIElIRFIgYm94ICglZCkgaW5kaWNhdGUgY29tcG9uZW50cyBiaXQgZGVwdGggaXMgY29uc3RhbnQKAEVycm9yIHdpdGggU0laIG1hcmtlcjogaWxsZWdhbCB0aWxlIG9mZnNldAoASW52YWxpZCBwcmVjaW5jdAoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGJhbmQgcHJlY2ludHMKAEZhaWxlZCB0byBkZWNvZGUgYWxsIHVzZWQgY29tcG9uZW50cwoAU2l6ZSBvZiBjb2RlIGJsb2NrIGRhdGEgZXhjZWVkcyBzeXN0ZW0gbGltaXRzCgBTaXplIG9mIHRpbGUgZGF0YSBleGNlZWRzIHN5c3RlbSBsaW1pdHMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtdWx0aXBsZSBNQ1QgbWFya2VycwoAQ29ycnVwdGVkIFBQTSBtYXJrZXJzCgBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGlsZSByZXNvbHV0aW9ucwoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGNvbGxlY3Rpb25zCgBJbnZhbGlkIFBDTFIgYm94LiBSZXBvcnRzIDAgcGFsZXR0ZSBjb2x1bW5zCgBXZSBkbyBub3Qgc3VwcG9ydCBST0kgaW4gZGVjb2RpbmcgSFQgY29kZWJsb2NrcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgdW5kZWZpbmVkIHNpemVzCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aG91dCBzYW1lIG51bWJlciBvZiBpbmRpeGVzCgBJbnZhbGlkIHRpbGVjLT53aW5feHh4IHZhbHVlcwoAQ2Fubm90IGhhbmRsZSBib3ggb2YgbGVzcyB0aGFuIDggYnl0ZXMKAENhbm5vdCBoYW5kbGUgWEwgYm94IG9mIGxlc3MgdGhhbiAxNiBieXRlcwoAQ29tcG9uZW50IGluZGV4ICV1IHVzZWQgc2V2ZXJhbCB0aW1lcwoASW52YWxpZCBQQ0xSIGJveC4gUmVwb3J0cyAlZCBlbnRyaWVzCgBOb3QgZW5vdWdoIG1lbW9yeSB0byBjcmVhdGUgVGFnLXRyZWUgbm9kZXMKAENhbm5vdCB0YWtlIGluIGNoYXJnZSBtY3QgZGF0YSB3aXRoaW4gbXVsdGlwbGUgTUNUIHJlY29yZHMKAENhbm5vdCBkZWNvZGUgdGlsZSwgbWVtb3J5IGVycm9yCgBvcGpfajJrX2FwcGx5X25iX3RpbGVfcGFydHNfY29ycmVjdGlvbiBlcnJvcgoAUHJvYmxlbSB3aXRoIHNraXBwaW5nIEpQRUcyMDAwIGJveCwgc3RyZWFtIGVycm9yCgBQcm9ibGVtIHdpdGggcmVhZGluZyBKUEVHMjAwMCBib3gsIHN0cmVhbSBlcnJvcgoAVW5rbm93biBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCB0bCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBtaCBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHRha2UgaW4gY2hhcmdlIFNJWiBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUFBUIG1hcmtlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBQUFQgbWFya2VyCgBFcnJvciByZWFkaW5nIFNPVCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUExUIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ1QgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DVCBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIFNPUCBtYXJrZXIKAEV4cGVjdGVkIFNPUCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgTUNPIG1hcmtlcgoARXJyb3IgcmVhZGluZyBSR04gbWFya2VyCgBFcnJvciByZWFkaW5nIFBQTSBtYXJrZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgUFBNIG1hcmtlcgoARXJyb3IgcmVhZGluZyBUTE0gbWFya2VyCgBFcnJvciByZWFkaW5nIFBMTSBtYXJrZXIKAE5vdCBlbm91Z2ggc3BhY2UgZm9yIGV4cGVjdGVkIEVQSCBtYXJrZXIKAEV4cGVjdGVkIEVQSCBtYXJrZXIKAEVycm9yIHJlYWRpbmcgQ1JHIG1hcmtlcgoAVW5rbm93biBwcm9ncmVzc2lvbiBvcmRlciBpbiBDT0QgbWFya2VyCgBVbmtub3duIFNjb2QgdmFsdWUgaW4gQ09EIG1hcmtlcgoARXJyb3IgcmVhZGluZyBDT0QgbWFya2VyCgBFcnJvciByZWFkaW5nIFFDRCBtYXJrZXIKAENycm9yIHJlYWRpbmcgQ0JEIG1hcmtlcgoARXJyb3IgcmVhZGluZyBQT0MgbWFya2VyCgBFcnJvciByZWFkaW5nIENPQyBtYXJrZXIKAEVycm9yIHJlYWRpbmcgUUNDIG1hcmtlcgoARXJyb3IgcmVhZGluZyBNQ0MgbWFya2VyCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWFkIE1DQyBtYXJrZXIKAHJlcXVpcmVkIFNJWiBtYXJrZXIgbm90IGZvdW5kIGluIG1haW4gaGVhZGVyCgByZXF1aXJlZCBDT0QgbWFya2VyIG5vdCBmb3VuZCBpbiBtYWluIGhlYWRlcgoAcmVxdWlyZWQgUUNEIG1hcmtlciBub3QgZm91bmQgaW4gbWFpbiBoZWFkZXIKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGhhbmRsZSBqcGVnMjAwMCBmaWxlIGhlYWRlcgoATm90IGVub3VnaCBtZW1vcnkgdG8gcmVhZCBoZWFkZXIKAEVycm9yIHdpdGggSlAgU2lnbmF0dXJlIDogYmFkIG1hZ2ljIG51bWJlcgoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgY3VycmVudCBudW1iZXIgb2YgdGlsZS1wYXJ0ICglZCksIGdpdmluZyB1cAoASW4gU09UIG1hcmtlciwgVFBTb3QgKCVkKSBpcyBub3QgdmFsaWQgcmVnYXJkcyB0byB0aGUgcHJldmlvdXMgbnVtYmVyIG9mIHRpbGUtcGFydCAoJWQpLCBnaXZpbmcgdXAKAEluIFNPVCBtYXJrZXIsIFRQU290ICglZCkgaXMgbm90IHZhbGlkIHJlZ2FyZHMgdG8gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIHRpbGUtcGFydCAoaGVhZGVyKSAoJWQpLCBnaXZpbmcgdXAKAHRpbGVzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIHJlc29sdXRpb24KAE1hcmtlciBpcyBub3QgY29tcGxpYW50IHdpdGggaXRzIHBvc2l0aW9uCgBQcm9ibGVtIHdpdGggc2VlayBmdW5jdGlvbgoARXJyb3IgcmVhZGluZyBTUENvZCBTUENvYyBlbGVtZW50LCBJbnZhbGlkIGNibGt3L2NibGtoIGNvbWJpbmF0aW9uCgBJbnZhbGlkIG11bHRpcGxlIGNvbXBvbmVudCB0cmFuc2Zvcm1hdGlvbgoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIGNvbGxlY3Rpb25zIG90aGVyIHRoYW4gYXJyYXkgZGVjb3JyZWxhdGlvbgoAVG9vIGxhcmdlIHZhbHVlIGZvciBOcHBtCgBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgTnBwbQoAYmFkIHBsYWNlZCBqcGVnIGNvZGVzdHJlYW0KAAkgTWFpbiBoZWFkZXIgc3RhcnQgcG9zaXRpb249JWxsaQoJIE1haW4gaGVhZGVyIGVuZCBwb3NpdGlvbj0lbGxpCgBNYXJrZXIgc2l6ZSBpbmNvbnNpc3RlbnQgd2l0aCBzdHJlYW0gbGVuZ3RoCgBUaWxlIHBhcnQgbGVuZ3RoIHNpemUgaW5jb25zaXN0ZW50IHdpdGggc3RyZWFtIGxlbmd0aAoAQ2Fubm90IHRha2UgaW4gY2hhcmdlIG11bHRpcGxlIGRhdGEgc3Bhbm5pbmcKAFdyb25nIGZsYWcKAEVycm9yIHdpdGggRlRZUCBzaWduYXR1cmUgQm94IHNpemUKAEVycm9yIHdpdGggSlAgc2lnbmF0dXJlIEJveCBzaXplCgBJbnZhbGlkIHByZWNpbmN0IHNpemUKAEluY29uc2lzdGVudCBtYXJrZXIgc2l6ZQoASW52YWxpZCBtYXJrZXIgc2l6ZQoARXJyb3Igd2l0aCBTSVogbWFya2VyIHNpemUKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIGFkZCBhIG5ldyB2YWxpZGF0aW9uIHByb2NlZHVyZQoATm90IGVub3VnaCBtZW1vcnkgdG8gZGVjb2RlIHRpbGUKAEZhaWxlZCB0byBkZWNvZGUgdGhlIGNvZGVzdHJlYW0gaW4gdGhlIEpQMiBmaWxlCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgY29sbGVjdGlvbnMgd2l0aCBpbmRpeCBzaHVmZmxlCgBDYW5ub3QgYWxsb2NhdGUgVGllciAxIGhhbmRsZQoATm8gZGVjb2RlZCBhcmVhIHBhcmFtZXRlcnMsIHNldCB0aGUgZGVjb2RlZCBhcmVhIHRvIHRoZSB3aG9sZSBpbWFnZQoATm90IGVub3VnaCBtZW1vcnkgdG8gY3JlYXRlIFRhZy10cmVlCgBOb3QgZW5vdWdoIG1lbW9yeSB0byByZWluaXRpYWxpemUgdGhlIHRhZyB0cmVlCgBFcnJvciByZWFkaW5nIFNQQ29kIFNQQ29jIGVsZW1lbnQsIEludmFsaWQgdHJhbnNmb3JtYXRpb24gZm91bmQKAEVycm9yIHJlYWRpbmcgU1BDb2QgU1BDb2MgZWxlbWVudC4gVW5zdXBwb3J0ZWQgTWl4ZWQgSFQgY29kZS1ibG9jayBzdHlsZSBmb3VuZAoAVGlsZSBZIGNvb3JkaW5hdGVzIGFyZSBub3Qgc3VwcG9ydGVkCgBUaWxlIFggY29vcmRpbmF0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQKAEltYWdlIGNvb3JkaW5hdGVzIGFib3ZlIElOVF9NQVggYXJlIG5vdCBzdXBwb3J0ZWQKAEpQRUcyMDAwIEhlYWRlciBib3ggbm90IHJlYWQgeWV0LCAnJWMlYyVjJWMnIGJveCB3aWxsIGJlIGlnbm9yZWQKAG9wal9qMmtfbWVyZ2VfcHB0KCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQKAE5vdCBlbm91Z2ggbWVtb3J5IHRvIHJlYWQgU09UIG1hcmtlci4gVGlsZSBpbmRleCBhbGxvY2F0aW9uIGZhaWxlZAoASWdub3JpbmcgaWhkciBib3guIEZpcnN0IGloZHIgYm94IGFscmVhZHkgcmVhZAoAWnBwdCAldSBhbHJlYWR5IHJlYWQKAFpwcG0gJXUgYWxyZWFkeSByZWFkCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCBzeW50aGV0aXplZCAweEZGIG1hcmtlcnMgcmVhZAoACQkJIGNibGt3PTJeJWQKAAkJCSBjYmxraD0yXiVkCgAJCQkgcW50c3R5PSVkCgAlcyBkeD0lZCwgZHk9JWQKAAkJCSByb2lzaGlmdD0lZAoACQkJIG51bWdiaXRzPSVkCgAJCSBudW1sYXllcnM9JWQKACVzIG51bWNvbXBzPSVkCgBvcGpfanAyX2FwcGx5X2NkZWY6IGFjbj0lZCwgbnVtY29tcHM9JWQKAG9wal9qcDJfYXBwbHlfY2RlZjogY249JWQsIG51bWNvbXBzPSVkCgAJCQkgbnVtcmVzb2x1dGlvbnM9JWQKAAkJIHR5cGU9JSN4LCBwb3M9JWxsaSwgbGVuPSVkCgAlcyBzZ25kPSVkCgAJCQkgcW1mYmlkPSVkCgAlcyBwcmVjPSVkCgAJCSBuYiBvZiB0aWxlLXBhcnQgaW4gdGlsZSBbJWRdPSVkCgAlcyB4MT0lZCwgeTE9JWQKACVzIHgwPSVkLCB5MD0lZAoARmFpbGVkIHRvIGRlY29kZSB0aWxlICVkLyVkCgBTZXR0aW5nIGRlY29kaW5nIGFyZWEgdG8gJWQsJWQsJWQsJWQKAEZhaWxlZCB0byBkZWNvZGUgY29tcG9uZW50ICVkCgBJbnZhbGlkIHZhbHVlIGZvciBudW1yZXNvbHV0aW9ucyA6ICVkLCBtYXggdmFsdWUgaXMgc2V0IGluIG9wZW5qcGVnLmggYXQgJWQKAEludmFsaWQgY29tcG9uZW50IG51bWJlcjogJWQsIHJlZ2FyZGluZyB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgJWQKAFRvbyBtYW55IFBPQ3MgJWQKAEludmFsaWQgdGlsZSBudW1iZXIgJWQKAEludmFsaWQgdGlsZSBwYXJ0IGluZGV4IGZvciB0aWxlIG51bWJlciAlZC4gR290ICVkLCBleHBlY3RlZCAlZAoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBudW1iZXIgb2YgY29tcG9uZW50IGlzIGlsbGVnYWwgLT4gJWQKAE5vdCBlbm91Z2ggbWVtb3J5IGZvciBjaWVsYWIKAENhbm5vdCBhbGxvY2F0ZSBjYmxrLT5kZWNvZGVkX2RhdGEKAEZhaWxlZCB0byBtZXJnZSBQUFQgZGF0YQoARmFpbGVkIHRvIG1lcmdlIFBQTSBkYXRhCgBJbnZhbGlkIG51bWJlciBvZiBsYXllcnMgaW4gQ09EIG1hcmtlciA6ICVkIG5vdCBpbiByYW5nZSBbMS02NTUzNV0KACVzOiVkOmNvbG9yX2NteWtfdG9fcmdiCglDQU4gTk9UIENPTlZFUlQKACVzOiVkOmNvbG9yX2VzeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgAlczolZDpjb2xvcl9zeWNjX3RvX3JnYgoJQ0FOIE5PVCBDT05WRVJUCgBTdHJlYW0gdG9vIHNob3J0LCBleHBlY3RlZCBTT1QKAFVuYWJsZSB0byBzZXQgdDEgaGFuZGxlIGFzIFRMUwoAU3RyZWFtIGRvZXMgbm90IGVuZCB3aXRoIEVPQwoAQ2Fubm90IGhhbmRsZSBib3ggc2l6ZXMgaGlnaGVyIHRoYW4gMl4zMgoAb3BqX3BpX25leHRfbHJjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcmxjcCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfY3BybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcGNybCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3BpX25leHRfcnBjbCgpOiBpbnZhbGlkIGNvbXBubzAvY29tcG5vMQoAb3BqX3QxX2RlY29kZV9jYmxrKCk6IHVuc3VwcG9ydGVkIGJwbm9fcGx1c19vbmUgPSAlZCA+PSAzMQoARmFpbGVkIHRvIGRlY29kZSB0aWxlIDEvMQoASW5zdWZmaWNpZW50IGRhdGEgZm9yIENNQVAgYm94LgoATmVlZCB0byByZWFkIGEgUENMUiBib3ggYmVmb3JlIHRoZSBDTUFQIGJveC4KAEluc3VmZmljaWVudCBkYXRhIGZvciBDREVGIGJveC4KAE51bWJlciBvZiBjaGFubmVsIGRlc2NyaXB0aW9uIGlzIGVxdWFsIHRvIHplcm8gaW4gQ0RFRiBib3guCgBTdHJlYW0gZXJyb3Igd2hpbGUgcmVhZGluZyBKUDIgSGVhZGVyIGJveDogbm8gJ2loZHInIGJveC4KAE5vbiBjb25mb3JtYW50IGNvZGVzdHJlYW0gVFBzb3Q9PVROc290LgoAU3RyZWFtIGVycm9yIHdoaWxlIHJlYWRpbmcgSlAyIEhlYWRlciBib3g6IGJveCBsZW5ndGggaXMgaW5jb25zaXN0ZW50LgoAQm94IGxlbmd0aCBpcyBpbmNvbnNpc3RlbnQuCgBSZXNvbHV0aW9uIGZhY3RvciBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gcmVzb2x1dGlvbiBpbiB0aGUgY29tcG9uZW50LgoAQ29tcG9uZW50IG1hcHBpbmcgc2VlbXMgd3JvbmcuIFRyeWluZyB0byBjb3JyZWN0LgoASW5jb21wbGV0ZSBjaGFubmVsIGRlZmluaXRpb25zLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW52YWxpZCBjb2RlYmxvY2sgbGVuZ3RoIHZhbHVlcy4KAFdlIGRvIG5vdCBzdXBwb3J0IG1vcmUgdGhhbiAzIGNvZGluZyBwYXNzZXMgaW4gYW4gSFQgY29kZWJsb2NrOyBUaGlzIGNvZGVibG9ja3MgaGFzICVkIHBhc3Nlcy4KAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFRoZXJlIGFyZSAlZCB6ZXJvIGJpdHBsYW5lcyBpbiAlZCBiaXRwbGFuZXMuCgBDYW5ub3QgdGFrZSBpbiBjaGFyZ2UgbXVsdGlwbGUgdHJhbnNmb3JtYXRpb24gc3RhZ2VzLgoAVW5rbm93biBtYXJrZXIgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIGdlbmVyYXRlZCBlcnJvci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfc2V0dXBfZGVjb2RlciBmdW5jdGlvbiBpcyBub3QgYSBkZWNvbXByZXNzb3IgaGFuZGxlci4KAENvZGVjIHByb3ZpZGVkIHRvIHRoZSBvcGpfcmVhZF9oZWFkZXIgZnVuY3Rpb24gaXMgbm90IGEgZGVjb21wcmVzc29yIGhhbmRsZXIuCgBUaWxlcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSBkaW1lbnNpb24uIFNraXAgdGhlIE1DVCBzdGVwLgoATnVtYmVyIG9mIGNvbXBvbmVudHMgKCVkKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhIE1DVC4gU2tpcCB0aGUgTUNUIHN0ZXAuCgBKUDIgYm94IHdoaWNoIGFyZSBhZnRlciB0aGUgY29kZXN0cmVhbSB3aWxsIG5vdCBiZSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24uCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBXaGVuIHRoZSBudW1iZXIgb2YgemVybyBwbGFuZXMgYml0cGxhbmVzIGlzIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYml0cGxhbmVzLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3MgbWFrZXMgc2Vuc2UsIGJ1dCB3ZSBoYXZlICVkIHBhc3NlcyBpbiB0aGlzIGNvZGVibG9jay4gVGhlcmVmb3JlLCBvbmx5IHRoZSBjbGVhbnVwIHBhc3Mgd2lsbCBiZSBkZWNvZGVkLiBUaGlzIG1lc3NhZ2Ugd2lsbCBub3QgYmUgZGlzcGxheWVkIGFnYWluLgoASW1hZ2UgaGFzIGxlc3MgY29tcG9uZW50cyB0aGFuIGNvZGVzdHJlYW0uCgBOZWVkIHRvIGRlY29kZSB0aGUgbWFpbiBoZWFkZXIgYmVmb3JlIGJlZ2luIHRvIGRlY29kZSB0aGUgcmVtYWluaW5nIGNvZGVzdHJlYW0uCgBQc290IHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbGUtcGFydCBpcyBlcXVhbCB0byB6ZXJvLCB3ZSBhc3N1bWluZyBpdCBpcyB0aGUgbGFzdCB0aWxlLXBhcnQgb2YgdGhlIGNvZGVzdHJlYW0uCgBBIG1hbGZvcm1lZCBjb2RlYmxvY2sgdGhhdCBoYXMgbW9yZSB0aGFuIG9uZSBjb2RpbmcgcGFzcywgYnV0IHplcm8gbGVuZ3RoIGZvciAybmQgYW5kIHBvdGVudGlhbGx5IHRoZSAzcmQgcGFzcyBpbiBhbiBIVCBjb2RlYmxvY2suCgAJCQkgdGlsZS1wYXJ0WyVkXTogc3Rhcl9wb3M9JWxsaSwgZW5kX2hlYWRlcj0lbGxpLCBlbmRfcG9zPSVsbGkuCgBUaWxlICV1IGhhcyBUUHNvdCA9PSAwIGFuZCBUTnNvdCA9PSAwLCBidXQgbm8gb3RoZXIgdGlsZS1wYXJ0cyB3ZXJlIGZvdW5kLiBFT0MgaXMgYWxzbyBtaXNzaW5nLgoAQ29tcG9uZW50ICVkIGRvZXNuJ3QgaGF2ZSBhIG1hcHBpbmcuCgBBIGNvbmZvcm1pbmcgSlAyIHJlYWRlciBzaGFsbCBpZ25vcmUgYWxsIENvbG91ciBTcGVjaWZpY2F0aW9uIGJveGVzIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UgaWdub3JlIHRoaXMgb25lLgoAVGhlIHNpZ25hdHVyZSBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlICBib3ggbXVzdCBiZSB0aGUgZmlyc3QgYm94IGluIHRoZSBmaWxlLgoAVGhlIGZ0eXAgYm94IG11c3QgYmUgdGhlIHNlY29uZCBib3ggaW4gdGhlIGZpbGUuCgBGYWlsZWQgdG8gZGVjb2RlLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gSW5jb3JyZWN0IE1FTCBzZWdtZW50IHNlcXVlbmNlLgoAQ29tcG9uZW50ICVkIGlzIG1hcHBlZCB0d2ljZS4KAE9ubHkgb25lIENNQVAgYm94IGlzIGFsbG93ZWQuCgBXZSBuZWVkIGFuIGltYWdlIHByZXZpb3VzbHkgY3JlYXRlZC4KAElIRFIgYm94X21pc3NpbmcuIFJlcXVpcmVkLgoASlAySCBib3ggbWlzc2luZy4gUmVxdWlyZWQuCgBOb3Qgc3VyZSBob3cgdGhhdCBoYXBwZW5lZC4KAE1haW4gaGVhZGVyIGhhcyBiZWVuIGNvcnJlY3RseSBkZWNvZGVkLgoAVGlsZSAlZC8lZCBoYXMgYmVlbiBkZWNvZGVkLgoASGVhZGVyIG9mIHRpbGUgJWQgLyAlZCBoYXMgYmVlbiByZWFkLgoARW1wdHkgU09UIG1hcmtlciBkZXRlY3RlZDogUHNvdD0lZC4KAERpcmVjdCB1c2UgYXQgIyVkIGhvd2V2ZXIgcGNvbD0lZC4KAEltcGxlbWVudGF0aW9uIGxpbWl0YXRpb246IGZvciBwYWxldHRlIG1hcHBpbmcsIHBjb2xbJWRdIHNob3VsZCBiZSBlcXVhbCB0byAlZCwgYnV0IGlzIGVxdWFsIHRvICVkLgoASW52YWxpZCBjb21wb25lbnQvcGFsZXR0ZSBpbmRleCBmb3IgZGlyZWN0IG1hcHBpbmcgJWQuCgBJbnZhbGlkIHZhbHVlIGZvciBjbWFwWyVkXS5tdHlwID0gJWQuCgBQc290IHZhbHVlIGlzIG5vdCBjb3JyZWN0IHJlZ2FyZHMgdG8gdGhlIEpQRUcyMDAwIG5vcm06ICVkLgoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gVkxDIGNvZGUgcHJvZHVjZXMgc2lnbmlmaWNhbnQgc2FtcGxlcyBvdXRzaWRlIHRoZSBjb2RlYmxvY2sgYXJlYS4KAFVuZXhwZWN0ZWQgT09NLgoAMzIgYml0cyBhcmUgbm90IGVub3VnaCB0byBkZWNvZGUgdGhpcyBjb2RlYmxvY2ssIHNpbmNlIHRoZSBudW1iZXIgb2YgYml0cGxhbmUsICVkLCBpcyBsYXJnZXIgdGhhbiAzMC4KAEJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTE9JWQpIHNob3VsZCBiZSA+IDAuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIHNob3VsZCBiZSA+IDAuCgBVcCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feTA9JWQpIHNob3VsZCBiZSA+PSAwLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIHNob3VsZCBiZSA+PSAwLgoARXJyb3IgcmVhZGluZyBQUFQgbWFya2VyOiBwYWNrZXQgaGVhZGVyIGhhdmUgYmVlbiBwcmV2aW91c2x5IGZvdW5kIGluIHRoZSBtYWluIGhlYWRlciAoUFBNIG1hcmtlcikuCgBTdGFydCB0byByZWFkIGoyayBtYWluIGhlYWRlciAoJWxsZCkuCgBCb3R0b20gcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kxPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZc2l6PSVkKS4KAFVwIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MD0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWXNpej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoATGVmdCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDA9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhzaXo9JWQpLgoAQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBkZWNvZGVkIGFyZWEgKHJlZ2lvbl95MT0lZCkgaXMgb3V0c2lkZSB0aGUgaW1hZ2UgYXJlYSAoWU9zaXo9JWQpLgoAVXAgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3kwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChZT3Npej0lZCkuCgBSaWdodCBwb3NpdGlvbiBvZiB0aGUgZGVjb2RlZCBhcmVhIChyZWdpb25feDE9JWQpIGlzIG91dHNpZGUgdGhlIGltYWdlIGFyZWEgKFhPc2l6PSVkKS4KAExlZnQgcG9zaXRpb24gb2YgdGhlIGRlY29kZWQgYXJlYSAocmVnaW9uX3gwPSVkKSBpcyBvdXRzaWRlIHRoZSBpbWFnZSBhcmVhIChYT3Npej0lZCkuCgBTaXplIHggb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0udz0lZCkuCgBTaXplIHkgb2YgdGhlIGRlY29kZWQgY29tcG9uZW50IGltYWdlIGlzIGluY29ycmVjdCAoY29tcFslZF0uaD0lZCkuCgBUaWxlIHJlYWQsIGRlY29kZWQgYW5kIHVwZGF0ZWQgaXMgbm90IHRoZSBkZXNpcmVkIG9uZSAoJWQgdnMgJWQpLgoASW52YWxpZCBjb21wb25lbnQgaW5kZXggJWQgKD49ICVkKS4KAG9wal9yZWFkX2hlYWRlcigpIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIG9wal9zZXRfZGVjb2RlZF9jb21wb25lbnRzKCkuCgBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluIG9wal9qcDJfYXBwbHlfcGNscigpLgoAaW1hZ2UtPmNvbXBzWyVkXS5kYXRhID09IE5VTEwgaW4gb3BqX2pwMl9hcHBseV9wY2xyKCkuCgBpbnZhbGlkIGJveCBzaXplICVkICgleCkKAEZhaWwgdG8gcmVhZCB0aGUgY3VycmVudCBtYXJrZXIgc2VnbWVudCAoJSN4KQoARXJyb3Igd2l0aCBTSVogbWFya2VyOiBJSERSIHcoJXUpIGgoJXUpIHZzLiBTSVogdygldSkgaCgldSkKAEVycm9yIHJlYWRpbmcgQ09DIG1hcmtlciAoYmFkIG51bWJlciBvZiBjb21wb25lbnRzKQoASW52YWxpZCBudW1iZXIgb2YgdGlsZXMgOiAldSB4ICV1IChtYXhpbXVtIGZpeGVkIGJ5IGpwZWcyMDAwIG5vcm0gaXMgNjU1MzUgdGlsZXMpCgBJbnZhbGlkIG51bWJlciBvZiBjb21wb25lbnRzIChpaGRyKQoATm90IGVub3VnaCBtZW1vcnkgdG8gaGFuZGxlIGltYWdlIGhlYWRlciAoaWhkcikKAFdyb25nIHZhbHVlcyBmb3I6IHcoJWQpIGgoJWQpIG51bWNvbXBzKCVkKSAoaWhkcikKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBkeD0ldSBkeT0ldSAoc2hvdWxkIGJlIGJldHdlZW4gMSBhbmQgMjU1IGFjY29yZGluZyB0byB0aGUgSlBFRzIwMDAgbm9ybSkKAEJhZCBpbWFnZSBoZWFkZXIgYm94IChiYWQgc2l6ZSkKAEJhZCBDT0xSIGhlYWRlciBib3ggKGJhZCBzaXplKQoAQmFkIEJQQ0MgaGVhZGVyIGJveCAoYmFkIHNpemUpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG5lZ2F0aXZlIG9yIHplcm8gaW1hZ2Ugc2l6ZSAoJWxsZCB4ICVsbGQpCgBza2lwOiBzZWdtZW50IHRvbyBsb25nICglZCkgd2l0aCBtYXggKCVkKSBmb3IgY29kZWJsb2NrICVkIChwPSVkLCBiPSVkLCByPSVkLCBjPSVkKQoAcmVhZDogc2VnbWVudCB0b28gbG9uZyAoJWQpIHdpdGggbWF4ICglZCkgZm9yIGNvZGVibG9jayAlZCAocD0lZCwgYj0lZCwgcj0lZCwgYz0lZCkKAERlc3BpdGUgSlAyIEJQQyE9MjU1LCBwcmVjaXNpb24gYW5kL29yIHNnbmQgdmFsdWVzIGZvciBjb21wWyVkXSBpcyBkaWZmZXJlbnQgdGhhbiBjb21wWzBdOgogICAgICAgIFswXSBwcmVjKCVkKSBzZ25kKCVkKSBbJWRdIHByZWMoJWQpIHNnbmQoJWQpCgBiYWQgY29tcG9uZW50IG51bWJlciBpbiBSR04gKCVkIHdoZW4gdGhlcmUgYXJlIG9ubHkgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IG51bWJlciBvZiBjb21wb25lbnQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcmVtYWluaW5nIG51bWJlciBvZiBwYXJhbWV0ZXJzICggJWQgdnMgJWQpCgBFcnJvciB3aXRoIFNJWiBtYXJrZXI6IGludmFsaWQgdGlsZSBzaXplICh0ZHg6ICVkLCB0ZHk6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoYmFkIHNpemU6ICVkKQoAQmFkIENPTFIgaGVhZGVyIGJveCAoQ0lFTGFiLCBiYWQgc2l6ZTogJWQpCgBQVEVSTSBjaGVjayBmYWlsdXJlOiAlZCByZW1haW5pbmcgYnl0ZXMgaW4gY29kZSBibG9jayAoJWQgdXNlZCAvICVkKQoATWFsZm9ybWVkIEhUIGNvZGVibG9jay4gT25lIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIGlzIG5vdCBtZXQ6IDIgPD0gU2N1cCA8PSBtaW4oTGN1cCwgNDA3OSkKAEludmFsaWQgdmFsdWVzIGZvciBjb21wID0gJWQgOiBwcmVjPSV1IChzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzOCBhY2NvcmRpbmcgdG8gdGhlIEpQRUcyMDAwIG5vcm0uIE9wZW5KcGVnIG9ubHkgc3VwcG9ydHMgdXAgdG8gMzEpCgBJbnZhbGlkIGJpdCBudW1iZXIgJWQgaW4gb3BqX3QyX3JlYWRfcGFja2V0X2hlYWRlcigpCgBTdHJlYW0gZXJyb3IhCgBFcnJvciBvbiB3cml0aW5nIHN0cmVhbSEKAFN0cmVhbSByZWFjaGVkIGl0cyBlbmQgIQoARXhwZWN0ZWQgYSBTT0MgbWFya2VyIAoASW52YWxpZCBib3ggc2l6ZSAlZCBmb3IgYm94ICclYyVjJWMlYycuIE5lZWQgJWQgYnl0ZXMsICVkIGJ5dGVzIHJlbWFpbmluZyAKAE1hbGZvcm1lZCBIVCBjb2RlYmxvY2suIERlY29kaW5nIHRoaXMgY29kZWJsb2NrIGlzIHN0b3BwZWQuIFVfcSBpcyBsYXJnZXIgdGhhbiB6ZXJvIGJpdHBsYW5lcyArIDEgCgBNYWxmb3JtZWQgSFQgY29kZWJsb2NrLiBEZWNvZGluZyB0aGlzIGNvZGVibG9jayBpcyBzdG9wcGVkLiBVX3EgaXNsYXJnZXIgdGhhbiBiaXRwbGFuZXMgKyAxIAoAQ09MUiBCT1ggbWV0aCB2YWx1ZSBpcyBub3QgYSByZWd1bGFyIHZhbHVlICglZCksIHNvIHdlIHdpbGwgaWdub3JlIHRoZSBlbnRpcmUgQ29sb3VyIFNwZWNpZmljYXRpb24gYm94LiAKAFdoaWxlIHJlYWRpbmcgQ0NQX1FOVFNUWSBlbGVtZW50IGluc2lkZSBRQ0Qgb3IgUUNDIG1hcmtlciBzZWdtZW50LCBudW1iZXIgb2Ygc3ViYmFuZHMgKCVkKSBpcyBncmVhdGVyIHRvIE9QSl9KMktfTUFYQkFORFMgKCVkKS4gU28gd2UgbGltaXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBzdG9yZWQgdG8gT1BKX0oyS19NQVhCQU5EUyAoJWQpIGFuZCBza2lwIHRoZSByZXN0LiAKAEpQMiBJSERSIGJveDogY29tcHJlc3Npb24gdHlwZSBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG5vdCBhIGNvbmZvcm1pbmcgSlAyIGZpbGUgKCVkKSAKAFRpbGUgaW5kZXggcHJvdmlkZWQgYnkgdGhlIHVzZXIgaXMgaW5jb3JyZWN0ICVkIChtYXggPSAlZCkgCgBFcnJvciBkZWNvZGluZyBjb21wb25lbnQgJWQuClRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgdG8gcmVtb3ZlICglZCkgaXMgZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSBudW1iZXIgb2YgcmVzb2x1dGlvbnMgb2YgdGhpcyBjb21wb25lbnQg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AAABVAAAAQAAAABQAADAUAAAAUgAAAAAAAAQUAAAsFAAAAFIAAABAAAAIFAAAMBQAAABOAAAAAAAADBQAACwUAAAATgAAAEAAABAUAAAwFAAAAEwAAAAAAAAUFAAABBRAAABMAAAAQAAAGBQAAAgUQAAASQAAAAAAABwUAAAMFEAAAEkAAABAAAAgFAAAEBRAAABHAAAAAAAAJBQAABwUQAAARwAAAEAAACgUAAAgFEAAAEWAAAAAAAAkFIAAJBRAAABFgAAAQAAAKBSAACgUQAAAVYAAAAAAADQUAAAwFAAAAFWAAABAAAA4FAAALBQAAABVAAAAAAAAPBQAACwUAAAAVQAAAEAAAAAUQAAwFAAAAFRAAAAAAAAEFEAANBQAAABUQAAAQAAACBRAADgUAAAAUgAAAAAAAAwUQAA8FAAAAFIAAABAAAAQFEAAABRAAABOAAAAAAAAFBRAAAQUQAAATgAAAEAAABgUQAAIFEAAAE0AAAAAAAAcFEAADBRAAABNAAAAQAAAIBRAABAUQAAATAAAAAAAACQUQAAUFEAAAEwAAABAAAAoFEAAGBRAAABKAAAAAAAALBRAABQUQAAASgAAAEAAADAUQAAYFEAAAEkAAAAAAAA0FEAAHBRAAABJAAAAQAAAOBRAACAUQAAASIAAAAAAADwUQAAkFEAAAEiAAABAAAAAFIAAKBRAAABHAAAAAAAABBSAACwUQAAARwAAAEAAAAgUgAAwFEAAAEYAAAAAAAAMFIAANBRAAABGAAAAQAAAEBSAADgUQAAARYAAAAAAABQUgAA8FEAAAEWAAABAAAAYFIAAABSAAABFAAAAAAAAHBSAAAQUgAAARQAAAEAAACAUgAAIFIAAAESAAAAAAAAkFIAADBSAAABEgAAAQAAAKBSAABAUgAAAREAAAAAAACwUgAAUFIAAAERAAABAAAAwFIAAGBSAADBCgAAAAAAANBSAABwUgAAwQoAAAEAAADgUgAAgFIAAMEJAAAAAAAA8FIAAJBSAADBCQAAAQAAAABTAACgUgAAoQgAAAAAAAAQUwAAsFIAAKEIAAABAAAAIFMAAMBSAAAhBQAAAAAAADBTAADQUgAAIQUAAAEAAABAUwAA4FIAAEEEAAAAAAAAUFMAAPBSAABBBAAAAQAAAGBTAAAAUwAAoQIAAAAAAABwUwAAEFMAAKECAAABAAAAgFMAACBTAAAhAgAAAAAAAJBTAAAwUwAAIQIAAAEAAACgUwAAQFMAAEEBAAAAAAAAsFMAAFBTAABBAQAAAQAAAMBTAABgUwAAEQEAAAAAAADQUwAAcFMAABEBAAABAAAA4FMAAIBTAACFAAAAAAAAAPBTAACQUwAAhQAAAAEAAAAAVAAAoFMAAEkAAAAAAAAAEFQAALBTAABJAAAAAQAAACBUAADAUwAAJQAAAAAAAAAwVAAA0FMAACUAAAABAAAAQFQAAOBTAAAVAAAAAAAAAFBUAADwUwAAFQAAAAEAAABgVAAAAFQAAAkAAAAAAAAAcFQAABBUAAAJAAAAAQAAAIBUAAAgVAAABQAAAAAAAACQVAAAMFQAAAUAAAABAAAAoFQAAEBUAAABAAAAAAAAAJBUAABQVAAAAQAAAAEAAACgVAAAYFQAAAFWAAAAAAAAsFQAALBUAAABVgAAAQAAAMBUAADAVAAAAAEDAwECAwMFBgcHBgYHBwABAwMBAgMDBQYHBwYGBwcFBgcHBgYHBwgICAgICAgIBQYHBwYGBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAECAwMCAgMDBgYHBwYGBwcBAgMDAgIDAwYGBwcGBgcHBgYHBwYGBwcICAgICAgICAYGBwcGBgcHCAgICAgICAgCAgMDAgIDAwYGBwcGBgcHAgIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgAAQUGAQIGBgMDBwcDAwcHAAEFBgECBgYDAwcHAwMHBwMDBwcDAwcHBAQHBwQEBwcDAwcHAwMHBwQEBwcEBAcHAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwUGCAgGBggIBwcICAcHCAgFBggIBgYICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIAQIGBgICBgYDAwcHAwMHBwECBgYCAgYGAwMHBwMDBwcDAwcHAwMHBwQEBwcEBAcHAwMHBwMDBwcEBAcHBAQHBwICBgYCAgYGAwMHBwMDBwcCAgYGAgIGBgMDBwcDAwcHAwMHBwMDBwcEBAcHBAQHBwMDBwcDAwcHBAQHBwQEBwcGBggIBgYICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBgYICAYGCAgHBwgIBwcICAYGCAgGBggIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAcHCAgHBwgIBwcICAABAwMBAgMDBQYHBwYGBwcAAQMDAQIDAwUGBwcGBgcHBQYHBwYGBwcICAgICAgICAUGBwcGBgcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAwMEBAMDBAQHBwcHBwcHBwMDBAQDAwQEBwcHBwcHBwcHBwcHBwcHBwgICAgICAgIBwcHBwcHBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgBAgMDAgIDAwYGBwcGBgcHAQIDAwICAwMGBgcHBgYHBwYGBwcGBgcHCAgICAgICAgGBgcHBgYHBwgICAgICAgIAgIDAwICAwMGBgcHBgYHBwICAwMCAgMDBgYHBwYGBwcGBgcHBgYHBwgICAgICAgIBgYHBwYGBwcICAgICAgICAMDBAQDAwQEBwcHBwcHBwcDAwQEAwMEBAcHBwcHBwcHBwcHBwcHBwcICAgICAgICAcHBwcHBwcHCAgICAgICAgDAwQEAwMEBAcHBwcHBwcHAwMEBAMDBAQHBwcHBwcHBwcHBwcHBwcHCAgICAgICAgHBwcHBwcHBwgICAgICAgIAAMBBAMGBAcBBAIFBAcFBwADAQQDBgQHAQQCBQQHBQcBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgBBAIFBAcFBwIFAgUFBwUHAQQCBQQHBQcCBQIFBQcFBwIFAgUFBwUHAgUCBQUHBQcCBQIFBQcFBwIFAgUFBwUHBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAMGBAcGCAcIBAcFBwcIBwgDBgQHBggHCAQHBQcHCAcIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgGCAcICAgICAcIBwgICAgIBggHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBAcFBwcIBwgFBwUHBwgHCAQHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAUHBQcHCAcIBQcFBwcIBwgFBwUHBwgHCAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgHCAcICAgICAcIBwgICAgIBwgHCAgICAgJCQoKCQkKCgwMDQsMDA0LCQkKCgkJCgoMDAsNDAwLDQwMDQ0MDAsLDAkNCgkMCgsMDAsLDAwNDQwJCwoJDAoNCQkKCgkJCgoMDA0LDAwNCwkJCgoJCQoKDAwLDQwMCw0MDA0NDAwLCwwJDQoJDAoLDAwLCwwMDQ0MCQsKCQwKDQoKCgoKCgoKDQsNCw0LDQsKCgkJCgoJCQ0LDAwNCwwMDQ0NDQsLCwsNCg0KCgsKCw0NDAwLCwwMDQoMCQoLCQwKCgkJCgoJCQsNDAwLDQwMCgoKCgoKCgoLDQsNCw0LDQsLDAwNDQwMCwoMCQoNCQwLCwsLDQ0NDQsKCwoKDQoNAEHZuwELNwEAAQABAAEAAAEBAAABAQABAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAQABAQEAQZm8AQs3AQABAAEAAQAAAQEAAAEBAAEAAQABAAEAAAAAAQEBAQAAAAAAAQABAAAAAAEBAQEAAAABAAEBAQBB2bwBCwcBAAEAAQABAEHpvAELlQIBAAEAAQABAAAAAAEBAQEAAAAAAAEAAQAAAAABAQEBAAAAAAABAAEBAQAAAQEAAAABAAEAAQABAQEBAQEBAQEAAQABAAEAAQAAAAABAQEBAAEAAAEBAAEAAAAAAQEBAQABAAEBAQEBAgAAAAQAAAAEAAAACAAAAJD/AAAMAAAAGAAAAFL/AAAUAAAAGQAAAFP/AAAUAAAAGgAAAF7/AAAUAAAAGwAAAFz/AAAUAAAAHAAAAF3/AAAUAAAAHQAAAF//AAAUAAAAHgAAAFH/AAACAAAAHwAAAFX/AAAEAAAAIAAAAFf/AAAEAAAAIQAAAFj/AAAQAAAAIgAAAGD/AAAEAAAAIwAAAGH/AAAQAAAAJAAAAJH/AEGIvwELZWP/AAAEAAAAJQAAAGT/AAAUAAAAJgAAAHT/AAAUAAAAJwAAAHj/AAAEAAAAKAAAAFD/AAAEAAAAKQAAAFn/AAAEAAAAKgAAAHX/AAAUAAAAKwAAAHf/AAAUAAAALAAAAAAAAAAUAEGAwAELNS0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAAICBQajYAAABweXRmNwAAAGgycGo4AEHAwAELMnJkaGk5AAAAcmxvYzoAAABjY3BiOwAAAHJsY3A8AAAAcGFtYz0AAABmZWRjPgAAAPhiAEGAwQELQRkACwAZGRkAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAGQAKChkZGQMKBwABAAkLGAAACQYLAAALAAYZAAAAGRkZAEHRwQELIQ4AAAAAAAAAABkACw0ZGRkADQAAAgAJDgAAAAkADgAADgBBi8IBCwEMAEGXwgELFRMAAAAAEwAAAAAJDAAAAAAADAAADABBxcIBCwEQAEHRwgELFQ8AAAAEDwAAAAAJEAAAAAAAEAAAEABB/8IBCwESAEGLwwELHhEAAAAAEQAAAAAJEgAAAAAAEgAAEgAAGgAAABoaGgBBwsMBCw4aAAAAGhoaAAAAAAAACQBB88MBCwEUAEH/wwELFRcAAAAAFwAAAAAJFAAAAAAAFAAAFABBrcQBCwEWAEG5xAELJxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgBB4MQBCwmQbAEAAAAAAAUAQfTEAQsBaQBBjMUBCwpqAAAAawAAAHhoAEGkxQELAQIAQbTFAQsI//////////8AQfjFAQsBBQBBhMYBCwFsAEGcxgELDmoAAABtAAAAiGgAAAAEAEG0xgELAQEAQcTGAQsF/////wo=";return z}var uA;function bA(z){if(z==uA&&d)return new Uint8Array(d);var rA=p(z);if(rA)return rA;if(E)return E(z);throw\'sync fetching of the wasm failed: you can preload it to Module["wasmBinary"] manually, or emcc.py will do that for you when generating HTML (but not JS)\'}function iA(z,rA){var xA,RA=bA(z);xA=new WebAssembly.Module(RA);var YA=new WebAssembly.Instance(xA,rA);return[YA,xA]}function wA(){return{a:du}}function FA(){var z=wA();function rA(RA,YA){return wi=RA.exports,m=wi.p,R(),CA(wi.q),X("wasm-instantiate"),wi}if($("wasm-instantiate"),s.instantiateWasm)try{return s.instantiateWasm(z,rA)}catch(RA){u(`Module.instantiateWasm callback failed with error: ${RA}`),n(RA)}uA||(uA=BA());var xA=iA(uA,z);return rA(xA[0])}var cA=z=>{for(;z.length>0;)z.shift()(s)},yA=s.noExitRuntime||!0,aA=(z,rA,xA)=>w.copyWithin(z,rA,rA+xA);function DA(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA),RA=s.HEAP32.subarray(z,z+rA);xA.set(RA)}function UA(z,rA,xA,RA){z>>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*3),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te>=2,rA>>=2,xA>>=2,RA>>=2;let ae=s.imageData=new Uint8ClampedArray(YA*4),ee=s.HEAP32.subarray(z,z+YA),Oe=s.HEAP32.subarray(rA,rA+YA),te=s.HEAP32.subarray(xA,xA+YA),yi=s.HEAP32.subarray(RA,RA+YA);for(let Xt=0;Xt2147483648,TA=z=>{var rA=m.buffer,xA=(z-rA.byteLength+65535)/65536;try{return m.grow(xA),R(),1}catch(RA){}},LA=z=>{var rA=w.length;z>>>=0;var xA=pA();if(z>xA)return!1;for(var RA=(te,yi)=>te+(yi-te%yi)%yi,YA=1;YA<=4;YA*=2){var ae=rA*(1+.2/YA);ae=Math.min(ae,z+100663296);var ee=Math.min(xA,RA(Math.max(z,ae),65536)),Oe=TA(ee);if(Oe)return!0}return!1},WA={},re=()=>l||"./this.program",De=()=>{if(!De.strings){var z=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",rA={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:z,_:re()};for(var xA in WA)WA[xA]===void 0?delete rA[xA]:rA[xA]=WA[xA];var RA=[];for(var xA in rA)RA.push(`${xA}=${rA[xA]}`);De.strings=RA}return De.strings},Dn=(z,rA)=>{for(var xA=0;xA{var xA=0;return De().forEach((RA,YA)=>{var ae=rA+xA;Z[z+YA*4>>2]=ae,Dn(RA,ae),xA+=RA.length+1}),0},Sn=(z,rA)=>{var xA=De();Z[z>>2]=xA.length;var RA=0;return xA.forEach(YA=>RA+=YA.length+1),Z[rA>>2]=RA,0},co=z=>52,Iu=(z,rA)=>rA+2097152>>>0<4194305-!!z?(z>>>0)+rA*4294967296:NaN;function cu(z,rA,xA,RA,YA){var ae=Iu(rA,xA);return 70}var lu=[null,[],[]],D1=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0,k1=(z,rA,xA)=>{for(var RA=rA+xA,YA=rA;z[YA]&&!(YA>=RA);)++YA;if(YA-rA>16&&z.buffer&&D1)return D1.decode(z.subarray(rA,YA));for(var ae="";rA>10,56320|yi&1023)}}return ae},hu=(z,rA)=>{var xA=lu[z];rA===0||rA===10?((z===1?f:u)(k1(xA,0)),xA.length=0):xA.push(rA)},S1=(z,rA)=>z?k1(w,z,rA):"",Cu=(z,rA,xA,RA)=>{for(var YA=0,ae=0;ae>2],Oe=Z[rA+4>>2];rA+=8;for(var te=0;te>2]=YA,0};function Bu(z,rA){z>>=2;let xA=s.imageData=new Uint8ClampedArray(rA*4),RA=s.HEAP32.subarray(z,z+rA);for(let YA=0;YA>=2,rA>>=2;let RA=s.imageData=new Uint8ClampedArray(xA*4),YA=s.HEAP32.subarray(z,z+xA),ae=s.HEAP32.subarray(rA,rA+xA);for(let ee=0;ee>=2,rA>>=2,xA>>=2;let YA=s.imageData=new Uint8ClampedArray(RA*4),ae=s.HEAP32.subarray(z,z+RA),ee=s.HEAP32.subarray(rA,rA+RA),Oe=s.HEAP32.subarray(xA,xA+RA);for(let te=0;te0||(V(),H>0))return;function z(){Fn||(Fn=!0,s.calledRun=!0,!D&&(lA(),a(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),EA()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),z()},1)):z()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();return F1(),i=s,i}})(),Sd=kd,br=class extends At{constructor(A){super(A,"JpxError")}},ms,hs=class{static decode(A,t){t||(t={}),ne(this,ms)||_s(this,ms,Sd({warn:k}));let i=ne(this,ms).decode(A,t);if(typeof i=="string")throw new br(i);return i}static cleanup(){_s(this,ms,null)}static parseImageProperties(A){let t=A.getByte();for(;t>=0;){let i=t;if(t=A.getByte(),(i<<8|t)===65361){A.skip(4);let a=A.getInt32()>>>0,n=A.getInt32()>>>0,r=A.getInt32()>>>0,g=A.getInt32()>>>0;A.skip(16);let o=A.getUint16();return{width:a-r,height:n-g,bitsPerComponent:8,componentsCount:o}}}throw new br("No size marker found in JPX stream")}};ms=new WeakMap,HA(hs,ms,null);var dI=class extends Me{constructor(A,t,i){super(t),this.stream=A,this.dict=A.dict,this.maybeLength=t,this.params=i}get bytes(){return nA(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(A){}readBlock(A){this.decodeImage(null,A)}decodeImage(A,t){return this.eof?this.buffer:(A||(A=this.bytes),this.buffer=hs.decode(A,t),this.bufferLength=this.buffer.length,this.eof=!0,this.buffer)}get canAsyncDecodeImageFromBuffer(){return this.stream.isAsync}},Dr=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.cachedData=0,this.bitsCached=0;let s=4096,a={earlyChange:i,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(s),dictionaryLengths:new Uint16Array(s),dictionaryPrevCodes:new Uint16Array(s),currentSequence:new Uint8Array(s),currentSequenceLength:0};for(let n=0;n<256;++n)a.dictionaryValues[n]=n,a.dictionaryLengths[n]=1;this.lzwState=a}readBits(A){let t=this.bitsCached,i=this.cachedData;for(;t>>t&(1<0;if(d<256)B[0]=d,Q=1;else if(d>=258)if(d=0;a--)B[a]=I[n],n=l[n];else B[Q++]=B[0];else if(d===256){h=9,o=258,Q=0;continue}else{this.eof=!0,delete this.lzwState;break}if(x&&(l[o]=C,c[o]=c[C]+1,I[o]=B[0],o++,h=o+g&o+g-1?h:Math.min(Math.log(o+g)/.6931471805599453+1,12)|0),C=d,E+=Q,i15))throw new v(`Unsupported predictor: ${s}`);this.readBlock=s===2?this.readBlockTiff:this.readBlockPng,this.str=A,this.dict=A.dict;let a=this.colors=i.get("Colors")||1,n=this.bits=i.get("BPC","BitsPerComponent")||8,r=this.columns=i.get("Columns")||1;return this.pixBytes=a*n+7>>3,this.rowBytes=r*a*n+7>>3,this}readBlockTiff(){let A=this.rowBytes,t=this.bufferLength,i=this.ensureBuffer(t+A),s=this.bits,a=this.colors,n=this.str.getBytes(A);if(this.eof=!n.length,this.eof)return;let r=0,g=0,o=0,I=0,c=t,l;if(s===1&&a===1)for(l=0;l>1,h^=h>>2,h^=h>>4,r=(h&1)<<7,i[c++]=h}else if(s===8){for(l=0;l>8&255,i[c++]=C&255}}else{let h=new Uint8Array(a+1),C=(1<>o-s)&C,o-=s,g=g<=8&&(i[Q++]=g>>I-8&255,I-=8);I>0&&(i[Q++]=(g<<8-I)+(r&(1<<8-I)-1))}this.bufferLength+=A}readBlockPng(){let A=this.rowBytes,t=this.pixBytes,i=this.str.getByte(),s=this.str.getBytes(A);if(this.eof=!s.length,this.eof)return;let a=this.bufferLength,n=this.ensureBuffer(a+A),r=n.subarray(a-A,a);r.length===0&&(r=new Uint8Array(A));let g,o=a,I,c;switch(i){case 0:for(g=0;g>1)+s[g];for(;g>1)+s[g]&255,o++;break;case 4:for(g=0;g0){let a=this.str.getBytes(s);t.set(a,i),i+=s}}else{s=257-s;let a=A[1];t=this.ensureBuffer(i+s+1);for(let n=0;n>")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M)){PA("Malformed dictionary: key must be a name object"),this.shift();continue}let a=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s.set(a,this.getObj(A))}if(this.buf1===Ge){if(this.recoveryMode)return s;throw new Sa("End of file inside dictionary.")}return Ne(this.buf2,"stream")?this.allowStreams?this.makeStream(s,A):s:(this.shift(),s);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&Ne(this.buf2,"R")){let i=oA.get(t,this.buf1);return this.shift(),this.shift(),i}return t}return typeof t=="string"&&A?A.decryptString(t):t}findDefaultInlineStreamEnd(A){let{knownCommands:g}=this.lexer,o=A.pos,I=15,c=0,l,h;for(;(l=A.getByte())!==-1;)if(c===0)c=l===69?1:0;else if(c===1)c=l===73?2:0;else if(l===32||l===10||l===13){h=A.pos;let B=A.peekBytes(I),Q=B.length;if(Q===0)break;for(let u=0;u127)){c=0;break}if(c!==2)continue;if(!g){k("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");continue}let E=new dt(new Ie(B.slice()),g);E._hexStringWarn=()=>{};let f=0;for(;;){let u=E.getObj();if(u===Ge){c=0;break}if(u instanceof fe){let d=g[u.cmd];if(d){if(d.variableArgs?f<=d.numArgs:f===d.numArgs)break}else{c=0;break}f=0;continue}f++}if(c===2)break}else c=0;l===-1&&(k("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),h&&(k(\'... trying to recover by using the last "EI" occurrence.\'),A.skip(-(A.pos-h))));let C=4;return A.skip(-C),l=A.peekByte(),A.skip(C),pt(l)||C--,A.pos-C-o}findDCTDecodeInlineStreamEnd(A){let t=A.pos,i=!1,s,a;for(;(s=A.getByte())!==-1;)if(s===255){switch(A.getByte()){case 0:break;case 255:A.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:a=A.getUint16(),a>2?A.skip(a-2):A.skip(-2);break}if(i)break}let n=A.pos-t;return s===-1?(k("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCII85DecodeInlineStreamEnd(A){let s=A.pos,a;for(;(a=A.getByte())!==-1;)if(a===126){let r=A.pos;for(a=A.peekByte();pt(a);)A.skip(),a=A.peekByte();if(a===62){A.skip();break}if(A.pos>r){let g=A.peekBytes(2);if(g[0]===69&&g[1]===73)break}}let n=A.pos-s;return a===-1?(k("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-n),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),n)}findASCIIHexDecodeInlineStreamEnd(A){let i=A.pos,s;for(;(s=A.getByte())!==-1&&s!==62;);let a=A.pos-i;return s===-1?(k("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),A.skip(-a),this.findDefaultInlineStreamEnd(A)):(this.inlineStreamSkipEI(A),a)}inlineStreamSkipEI(A){let s=0,a;for(;(a=A.getByte())!==-1;)if(s===0)s=a===69?1:0;else if(s===1)s=a===73?2:0;else if(s===2)break}makeInlineImage(A){let t=this.lexer,i=t.stream,s=Object.create(null),a;for(;!Ne(this.buf1,"ID")&&this.buf1!==Ge;){if(!(this.buf1 instanceof M))throw new v("Dictionary key must be a name object");let h=this.buf1.name;if(this.shift(),this.buf1===Ge)break;s[h]=this.getObj(A)}t.beginInlineImagePos!==-1&&(a=i.pos-t.beginInlineImagePos);let n=this.xref.fetchIfRef(s.F||s.Filter),r;if(n instanceof M)r=n.name;else if(Array.isArray(n)){let h=this.xref.fetchIfRef(n[0]);h instanceof M&&(r=h.name)}let g=i.pos,o;switch(r){case"DCT":case"DCTDecode":o=this.findDCTDecodeInlineStreamEnd(i);break;case"A85":case"ASCII85Decode":o=this.findASCII85DecodeInlineStreamEnd(i);break;case"AHx":case"ASCIIHexDecode":o=this.findASCIIHexDecodeInlineStreamEnd(i);break;default:o=this.findDefaultInlineStreamEnd(i)}let I;if(o0){let h=i.pos;i.pos=t.beginInlineImagePos,I=Rd(i.getBytes(a+o)),i.pos=h;let C=this.imageCache[I];if(C!==void 0)return this.buf2=fe.get("EI"),this.shift(),C.reset(),C}let c=new F(this.xref);for(let h in s)c.set(h,s[h]);let l=i.makeSubStream(g,o,c);return A&&(l=A.createStream(l,o)),l=this.filter(l,c,o),l.dict=c,I!==void 0&&(l.cacheKey=`inline_img_${++this._imageId}`,this.imageCache[I]=l),this.buf2=fe.get("EI"),this.shift(),l}makeStream(A,t){let i=this.lexer,s=i.stream;i.skipToNextLine();let a=s.pos-1,n=A.get("Length");if(Number.isInteger(n)||(PA(`Bad length "${n&&n.toString()}" in stream.`),n=0),s.pos=a+n,i.nextChar(),this.tryShift()&&Ne(this.buf2,"endstream"))this.shift();else{if(n=mA(this,Ug,lf).call(this,a),n<0)throw new v("Missing endstream command.");i.nextChar(),this.shift(),this.shift()}return this.shift(),s=s.makeSubStream(a,n,A),t&&(s=t.createStream(s,n)),s=this.filter(s,A,n),s.dict=A,s}filter(A,t,i){let s=t.get("F","Filter"),a=t.get("DP","DecodeParms");if(s instanceof M)return Array.isArray(a)&&k("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(A,s.name,i,a);let n=i;if(Array.isArray(s)){let r=s,g=a;for(let o=0,I=r.length;o=n){let h=!1;for(let C of r){let B=C.length,Q=0;for(;Q=g){h=!0;break}if(Q>=B){let E=o[c+l+Q];pt(E)&&(PA(`Found "${Qt([...a,...C])}" when searching for endstream command.`),h=!0);break}}if(h)return t.pos+=c,t.pos-A}c++}t.pos+=I}return-1};var q0=[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 Qo(e){return e>=48&&e<=57?e&15:e>=65&&e<=70||e>=97&&e<=102?(e&15)+9:-1}var dt=class{constructor(A,t=null){this.stream=A,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 A=this.currentChar,t=!1,i=0,s=1;if(A===45?(s=-1,A=this.nextChar(),A===45&&(A=this.nextChar())):A===43&&(A=this.nextChar()),A===10||A===13)do A=this.nextChar();while(A===10||A===13);if(A===46&&(i=10,A=this.nextChar()),A<48||A>57){let g=`Invalid number: ${String.fromCharCode(A)} (charCode ${A})`;if(pt(A)||A===-1)return PA(`Lexer.getNumber - "${g}".`),0;throw new v(g)}let a=A-48,n=0,r=1;for(;(A=this.nextChar())>=0;)if(A>=48&&A<=57){let g=A-48;t?n=n*10+g:(i!==0&&(i*=10),a=a*10+g)}else if(A===46)if(i===0)i=1;else break;else if(A===45)k("Badly formatted number: minus sign in the middle");else if(A===69||A===101){if(A=this.peekChar(),A===43||A===45)r=A===45?-1:1,this.nextChar();else if(A<48||A>57)break;t=!0}else break;return i!==0&&(a/=i),t&&(a*=10**(r*n)),s*a}getString(){let A=1,t=!1,i=this.strBuf;i.length=0;let s=this.nextChar();for(;;){let a=!1;switch(s|0){case-1:k("Unterminated string"),t=!0;break;case 40:++A,i.push("(");break;case 41:--A===0?(this.nextChar(),t=!0):i.push(")");break;case 92:switch(s=this.nextChar(),s){case-1:k("Unterminated string"),t=!0;break;case 110:i.push(`\n`);break;case 114:i.push("\\r");break;case 116:i.push(" ");break;case 98:i.push("\\b");break;case 102:i.push("\\f");break;case 92:case 40:case 41:i.push(String.fromCharCode(s));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let n=s&15;s=this.nextChar(),a=!0,s>=48&&s<=55&&(n=(n<<3)+(s&15),s=this.nextChar(),s>=48&&s<=55&&(a=!1,n=(n<<3)+(s&15))),i.push(String.fromCharCode(n));break;case 13:this.peekChar()===10&&this.nextChar();break;case 10:break;default:i.push(String.fromCharCode(s));break}break;default:i.push(String.fromCharCode(s));break}if(t)break;a||(s=this.nextChar())}return i.join("")}getName(){let A,t,i=this.strBuf;for(i.length=0;(A=this.nextChar())>=0&&!q0[A];)if(A===35){if(A=this.nextChar(),q0[A]){k("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),i.push("#");break}let s=Qo(A);if(s!==-1){t=A,A=this.nextChar();let a=Qo(A);if(a===-1){if(k(`Lexer_getName: Illegal digit (${String.fromCharCode(A)}) in hexadecimal number.`),i.push("#",String.fromCharCode(t)),q0[A])break;i.push(String.fromCharCode(A));continue}i.push(String.fromCharCode(s<<4|a))}else i.push("#",String.fromCharCode(A))}else i.push(String.fromCharCode(A));return i.length>127&&k(`Name token is longer than allowed by the spec: ${i.length}`),M.get(i.join(""))}_hexStringWarn(A){if(this._hexStringNumWarn++===5){k("getHexString - ignoring additional invalid characters.");return}this._hexStringNumWarn>5||k(`getHexString - ignoring invalid character: ${A}`)}getHexString(){let A=this.strBuf;A.length=0;let t=this.currentChar,i=-1,s=-1;for(this._hexStringNumWarn=0;;)if(t<0){k("Unterminated hex string");break}else if(t===62){this.nextChar();break}else if(q0[t]===1){t=this.nextChar();continue}else s=Qo(t),s===-1?this._hexStringWarn(t):i===-1?i=s:(A.push(String.fromCharCode(i<<4|s)),i=-1),t=this.nextChar();return i!==-1&&A.push(String.fromCharCode(i<<4)),A.join("")}getObj(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(q0[t]!==1)break;t=this.nextChar()}switch(t|0){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:return this.nextChar(),fe.get("[");case 93:return this.nextChar(),fe.get("]");case 60:return t=this.nextChar(),t===60?(this.nextChar(),fe.get("<<")):this.getHexString();case 62:return t=this.nextChar(),t===62?(this.nextChar(),fe.get(">>")):fe.get(">");case 123:return this.nextChar(),fe.get("{");case 125:return this.nextChar(),fe.get("}");case 41:throw this.nextChar(),new v(`Illegal character: ${t}`)}let i=String.fromCharCode(t);if(t<32||t>127){let n=this.peekChar();if(n>=32&&n<=127)return this.nextChar(),fe.get(i)}let s=this.knownCommands,a=(s==null?void 0:s[i])!==void 0;for(;(t=this.nextChar())>=0&&!q0[t];){let n=i+String.fromCharCode(t);if(a&&s[n]===void 0)break;if(i.length===128)throw new v(`Command token too long: ${i.length}`);i=n,a=(s==null?void 0:s[i])!==void 0}return i==="true"?!0:i==="false"?!1:i==="null"?null:(i==="BI"&&(this.beginInlineImagePos=this.stream.pos),fe.get(i))}skipToNextLine(){let A=this.currentChar;for(;A>=0;){if(A===13){A=this.nextChar(),A===10&&this.nextChar();break}else if(A===10){this.nextChar();break}A=this.nextChar()}}},mI=class{static create(A){function t(c,l,h=!1){let C=c.get(l);if(Number.isInteger(C)&&(h?C>=0:C>0))return C;throw new Error(`The "${l}" parameter in the linearization dictionary is invalid.`)}function i(c){let l=c.get("H"),h;if(Array.isArray(l)&&((h=l.length)===2||h===4)){for(let C=0;C0))throw new Error(`Hint (${C}) in the linearization dictionary is invalid.`)}return l}throw new Error("Hint array in the linearization dictionary is invalid.")}let s=new zt({lexer:new dt(A),xref:null}),a=s.getObj(),n=s.getObj(),r=s.getObj(),g=s.getObj(),o,I;if(Number.isInteger(a)&&Number.isInteger(n)&&Ne(r,"obj")&&g instanceof F&&typeof(o=g.get("Linearized"))=="number"&&o>0){if((I=t(g,"L"))!==A.length)throw new Error(\'The "L" parameter in the linearization dictionary does not equal the stream length.\')}else return null;return{length:I,hints:i(g),objectNumberFirst:t(g,"O"),endFirst:t(g,"E"),numPages:t(g,"N"),mainXRefEntriesOffset:t(g,"T"),pageFirst:g.has("P")?t(g,"P",!0):0}}},Nd=["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"],Eo=2**24-1,Na=class{constructor(A=!1){this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=A}addCodespaceRange(A,t,i){this.codespaceRanges[A-1].push(t,i),this.numCodespaceRanges++}mapCidRange(A,t,i){if(t-A>Eo)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;A<=t;)this._map[A++]=i++}mapBfRange(A,t,i){if(t-A>Eo)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");let s=i.length-1;for(;A<=t;){this._map[A++]=i;let a=i.charCodeAt(s)+1;if(a>255){i=i.substring(0,s-1)+String.fromCharCode(i.charCodeAt(s-1)+1)+"\\0";continue}i=i.substring(0,s)+String.fromCharCode(a)}}mapBfRangeToArray(A,t,i){if(t-A>Eo)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");let s=i.length,a=0;for(;A<=t&&a>>0;let g=a[n];for(let o=0,I=g.length;o=c&&s<=l){i.charcode=s,i.length=n+1;return}}}i.charcode=0,i.length=1}getCharCodeLength(A){let t=this.codespaceRanges;for(let i=0,s=t.length;i=g&&A<=o)return i+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if(!(this.name==="Identity-H"||this.name==="Identity-V")||this._map.length!==65536)return!1;for(let A=0;A<65536;A++)if(this._map[A]!==A)return!1;return!0}},Wi=class extends Na{constructor(A,t){super(),this.vertical=A,this.addCodespaceRange(t,0,65535)}mapCidRange(A,t,i){OA("should not call mapCidRange")}mapBfRange(A,t,i){OA("should not call mapBfRange")}mapBfRangeToArray(A,t,i){OA("should not call mapBfRangeToArray")}mapOne(A,t){OA("should not call mapCidOne")}lookup(A){return Number.isInteger(A)&&A<=65535?A:void 0}contains(A){return Number.isInteger(A)&&A<=65535}forEach(A){for(let t=0;t<=65535;t++)A(t,t)}charCodeOf(A){return Number.isInteger(A)&&A<=65535?A:-1}getMap(){let A=new Array(65536);for(let t=0;t<=65535;t++)A[t]=t;return A}get length(){return 65536}get isIdentityCMap(){OA("should not access .isIdentityCMap")}};function ji(e){let A=0;for(let t=0;t>>0}function y0(e){if(typeof e!="string")throw new v("Malformed CMap: expected string.")}function hf(e){if(!Number.isInteger(e))throw new v("Malformed CMap: expected int.")}function Gd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfchar"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=t;e.mapOne(i,s)}}function Ud(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endbfrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);if(t=A.getObj(),Number.isInteger(t)||typeof t=="string"){let a=Number.isInteger(t)?String.fromCharCode(t):t;e.mapBfRange(i,s,a)}else if(Ne(t,"[")){t=A.getObj();let a=[];for(;!Ne(t,"]")&&t!==Ge;)a.push(t),t=A.getObj();e.mapBfRangeToArray(i,s,a)}else break}throw new v("Invalid bf range.")}function Md(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidchar"))return;y0(t);let i=ji(t);t=A.getObj(),hf(t);let s=t;e.mapOne(i,s)}}function Ld(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcidrange"))return;y0(t);let i=ji(t);t=A.getObj(),y0(t);let s=ji(t);t=A.getObj(),hf(t);let a=t;e.mapCidRange(i,s,a)}}function Hd(e,A){for(;;){let t=A.getObj();if(t===Ge)break;if(Ne(t,"endcodespacerange"))return;if(typeof t!="string")break;let i=ji(t);if(t=A.getObj(),typeof t!="string")break;let s=ji(t);e.addCodespaceRange(t.length,i,s)}throw new v("Invalid codespace range.")}function Jd(e,A){let t=A.getObj();Number.isInteger(t)&&(e.vertical=!!t)}function Yd(e,A){let t=A.getObj();t instanceof M&&(e.name=t.name)}async function Cf(e,A,t,i){let s,a;A:for(;;)try{let n=A.getObj();if(n===Ge)break;if(n instanceof M)n.name==="WMode"?Jd(e,A):n.name==="CMapName"&&Yd(e,A),s=n;else if(n instanceof fe)switch(n.cmd){case"endcmap":break A;case"usecmap":s instanceof M&&(a=s.name);break;case"begincodespacerange":Hd(e,A);break;case"beginbfchar":Gd(e,A);break;case"begincidchar":Md(e,A);break;case"beginbfrange":Ud(e,A);break;case"begincidrange":Ld(e,A);break}}catch(n){if(n instanceof ge)throw n;k("Invalid cMap data: "+n);continue}return!i&&a&&(i=a),i?Bf(e,t,i):e}async function Bf(e,A,t){if(e.useCMap=await pI(t,A),e.numCodespaceRanges===0){let i=e.useCMap.codespaceRanges;for(let s=0;sBf(s,A,a));if(i===Br.NONE){let a=new dt(new Ie(t));return Cf(s,a,A,null)}throw new Error(`Invalid CMap "compressionType" value: ${i}`)}var es=class{static async create({encoding:A,fetchBuiltInCMap:t,useCMap:i}){if(A instanceof M)return pI(A.name,t);if(A instanceof KA){let s=await Cf(new Na,new dt(A),t,i);return s.isIdentityCMap?pI(s.name,t):s}throw new Error("Encoding required.")}},Kd=[".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"],vd=[".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"],qd=[".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"],Qf=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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"],Td=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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","","","",""],c1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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"],fi=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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","","","",""],Ga=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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"],l1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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",""],h1=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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 Ua(e){switch(e){case"WinAnsiEncoding":return Ga;case"StandardEncoding":return fi;case"MacRomanEncoding":return c1;case"SymbolSetEncoding":return l1;case"ZapfDingbatsEncoding":return h1;case"ExpertEncoding":return Qf;case"MacExpertEncoding":return Td;default:return null}}var Pd=10,nr=[".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"],Kn=391,T0=[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}],Wd=[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,A){e[A-2]=e[A-2]+e[A-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]-e[A-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,A){e[A-2]=e[A-2]/e[A-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,A){e[A-1]=-e[A-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,A){e[A-2]=e[A-2]*e[A-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}],Ma=class{constructor(A,t,i){this.bytes=A.getBytes(),this.properties=t,this.seacAnalysisEnabled=!!i}parse(){let A=this.properties,t=new Sr;this.cff=t;let i=this.parseHeader(),s=this.parseIndex(i.endPos),a=this.parseIndex(s.endPos),n=this.parseIndex(a.endPos),r=this.parseIndex(n.endPos),g=this.parseDict(a.obj.get(0)),o=this.createDict(b0,g,t.strings);t.header=i.obj,t.names=this.parseNameIndex(s.obj),t.strings=this.parseStringIndex(n.obj),t.topDict=o,t.globalSubrIndex=r.obj,this.parsePrivateDict(t.topDict),t.isCIDFont=o.hasName("ROS");let I=o.getByName("CharStrings"),c=this.parseIndex(I).obj,l=o.getByName("FontMatrix");l&&(A.fontMatrix=l);let h=o.getByName("FontBBox");h&&(A.ascent=Math.max(h[3],h[1]),A.descent=Math.min(h[1],h[3]),A.ascentScaled=!0);let C,B;if(t.isCIDFont){let E=this.parseIndex(o.getByName("FDArray")).obj;for(let f=0,u=E.count;f=t)throw new v("Invalid CFF header");i!==0&&(PA("cff data is shifted"),A=A.subarray(i),this.bytes=A);let s=A[0],a=A[1],n=A[2],r=A[3];return{obj:new Fr(s,a,n,r),endPos:n}}parseDict(A){let t=0;function i(){let g=A[t++];return g===30?s():g===28?(g=A[t++],g=(g<<24|A[t++]<<16)>>16,g):g===29?(g=A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g=g<<8|A[t++],g):g>=32&&g<=246?g-139:g>=247&&g<=250?(g-247)*256+A[t++]+108:g>=251&&g<=254?-((g-251)*256)-A[t++]-108:(k(\'CFFParser_parseDict: "\'+g+\'" is a reserved command.\'),NaN)}function s(){let g="",I=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],c=A.length;for(;t>4,C=l&15;if(h===15||(g+=I[h],C===15))break;g+=I[C]}return parseFloat(g)}let a=[],n=[];t=0;let r=A.length;for(;tPd)return!1;let a=A.stackSize,n=A.stack,r=t.length;for(let g=0;g>16,g+=2,a++;else if(o===14){if(a>=4&&(a-=4,this.seacAnalysisEnabled))return A.seac=n.slice(a,a+4),!1;I=T0[o]}else if(o>=32&&o<=246)n[a]=o-139,a++;else if(o>=247&&o<=254)n[a]=o<251?(o-247<<8)+t[g]+108:-(o-251<<8)-t[g]-108,g++,a++;else if(o===255)n[a]=(t[g]<<24|t[g+1]<<16|t[g+2]<<8|t[g+3])/65536,g+=4,a++;else if(o===19||o===20){if(A.hints+=a>>1,A.hints===0){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}g+=A.hints+7>>3,a%=2,I=T0[o]}else if(o===10||o===29){let c=o===10?i:s;if(!c)return I=T0[o],k("Missing subrsIndex for "+I.id),!1;let l=32768;c.count<1240?l=107:c.count<33900&&(l=1131);let h=n[--a]+l;if(h<0||h>=c.count||isNaN(h))return I=T0[o],k("Out of bounds subrIndex for "+I.id),!1;if(A.stackSize=a,A.callDepth++,!this.parseCharString(A,c.get(h),i,s))return!1;A.callDepth--,a=A.stackSize;continue}else{if(o===11)return A.stackSize=a,!0;if(o===0&&g===t.length)t[g-1]=14,I=T0[14];else if(o===9){t.copyWithin(g-1,g,-1),g-=1,r-=1;continue}else I=T0[o]}if(I){if(I.stem&&(A.hints+=a>>1,o===3||o===23?A.hasVStems=!0:A.hasVStems&&(o===1||o===18)&&(k("CFF stem hints are in wrong order"),t[g-1]=o===1?3:23)),"min"in I&&!A.undefStack&&a=2&&I.stem?a%=2:a>1&&k("Found too many parameters for stack-clearing command"),a>0&&(A.width=n[a-1])),"stackDelta"in I?("stackFn"in I&&I.stackFn(n,a),a+=I.stackDelta):I.stackClearing?a=0:I.resetStack?(a=0,A.undefStack=!1):I.undefStack&&(a=0,A.undefStack=!0,A.firstStackClearing=!1)}}return r=a.length&&(k("Invalid fd index for glyph index."),h=!1),h&&(B=a[Q].privateDict,C=B.subrsIndex)}else t&&(C=t);if(h&&(h=this.parseCharString(l,c,C,i)),l.width!==null){let Q=B.getByName("nominalWidthX");g[I]=Q+l.width}else{let Q=B.getByName("defaultWidthX");g[I]=Q}l.seac!==null&&(r[I]=l.seac),h||A.set(I,new Uint8Array([14]))}return{charStrings:A,seacs:r,widths:g}}emptyPrivateDictionary(A){let t=this.createDict(D0,[],A.strings);A.setByKey(18,[0,0]),A.privateDict=t}parsePrivateDict(A){if(!A.hasName("Private")){this.emptyPrivateDictionary(A);return}let t=A.getByName("Private");if(!Array.isArray(t)||t.length!==2){A.removeByName("Private");return}let i=t[0],s=t[1];if(i===0||s>=this.bytes.length){this.emptyPrivateDictionary(A);return}let a=s+i,n=this.bytes.subarray(s,a),r=this.parseDict(n),g=this.createDict(D0,r,A.strings);if(A.privateDict=g,g.getByName("ExpansionFactor")===0&&g.setByName("ExpansionFactor",.06),!g.getByName("Subrs"))return;let o=g.getByName("Subrs"),I=s+o;if(o===0||I>=this.bytes.length){this.emptyPrivateDictionary(A);return}let c=this.parseIndex(I);g.subrsIndex=c.obj}parseCharsets(A,t,i,s){if(A===0)return new C0(!0,fo.ISO_ADOBE,Kd);if(A===1)return new C0(!0,fo.EXPERT,vd);if(A===2)return new C0(!0,fo.EXPERT_SUBSET,qd);let a=this.bytes,n=A,r=a[A++],g=[s?0:".notdef"],o,I,c;switch(t-=1,r){case 0:for(c=0;c=65535){k("Not enough space in charstrings to duplicate first glyph.");return}let A=this.charStrings.get(0);this.charStrings.add(A),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(A){return A<0||A>=this.charStrings.count?!1:this.charStrings.get(A).length>0}},Fr=class{constructor(A,t,i,s){this.major=A,this.minor=t,this.hdrSize=i,this.offSize=s}},La=class{constructor(){this.strings=[]}get(A){return A>=0&&A<=Kn-1?nr[A]:A-Kn<=this.strings.length?this.strings[A-Kn]:nr[0]}getSID(A){let t=nr.indexOf(A);return t!==-1?t:(t=this.strings.indexOf(A),t!==-1?t+Kn:-1)}add(A){this.strings.push(A)}get count(){return this.strings.length}},ai=class{constructor(){this.objects=[],this.length=0}add(A){this.length+=A.length,this.objects.push(A)}set(A,t){this.length+=t.length-this.objects[A].length,this.objects[A]=t}get(A){return this.objects[A]}get count(){return this.objects.length}},Rr=class{constructor(A,t){this.keyToNameMap=A.keyToNameMap,this.nameToKeyMap=A.nameToKeyMap,this.defaults=A.defaults,this.types=A.types,this.opcodes=A.opcodes,this.order=A.order,this.strings=t,this.values=Object.create(null)}setByKey(A,t){if(!(A in this.keyToNameMap))return!1;if(t.length===0)return!0;for(let s of t)if(isNaN(s))return k(`Invalid CFFDict value: "${t}" for key "${A}".`),!0;let i=this.types[A];return(i==="num"||i==="sid"||i==="offset")&&(t=t[0]),this.values[A]=t,!0}setByName(A,t){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name "${A}"`);this.values[this.nameToKeyMap[A]]=t}hasName(A){return this.nameToKeyMap[A]in this.values}getByName(A){if(!(A in this.nameToKeyMap))throw new v(`Invalid dictionary name ${A}"`);let t=this.nameToKeyMap[A];return t in this.values?this.values[t]:this.defaults[t]}removeByName(A){delete this.values[this.nameToKeyMap[A]]}static createTables(A){let t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(let i of A){let s=Array.isArray(i[0])?(i[0][0]<<8)+i[0][1]:i[0];t.keyToNameMap[s]=i[1],t.nameToKeyMap[i[1]]=s,t.types[s]=i[2],t.defaults[s]=i[3],t.opcodes[s]=Array.isArray(i[0])?i[0]:[i[0]],t.order.push(s)}return t}},Od=[[[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]],b0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Od))}constructor(A){super(b0.tables,A),this.privateDict=null}},Zd=[[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]],D0=class extends Rr{static get tables(){return nA(this,"tables",this.createTables(Zd))}constructor(A){super(D0.tables,A),this.subrsIndex=null}},fo={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},C0=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.charset=i,this.raw=s}},wI=class{constructor(A,t,i,s){this.predefined=A,this.format=t,this.encoding=i,this.raw=s}},yI=class{constructor(A,t){this.format=A,this.fdSelect=t}getFDIndex(A){return A<0||A>=this.fdSelect.length?-1:this.fdSelect[A]}},Nr=class{constructor(){this.offsets=Object.create(null)}isTracking(A){return A in this.offsets}track(A,t){if(A in this.offsets)throw new v(`Already tracking location of ${A}`);this.offsets[A]=t}offset(A){for(let t in this.offsets)this.offsets[t]+=A}setEntryLocation(A,t,i){if(!(A in this.offsets))throw new v(`Not tracking location of ${A}`);let s=i.data,a=this.offsets[A],n=5;for(let r=0,g=t.length;r>24&255,s[c]=C>>16&255,s[l]=C>>8&255,s[h]=C&255}}},k0=class{constructor(A){this.cff=A}compile(){let A=this.cff,t={data:[],length:0,add(l){try{this.data.push(...l)}catch(h){this.data=this.data.concat(l)}this.length=this.data.length}},i=this.compileHeader(A.header);t.add(i);let s=this.compileNameIndex(A.names);if(t.add(s),A.isCIDFont&&A.topDict.hasName("FontMatrix")){let l=A.topDict.getByName("FontMatrix");A.topDict.removeByName("FontMatrix");for(let h of A.fdArray){let C=l.slice(0);h.hasName("FontMatrix")&&(C=Ce.transform(C,h.getByName("FontMatrix"))),h.setByName("FontMatrix",C)}}let a=A.topDict.getByName("XUID");(a==null?void 0:a.length)>16&&A.topDict.removeByName("XUID"),A.topDict.setByName("charset",0);let n=this.compileTopDicts([A.topDict],t.length,A.isCIDFont);t.add(n.output);let r=n.trackers[0],g=this.compileStringIndex(A.strings.strings);t.add(g);let o=this.compileIndex(A.globalSubrIndex);if(t.add(o),A.encoding&&A.topDict.hasName("Encoding"))if(A.encoding.predefined)r.setEntryLocation("Encoding",[A.encoding.format],t);else{let l=this.compileEncoding(A.encoding);r.setEntryLocation("Encoding",[t.length],t),t.add(l)}let I=this.compileCharset(A.charset,A.charStrings.count,A.strings,A.isCIDFont);r.setEntryLocation("charset",[t.length],t),t.add(I);let c=this.compileCharStrings(A.charStrings);if(r.setEntryLocation("CharStrings",[t.length],t),t.add(c),A.isCIDFont){r.setEntryLocation("FDSelect",[t.length],t);let l=this.compileFDSelect(A.fdSelect);t.add(l),n=this.compileTopDicts(A.fdArray,t.length,!0),r.setEntryLocation("FDArray",[t.length],t),t.add(n.output);let h=n.trackers;this.compilePrivateDicts(A.fdArray,h,t)}return this.compilePrivateDicts([A.topDict],[r],t),t.add([0]),t.data}encodeNumber(A){return Number.isInteger(A)?this.encodeInteger(A):this.encodeFloat(A)}static get EncodeFloatRegExp(){return nA(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(A){let t=A.toString(),i=k0.EncodeFloatRegExp.exec(t);if(i){let g=parseFloat("1e"+((i[2]?+i[2]:0)+i[1].length));t=(Math.round(A*g)/g).toString()}let s="",a,n;for(a=0,n=t.length;a=-107&&A<=107?t=[A+139]:A>=108&&A<=1131?(A-=108,t=[(A>>8)+247,A&255]):A>=-1131&&A<=-108?(A=-A-108,t=[(A>>8)+251,A&255]):A>=-32768&&A<=32767?t=[28,A>>8&255,A&255]:t=[29,A>>24&255,A>>16&255,A>>8&255,A&255],t}compileHeader(A){return[A.major,A.minor,4,A.offSize]}compileNameIndex(A){let t=new ai;for(let i of A){let s=Math.min(i.length,127),a=new Array(s);for(let n=0;n"~"||r==="["||r==="]"||r==="("||r===")"||r==="{"||r==="}"||r==="<"||r===">"||r==="/"||r==="%")&&(r="_"),a[n]=r}a=a.join(""),a===""&&(a="Bad_Font_Name"),t.add(Pe(a))}return this.compileIndex(t)}compileTopDicts(A,t,i){let s=[],a=new ai;for(let n of A){i&&(n.removeByName("CIDFontVersion"),n.removeByName("CIDFontRevision"),n.removeByName("CIDFontType"),n.removeByName("CIDCount"),n.removeByName("UIDBase"));let r=new Nr,g=this.compileDict(n,r);s.push(r),a.add(g),r.offset(t)}return a=this.compileIndex(a,s),{trackers:s,output:a}}compilePrivateDicts(A,t,i){for(let s=0,a=A.length;s>8&255,n&255]);else{let r=1+n*2;a=new Uint8Array(r),a[0]=0;let g=0,o=A.charset.length,I=!1;for(let c=1;c>8&255,a[c+1]=l&255}}return this.compileTypedArray(a)}compileEncoding(A){return this.compileTypedArray(A.raw)}compileFDSelect(A){let t=A.format,i,s;switch(t){case 0:for(i=new Uint8Array(1+A.fdSelect.length),i[0]=t,s=0;s>8&255,a&255,n];for(s=1;s>8&255,s&255,o),n=o)}let g=(r.length-3)/3;r[1]=g>>8&255,r[2]=g&255,r.push(s>>8&255,s&255),i=new Uint8Array(r);break}return this.compileTypedArray(i)}compileTypedArray(A){return Array.from(A)}compileIndex(A,t=[]){let i=A.objects,s=i.length;if(s===0)return[0,0];let a=[s>>8&255,s&255],n=1,r;for(r=0;r>8&255,o&255):g===3?a.push(o>>16&255,o>>8&255,o&255):a.push(o>>>24&255,o>>16&255,o>>8&255,o&255),i[r]&&(o+=i[r].length);for(r=0;r=65520&&e<=65535?0:e>=62976&&e<=63743?Xd()[e]||e:e===173?45:e}function Us(e,A){let t=A[e];if(t!==void 0)return t;if(!e)return-1;if(e[0]==="u"){let i=e.length,s;if(i===7&&e[1]==="n"&&e[2]==="i")s=e.substring(3);else if(i>=5&&i<=7)s=e.substring(1);else return-1;if(s===s.toUpperCase()&&(t=parseInt(s,16),t>=0))return t}return-1}var uo=[[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 _d(e,A=-1){if(A!==-1){let t=uo[A];for(let i=0,s=t.length;i=t[i]&&e<=t[i+1])return A}for(let t=0,i=uo.length;t=s[a]&&e<=s[a+1])return t}return-1}var zd=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),bI=new Map;function $d(e){let A=bI.get(e);if(A)return A;let t=e.match(zd),i={isWhitespace:!!(t!=null&&t[1]),isZeroWidthDiacritic:!!(t!=null&&t[2]),isInvisibleFormatMark:!!(t!=null&&t[3])};return bI.set(e,i),i}function A2(){bI.clear()}var Cs=!0,Ft={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144},O1=[".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 Ef(e,A){if(A[e]!==void 0)return e;let t=Us(e,A);if(t!==-1){for(let i in A)if(A[i]===t)return i}return PA("Unable to recover a standard glyph name for: "+e),e}function ff(e,A,t){let i=Object.create(null),s,a,n,r=!!(e.flags&Ft.Symbolic);if(e.isInternalFont)for(n=A,a=0;a=0?s:0;else if(e.baseEncodingName)for(n=Ua(e.baseEncodingName),a=0;a=0?s:0;else if(r)for(a in A)i[a]=A[a];else for(n=fi,a=0;a=0?s:0;let g=e.differences,o;if(g)for(a in g){let I=g[a];if(s=t.indexOf(I),s===-1){o||(o=Ai());let c=Ef(I,o);c!==I&&(s=t.indexOf(c))}i[a]=s>=0?s:0}return i}function pn(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")}var e2=he(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}),zg=he(function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique",e["Arial-BoldMT-Bold"]="Helvetica-Bold",e["Arial-ItalicMT-Italic"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}),t2=he(function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="LiberationSans-Regular.ttf",e["Helvetica-Bold"]="LiberationSans-Bold.ttf",e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf",e["Helvetica-Oblique"]="LiberationSans-Italic.ttf",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}),uf=he(function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e.Impact="Helvetica",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica"}),C1=he(function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e.Trinit\\u00E9=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}),DI=he(function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0,e.Wingdings=!0,e["Wingdings-Bold"]=!0,e["Wingdings-Regular"]=!0}),Z1=he(function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[207]=211,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}),i2=he(function(e){e[227]=322,e[264]=261,e[291]=346}),s2=he(function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45});function j1(e){let A=pn(e);return zg()[A]}function X1(e){let A=pn(e);return!!(zg()[A]||uf()[A]||C1()[A]||DI()[A])}var B0=class{constructor(A=[]){this._map=A}get length(){return this._map.length}forEach(A){for(let t in this._map)A(t,this._map[t].charCodeAt(0))}has(A){return this._map[A]!==void 0}get(A){return this._map[A]}charCodeOf(A){let t=this._map;if(t.length<=65536)return t.indexOf(A);for(let i in t)if(t[i]===A)return i|0;return-1}amend(A){for(let t in A)this._map[t]=A[t]}},Ct=class{constructor(A,t){this.firstChar=A,this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(A){for(let t=this.firstChar,i=this.lastChar;t<=i;t++)A(t,t)}has(A){return this.firstChar<=A&&A<=this.lastChar}get(A){if(this.firstChar<=A&&A<=this.lastChar)return String.fromCharCode(A)}charCodeOf(A){return Number.isInteger(A)&&A>=this.firstChar&&A<=this.lastChar?A:-1}amend(A){OA("Should not call amend()")}},Ea=class{constructor(A,t){this.properties=t;let i=new Ma(A,t,Cs);this.cff=i.parse(),this.cff.duplicateFirstGlyph();let s=new k0(this.cff);this.seacs=this.cff.seacs;try{this.data=s.compile()}catch(a){k("Failed to compile font "+t.loadedName),this.data=A}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){let A=this.cff,t=this.properties,{cidToGidMap:i,cMap:s}=t,a=A.charset.charset,n,r;if(t.composite){let o;if((i==null?void 0:i.length)>0){o=Object.create(null);for(let c=0,l=i.length;c=0){let g=i[r];g&&(a[n]=g)}}a.length>0&&(this.properties.builtInEncoding=a)}};function hi(e,A){return(e[A]<<24|e[A+1]<<16|e[A+2]<<8|e[A+3])>>>0}function Re(e,A){return e[A]<<8|e[A+1]}function V0(e,A){return(e[A]<<24|e[A+1]<<16)>>16}function V1(e,A){return e[A]<<24>>24}function t0(e,A){return V0(e,A)/16384}function kI(e){let A=e.length,t=32768;return A<1240?t=107:A<33900&&(t=1131),t}function a2(e,A,t){let i=Re(e,A+2)===1?hi(e,A+8):hi(e,A+16),s=Re(e,A+i),a,n,r;if(s===4){Re(e,A+i+2);let g=Re(e,A+i+6)>>1;for(n=A+i+14,a=[],r=0;r2*Re(r,g));let a=[],n=s(A,0);for(let r=i;r>1;t0;)Q.push({flags:g})}for(l=0;l>1,B=!0;break;case 3:I+=r.length>>1,B=!0;break;case 4:o+=r.pop(),s(g,o),B=!0;break;case 5:for(;r.length>0;)g+=r.shift(),o+=r.shift(),a(g,o);break;case 6:for(;r.length>0&&(g+=r.shift(),a(g,o),r.length!==0);)o+=r.shift(),a(g,o);break;case 7:for(;r.length>0&&(o+=r.shift(),a(g,o),r.length!==0);)g+=r.shift(),a(g,o);break;case 8:for(;r.length>0;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 10:if(D=r.pop(),S=null,t.isCFFCIDFont){let w=t.fdSelect.getFDIndex(i);if(w>=0&&wMath.abs(o-Y)?g+=r.shift():o+=r.shift(),n(E,u,f,d,g,o);break;default:throw new v(`unknown operator: 12 ${Q}`)}break;case 14:if(r.length>=4){let w=r.pop(),Y=r.pop();o=r.pop(),g=r.pop(),A.add(_e.SAVE),A.add(_e.TRANSLATE,[g,o]);let U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[w]]));SI(t.glyphs[U.glyphId],A,t,U.glyphId),A.add(_e.RESTORE),U=Gr(t.cmap,String.fromCharCode(t.glyphNameMap[fi[Y]])),SI(t.glyphs[U.glyphId],A,t,U.glyphId)}return;case 18:I+=r.length>>1,B=!0;break;case 19:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 20:I+=r.length>>1,h+=I+7>>3,B=!0;break;case 21:o+=r.pop(),g+=r.pop(),s(g,o),B=!0;break;case 22:g+=r.pop(),s(g,o),B=!0;break;case 23:I+=r.length>>1,B=!0;break;case 24:for(;r.length>2;)E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);g+=r.shift(),o+=r.shift(),a(g,o);break;case 25:for(;r.length>6;)g+=r.shift(),o+=r.shift(),a(g,o);E=g+r.shift(),u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+r.shift(),n(E,u,f,d,g,o);break;case 26:for(r.length%2&&(g+=r.shift());r.length>0;)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f,o=d+r.shift(),n(E,u,f,d,g,o);break;case 27:for(r.length%2&&(o+=r.shift());r.length>0;)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d,n(E,u,f,d,g,o);break;case 28:r.push((l[h]<<24|l[h+1]<<16)>>16),h+=2;break;case 29:D=r.pop()+t.gsubrsBias,S=t.gsubrs[D],S&&c(S);break;case 30:for(;r.length>0&&(E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;case 31:for(;r.length>0&&(E=g+r.shift(),u=o,f=E+r.shift(),d=u+r.shift(),o=d+r.shift(),g=f+(r.length===1?r.shift():0),n(E,u,f,d,g,o),r.length!==0);)E=g,u=o+r.shift(),f=E+r.shift(),d=u+r.shift(),g=f+r.shift(),o=d+(r.length===1?r.shift():0),n(E,u,f,d,g,o);break;default:if(Q<32)throw new v(`unknown operator: ${Q}`);Q<247?r.push(Q-139):Q<251?r.push((Q-247)*256+l[h++]+108):Q<255?r.push(-(Q-251)*256-l[h++]-108):(r.push((l[h]<<24|l[h+1]<<16|l[h+2]<<8|l[h+3])/65536),h+=4);break}B&&(r.length=0)}}c(e)}var _1=[],FI=class{constructor(){et(this,"cmds",[])}add(A,t){if(t)if(wt(t,null))this.cmds.push(A,...t);else{k(`Commands.add - "${A}" has at least one non-number arg: "${t}".`);let i=t.map(s=>typeof s=="number"?s:0);this.cmds.push(A,...i)}else this.cmds.push(A)}},Ur=class{constructor(A){this.fontMatrix=A,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(A){var n,r;let{charCode:t,glyphId:i}=Gr(this.cmap,A),s=this.compiledGlyphs[i],a;if(!s){try{s=this.compileGlyph(this.glyphs[i],i)}catch(g){s=_1,a=g}this.compiledGlyphs[i]=s}if((r=(n=this.compiledCharCodeToGlyphId)[t])!=null||(n[t]=i),a)throw a;return s}compileGlyph(A,t){if(!A||A.length===0||A[0]===14)return _1;let i=this.fontMatrix;if(this.isCFFCIDFont){let a=this.fdSelect.getFDIndex(t);a>=0&&a{let i=t.getSize();return A+(i+3&-4)},0)}write(){let A=this.getSize(),t=new DataView(new ArrayBuffer(A)),i=A>131070,s=i?4:2,a=new DataView(new ArrayBuffer((this.glyphs.length+1)*s));i?a.setUint32(0,0):a.setUint16(0,0);let n=0,r=0;for(let g of this.glyphs)n+=g.write(n,t),n=n+3&-4,r+=s,i?a.setUint32(r,n):a.setUint16(r,n>>1);return{isLocationLong:i,loca:new Uint8Array(a.buffer),glyf:new Uint8Array(t.buffer)}}scale(A){for(let t=0,i=this.glyphs.length;tt+i.getSize(),0);return this.header.getSize()+A}write(A,t){if(!this.header)return 0;let i=A;if(A+=this.header.write(A,t),this.simple)A+=this.simple.write(A,t);else for(let s of this.composites)A+=s.write(A,t);return A-i}scale(A){if(!this.header)return;let t=(this.header.xMin+this.header.xMax)/2;if(this.header.scale(t,A),this.simple)this.simple.scale(t,A);else for(let i of this.composites)i.scale(t,A)}},Ha=class{constructor({numberOfContours:A,xMin:t,yMin:i,xMax:s,yMax:a}){this.numberOfContours=A,this.xMin=t,this.yMin=i,this.xMax=s,this.yMax=a}static parse(A,t){return[10,new Ha({numberOfContours:t.getInt16(A),xMin:t.getInt16(A+2),yMin:t.getInt16(A+4),xMax:t.getInt16(A+6),yMax:t.getInt16(A+8)})]}getSize(){return 10}write(A,t){return t.setInt16(A,this.numberOfContours),t.setInt16(A+2,this.xMin),t.setInt16(A+4,this.yMin),t.setInt16(A+6,this.xMax),t.setInt16(A+8,this.yMax),10}scale(A,t){this.xMin=Math.round(A+(this.xMin-A)*t),this.xMax=Math.round(A+(this.xMax-A)*t)}},MI=class{constructor({flags:A,xCoordinates:t,yCoordinates:i}){this.xCoordinates=t,this.yCoordinates=i,this.flags=A}},Ja=class{constructor({contours:A,instructions:t}){this.contours=A,this.instructions=t}static parse(A,t,i){let s=[];for(let Q=0;Q255?A+=2:o>0&&(A+=1),t=r,o=Math.abs(g-i),o>255?A+=2:o>0&&(A+=1),i=g}}return A}write(A,t){let i=A,s=[],a=[],n=[],r=0,g=0;for(let o of this.contours){for(let I=0,c=o.xCoordinates.length;I=0?vn|zs:vn,s.push(Q)):s.push(C)}r=h;let B=o.yCoordinates[I];if(C=B-g,C===0)l|=$s,a.push(0);else{let Q=Math.abs(C);Q<=255?(l|=C>=0?qn|$s:qn,a.push(Q)):a.push(C)}g=B,n.push(l)}t.setUint16(A,s.length-1),A+=2}t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length);for(let o of n)t.setUint8(A++,o);for(let o=0,I=s.length;o=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(A+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(A+=2),A}write(A,t){let i=A;return this.flags&Tn?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=Aa):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=Aa),t.setUint16(A,this.flags),t.setUint16(A+2,this.glyphIndex),A+=4,this.flags&Aa?(this.flags&Tn?(t.setInt16(A,this.argument1),t.setInt16(A+2,this.argument2)):(t.setUint16(A,this.argument1),t.setUint16(A+2,this.argument2)),A+=4):(t.setUint8(A,this.argument1),t.setUint8(A+1,this.argument2),A+=2),this.flags&xo&&(t.setUint16(A,this.instructions.length),A+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,A),A+=this.instructions.length)),A-i}scale(A,t){}};function Pn(e,A,t){e[A]=t>>8&255,e[A+1]=t&255}function mo(e,A,t){e[A]=t>>24&255,e[A+1]=t>>16&255,e[A+2]=t>>8&255,e[A+3]=t&255}function Q2(e,A,t){if(t instanceof Uint8Array)e.set(t,A);else if(typeof t=="string")for(let i=0,s=t.length;ii;)i<<=1,s++;let a=i*t;return{range:a,entry:s,rangeShift:t*A-a}}toArray(){let A=this.sfnt,t=this.tables,i=Object.keys(t);i.sort();let s=i.length,a,n,r,g,o,I=$1+s*AE,c=[I];for(a=0;a>>0;I+=C,c.push(I)}let l=new Uint8Array(I);for(a=0;a>>0}mo(l,I+4,C),mo(l,I+8,c[a]),mo(l,I+12,t[o].length),I+=AE}return l}addTable(A,t){if(A in this.tables)throw new Error("Table "+A+" already exists");this.tables[A]=t}},la=!1,Fe={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]},LI=class{constructor(){this.width=0,this.lsb=0,this.flexing=!1,this.output=[],this.stack=[]}convert(A,t,i){let s=A.length,a=!1,n,r,g;for(let o=0;os)return!0;let a=s-A;for(let n=a;n>8&255,r&255):(r=65536*r|0,this.output.push(255,r>>24&255,r>>16&255,r>>8&255,r&255))}return this.output.push(...t),i?this.stack.splice(a,A):this.stack.length=0,!1}},eE=55665,E2=4330;function _t(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function tE(e,A,t){if(t>=e.length)return new Uint8Array(0);let i=52845,s=22719,a=A|0,n,r;for(n=0;n>8,a=(I+a)*i+s&(1<<16)-1}return o}function f2(e,A,t){let a=A|0,n=e.length,r=n>>>1,g=new Uint8Array(r),o,I;for(o=0,I=0;o>8,a=(h+a)*52845+22719&(1<<16)-1}}return g.slice(t,I)}function iE(e){return e===47||e===91||e===93||e===123||e===125||e===40||e===41}var Mr=class{constructor(A,t,i){if(t){let s=A.getBytes(),a=!((_t(s[0])||pt(s[0]))&&_t(s[1])&&_t(s[2])&&_t(s[3])&&_t(s[4])&&_t(s[5])&&_t(s[6])&&_t(s[7]));A=new Ie(a?tE(s,eE,4):f2(s,eE,4))}this.seacAnalysisEnabled=!!i,this.stream=A,this.nextChar()}readNumberArray(){this.getToken();let A=[];for(;;){let t=this.getToken();if(t===null||t==="]"||t==="}")break;A.push(parseFloat(t||0))}return A}readNumber(){let A=this.getToken();return parseFloat(A||0)}readInt(){let A=this.getToken();return parseInt(A||0,10)|0}readBoolean(){return this.getToken()==="true"?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t===-1)return null;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}if(iE(t))return this.nextChar(),String.fromCharCode(t);let i="";do i+=String.fromCharCode(t),t=this.nextChar();while(t>=0&&!pt(t)&&!iE(t));return i}readCharStrings(A,t){return t===-1?A:tE(A,E2,t)}extractFontProgram(A){let t=this.stream,i=[],s=[],a=Object.create(null);a.lenIV=4;let n={subrs:[],charstrings:[],properties:{privateData:a}},r,g,o,I;for(;(r=this.getToken())!==null;)if(r==="/")switch(r=this.getToken(),r){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();r=this.getToken(),!(r===null||r==="end");){if(r!=="/")continue;let l=this.getToken();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"?this.getToken():r==="/"&&this.prevChar(),s.push({glyph:l,encoded:h})}break;case"Subrs":for(this.readInt(),this.getToken();this.getToken()==="dup";){let l=this.readInt();g=this.readInt(),this.getToken(),o=g>0?t.getBytes(g):new Uint8Array(0),I=n.properties.privateData.lenIV;let h=this.readCharStrings(o,I);this.nextChar(),r=this.getToken(),r==="noaccess"&&this.getToken(),i[l]=h}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":let c=this.readNumberArray();c.length>0&&c.length%2===0&&la&&(n.properties.privateData[r]=c);break;case"StemSnapH":case"StemSnapV":n.properties.privateData[r]=this.readNumberArray();break;case"StdHW":case"StdVW":n.properties.privateData[r]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":n.properties.privateData[r]=this.readNumber();break;case"ExpansionFactor":n.properties.privateData[r]=this.readNumber()||.06;break;case"ForceBold":n.properties.privateData[r]=this.readBoolean();break}for(let{encoded:c,glyph:l}of s){let h=new LI,C=h.convert(c,i,this.seacAnalysisEnabled),B=h.output;C&&(B=[14]);let Q={glyphName:l,charstring:B,width:h.width,lsb:h.lsb,seac:h.seac};if(l===".notdef"?n.charstrings.unshift(Q):n.charstrings.push(Q),A.builtInEncoding){let E=A.builtInEncoding.indexOf(l);E>-1&&A.widths[E]===void 0&&E>=A.firstChar&&E<=A.lastChar&&(A.widths[E]=h.width)}}return n}extractFontHeader(A){let t;for(;(t=this.getToken())!==null;)if(t==="/")switch(t=this.getToken(),t){case"FontMatrix":let i=this.readNumberArray();A.fontMatrix=i;break;case"Encoding":let s=this.getToken(),a;if(!/^\\d+$/.test(s))a=Ua(s);else{a=[];let r=parseInt(s,10)|0;this.getToken();for(let g=0;g=s){for(n+=g;n=0&&(s[r]=a)}return ff(A,s,i)}hasGlyphId(A){return A<0||A>=this.numGlyphs?!1:A===0?!0:this.charstrings[A-1].charstring.length>0}getSeacs(A){let t=[];for(let i=0,s=A.length;i0;d--)u[d]-=u[d-1];C.setByName(f,u)}n.topDict.privateDict=C;let Q=new ai;for(c=0,l=s.length;c0&&e.toUnicode.amend(s)}function p2(e,A){if(e.isInternalFont||e.hasIncludedToUnicodeMap||A===e.defaultEncoding||e.toUnicode instanceof Ct)return;let t=[],i=Ai();for(let s in A){if(e.hasEncoding&&(e.baseEncodingName||e.differences[s]!==void 0))continue;let a=A[s],n=Us(a,i);n!==-1&&(t[s]=String.fromCharCode(n))}t.length>0&&e.toUnicode.amend(t)}function nE(e){if(!e.fallbackToUnicode||e.toUnicode instanceof Ct)return;let A=[];for(let t in e.fallbackToUnicode)e.toUnicode.has(t)||(A[t]=e.fallbackToUnicode[t]);A.length>0&&e.toUnicode.amend(A)}var JI=class{constructor(A,t,i,s,a,n,r,g,o){this.originalCharCode=A,this.fontChar=t,this.unicode=i,this.accent=s,this.width=a,this.vmetric=n,this.operatorListId=r,this.isSpace=g,this.isInFont=o}get category(){return nA(this,"category",$d(this.unicode),!0)}};function i0(e,A){return(e<<8)+A}function ea(e,A,t){e[A+1]=t,e[A]=t>>>8}function Dt(e,A){let t=(e<<8)+A;return t&1<<15?t-65536:t}function w2(e,A,t){e[A+3]=t&255,e[A+2]=t>>>8,e[A+1]=t>>>16,e[A]=t>>>24}function y2(e,A,t,i){return(e<<24)+(A<<16)+(t<<8)+i}function zA(e){return String.fromCharCode(e>>8&255,e&255)}function s0(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,e&255)}function b2(e){let A=e.peekBytes(4);return le(A,0)===65536||Qt(A)==="true"}function xf(e){let A=e.peekBytes(4);return Qt(A)==="ttcf"}function D2(e){let A=e.peekBytes(4);return Qt(A)==="OTTO"}function k2(e){let A=e.peekBytes(2);return A[0]===37&&A[1]===33||A[0]===128&&A[1]===1}function S2(e){let A=e.peekBytes(4);return A[0]>=1&&A[3]>=1&&A[3]<=4}function F2(e,{type:A,subtype:t,composite:i}){let s,a;return b2(e)||xf(e)?s=i?"CIDFontType2":"TrueType":D2(e)?s=i?"CIDFontType2":"OpenType":k2(e)?i?s="CIDFontType0":s=A==="MMType1"?"MMType1":"Type1":S2(e)?i?(s="CIDFontType0",a="CIDFontType0C"):(s=A==="MMType1"?"MMType1":"Type1",a="Type1C"):(k("getFontFileType: Unable to detect correct font file Type/Subtype."),s=A,a=t),[s,a]}function Wn(e,A){for(let t in A)e[+t]=A[t]}function wo(e,A,t){let i=[],s;for(let a=0,n=e.length;aoi[0][0]<=h&&h<=oi[0][1]||oi[1][0]<=h&&h<=oi[1][1];for(let h in e){let C=e[h];if(!A(C))continue;if(I>c){if(g++,g>=oi.length){k("Ran out of space in font private use area.");break}I=oi[g][0],c=oi[g][1]}let B=I++;C===0&&(C=t);let Q=i.get(h);typeof Q=="string"&&(Q=Q.codePointAt(0)),Q&&!l(Q)&&!r.has(C)&&(a.set(Q,C),r.add(C)),s[B]=C,n[h]=B}return{toFontChar:n,charCodeToGlyphId:s,toUnicodeExtraMap:a,nextAvailableFontCharCode:I}}function N2(e,A,t){let i=[];for(let n in e)e[n]>=t||i.push({fontCharCode:n|0,glyphId:e[n]});if(A)for(let[n,r]of A)r>=t||i.push({fontCharCode:n,glyphId:r});i.length===0&&i.push({fontCharCode:0,glyphId:0}),i.sort(function(r,g){return r.fontCharCode-g.fontCharCode});let s=[],a=i.length;for(let n=0;n65535?2:1,a="\\0\\0"+zA(s)+"\\0\\0"+qe(4+s*8),n,r,g,o;for(n=i.length-1;n>=0&&!(i[n][0]<=65535);--n);let I=n+1;i[n][0]<65535&&i[n][1]===65535&&(i[n][1]=65534);let c=i[n][1]<65535?1:0,l=I+c,h=F0.getSearchParams(l,2),C="",B="",Q="",E="",f="",u=0,d,x,p,m;for(n=0,r=I;n0&&(B+="\\xFF\\xFF",C+="\\xFF\\xFF",Q+="\\0",E+="\\0\\0");let D="\\0\\0"+zA(2*l)+zA(h.range)+zA(h.entry)+zA(h.rangeShift)+B+"\\0\\0"+C+Q+E+f,S="",w="";if(s>1){for(a+=`\\0\\0\n`+qe(4+s*8+4+D.length),S="",n=0,r=i.length;na||(A.skip(6),A.getUint16()===0)?!1:(e.data[8]=e.data[9]=0,!0)}function oE(e,A,t){t||(t={unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0});let i=0,s=0,a=0,n=0,r=null,g=0,o=-1;if(A){for(let E in A)if(E|=0,(r>E||!r)&&(r=E),g 123 are reserved for internal usage");g>65535&&(g=65535)}else r=0,g=255;let I=e.bbox||[0,0,0,0],c=t.unitsPerEm||(e.fontMatrix?1/Math.max(...e.fontMatrix.slice(0,4).map(Math.abs)):1e3),l=e.ascentScaled?1:c/n0,h=t.ascent||Math.round(l*(e.ascent||I[3])),C=t.descent||Math.round(l*(e.descent||I[1]));C>0&&e.descent>0&&I[1]<0&&(C=-C);let B=t.yMax||h,Q=-t.yMin||-C;return"\\0$\\xF4\\0\\0\\0\\x8A\\xBB\\0\\0\\0\\x8C\\x8A\\xBB\\0\\0\\xDF\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+qe(i)+qe(s)+qe(a)+qe(n)+"*21*"+zA(e.italicAngle?1:0)+zA(r||e.firstChar)+zA(g||e.lastChar)+zA(h)+zA(C)+"\\0d"+zA(B)+zA(Q)+"\\0\\0\\0\\0\\0\\0\\0\\0"+zA(e.xHeight)+zA(e.capHeight)+zA(0)+zA(r||e.firstChar)+"\\0"}function IE(e){let A=Math.floor(e.italicAngle*65536);return"\\0\\0\\0"+qe(A)+"\\0\\0\\0\\0"+qe(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function U2(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function bo(e,A){A||(A=[[],[]]);let t=[A[0][0]||"Original licence",A[0][1]||e,A[0][2]||"Unknown",A[0][3]||"uniqueID",A[0][4]||e,A[0][5]||"Version 0.11",A[0][6]||U2(e),A[0][7]||"Unknown",A[0][8]||"Unknown",A[0][9]||"Unknown"],i=[],s,a,n,r,g;for(s=0,a=t.length;s0,(r||g)&&i==="CIDFontType2"&&this.cidEncoding.startsWith("Identity-")){let l=A.cidToGidMap,h=[];if(Wn(h,Z1()),/Arial-?Black/i.test(t)?Wn(h,i2()):/Calibri/i.test(t)&&Wn(h,s2()),l){for(let C in h){let B=h[C];l[B]!==void 0&&(h[+C]=l[B])}l.length!==this.toUnicode.length&&A.hasIncludedToUnicodeMap&&this.toUnicode instanceof Ct&&this.toUnicode.forEach(function(C,B){let Q=h[C];l[Q]===void 0&&(h[+C]=B)})}this.toUnicode instanceof Ct||this.toUnicode.forEach(function(C,B){h[+C]=B}),this.toFontChar=h,this.toUnicode=new B0(h)}else if(/Symbol/i.test(s))this.toFontChar=wo(l1,Ai(),this.differences);else if(/Dingbats/i.test(s))this.toFontChar=wo(h1,jd(),this.differences);else if(r||g){let l=wo(this.defaultEncoding,Ai(),this.differences);i==="CIDFontType2"&&!this.cidEncoding.startsWith("Identity-")&&!(this.toUnicode instanceof Ct)&&this.toUnicode.forEach(function(h,C){l[+h]=C}),this.toFontChar=l}else{let l=Ai(),h=[];this.toUnicode.forEach((C,B)=>{if(!this.composite){let Q=this.differences[C]||this.defaultEncoding[C],E=Us(Q,l);E!==-1&&(B=E)}h[+C]=B}),this.composite&&this.toUnicode instanceof Ct&&/Tahoma|Verdana/i.test(t)&&Wn(h,Z1()),this.toFontChar=h}nE(A),this.loadedName=s.split("-",1)[0]}checkAndRepair(A,t,i){var EA,fA,CA;let s=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function a(N,H){let q=Object.create(null);q["OS/2"]=null,q.cmap=null,q.head=null,q.hhea=null,q.hmtx=null,q.maxp=null,q.name=null,q.post=null;for(let T=0;T>>0,T=N.getInt32()>>>0,$=N.getInt32()>>>0,X=N.pos;N.pos=N.start||0,N.skip(T);let W=N.getBytes($);return N.pos=X,H==="head"&&(W[8]=W[9]=W[10]=W[11]=0,W[17]|=32),{tag:H,checksum:q,length:$,offset:T,data:W}}function r(N){return{version:N.getString(4),numTables:N.getUint16(),searchRange:N.getUint16(),entrySelector:N.getUint16(),rangeShift:N.getUint16()}}function g(N){let H=N.getString(4);gt(H==="ttcf","Must be a TrueType Collection font.");let q=N.getUint16(),T=N.getUint16(),$=N.getInt32()>>>0,X=[];for(let G=0;G<$;G++)X.push(N.getInt32()>>>0);let W={ttcTag:H,majorVersion:q,minorVersion:T,numFonts:$,offsetTable:X};switch(q){case 1:return W;case 2:return W.dsigTag=N.getInt32()>>>0,W.dsigLength=N.getInt32()>>>0,W.dsigOffset=N.getInt32()>>>0,W}throw new v(`Invalid TrueType Collection majorVersion: ${q}.`)}function o(N,H){var W;let{numFonts:q,offsetTable:T}=g(N),$=H.split("+"),X;for(let G=0;G>>0,UA=!1;if(!((G==null?void 0:G.platformId)===yA&&(G==null?void 0:G.encodingId)===aA)){if(yA===0&&(aA===0||aA===1||aA===3))UA=!0;else if(yA===1&&aA===0)UA=!0;else if(yA===3&&aA===1&&(T||!G))UA=!0,q||(BA=!0);else if(q&&yA===3&&aA===0){UA=!0;let Ee=!0;if(cA>3;cA.push(UA),yA=Math.max(UA,yA)}let aA=[];for(let DA=0;DA<=yA;DA++)aA.push({firstCode:H.getUint16(),entryCount:H.getUint16(),idDelta:Dt(H.getByte(),H.getByte()),idRangePos:H.pos+H.getUint16()});for(let DA=0;DA<256;DA++)if(cA[DA]===0)H.pos=aA[0].idRangePos+2*DA,FA=H.getUint16(),iA.push({charCode:DA,glyphId:FA});else{let UA=aA[cA[DA]];for(wA=0;wA>1;H.skip(6);let yA=[],aA;for(aA=0;aA>1)-(cA-aA),$.offsetIndex=UA,DA=Math.max(DA,UA+$.end-$.start+1)}let Ee=[];for(wA=0;wA>>0;for(wA=0;wA>>0,aA=H.getInt32()>>>0,DA=H.getInt32()>>>0;for(let UA=yA;UA<=aA;UA++)iA.push({charCode:UA,glyphId:DA++})}}else return k("cmap table has unsupported format: "+uA),{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1};iA.sort(function(cA,yA){return cA.charCode-yA.charCode});for(let cA=1;cA$&&(PA(`The numOfMetrics (${G}) should not be greater than the numGlyphs (${$}).`),G=$,H.data[34]=(G&65280)>>8,H.data[35]=G&255);let uA=$-G-(q.length-G*4>>1);if(uA>0){let bA=new Uint8Array(q.length+uA*2);bA.set(q.data),X&&(bA[q.length]=q.data[2],bA[q.length+1]=q.data[3]),q.data=bA}}function l(N,H,q,T,$,X){let W={length:0,sizeOfInstructions:0};if(H<0||H>=N.length||q>N.length||q-H<=12)return W;let G=N.subarray(H,q),BA=Dt(G[2],G[3]),uA=Dt(G[4],G[5]),bA=Dt(G[6],G[7]),iA=Dt(G[8],G[9]);BA>bA&&(ea(G,2,bA),ea(G,6,BA)),uA>iA&&(ea(G,4,iA),ea(G,8,uA));let wA=Dt(G[0],G[1]);if(wA<0)return wA<-1||(T.set(G,$),W.length=G.length),W;let FA,cA=10,yA=0;for(FA=0;FAG.length?W:!X&&DA>0?(T.set(G.subarray(0,aA),$),T.set([0,0],$+aA),T.set(G.subarray(UA,pA),$+aA+2),pA-=DA,G.length-pA>3&&(pA=pA+3&-4),W.length=pA,W):G.length-pA>3?(pA=pA+3&-4,T.set(G.subarray(0,pA),$),W.length=pA,W):(T.set(G,$),W.length=G.length,W)}function h(N,H,q){let T=N.data,$=y2(T[0],T[1],T[2],T[3]);$>>16!==1&&(PA("Attempting to fix invalid version in head table: "+$),T[0]=0,T[1]=1,T[2]=0,T[3]=0);let X=i0(T[50],T[51]);if(X<0||X>1){PA("Attempting to fix invalid indexToLocFormat in head table: "+X);let W=H+1;if(q===W<<1)T[50]=0,T[51]=0;else if(q===W<<2)T[50]=0,T[51]=1;else throw new v("Could not fix indexToLocFormat: "+X)}}function C(N,H,q,T,$,X,W){let G,BA,uA;T?(G=4,BA=function(WA,re){return WA[re]<<24|WA[re+1]<<16|WA[re+2]<<8|WA[re+3]},uA=function(WA,re,De){WA[re]=De>>>24&255,WA[re+1]=De>>16&255,WA[re+2]=De>>8&255,WA[re+3]=De&255}):(G=2,BA=function(WA,re){return WA[re]<<9|WA[re+1]<<1},uA=function(WA,re,De){WA[re]=De>>9&255,WA[re+1]=De>>1&255});let bA=X?q+1:q,iA=G*(1+bA),wA=new Uint8Array(iA);wA.set(N.data.subarray(0,iA)),N.data=wA;let FA=H.data,cA=FA.length,yA=new Uint8Array(cA),aA,DA,UA=[];for(aA=0,DA=0;aAcA&&(LA=cA),UA.push({index:aA,offset:LA,endOffset:0})}for(UA.sort((LA,WA)=>LA.offset-WA.offset),aA=0;aALA.index-WA.index),aA=0;aAW&&(W=LA.sizeOfInstructions),TA+=WA,uA(wA,DA,TA)}if(TA===0){let LA=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(aA=0,DA=G;aALA+TA?H.data=yA.subarray(0,LA+TA):(H.data=new Uint8Array(LA+TA),H.data.set(yA.subarray(0,TA))),H.data.set(yA.subarray(0,LA),TA),uA(N.data,wA.length-G,TA+LA)}else H.data=yA.subarray(0,TA);return{missingGlyphs:pA,maxSizeOfInstructions:W}}function B(N,H,q){let T=(t.start||0)+N.offset;t.pos=T;let $=N.length,X=T+$,W=t.getInt32();t.skip(28);let G,BA=!0,uA;switch(W){case 65536:G=O1;break;case 131072:let bA=t.getUint16();if(bA!==q){BA=!1;break}let iA=[];for(uA=0;uA=32768){BA=!1;break}iA.push(cA)}if(!BA)break;let wA=[],FA=[];for(;t.posX)continue;t.pos=cA;let yA=FA.name;if(FA.encoding){let aA="";for(let DA=0,UA=FA.length;DA0&&(T+=TA-1)}if(!yA&&!DA){let TA=0;for(pA<=142?TA=E[pA]:pA>=192&&pA<=223?TA=-1:pA>=224&&(TA=-2),pA>=113&&pA<=117&&(X=iA.pop(),isNaN(X)||(TA=-X*2));TA<0&&iA.length>0;)iA.pop(),TA++;for(;TA>0;)iA.push(NaN),TA--}}H.tooComplexToFollowFunctions=cA;let UA=[q];T>q.length&&UA.push(new Uint8Array(T-q.length)),bA>uA&&(k("TT: complementing a missing function tail"),UA.push(new Uint8Array([34,45]))),d(N,UA)}function u(N,H){if(!N.tooComplexToFollowFunctions){if(N.functionsDefined.length>H){k("TT: more functions defined than expected"),N.hintsValid=!1;return}for(let q=0,T=N.functionsUsed.length;qH){k("TT: invalid function id: "+q),N.hintsValid=!1;return}if(N.functionsUsed[q]&&!N.functionsDefined[q]){k("TT: undefined function: "+q),N.hintsValid=!1;return}}}}function d(N,H){if(H.length>1){let q=0,T,$;for(T=0,$=H.length;T<$;T++)q+=H[T].length;q=q+3&-4;let X=new Uint8Array(q),W=0;for(T=0,$=H.length;T<$;T++)X.set(H[T],W),W+=H[T].length;N.data=X,N.length=q}}function x(N,H,q,T){let $={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(N&&f(N,$),H&&f(H,$),N&&u($,T),q&&q.length&1){let X=new Uint8Array(q.length+1);X.set(q.data),q.data=X}return $.hintsValid}t=new Ie(new Uint8Array(t.getBytes()));let p,m;if(xf(t)){let N=o(t,this.name);p=N.header,m=N.tables}else p=r(t),m=a(t,p.numTables);let D,S,w=!m["CFF "];if(w){if(!m.loca)throw new v(\'Required "loca" table is not found\');m.glyf||(k(\'Required "glyf" table is not found -- trying to recover.\'),m.glyf={tag:"glyf",data:new Uint8Array(0)}),this.isOpenType=!1}else{let N=i.composite&&(((EA=i.cidToGidMap)==null?void 0:EA.length)>0||!(i.cMap instanceof Wi));if(p.version==="OTTO"&&!N||!m.head||!m.hhea||!m.maxp||!m.post)return S=new Ie(m["CFF "].data),D=new Ea(S,i),po(i),this.convert(A,D,i);delete m.glyf,delete m.loca,delete m.fpgm,delete m.prep,delete m["cvt "],this.isOpenType=!0}if(!m.maxp)throw new v(\'Required "maxp" table is not found\');t.pos=(t.start||0)+m.maxp.offset;let Y=t.getInt32(),U=t.getUint16();if(Y!==65536&&Y!==20480){if(m.maxp.length===6)Y=20480;else if(m.maxp.length>=32)Y=65536;else throw new v(\'"maxp" table has a wrong version number\');w2(m.maxp.data,0,Y)}if(((fA=i.scaleFactors)==null?void 0:fA.length)===U&&w){let{scaleFactors:N}=i,H=i0(m.head.data[50],m.head.data[51]),q=new UI({glyfTable:m.glyf.data,isGlyphLocationsLong:H,locaTable:m.loca.data,numGlyphs:U});q.scale(N);let{glyf:T,loca:$,isLocationLong:X}=q.write();m.glyf.data=T,m.loca.data=$,X!==!!H&&(m.head.data[50]=0,m.head.data[51]=X?1:0);let W=m.hmtx.data;for(let G=0;G>8&255,W[BA+1]=uA&255;let bA=Math.round(N[G]*Dt(W[BA+2],W[BA+3]));ea(W,BA+2,bA)}}let K=U+1,Z=!0;K>65535&&(Z=!1,K=U,k("Not enough space in glyfs to duplicate first glyph."));let AA=0,gA=0;Y>=65536&&m.maxp.length>=32&&(t.pos+=8,t.getUint16()>2&&(m.maxp.data[14]=0,m.maxp.data[15]=2),t.pos+=4,AA=t.getUint16(),t.pos+=4,gA=t.getUint16()),m.maxp.data[4]=K>>8,m.maxp.data[5]=K&255;let R=x(m.fpgm,m.prep,m["cvt "],AA);if(R||(delete m.fpgm,delete m.prep,delete m["cvt "]),c(t,m.hhea,m.hmtx,m.head,K,Z),!m.head)throw new v(\'Required "head" table is not found\');h(m.head,U,w?m.loca.length:0);let _=Object.create(null);if(w){let N=i0(m.head.data[50],m.head.data[51]),H=C(m.loca,m.glyf,U,N,R,Z,gA);_=H.missingGlyphs,Y>=65536&&m.maxp.length>=32&&(m.maxp.data[26]=H.maxSizeOfInstructions>>8,m.maxp.data[27]=H.maxSizeOfInstructions&255)}if(!m.hhea)throw new v(\'Required "hhea" table is not found\');m.hhea.data[10]===0&&m.hhea.data[11]===0&&(m.hhea.data[10]=255,m.hhea.data[11]=255);let tA={unitsPerEm:i0(m.head.data[18],m.head.data[19]),yMax:Dt(m.head.data[42],m.head.data[43]),yMin:Dt(m.head.data[38],m.head.data[39]),ascent:Dt(m.hhea.data[4],m.hhea.data[5]),descent:Dt(m.hhea.data[6],m.hhea.data[7]),lineGap:Dt(m.hhea.data[8],m.hhea.data[9])};this.ascent=tA.ascent/tA.unitsPerEm,this.descent=tA.descent/tA.unitsPerEm,this.lineGap=tA.lineGap/tA.unitsPerEm,(CA=this.cssFontInfo)!=null&&CA.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,m.post&&B(m.post,i,U),m.post={tag:"post",data:IE(i)};let IA=Object.create(null);function QA(N){return!_[N]}if(i.composite){let N=i.cidToGidMap||[],H=N.length===0;i.cMap.forEach(function(q,T){if(typeof T=="string"&&(T=yo(q,T,!0)),T>65535)throw new v("Max size of CID is 65,535");let $=-1;H?$=T:N[T]!==void 0&&($=N[T]),$>=0&&$=61440&&G<=61695&&(G&=255),IA[G]=W.glyphId}else for(let W of T)IA[W.charCode]=W.glyphId;if(i.glyphNames&&($.length||this.differences.length))for(let W=0;W<256;++W){if(!X&&IA[W]!==void 0)continue;let G=this.differences[W]||$[W];if(!G)continue;let BA=i.glyphNames.indexOf(G);BA>0&&QA(BA)&&(IA[W]=BA)}}IA.length===0&&(IA[0]=0);let V=K-1;if(Z||(V=0),!i.cssFontInfo){let N=rE(IA,QA,V,this.toUnicode);this.toFontChar=N.toFontChar,m.cmap={tag:"cmap",data:gE(N.charCodeToGlyphId,N.toUnicodeExtraMap,K)},(!m["OS/2"]||!G2(m["OS/2"],t))&&(m["OS/2"]={tag:"OS/2",data:oE(i,N.charCodeToGlyphId,tA)})}if(!w)try{S=new Ie(m["CFF "].data),D=new Ma(S,i,Cs).parse(),D.duplicateFirstGlyph();let H=new k0(D);m["CFF "].data=H.compile()}catch(N){k("Failed to compile font "+i.loadedName)}if(!m.name)m.name={tag:"name",data:bo(this.name)};else{let[N,H]=Q(m.name);m.name.data=bo(A,N),this.psName=N[0][6]||null,i.composite||m2(i,this.isSymbolicFont,H)}let lA=new F0(p.version);for(let N in m)lA.addTable(N,m[N].data);return lA.toArray()}convert(A,t,i){i.fixedPitch=!1,i.builtInEncoding&&p2(i,i.builtInEncoding);let s=1;t instanceof Ea&&(s=t.numGlyphs-1);let a=t.getGlyphMapping(i),n=null,r=a,g=null;i.cssFontInfo||(n=rE(a,t.hasGlyphId.bind(t),s,this.toUnicode),this.toFontChar=n.toFontChar,r=n.charCodeToGlyphId,g=n.toUnicodeExtraMap);let o=t.numGlyphs;function I(B,Q){let E=null;for(let f in B)Q===B[f]&&(E||(E=[])).push(f|0);return E}function c(B,Q){for(let E in B)if(Q===B[E])return E|0;return n.charCodeToGlyphId[n.nextAvailableFontCharCode]=Q,n.nextAvailableFontCharCode++}let l=t.seacs;if(n&&Cs&&(l!=null&&l.length)){let B=i.fontMatrix||E0,Q=t.getCharset(),E=Object.create(null);for(let f in l){f|=0;let u=l[f],d=fi[u[2]],x=fi[u[3]],p=Q.indexOf(d),m=Q.indexOf(x);if(p<0||m<0)continue;let D={x:u[0]*B[0]+u[1]*B[2]+B[4],y:u[0]*B[1]+u[1]*B[3]+B[5]},S=I(a,f);if(S)for(let w of S){let Y=n.charCodeToGlyphId,U=c(Y,p),K=c(Y,m);E[w]={baseFontCharCode:U,accentFontCharCode:K,accentOffset:D}}}i.seacMap=E}let h=i.fontMatrix?1/Math.max(...i.fontMatrix.slice(0,4).map(Math.abs)):1e3,C=new F0("OTTO");return C.addTable("CFF ",t.data),C.addTable("OS/2",oE(i,r)),C.addTable("cmap",gE(r,g,o)),C.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<\\xF5\\0\\0"+s0(h)+"\\0\\0\\0\\0\\x9E\\v~\'\\0\\0\\0\\0\\x9E\\v~\'\\0\\0"+s0(i.descent)+"\\xFF"+s0(i.ascent)+zA(i.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),C.addTable("hhea","\\0\\0\\0"+s0(i.ascent)+s0(i.descent)+"\\0\\0\\xFF\\xFF\\0\\0\\0\\0\\0\\0"+s0(i.capHeight)+s0(Math.tan(i.italicAngle)*i.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+zA(o)),C.addTable("hmtx",function(){let Q=t.charstrings,E=t.cff?t.cff.widths:null,f="\\0\\0\\0\\0";for(let u=1,d=o;ut.length%2===1,a=this.toUnicode instanceof Ct?n=>this.toUnicode.charCodeOf(n):n=>this.toUnicode.charCodeOf(String.fromCodePoint(n));for(let n=0,r=A.length;n55295&&(g<57344||g>65533)&&n++,this.toUnicode){let o=a(g);if(o!==-1){s()&&(t.push(i.join("")),i.length=0);let I=this.cMap?this.cMap.getCharCodeLength(o):1;for(let c=I-1;c>=0;c--)i.push(String.fromCharCode(o>>8*c&255));continue}}s()||(t.push(i.join("")),i.length=0),i.push(String.fromCodePoint(g))}return t.push(i.join("")),t}},fa=class{constructor(A){this.error=A,this.loadedName="g_font_error",this.missingFile=!0}charsToGlyphs(){return[]}encodeString(A){return[A]}exportData(A=!1){return{error:this.error}}},nt={FUNCTION_BASED:1,AXIAL:2,RADIAL:3,FREE_FORM_MESH:4,LATTICE_FORM_MESH:5,COONS_PATCH_MESH:6,TENSOR_PATCH_MESH:7},YI=class{constructor(){OA("Cannot initialize Pattern.")}static parseShading(A,t,i,s,a){let n=A instanceof KA?A.dict:A,r=n.get("ShadingType");try{switch(r){case nt.AXIAL:case nt.RADIAL:return new KI(n,t,i,s,a);case nt.FREE_FORM_MESH:case nt.LATTICE_FORM_MESH:case nt.COONS_PATCH_MESH:case nt.TENSOR_PATCH_MESH:return new _0(A,t,i,s,a);default:throw new v("Unsupported ShadingType: "+r)}}catch(g){if(g instanceof ge)throw g;return k(g),new qI}}},Oi=class{getIR(){OA("Abstract method `getIR` called.")}};et(Oi,"SMALL_NUMBER",1e-6);var KI=class extends Oi{constructor(A,t,i,s,a){super(),this.shadingType=A.get("ShadingType");let n=0;if(this.shadingType===nt.AXIAL?n=4:this.shadingType===nt.RADIAL&&(n=6),this.coordsArr=A.getArray("Coords"),!wt(this.coordsArr,n))throw new v("RadialAxialShading: Invalid /Coords array.");let r=JA.parse({cs:A.getRaw("CS")||A.getRaw("ColorSpace"),xref:t,resources:i,pdfFunctionFactory:s,localColorSpaceCache:a});this.bbox=Ei(A.getArray("BBox"),null);let g=0,o=1,I=A.getArray("Domain");wt(I,2)&&([g,o]=I);let c=!1,l=!1,h=A.getArray("Extend");if(Tu(h,2)&&([c,l]=h),this.shadingType===nt.RADIAL&&(!c||!l)){let[tA,IA,QA,V,lA,EA]=this.coordsArr,fA=Math.hypot(tA-V,IA-lA);QA<=EA+fA&&EA<=QA+fA&&k("Unsupported radial gradient.")}this.extendStart=c,this.extendEnd=l;let C=A.getRaw("Function"),B=s.createFromArray(C),Q=840,E=(o-g)/Q,f=this.colorStops=[];if(g>=o||E<=0){PA("Bad shading domain.");return}let u=new Float32Array(r.numComps),d=new Float32Array(1),x,p=0;d[0]=g,B(d,0,u,0);let m=r.getRgb(u,0),D=Ce.makeHexColor(m[0],m[1],m[2]);f.push([0,D]);let S=1;d[0]=g+E,B(d,0,u,0);let w=r.getRgb(u,0),Y=w[0]-m[0]+1,U=w[1]-m[1]+1,K=w[2]-m[2]+1,Z=w[0]-m[0]-1,AA=w[1]-m[1]-1,gA=w[2]-m[2]-1;for(let tA=2;tA0)return!0;let A=this.stream.getByte();return A<0?!1:(this.buffer=A,this.bufferLength=8,!0)}readBits(A){let t=this.buffer,i=this.bufferLength;if(A===32){if(i===0)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();let s=this.stream.getByte();return this.buffer=s&(1<>i)>>>0}if(A===8&&i===0)return this.stream.getByte();for(;i>i}align(){this.buffer=0,this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){let A=this.context.bitsPerCoordinate,t=this.readBits(A),i=this.readBits(A),s=this.context.decode,a=A<32?1/((1<r?r:A,t=t>g?g:t,i=io*s[I]):t,n=-2,r,g=[];for(let[o,I]of i.map((c,l)=>[c,l]).sort(([c],[l])=>c-l))o!==-1&&(o===n+1?(r.push(a[I]),n+=1):(n=o,r=[a[I]],g.push(o,r)));return g}function pf(e){let A=Q9(e),t=new F(null);t.set("BaseFont",M.get(e)),t.set("Type",M.get("Font")),t.set("Subtype",M.get("CIDFontType2")),t.set("Encoding",M.get("Identity-H")),t.set("CIDToGIDMap",M.get("Identity")),t.set("W",A),t.set("FirstChar",A[0]),t.set("LastChar",A.at(-2)+A.at(-1).length-1);let i=new F(null);t.set("FontDescriptor",i);let s=new F(null);return s.set("Ordering","Identity"),s.set("Registry","Adobe"),s.set("Supplement",0),t.set("CIDSystemInfo",s),t}var TI=class{constructor(A){this.lexer=A,this.operators=[],this.token=null,this.prev=null}nextToken(){this.prev=this.token,this.token=this.lexer.getToken()}accept(A){return this.token.type===A?(this.nextToken(),!0):!1}expect(A){if(this.accept(A))return!0;throw new v(`Unexpected symbol: found ${this.token.type} expected ${A}.`)}parse(){return this.nextToken(),this.expect(Ve.LBRACE),this.parseBlock(),this.expect(Ve.RBRACE),this.operators}parseBlock(){for(;;)if(this.accept(Ve.NUMBER))this.operators.push(this.prev.value);else if(this.accept(Ve.OPERATOR))this.operators.push(this.prev.value);else if(this.accept(Ve.LBRACE))this.parseCondition();else return}parseCondition(){let A=this.operators.length;if(this.operators.push(null,null),this.parseBlock(),this.expect(Ve.RBRACE),this.accept(Ve.IF))this.operators[A]=this.operators.length,this.operators[A+1]="jz";else if(this.accept(Ve.LBRACE)){let t=this.operators.length;this.operators.push(null,null);let i=this.operators.length;this.parseBlock(),this.expect(Ve.RBRACE),this.expect(Ve.IFELSE),this.operators[t]=this.operators.length,this.operators[t+1]="j",this.operators[A]=i,this.operators[A+1]="jz"}else throw new v("PS Function: error parsing conditional.")}},Ve={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5},rt=class{static get opCache(){return nA(this,"opCache",Object.create(null))}constructor(A,t){this.type=A,this.value=t}static getOperator(A){var t;return(t=rt.opCache)[A]||(t[A]=new rt(Ve.OPERATOR,A))}static get LBRACE(){return nA(this,"LBRACE",new rt(Ve.LBRACE,"{"))}static get RBRACE(){return nA(this,"RBRACE",new rt(Ve.RBRACE,"}"))}static get IF(){return nA(this,"IF",new rt(Ve.IF,"IF"))}static get IFELSE(){return nA(this,"IFELSE",new rt(Ve.IFELSE,"IFELSE"))}},PI=class{constructor(A){this.stream=A,this.nextChar(),this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let A=!1,t=this.currentChar;for(;;){if(t<0)return Ge;if(A)(t===10||t===13)&&(A=!1);else if(t===37)A=!0;else if(!pt(t))break;t=this.nextChar()}switch(t|0){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 rt(Ve.NUMBER,this.getNumber());case 123:return this.nextChar(),rt.LBRACE;case 125:return this.nextChar(),rt.RBRACE}let i=this.strBuf;for(i.length=0,i[0]=String.fromCharCode(t);(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)i.push(String.fromCharCode(t));let s=i.join("");switch(s.toLowerCase()){case"if":return rt.IF;case"ifelse":return rt.IFELSE;default:return rt.getOperator(s)}}getNumber(){let A=this.currentChar,t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(A);(A=this.nextChar())>=0&&(A>=48&&A<=57||A===45||A===46);)t.push(String.fromCharCode(A));let i=parseFloat(t.join(""));if(isNaN(i))throw new v(`Invalid floating point number: ${i}`);return i}},Xi=class{constructor(A){this._onlyRefs=(A==null?void 0:A.onlyRefs)===!0,this._onlyRefs||(this._nameRefMap=new Map,this._imageMap=new Map),this._imageCache=new mt}getByName(A){this._onlyRefs&&OA("Should not call `getByName` method.");let t=this._nameRefMap.get(A);return t?this.getByRef(t):this._imageMap.get(A)||null}getByRef(A){return this._imageCache.get(A)||null}set(A,t,i){OA("Abstract method `set` called.")}},Hr=class extends Xi{set(A,t=null,i){if(typeof A!="string")throw new Error(\'LocalImageCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},Jr=class extends Xi{set(A=null,t=null,i){if(typeof A!="string"&&!t)throw new Error(\'LocalColorSpaceCache.set - expected "name" and/or "ref" argument.\');if(t){if(this._imageCache.has(t))return;A!==null&&this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},WI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'LocalFunctionCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},Yr=class extends Xi{set(A,t=null,i){if(typeof A!="string")throw new Error(\'LocalGStateCache.set - expected "name" argument.\');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(A,t),this._imageCache.put(t,i);return}this._imageMap.has(A)||this._imageMap.set(A,i)}},OI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'LocalTilingPatternCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},ZI=class extends Xi{constructor(A){super({onlyRefs:!0})}set(A=null,t,i){if(!t)throw new Error(\'RegionalImageCache.set - expected "ref" argument.\');this._imageCache.has(t)||this._imageCache.put(t,i)}},ps,Mg,wf,Bn,jI,os=class{constructor(){HA(this,Mg);HA(this,Bn);HA(this,ps,new be);this._refCache=new mt,this._imageCache=new mt}shouldCache(A,t){let i=this._refCache.get(A);return i||(i=new Set,this._refCache.put(A,i)),i.add(t),!(i.size+A):null}var vr=class{static getSampleArray(A,t,i,s){let a,n,r=1;for(a=0,n=A.length;a>o)*c,I&=(1<w?D=w:D0&&(u=r[f-1]);let d=s[1];f>1,c=a.length>>1,l=new XI(o),h=Object.create(null),B=2048*4,Q=new Float32Array(c);return function(f,u,d,x){let p,m,D="",S=Q;for(p=0;pZ&&(m=Z)),Y[p]=m}B>0&&(B--,h[D]=Y),d.set(Y,x)}}};function Do(e){let A;if(e instanceof F)A=e;else if(e instanceof KA)A=e.dict;else return!1;return A.has("FunctionType")}var Lg=class{constructor(A){this.stack=A?Array.from(A):[]}push(A){if(this.stack.length>=Lg.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(A)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(A){if(this.stack.length+A>=Lg.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");let t=this.stack;for(let i=t.length-A,s=A-1;s>=0;s--,i++)t.push(t[i])}index(A){this.push(this.stack[this.stack.length-A-1])}roll(A,t){let i=this.stack,s=i.length-A,a=i.length-1,n=s+(t-Math.floor(t/A)*A);for(let r=s,g=a;r0?t.push(r<>g);break;case"ceiling":r=t.pop(),t.push(Math.ceil(r));break;case"copy":r=t.pop(),t.copy(r);break;case"cos":r=t.pop(),t.push(Math.cos(r%360/180*Math.PI));break;case"cvi":r=t.pop()|0,t.push(r);break;case"cvr":break;case"div":g=t.pop(),r=t.pop(),t.push(r/g);break;case"dup":t.copy(1);break;case"eq":g=t.pop(),r=t.pop(),t.push(r===g);break;case"exch":t.roll(2,1);break;case"exp":g=t.pop(),r=t.pop(),t.push(r**g);break;case"false":t.push(!1);break;case"floor":r=t.pop(),t.push(Math.floor(r));break;case"ge":g=t.pop(),r=t.pop(),t.push(r>=g);break;case"gt":g=t.pop(),r=t.pop(),t.push(r>g);break;case"idiv":g=t.pop(),r=t.pop(),t.push(r/g|0);break;case"index":r=t.pop(),t.index(r);break;case"le":g=t.pop(),r=t.pop(),t.push(r<=g);break;case"ln":r=t.pop(),t.push(Math.log(r));break;case"log":r=t.pop(),t.push(Math.log10(r));break;case"lt":g=t.pop(),r=t.pop(),t.push(r=A?new ui(A):e.max<=A?e:new _I(e,A)}var zI=class{compile(A,t,i){let s=[],a=[],n=t.length>>1,r=i.length>>1,g=0,o,I,c,l,h,C,B,Q;for(let f=0;fd.min&&(D.unshift("Math.max(",p,", "),D.push(")")),m4?(i=!0,A=0):(i=!1,A=1));let g=[];for(n=0;n=0&&VA[E]==="ET";--E)VA[E]="EN";for(let E=n+1;E0&&(f=VA[n-1]);let u=c;E+1Q&&hE(Q)&&(B=Q);for(Q=C;Q>=B;--Q){let E=-1;for(n=0,r=g.length;n=0&&(CE(ki,E,n),E=-1):E<0&&(E=n);E>=0&&CE(ki,E,g.length)}for(n=0,r=ki.length;n")&&(ki[n]="")}return ko(ki.join(""),i)}var r0={style:"normal",weight:"normal"},o0={style:"normal",weight:"bold"},I0={style:"italic",weight:"normal"},c0={style:"italic",weight:"bold"},ua=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:r0,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:o0,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:I0,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:c0,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:r0,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:o0,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:I0,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:c0,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:r0,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:o0,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:I0,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:c0,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:r0,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:o0,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:I0,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:c0,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:r0,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:o0,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:I0,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:c0,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:r0}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),b9=new Map([["Arial-Black","ArialBlack"]]);function D9(e){switch(e){case o0:return"Bold";case I0:return"Italic";case c0:return"Bold Italic";default:if((e==null?void 0:e.weight)==="bold")return"Bold";if((e==null?void 0:e.style)==="italic")return"Italic"}return""}function BE(e){let A=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(t=>!A.has(t.toLowerCase())).join(" ")}function $I({alias:e,local:A,path:t,fallback:i,style:s,ultimate:a},n,r,g=!0,o=!0,I=""){let c={style:null,ultimate:null};if(A){let l=I?` ${I}`:"";for(let h of A)n.push(`local(${h}${l})`)}if(e){let l=ua.get(e),h=I||D9(s);Object.assign(c,$I(l,n,r,g&&!i,o&&!t,h))}if(s&&(c.style=s),a&&(c.ultimate=a),g&&i){let l=ua.get(i),{ultimate:h}=$I(l,n,r,g,o&&!t,I);c.ultimate||(c.ultimate=h)}return o&&t&&r&&n.push(`url(${r}${t})`),c}function QE(e,A,t,i,s,a){if(i.startsWith("InvalidPDFjsFont_"))return null;(a==="TrueType"||a==="Type1")&&/^[A-Z]{6}\\+/.test(i)&&(i=i.slice(7)),i=pn(i);let n=i,r=e.get(n);if(r)return r;let g=ua.get(i);if(!g){for(let[Q,E]of b9)if(i.startsWith(Q)){i=`${E}${i.substring(Q.length)}`,g=ua.get(i);break}}let o=!1;g||(g=ua.get(s),o=!0);let I=`${A.getDocId()}_s${A.createFontId()}`;if(!g){if(!vo(i))return k(`Cannot substitute the font because of its name: ${i}`),e.set(n,null),null;let Q=/bold/gi.test(i),E=/oblique|italic/gi.test(i),f=Q&&E&&c0||Q&&o0||E&&I0||r0;return r={css:`"${BE(i)}",${I}`,guessFallback:!0,loadedName:I,baseFontName:i,src:`local(${i})`,style:f},e.set(n,r),r}let c=[];o&&vo(i)&&c.push(`local(${i})`);let{style:l,ultimate:h}=$I(g,c,t),C=h===null,B=C?"":`,${h}`;return r={css:`"${BE(i)}",${I}${B}`,guessFallback:C,loadedName:I,baseFontName:i,src:c.join(","),style:l},e.set(n,r),r}var bf=2048,k9=65537,EE=128,at=class{constructor(A,t){this._imgData=A,this._isMask=t}static needsToBeResized(A,t){if(A<=this._goodSquareLength&&t<=this._goodSquareLength)return!1;let{MAX_DIM:i}=this;if(A>i||t>i)return!0;let s=A*t;if(this._hasMaxArea)return s>this.MAX_AREA;if(sa}static get MAX_DIM(){return nA(this,"MAX_DIM",this._guessMax(bf,k9,0,1))}static get MAX_AREA(){return this._hasMaxArea=!0,nA(this,"MAX_AREA",this._guessMax(at._goodSquareLength,this.MAX_DIM,EE,0)**2)}static set MAX_AREA(A){A>=0&&(this._hasMaxArea=!0,nA(this,"MAX_AREA",A))}static setMaxArea(A){this._hasMaxArea||(this.MAX_AREA=A>>2)}static _areGoodDims(A,t){try{let i=new OffscreenCanvas(A,t),s=i.getContext("2d");s.fillRect(0,0,1,1);let a=s.getImageData(0,0,1,1).data[3];return i.width=i.height=1,a!==0}catch(i){return!1}}static _guessMax(A,t,i,s){for(;A+i+1>3,Q=B+3&-4;if(B!==Q){let E=new Uint8Array(Q*t),f=0;for(let u=0,d=t*B;u>>8,t[i++]=E&255)}}else if(ArrayBuffer.isView(A))t=A.slice(),i=t.byteLength;else throw new Error("Invalid data format, must be a string or TypedArray.");let s=i>>2,a=i-s*4,n=new Uint32Array(t.buffer,0,s),r=0,g=0,o=this.h1,I=this.h2,c=3432918353,l=461845907,h=c&Vt,C=l&Vt;for(let B=0;B>>17,r=r*l&St|r*C&Vt,o^=r,o=o<<13|o>>>19,o=o*5+3864292196):(g=n[B],g=g*c&St|g*h&Vt,g=g<<15|g>>>17,g=g*l&St|g*C&Vt,I^=g,I=I<<13|I>>>19,I=I*5+3864292196);switch(r=0,a){case 3:r^=t[s*4+2]<<16;case 2:r^=t[s*4+1]<<8;case 1:r^=t[s*4],r=r*c&St|r*h&Vt,r=r<<15|r>>>17,r=r*l&St|r*C&Vt,s&1?o^=r:I^=r}this.h1=o,this.h2=I}hexdigest(){let A=this.h1,t=this.h2;return A^=t>>>1,A=A*3981806797&St|A*36045&Vt,t=t*4283543511&St|((t<<16|A>>>16)*2950163797&St)>>>16,A^=t>>>1,A=A*444984403&St|A*60499&Vt,t=t*3301882366&St|((t<<16|A>>>16)*3120437893&St)>>>16,A^=t>>>1,(A>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}};function $g(e,A,t,i,s){let a=e;for(let n=0,r=A.length-1;n1e3&&(C=Math.max(C,E),f+=Q+2*1,E=0,Q=0),B.push({transform:S,x:E,y:f,w:w.width,h:w.height}),E+=w.width+2*1,Q=Math.max(Q,w.height)}let u=Math.max(C,E)+1,d=f+Q+1,x=new Uint8Array(u*d*4),p=u<<2;for(let D=0;D=0;)S[U-4]=S[U],S[U-3]=S[U+1],S[U-2]=S[U+2],S[U-1]=S[U+3],S[U+w]=S[U+w-4],S[U+w+1]=S[U+w-3],S[U+w+2]=S[U+w-2],S[U+w+3]=S[U+w-1],U-=p}let m={width:u,height:d};if(A.isOffscreenCanvasSupported){let D=new OffscreenCanvas(u,d);D.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(x.buffer),u,d),0,0),m.bitmap=D.transferToImageBitmap(),m.data=null}else m.kind=Ke.RGBA_32BPP,m.data=x;return r.splice(I,h*4,y.paintInlineImageXObjectGroup),g.splice(I,h*4,[m,B]),I+1});$g(Ms,[y.save,y.transform,y.paintImageMaskXObject,y.restore],null,function(A,t){let i=A.fnArray,s=A.iCurr-3,a=(t-s)%4;switch(a){case 0:return i[t]===y.save;case 1:return i[t]===y.transform;case 2:return i[t]===y.paintImageMaskXObject;case 3:return i[t]===y.restore}throw new Error(`iterateImageMaskGroup - invalid pos: ${a}`)},function(A,t){let n=A.fnArray,r=A.argsArray,g=A.iCurr,o=g-3,I=g-2,c=g-1,l=Math.floor((t-o)/4);if(l<10)return t-(t-o)%4;let h=!1,C,B,Q=r[c][0],E=r[I][0],f=r[I][1],u=r[I][2],d=r[I][3];if(f===u){h=!0,C=I+4;let x=c+4;for(let p=1;p=4&&s[r-4]===s[g]&&s[r-3]===s[o]&&s[r-2]===s[I]&&s[r-1]===s[c]&&a[r-4][0]===l&&a[r-4][1]===h&&(C++,B-=5);let Q=B+4;for(let E=1;E=i)break}if(s=(s||Ms)[A[t]],!s||Array.isArray(s)){t++;continue}if(n.iCurr=t,t++,s.checkFn&&!(0,s.checkFn)(n)){s=null;continue}a=s,s=null}this.state=s,this.match=a,this.lastProcessed=t}flush(){for(;this.match;){let A=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,A),this.match=null,this.state=null,this._optimize()}}reset(){this.state=null,this.match=null,this.lastProcessed=0}},Is=class{constructor(A=0,t){this._streamSink=t,this.fnArray=[],this.argsArray=[],this.optimizer=t&&!(A&st.OPLIST)?new ec(this):new Wr(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=t?null:Promise.resolve()}set isOffscreenCanvasSupported(A){this.optimizer.isOffscreenCanvasSupported=A}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(A,t){this.optimizer.push(A,t),this.weight++,this._streamSink&&(this.weight>=Is.CHUNK_SIZE?this.flush():this.weight>=Is.CHUNK_SIZE_ABOUT&&(A===y.restore||A===y.endText)&&this.flush())}addImageOps(A,t,i){i!==void 0&&this.addOp(y.beginMarkedContentProps,["OC",i]),this.addOp(A,t),i!==void 0&&this.addOp(y.endMarkedContent,[])}addDependency(A){this.dependencies.has(A)||(this.dependencies.add(A),this.addOp(y.dependency,[A]))}addDependencies(A){for(let t of A)this.addDependency(t)}addOpList(A){if(!(A instanceof Is)){k(\'addOpList - ignoring invalid "opList" parameter.\');return}for(let t of A.dependencies)this.dependencies.add(t);for(let t=0,i=A.length;ti&&(e=i),e}function uE(e,A,t,i,s,a){let n=s*a,r;A<=8?r=new Uint8Array(n):A<=16?r=new Uint16Array(n):r=new Uint32Array(n);let g=t/s,o=i/a,I,c,l,h=0,C,B=new Uint16Array(s),Q=t;for(I=0;I0&&Number.isInteger(i.height)&&i.height>0&&(i.width!==h||i.height!==C)&&(k("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),h=i.width,C=i.height),h<1||C<1)throw new v(`Invalid image width: ${h} or height: ${C}`);this.width=h,this.height=C,this.interpolate=I.get("I","Interpolate"),this.imageMask=I.get("IM","ImageMask")||!1,this.matte=I.get("Matte")||!1;let B=i.bitsPerComponent;if(!B&&(B=I.get("BPC","BitsPerComponent"),!B))if(this.imageMask)B=1;else throw new v(`Bits per component missing in image: ${this.imageMask}`);if(this.bpc=B,!this.imageMask){let f=I.getRaw("CS")||I.getRaw("ColorSpace"),u=!!f;if(u)(Q=this.jpxDecoderOptions)!=null&&Q.smaskInData&&(f=M.get("DeviceRGBA"));else if(this.jpxDecoderOptions)f=M.get("DeviceRGBA");else switch(i.numComps){case 1:f=M.get("DeviceGray");break;case 3:f=M.get("DeviceRGB");break;case 4:f=M.get("DeviceCMYK");break;default:throw new Error(`Images with ${i.numComps} color components not supported.`)}this.colorSpace=JA.parse({cs:f,xref:A,resources:s?t:null,pdfFunctionFactory:g,localColorSpaceCache:o}),this.numComps=this.colorSpace.numComps,this.jpxDecoderOptions&&(this.jpxDecoderOptions.numComponents=u?this.numComp:0,this.jpxDecoderOptions.isIndexedColormap=this.colorSpace.name==="Indexed")}if(this.decode=I.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,B)||r&&!JA.isDefaultDecode(this.decode,1))){this.needsDecode=!0;let f=(1<>3)*i,g=A.byteLength,o=r===g,I,c;if(s&&(!a||o)?I=A:a?(I=new Uint8Array(r),I.set(A),I.fill(255,g)):I=new Uint8Array(A),a)for(c=0;c>7&1,g[c+1]=h>>6&1,g[c+2]=h>>5&1,g[c+3]=h>>4&1,g[c+4]=h>>3&1,g[c+5]=h>>2&1,g[c+6]=h>>1&1,g[c+7]=h&1,c+=8;if(c>=1}}else{let C=0;for(h=0,c=0,l=n;c>B;Q<0?Q=0:Q>I&&(Q=I),g[c]=Q,h&=(1<r[f+1]){B=255;break}}g[c]=B}}else throw new v("Unknown mask format.");if(g)for(c=0,h=3,l=t*s;c>3,c=t&&at.needsToBeResized(i,s);if(this.colorSpace.name==="DeviceRGBA"){a.kind=Ke.RGBA_32BPP;let x=a.data=await this.getImageBytes(g*r*4,{});return t?c?at.createImage(a,!1):this.createBitmap(Ke.RGBA_32BPP,i,s,x):a}if(!A){let x;if(this.colorSpace.name==="DeviceGray"&&o===1?x=Ke.GRAYSCALE_1BPP:this.colorSpace.name==="DeviceRGB"&&o===8&&!this.needsDecode&&(x=Ke.RGB_24BPP),x&&!this.smask&&!this.mask&&i===r&&s===g){let p=await this.getImageBytes(g*I,{});if(t)return c?at.createImage({data:p,kind:x,width:i,height:s,interpolate:this.interpolate},this.needsDecode):this.createBitmap(x,r,g,p);if(a.kind=x,a.data=p,this.needsDecode){gt(x===Ke.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");let m=a.data;for(let D=0,S=m.length;D>3,r=await this.getImageBytes(s*n,{internal:!0}),g=this.getComponents(r),o,I;if(a===1){if(I=i*s,this.needsDecode)for(o=0;o0&&A.args[0].count++}var Hg=class{constructor(){this.reset()}check(){return++this.checkedl){let d="Image exceeded maximum allowed size and was removed.";if(this.options.ignoreErrors){k(d);return}throw new Error(d)}let h;g.has("OC")&&(h=await this.parseMarkedContentProps(g.get("OC"),A));let C=g.get("IM","ImageMask")||!1,B,Q;if(C){let d=g.get("I","Interpolate"),x=I+7>>3,p=t.getBytes(x*c),m=g.getArray("D","Decode");if(this.parsingType3Font){if(B=Pt.createRawMask({imgArray:p,width:I,height:c,imageIsFromDecodeStream:t instanceof Me,inverseDecode:(m==null?void 0:m[0])>0,interpolate:d}),B.cached=!!a,Q=[B],s.addImageOps(y.paintImageMaskXObject,Q,h),a){let S={fn:y.paintImageMaskXObject,args:Q,optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}if(B=await Pt.createMask({imgArray:p,width:I,height:c,imageIsFromDecodeStream:t instanceof Me,inverseDecode:(m==null?void 0:m[0])>0,interpolate:d,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported}),B.isSingleOpaquePixel){if(s.addImageOps(y.paintSolidColorImageMask,[],h),a){let S={fn:y.paintSolidColorImageMask,args:[],optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}let D=`mask_${this.idFactory.createObjId()}`;if(s.addDependency(D),B.dataLen=B.bitmap?B.width*B.height*4:B.data.length,this._sendImgData(D,B),Q=[{data:D,width:B.width,height:B.height,interpolate:B.interpolate,count:1}],s.addImageOps(y.paintImageMaskXObject,Q,h),a){let S={objId:D,fn:y.paintImageMaskXObject,args:Q,optionalContent:h};n.set(a,o,S),o&&this._regionalImageCache.set(null,o,S)}return}let E=200;if(i&&I+c25e4||g.has("SMask")||g.has("Mask")){let d=await this.handler.sendWithPromise("commonobj",[f,"CopyLocalImage",{imageRef:o}]);if(d){this.globalImageCache.setData(o,{objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h,byteSize:0}),this.globalImageCache.addByteSize(o,d);return}}}if(Pt.buildImage({xref:this.xref,res:A,image:t,isInline:i,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:r}).then(async d=>(B=await d.createImageData(!1,this.options.isOffscreenCanvasSupported),B.dataLen=B.bitmap?B.width*B.height*4:B.data.length,B.ref=o,u&&this.globalImageCache.addByteSize(o,B.dataLen),this._sendImgData(f,B,u))).catch(d=>(k(`Unable to decode image "${f}": "${d}".`),o&&this.globalImageCache.addDecodeFailed(o),this._sendImgData(f,null,u))),a){let d={objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h};n.set(a,o,d),o&&(this._regionalImageCache.set(null,o,d),u&&this.globalImageCache.setData(o,{objId:f,fn:y.paintImageXObject,args:Q,optionalContent:h,byteSize:0}))}}handleSMask(A,t,i,s,a,n){let r=A.get("G"),g={subtype:A.get("S").name,backdrop:A.get("BC")},o=A.get("TR");if(Do(o)){let I=this._pdfFunctionFactory.create(o),c=new Uint8Array(256),l=new Float32Array(1);for(let h=0;h<256;h++)l[0]=h/255,I(l,0,l,0),c[h]=l[0]*255|0;g.transferMap=c}return this.buildFormXObject(t,r,g,i,s,a.state.clone(),n)}handleTransferFunction(A){let t;if(Array.isArray(A))t=A;else if(Do(A))t=[A];else return null;let i=[],s=0,a=0;for(let n of t){let r=this.xref.fetchIfRef(n);if(s++,ye(r,"Identity")){i.push(null);continue}else if(!Do(r))return null;let g=this._pdfFunctionFactory.create(r),o=new Uint8Array(256),I=new Float32Array(1);for(let c=0;c<256;c++)I[0]=c/255,g(I,0,I,0),o[c]=I[0]*255|0;i.push(o),a++}return!(s===1||s===4)||a===0?null:i}handleTilingType(A,t,i,s,a,n,r,g){let o=new ze,I=F.merge({xref:this.xref,dictArray:[a.get("Resources"),i]});return this.getOperatorList({stream:s,task:r,resources:I,operatorList:o}).then(function(){let c=o.getIR(),l=lE(c,a,t);n.addDependencies(o.dependencies),n.addOp(A,l),a.objId&&g.set(null,a.objId,{operatorListIR:c,dict:a})}).catch(c=>{if(!(c instanceof ve)){if(this.options.ignoreErrors){k(`handleTilingType - ignoring pattern: "${c}".`);return}throw c}})}async handleSetFont(A,t,i,s,a,n,r=null,g=null){let o=(t==null?void 0:t[0])instanceof M?t[0].name:null,I=await this.loadFont(o,i,A,r,g);if(I.font.isType3Font)try{await I.loadType3Data(this,A,a),s.addDependencies(I.type3Dependencies)}catch(c){I=new is({loadedName:"g_font_error",font:new fa(`Type3 font load error: ${c}`),dict:I.font,evaluatorOptions:this.options})}return n.font=I.font,I.send(this.handler),I.loadedName}handleText(A,t){let i=t.font,s=i.charsToGlyphs(A);return i.data&&(t.textRenderingMode&PE.ADD_TO_PATH_FLAG||t.fillColorSpace.name==="Pattern"||i.disableFontFace||this.options.disableFontFace)&&Lt.buildFontPaths(i,s,this.handler,this.options),s}ensureStateFont(A){if(A.font)return;let t=new v("Missing setFont (Tf) operator before text rendering operator.");if(this.options.ignoreErrors){k(`ensureStateFont: "${t}".`);return}throw t}async setGState({resources:A,gState:t,operatorList:i,cacheKey:s,task:a,stateManager:n,localGStateCache:r,localColorSpaceCache:g}){let o=t.objId,I=!0,c=[],l=Promise.resolve();for(let h of t.getKeys()){let C=t.get(h);switch(h){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":c.push([h,C]);break;case"Font":I=!1,l=l.then(()=>this.handleSetFont(A,null,C[0],i,a,n.state).then(function(Q){i.addDependency(Q),c.push([h,[Q,C[1]]])}));break;case"BM":c.push([h,kf(C)]);break;case"SMask":if(ye(C,"None")){c.push([h,!1]);break}C instanceof F?(I=!1,l=l.then(()=>this.handleSMask(C,A,i,a,n,g)),c.push([h,!0])):k("Unsupported SMask type");break;case"TR":let B=this.handleTransferFunction(C);c.push([h,B]);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":PA("graphic state operator "+h);break;default:PA("Unknown graphic state operator "+h);break}}await l,c.length>0&&i.addOp(y.setGState,[c]),I&&r.set(s,o,c)}loadFont(A,t,i,s=null,a=null){var B;let n=async()=>new is({loadedName:"g_font_error",font:new fa(`Font "${A}" is not available.`),dict:t,evaluatorOptions:this.options}),r;if(t)t instanceof oA&&(r=t);else{let Q=i.get("Font");Q&&(r=Q.getRaw(A))}if(r){if((B=this.type3FontRefs)!=null&&B.has(r))return n();if(this.fontCache.has(r))return this.fontCache.get(r);try{t=this.xref.fetchIfRef(r)}catch(Q){k(`loadFont - lookup failed: "${Q}".`)}}if(!(t instanceof F)){if(!this.options.ignoreErrors&&!this.parsingType3Font)return k(`Font "${A}" is not available.`),n();k(`Font "${A}" is not available -- attempting to fallback to a default font.`),t=s||Lt.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);let{promise:g,resolve:o}=Promise.withResolvers(),I;try{I=this.preEvaluateFont(t),I.cssFontInfo=a}catch(Q){return k(`loadFont - preEvaluateFont failed: "${Q}".`),n()}let{descriptor:c,hash:l}=I,h=r instanceof oA,C;if(l&&c instanceof F){let Q=c.fontAliases||(c.fontAliases=Object.create(null));if(Q[l]){let E=Q[l].aliasRef;if(h&&E&&this.fontCache.has(E))return this.fontCache.putAlias(r,E),this.fontCache.get(r)}else Q[l]={fontID:this.idFactory.createFontId()};h&&(Q[l].aliasRef=r),C=Q[l].fontID}else C=this.idFactory.createFontId();return gt(C==null?void 0:C.startsWith("f"),\'The "fontID" must be (correctly) defined.\'),h?this.fontCache.put(r,g):(t.cacheKey=`cacheKey_${C}`,this.fontCache.put(t.cacheKey,g)),t.loadedName=`${this.idFactory.getDocId()}_${C}`,this.translateFont(I).then(Q=>{o(new is({loadedName:t.loadedName,font:Q,dict:t,evaluatorOptions:this.options}))}).catch(Q=>{k(`loadFont - translateFont failed: "${Q}".`),o(new is({loadedName:t.loadedName,font:new fa(Q instanceof Error?Q.message:Q),dict:t,evaluatorOptions:this.options}))}),g}buildPath(A,t,i,s=!1){let a=A.length-1;if(i||(i=[]),a<0||A.fnArray[a]!==y.constructPath){s&&(k(`Encountered path operator "${t}" inside of a text object.`),A.addOp(y.save,null));let n;switch(t){case y.rectangle:let r=i[0]+i[2],g=i[1]+i[3];n=[Math.min(i[0],r),Math.min(i[1],g),Math.max(i[0],r),Math.max(i[1],g)];break;case y.moveTo:case y.lineTo:n=[i[0],i[1],i[0],i[1]];break;default:n=[1/0,1/0,-1/0,-1/0];break}A.addOp(y.constructPath,[[t],i,n]),s&&A.addOp(y.restore,null)}else{let n=A.argsArray[a];n[0].push(t),n[1].push(...i);let r=n[2];switch(t){case y.rectangle:let g=i[0]+i[2],o=i[1]+i[3];r[0]=Math.min(r[0],i[0],g),r[1]=Math.min(r[1],i[1],o),r[2]=Math.max(r[2],i[0],g),r[3]=Math.max(r[3],i[1],o);break;case y.moveTo:case y.lineTo:r[0]=Math.min(r[0],i[0]),r[1]=Math.min(r[1],i[1]),r[2]=Math.max(r[2],i[0]),r[3]=Math.max(r[3],i[1]);break}}}parseColorSpace({cs:A,resources:t,localColorSpaceCache:i}){return JA.parseAsync({cs:A,xref:this.xref,resources:t,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:i}).catch(s=>{if(s instanceof ve)return null;if(this.options.ignoreErrors)return k(`parseColorSpace - ignoring ColorSpace: "${s}".`),null;throw s})}parseShading({shading:A,resources:t,localColorSpaceCache:i,localShadingPatternCache:s}){let a=s.get(A);if(a)return a;let n;try{n=YI.parseShading(A,this.xref,t,this._pdfFunctionFactory,i).getIR()}catch(r){if(r instanceof ve)return null;if(this.options.ignoreErrors)return k(`parseShading - ignoring shading: "${r}".`),s.set(A,null),null;throw r}return a=`pattern_${this.idFactory.createObjId()}`,this.parsingType3Font&&(a=`${this.idFactory.getDocId()}_type3_${a}`),s.set(A,a),this.parsingType3Font?this.handler.send("commonobj",[a,"Pattern",n]):this.handler.send("obj",[a,this.pageIndex,"Pattern",n]),a}handleColorN(A,t,i,s,a,n,r,g,o,I){let c=i.pop();if(c instanceof M){let l=a.getRaw(c.name),h=l instanceof oA&&o.getByRef(l);if(h)try{let B=s.base?s.base.getRgb(i,0):null,Q=lE(h.operatorListIR,h.dict,B);A.addOp(t,Q);return}catch(B){}let C=this.xref.fetchIfRef(l);if(C){let B=C instanceof KA?C.dict:C,Q=B.get("PatternType");if(Q===dE.TILING){let E=s.base?s.base.getRgb(i,0):null;return this.handleTilingType(t,E,n,C,B,A,r,o)}else if(Q===dE.SHADING){let E=B.get("Shading"),f=this.parseShading({shading:E,resources:n,localColorSpaceCache:g,localShadingPatternCache:I});if(f){let u=Ki(B.getArray("Matrix"),null);A.addOp(t,["Shading",f,u])}return}throw new v(`Unknown PatternType: ${Q}`)}}throw new v(`Unknown PatternName: ${c}`)}_parseVisibilityExpression(A,t,i){if(++t>10){k("Visibility expression is too deeply nested");return}let a=A.length,n=this.xref.fetchIfRef(A[0]);if(a<2||!(n instanceof M)){k("Invalid visibility expression");return}switch(n.name){case"And":case"Or":case"Not":i.push(n.name);break;default:k(`Invalid operator ${n.name} in visibility expression`);return}for(let r=1;r0)return{type:"OCMD",expression:g}}let r=i.get("OCGs");if(Array.isArray(r)||r instanceof F){let g=[];if(Array.isArray(r))for(let o of r)g.push(o.toString());else g.push(r.objId);return{type:s,ids:g,policy:i.get("P")instanceof M?i.get("P").name:null,expression:null}}else if(r instanceof oA)return{type:s,id:r.toString()}}return null}getOperatorList({stream:A,task:t,resources:i,operatorList:s,initialState:a=null,fallbackFontDict:n=null}){if(i||(i=F.empty),a||(a=new Or),!s)throw new Error(\'getOperatorList: missing "operatorList" parameter\');let r=this,g=this.xref,o=!1,I=new Hr,c=new Jr,l=new Yr,h=new OI,C=new Map,B=i.get("XObject")||F.empty,Q=i.get("Pattern")||F.empty,E=new Bs(a),f=new f0(A,g,E),u=new ts;function d(x){for(let p=0,m=f.savedStatesDepth;p0&&s.addOp(y.setGState,[fA]),V=null;continue}}D(new Promise(function(fA,CA){if(!AA)throw new v("GState must be referred to by name.");let N=i.get("ExtGState");if(!(N instanceof F))throw new v("ExtGState should be a dictionary.");let H=N.get(Z);if(!(H instanceof F))throw new v("GState should be a dictionary.");r.setGState({resources:i,gState:H,operatorList:s,cacheKey:Z,task:t,stateManager:E,localGStateCache:l,localColorSpaceCache:c}).then(fA,CA)}).catch(function(fA){if(!(fA instanceof ve)){if(r.options.ignoreErrors){k(`getOperatorList - ignoring ExtGState: "${fA}".`);return}throw fA}}));return;case y.moveTo:case y.lineTo:case y.curveTo:case y.curveTo2:case y.curveTo3:case y.closePath:case y.rectangle:r.buildPath(s,lA,V,o);continue;case y.markPoint:case y.markPointProps:case y.beginCompat:case y.endCompat:continue;case y.beginMarkedContentProps:if(!(V[0]instanceof M)){k(`Expected name for beginMarkedContentProps arg0=${V[0]}`),s.addOp(y.beginMarkedContentProps,["OC",null]);continue}if(V[0].name==="OC"){D(r.parseMarkedContentProps(V[1],i).then(fA=>{s.addOp(y.beginMarkedContentProps,["OC",fA])}).catch(fA=>{if(!(fA instanceof ve)){if(r.options.ignoreErrors){k(`getOperatorList - ignoring beginMarkedContentProps: "${fA}".`),s.addOp(y.beginMarkedContentProps,["OC",null]);return}throw fA}}));return}V=[V[0].name,V[1]instanceof F?V[1].get("MCID"):null];break;case y.beginMarkedContent:case y.endMarkedContent:default:if(V!==null){for(Y=0,U=V.length;Y{if(!(x instanceof ve)){if(this.options.ignoreErrors){k(`getOperatorList - ignoring errors during "${t.name}" task: "${x}".`),d();return}throw x}})}getTextContent({stream:A,task:t,resources:i,stateManager:s=null,includeMarkedContent:a=!1,sink:n,seenStyles:r=new Set,viewBox:g,lang:o=null,markedContentData:I=null,disableNormalization:c=!1,keepWhiteSpace:l=!1}){i||(i=F.empty),s||(s=new Bs(new tc)),a&&(I||(I={level:0}));let h={items:[],styles:Object.create(null),lang:o},C={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},B=[" "," "],Q=0;function E(X){let W=(Q+1)%2,G=B[Q]!==" "&&B[W]===" ";return B[Q]=X,Q=W,!l&&G}function f(){return!l&&B[Q]!==" "&&B[(Q+1)%2]===" "}function u(){B[0]=B[1]=" ",Q=0}let d=.102,x=.03,p=-.2,m=.102,D=.6,S=.25,w=this,Y=this.xref,U=[],K=null,Z=new Hr,AA=new Yr,gA=new f0(A,Y,s),R;function _({width:X=0,height:W=0,transform:G=C.prevTransform,fontName:BA=C.fontName}){h.items.push({str:" ",dir:"ltr",width:X,height:W,transform:G,fontName:BA,hasEOL:!1})}function tA(){let X=R.font,W=[R.fontSize*R.textHScale,0,0,R.fontSize,0,R.textRise];if(X.isType3Font&&(R.fontSize<=1||X.isCharBBox)&&!Ss(R.fontMatrix,E0)){let G=X.bbox[3]-X.bbox[1];G>0&&(W[3]*=G*R.fontMatrix[3])}return Ce.transform(R.ctm,Ce.transform(R.textMatrix,W))}function IA(){if(C.initialized)return C;let{font:X,loadedName:W}=R;if(!r.has(W)&&(r.add(W),h.styles[W]={fontFamily:X.fallbackName,ascent:X.ascent,descent:X.descent,vertical:X.vertical},w.options.fontExtraProperties&&X.systemFontInfo)){let iA=h.styles[W];iA.fontSubstitution=X.systemFontInfo.css,iA.fontSubstitutionLoadedName=X.systemFontInfo.loadedName}C.fontName=W;let G=C.transform=tA();X.vertical?(C.width=C.totalWidth=Math.hypot(G[0],G[1]),C.height=C.totalHeight=0,C.vertical=!0):(C.width=C.totalWidth=0,C.height=C.totalHeight=Math.hypot(G[2],G[3]),C.vertical=!1);let BA=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),uA=Math.hypot(R.ctm[0],R.ctm[1]);C.textAdvanceScale=uA*BA;let{fontSize:bA}=R;return C.trackingSpaceMin=bA*d,C.notASpace=bA*x,C.negativeSpaceMax=bA*p,C.spaceInFlowMin=bA*m,C.spaceInFlowMax=bA*D,C.hasEOL=!1,C.initialized=!0,C}function QA(){if(!C.initialized)return;let X=Math.hypot(R.textLineMatrix[0],R.textLineMatrix[1]),G=Math.hypot(R.ctm[0],R.ctm[1])*X;G!==C.textAdvanceScale&&(C.vertical?(C.totalHeight+=C.height*C.textAdvanceScale,C.height=0):(C.totalWidth+=C.width*C.textAdvanceScale,C.width=0),C.textAdvanceScale=G)}function V(X){let W=X.str.join("");c||(W=Ju(W));let G=yf(W,-1,X.vertical);return{str:G.str,dir:G.dir,width:Math.abs(X.totalWidth),height:Math.abs(X.totalHeight),transform:X.transform,fontName:X.fontName,hasEOL:X.hasEOL}}async function lA(X,W){let G=await w.loadFont(X,W,i);if(G.font.isType3Font)try{await G.loadType3Data(w,i,t)}catch(BA){}R.loadedName=G.loadedName,R.font=G.font,R.fontMatrix=G.font.fontMatrix||E0}function EA(X,W,G){let BA=Math.hypot(G[0],G[1]);return[(G[0]*X+G[1]*W)/BA,(G[2]*X+G[3]*W)/BA]}function fA(X){var yA;let W=tA(),G=W[4],BA=W[5];if((yA=R.font)!=null&&yA.vertical){if(Gg[2]||BA+Xg[3])return!1}else if(G+Xg[2]||BAg[3])return!1;if(!R.font||!C.prevTransform)return!0;let uA=C.prevTransform[4],bA=C.prevTransform[5];if(uA===G&&bA===BA)return!0;let iA=-1;switch(W[0]&&W[1]===0&&W[2]===0?iA=W[0]>0?0:180:W[1]&&W[0]===0&&W[3]===0&&(iA=W[1]>0?90:270),iA){case 0:break;case 90:[G,BA]=[BA,G],[uA,bA]=[bA,uA];break;case 180:[G,BA,uA,bA]=[-G,-BA,-uA,-bA];break;case 270:[G,BA]=[-BA,-G],[uA,bA]=[-bA,-uA];break;default:[G,BA]=EA(G,BA,W),[uA,bA]=EA(uA,bA,C.prevTransform)}if(R.font.vertical){let aA=(bA-BA)/C.textAdvanceScale,DA=G-uA,UA=Math.sign(C.height);return aA.5*C.width?(N(),!0):(u(),q(),!0):Math.abs(DA)>C.width?(N(),!0):(aA<=UA*C.notASpace&&u(),aA<=UA*C.trackingSpaceMin?f()?(u(),q(),_({height:Math.abs(aA)})):C.height+=aA:H(aA,C.prevTransform,UA)||(C.str.length===0?(u(),_({height:Math.abs(aA)})):C.height+=aA),Math.abs(DA)>C.width*S&&q(),!0)}let wA=(G-uA)/C.textAdvanceScale,FA=BA-bA,cA=Math.sign(C.width);return wA.5*C.height?(N(),!0):(u(),q(),!0):Math.abs(FA)>C.height?(N(),!0):(wA<=cA*C.notASpace&&u(),wA<=cA*C.trackingSpaceMin?f()?(u(),q(),_({width:Math.abs(wA)})):C.width+=wA:H(wA,C.prevTransform,cA)||(C.str.length===0?(u(),_({width:Math.abs(wA)})):C.width+=wA),Math.abs(FA)>C.height*S&&q(),!0)}function CA({chars:X,extraSpacing:W}){let G=R.font;if(!X){let bA=R.charSpacing+W;bA&&(G.vertical?R.translateTextMatrix(0,-bA):R.translateTextMatrix(bA*R.textHScale,0)),l&&fA(0);return}let BA=G.charsToGlyphs(X),uA=R.fontMatrix[0]*R.fontSize;for(let bA=0,iA=BA.length;bA0){let pA=U.join("");U.length=0,CA({chars:pA,extraSpacing:0})}break;case y.showText:if(!s.state.font){w.ensureStateFont(s.state);continue}CA({chars:iA[0],extraSpacing:0});break;case y.nextLineShowText:if(!s.state.font){w.ensureStateFont(s.state);continue}R.carriageReturn(),CA({chars:iA[0],extraSpacing:0});break;case y.nextLineSetSpacingShowText:if(!s.state.font){w.ensureStateFont(s.state);continue}R.wordSpacing=iA[0],R.charSpacing=iA[1],R.carriageReturn(),CA({chars:iA[2],extraSpacing:0});break;case y.paintXObject:q(),K||(K=i.get("XObject")||F.empty);var cA=iA[0]instanceof M,yA=iA[0].name;if(cA&&Z.getByName(yA))break;BA(new Promise(function(pA,TA){if(!cA)throw new v("XObject must be referred to by name.");let LA=K.getRaw(yA);if(LA instanceof oA){if(Z.getByRef(LA)){pA();return}if(w.globalImageCache.getData(LA,w.pageIndex)){pA();return}LA=Y.fetch(LA)}if(!(LA instanceof KA))throw new v("XObject should be a stream");let WA=LA.dict.get("Subtype");if(!(WA instanceof M))throw new v("XObject should have a Name subtype");if(WA.name!=="Form"){Z.set(yA,LA.dict.objId,!0),pA();return}let re=s.state.clone(),De=new Bs(re),Dn=Ki(LA.dict.getArray("Matrix"),null);Dn&&De.transform(Dn),T();let kn={enqueueInvoked:!1,enqueue(Sn,co){this.enqueueInvoked=!0,n.enqueue(Sn,co)},get desiredSize(){return n.desiredSize},get ready(){return n.ready}};w.getTextContent({stream:LA,task:t,resources:LA.dict.get("Resources")||i,stateManager:De,includeMarkedContent:a,sink:kn,seenStyles:r,viewBox:g,lang:o,markedContentData:I,disableNormalization:c,keepWhiteSpace:l}).then(function(){kn.enqueueInvoked||Z.set(yA,LA.dict.objId,!0),pA()},TA)}).catch(function(pA){if(!(pA instanceof ve)){if(w.options.ignoreErrors){k(`getTextContent - ignoring XObject: "${pA}".`);return}throw pA}}));return;case y.setGState:if(cA=iA[0]instanceof M,yA=iA[0].name,cA&&AA.getByName(yA))break;BA(new Promise(function(pA,TA){if(!cA)throw new v("GState must be referred to by name.");let LA=i.get("ExtGState");if(!(LA instanceof F))throw new v("ExtGState should be a dictionary.");let WA=LA.get(yA);if(!(WA instanceof F))throw new v("GState should be a dictionary.");let re=WA.get("Font");if(!re){AA.set(yA,WA.objId,!0),pA();return}q(),R.fontName=null,R.fontSize=re[1],lA(null,re[0]).then(pA,TA)}).catch(function(pA){if(!(pA instanceof ve)){if(w.options.ignoreErrors){k(`getTextContent - ignoring ExtGState: "${pA}".`);return}throw pA}}));return;case y.beginMarkedContent:q(),a&&(I.level++,h.items.push({type:"beginMarkedContent",tag:iA[0]instanceof M?iA[0].name:null}));break;case y.beginMarkedContentProps:if(q(),a){I.level++;let pA=null;iA[1]instanceof F&&(pA=iA[1].get("MCID")),h.items.push({type:"beginMarkedContentProps",id:Number.isInteger(pA)?`${w.idFactory.getPageObjId()}_mc${pA}`:null,tag:iA[0]instanceof M?iA[0].name:null})}break;case y.endMarkedContent:if(q(),a){if(I.level===0)break;I.level--,h.items.push({type:"endMarkedContent"})}break;case y.restore:aA&&(aA.font!==R.font||aA.fontSize!==R.fontSize||aA.fontName!==R.fontName)&&q();break}if(h.items.length>=n.desiredSize){bA=!0;break}}if(bA){BA(xE);return}q(),T(),W()}).catch(X=>{if(!(X instanceof ve)){if(this.options.ignoreErrors){k(`getTextContent - ignoring errors during "${t.name}" task: "${X}".`),q(),T();return}throw X}})}async extractDataStructures(A,t){let i=this.xref,s,a=this.readToUnicode(t.toUnicode);if(t.composite){let l=A.get("CIDSystemInfo");l instanceof F&&(t.cidSystemInfo={registry:jA(l.get("Registry")),ordering:jA(l.get("Ordering")),supplement:l.get("Supplement")});try{let h=A.get("CIDToGIDMap");h instanceof KA&&(s=h.getBytes())}catch(h){if(!this.options.ignoreErrors)throw h;k(`extractDataStructures - ignoring CIDToGIDMap data: "${h}".`)}}let n=[],r=null,g;if(A.has("Encoding")){if(g=A.get("Encoding"),g instanceof F){if(r=g.get("BaseEncoding"),r=r instanceof M?r.name:null,g.has("Differences")){let l=g.get("Differences"),h=0;for(let C of l){let B=i.fetchIfRef(C);if(typeof B=="number")h=B;else if(B instanceof M)n[h++]=B.name;else throw new v(`Invalid entry in \'Differences\' array: ${B}`)}}}else if(g instanceof M)r=g.name;else{let l="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new v(l);k(l)}r!=="MacRomanEncoding"&&r!=="MacExpertEncoding"&&r!=="WinAnsiEncoding"&&(r=null)}let o=!t.file||t.isInternalFont,I=DI()[t.name];if(r&&o&&I&&(r=null),r)t.defaultEncoding=Ua(r);else{let l=!!(t.flags&Ft.Symbolic),h=!!(t.flags&Ft.Nonsymbolic);g=fi,t.type==="TrueType"&&!h&&(g=Ga),(l||I)&&(g=c1,o&&(/Symbol/i.test(t.name)?g=l1:/Dingbats/i.test(t.name)?g=h1:/Wingdings/i.test(t.name)&&(g=Ga))),t.defaultEncoding=g}t.differences=n,t.baseEncodingName=r,t.hasEncoding=!!r||n.length>0,t.dict=A,t.toUnicode=await a;let c=await this.buildToUnicode(t);return t.toUnicode=c,s&&(t.cidToGidMap=this.readCidToGidMap(s,c)),t}_simpleFontToUnicode(A,t=!1){gt(!A.composite,"Must be a simple font.");let i=[],s=A.defaultEncoding.slice(),a=A.baseEncodingName,n=A.differences;for(let g in n){let o=n[g];o!==".notdef"&&(s[g]=o)}let r=Ai();for(let g in s){let o=s[g];if(o==="")continue;let I=r[o];if(I!==void 0){i[g]=String.fromCharCode(I);continue}let c=0;switch(o[0]){case"G":o.length===3&&(c=parseInt(o.substring(1),16));break;case"g":o.length===5&&(c=parseInt(o.substring(1),16));break;case"C":case"c":if(o.length>=3&&o.length<=4){let l=o.substring(1);if(t){c=parseInt(l,16);break}if(c=+l,Number.isNaN(c)&&Number.isInteger(parseInt(l,16)))return this._simpleFontToUnicode(A,!0)}break;case"u":I=Us(o,r),I!==-1&&(c=I);break;default:switch(o){case"f_h":case"f_t":case"T_h":i[g]=o.replaceAll("_","");continue}break}if(c>0&&c<=1114111&&Number.isInteger(c)){if(a&&c===+g){let l=Ua(a);if(l&&(o=l[g])){i[g]=String.fromCharCode(r[o]);continue}}i[g]=String.fromCodePoint(c)}}return i}async buildToUnicode(A){var t,i;if(A.hasIncludedToUnicodeMap=((t=A.toUnicode)==null?void 0:t.length)>0,A.hasIncludedToUnicodeMap)return!A.composite&&A.hasEncoding&&(A.fallbackToUnicode=this._simpleFontToUnicode(A)),A.toUnicode;if(!A.composite)return new B0(this._simpleFontToUnicode(A));if(A.composite&&(A.cMap.builtInCMap&&!(A.cMap instanceof Wi)||((i=A.cidSystemInfo)==null?void 0:i.registry)==="Adobe"&&(A.cidSystemInfo.ordering==="GB1"||A.cidSystemInfo.ordering==="CNS1"||A.cidSystemInfo.ordering==="Japan1"||A.cidSystemInfo.ordering==="Korea1"))){let{registry:s,ordering:a}=A.cidSystemInfo,n=M.get(`${s}-${a}-UCS2`),r=await es.create({encoding:n,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),g=[],o=[];return A.cMap.forEach(function(I,c){if(c>65535)throw new v("Max size of CID is 65,535");let l=r.lookup(c);if(l){o.length=0;for(let h=0,C=l.length;h>1;n===0&&!t.has(r)||(i[r]=n)}return i}extractWidths(A,t,i){let s=this.xref,a=[],n=0,r=[],g;if(i.composite){let c=A.get("DW");n=typeof c=="number"?Math.ceil(c):1e3;let l=A.get("W");if(Array.isArray(l))for(let h=0,C=l.length;h{let E=o.get(Q),f=new ze;return s.getOperatorList({stream:E,task:i,resources:I,operatorList:f}).then(()=>{f.fnArray[0]===y.setCharWidthAndBounds&&this._removeType3ColorOperators(f,B),c[Q]=f.getIR();for(let u of f.dependencies)r.add(u)}).catch(function(u){k(`Type3 font resource "${Q}" is not available.`);let d=new ze;c[Q]=d.getIR()})});return this.type3Loaded=g.then(()=>{n.charProcOperatorList=c,this._bbox&&(n.isCharBBox=!0,n.bbox=this._bbox)}),this.type3Loaded}_removeType3ColorOperators(A,t=NaN){let i=Ce.normalizeRect(A.argsArray[0].slice(2)),s=i[2]-i[0],a=i[3]-i[1],n=Math.hypot(s,a);s===0||a===0?(A.fnArray.splice(0,1),A.argsArray.splice(0,1)):(t===0||Math.round(n/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],i[0]),this._bbox[1]=Math.min(this._bbox[1],i[1]),this._bbox[2]=Math.max(this._bbox[2],i[2]),this._bbox[3]=Math.max(this._bbox[3],i[3]));let r=0,g=A.length;for(;r=y.moveTo&&n<=y.endPath,a.variableArgs)g>r&&PA(`Command ${s}: expected [0, ${r}] args, but received ${g} args.`);else{if(g!==r){let o=this.nonProcessedArgs;for(;g>r;)o.push(t.shift()),g--;for(;gba.MAX_INVALID_PATH_OPS)throw new v(`Invalid ${o}`);k(`Skipping ${o}`),t!==null&&(t.length=0);continue}}return this.preprocessCommand(n,t),A.fn=n,A.args=t,!0}if(i===Ge)return!1;if(i!==null&&(t===null&&(t=[]),t.push(i),t.length>33))throw new v("Too many arguments")}}preprocessCommand(A,t){switch(A|0){case y.save:this.stateManager.save();break;case y.restore:this.stateManager.restore();break;case y.transform:this.stateManager.transform(t);break}}},f0=ba;et(f0,"MAX_INVALID_PATH_OPS",10);var ic=class extends f0{constructor(A){super(new It(A))}parse(){let A={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;A.args.length=0,!!this.read(A);){if(this.savedStatesDepth!==0)continue;let{fn:i,args:s}=A;switch(i|0){case y.setFont:let[a,n]=s;a instanceof M&&(t.fontName=a.name),typeof n=="number"&&n>0&&(t.fontSize=n);break;case y.setFillRGBColor:JA.singletons.rgb.getRgbItem(s,0,t.fontColor,0);break;case y.setFillGray:JA.singletons.gray.getRgbItem(s,0,t.fontColor,0);break;case y.setFillCMYKColor:JA.singletons.cmyk.getRgbItem(s,0,t.fontColor,0);break}}}catch(i){k(`parseDefaultAppearance - ignoring errors: "${i}".`)}return t}};function Q1(e){return new ic(e).parse()}var sc=class extends f0{constructor(A,t,i){var s;super(A),this.stream=A,this.evaluatorOptions=t,this.xref=i,this.resources=(s=A.dict)==null?void 0:s.get("Resources")}parse(){let A={fn:0,args:[]},t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:JA.singletons.gray},i=!1,s=[];try{for(;A.args.length=0,!(i||!this.read(A));){let{fn:a,args:n}=A;switch(a|0){case y.save:s.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case y.restore:t=s.pop()||t;break;case y.setTextMatrix:t.scaleFactor*=Math.hypot(n[0],n[1]);break;case y.setFont:let[r,g]=n;r instanceof M&&(t.fontName=r.name),typeof g=="number"&&g>0&&(t.fontSize=g*t.scaleFactor);break;case y.setFillColorSpace:t.fillColorSpace=JA.parse({cs:n[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:this._localColorSpaceCache});break;case y.setFillColor:t.fillColorSpace.getRgbItem(n,0,t.fontColor,0);break;case y.setFillRGBColor:JA.singletons.rgb.getRgbItem(n,0,t.fontColor,0);break;case y.setFillGray:JA.singletons.gray.getRgbItem(n,0,t.fontColor,0);break;case y.setFillCMYKColor:JA.singletons.cmyk.getRgbItem(n,0,t.fontColor,0);break;case y.showText:case y.showSpacedText:case y.nextLineShowText:case y.nextLineSetSpacingShowText:i=!0;break}}}catch(a){k(`parseAppearanceStream - ignoring errors: "${a}".`)}return this.stream.reset(),delete t.scaleFactor,delete t.fillColorSpace,t}get _localColorSpaceCache(){return nA(this,"_localColorSpaceCache",new Jr)}get _pdfFunctionFactory(){let A=new Kr({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported});return nA(this,"_pdfFunctionFactory",A)}};function R9(e,A,t){return new sc(e,A,t).parse()}function mi(e,A){if(e[0]===e[1]&&e[1]===e[2]){let t=e[0]/255;return`${Ae(t)} ${A?"g":"G"}`}return Array.from(e,t=>Ae(t/255)).join(" ")+` ${A?"rg":"RG"}`}function N9({fontSize:e,fontName:A,fontColor:t}){return`/${o1(A)} ${e} Tf ${mi(t,!0)}`}var Ut=class{constructor(A,t){this.xref=A,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=t;let i=new OffscreenCanvas(1,1);this.ctxMeasure=i.getContext("2d",{willReadFrequently:!0}),Ut._fontNameId||(Ut._fontNameId=1),this.fontName=M.get(`InvalidPDFjsFont_${t}_${Ut._fontNameId++}`)}get fontDescriptorRef(){if(!Ut._fontDescriptorRef){let A=new F(this.xref);A.set("Type",M.get("FontDescriptor")),A.set("FontName",this.fontName),A.set("FontFamily","MyriadPro Regular"),A.set("FontBBox",[0,0,0,0]),A.set("FontStretch",M.get("Normal")),A.set("FontWeight",400),A.set("ItalicAngle",0),Ut._fontDescriptorRef=this.xref.getNewPersistentRef(A)}return Ut._fontDescriptorRef}get descendantFontRef(){let A=new F(this.xref);A.set("BaseFont",this.fontName),A.set("Type",M.get("Font")),A.set("Subtype",M.get("CIDFontType0")),A.set("CIDToGIDMap",M.get("Identity")),A.set("FirstChar",this.firstChar),A.set("LastChar",this.lastChar),A.set("FontDescriptor",this.fontDescriptorRef),A.set("DW",1e3);let t=[],i=[...this.widths.entries()].sort(),s=null,a=null;for(let[r,g]of i){if(!s){s=r,a=[g];continue}r===s+a.length?a.push(g):(t.push(s,a),s=r,a=[g])}s&&t.push(s,a),A.set("W",t);let n=new F(this.xref);return n.set("Ordering","Identity"),n.set("Registry","Adobe"),n.set("Supplement",0),A.set("CIDSystemInfo",n),this.xref.getNewPersistentRef(A)}get baseFontRef(){let A=new F(this.xref);return A.set("BaseFont",this.fontName),A.set("Type",M.get("Font")),A.set("Subtype",M.get("Type0")),A.set("Encoding",M.get("Identity-H")),A.set("DescendantFonts",[this.descendantFontRef]),A.set("ToUnicode",M.get("Identity-H")),this.xref.getNewPersistentRef(A)}get resources(){let A=new F(this.xref),t=new F(this.xref);return t.set(this.fontName.name,this.baseFontRef),A.set("Font",t),A}_createContext(){return this.widths=new Map,this.ctxMeasure.font=`1000px ${this.fontFamily}`,this.ctxMeasure}createFontResources(A){let t=this._createContext();for(let i of A.split(/\\r\\n?|\\n/))for(let s of i.split("")){let a=s.charCodeAt(0);if(this.widths.has(a))continue;let n=t.measureText(s),r=Math.ceil(n.width);this.widths.set(a,r),this.firstChar=Math.min(a,this.firstChar),this.lastChar=Math.max(a,this.lastChar)}return this.resources}static getFirstPositionInfo(A,t,i){let[s,a,n,r]=A,g=n-s,o=r-a;t%180!==0&&([g,o]=[o,g]);let I=Qi*i,c=Cr*i;return{coords:[0,o+c-I],bbox:[0,0,g,o],matrix:t!==0?xr(t,o,I):void 0}}createAppearance(A,t,i,s,a,n){let r=this._createContext(),g=[],o=-1/0;for(let K of A.split(/\\r\\n?|\\n/)){g.push(K);let Z=r.measureText(K).width;o=Math.max(o,Z);for(let AA of Wu(K)){let gA=String.fromCodePoint(AA),R=this.widths.get(AA);if(R===void 0){let _=r.measureText(gA);R=Math.ceil(_.width),this.widths.set(AA,R),this.firstChar=Math.min(AA,this.firstChar),this.lastChar=Math.max(AA,this.lastChar)}}}o*=s/1e3;let[I,c,l,h]=t,C=l-I,B=h-c;i%180!==0&&([C,B]=[B,C]);let Q=1;o>C&&(Q=C/o);let E=1,f=Qi*s,u=Cr*s,d=f*g.length;d>B&&(E=B/d);let x=Math.min(Q,E),p=s*x,m=["q",`0 0 ${Ae(C)} ${Ae(B)} re W n`,"BT",`1 0 0 1 0 ${Ae(B+u)} Tm 0 Tc ${mi(a,!0)}`,`/${this.fontName.name} ${Ae(p)} Tf`],{resources:D}=this;if(n=typeof n=="number"&&n>=0&&n<=1?n:1,n!==1){m.push("/R0 gs");let K=new F(this.xref),Z=new F(this.xref);Z.set("ca",n),Z.set("CA",n),Z.set("Type",M.get("ExtGState")),K.set("R0",Z),D.set("ExtGState",K)}let S=Ae(f);for(let K of g)m.push(`0 -${S} Td <${ju(K)}> Tj`);m.push("ET","Q");let w=m.join(`\n`),Y=new F(this.xref);if(Y.set("Subtype",M.get("Form")),Y.set("Type",M.get("XObject")),Y.set("BBox",[0,0,C,B]),Y.set("Length",w.length),Y.set("Resources",D),i){let K=xr(i,C,B);Y.set("Matrix",K)}let U=new It(w);return U.dict=Y,U}},Zr=class{constructor(A,t,i){this.root=A,this.xref=t,this._type=i}getAll(){let A=new Map;if(!this.root)return A;let t=this.xref,i=new be;i.put(this.root);let s=[this.root];for(;s.length>0;){let a=t.fetchIfRef(s.shift());if(!(a instanceof F))continue;if(a.has("Kids")){let r=a.get("Kids");if(!Array.isArray(r))continue;for(let g of r){if(i.has(g))throw new v(`Duplicate entry in "${this._type}" tree.`);s.push(g),i.put(g)}continue}let n=a.get(this._type);if(Array.isArray(n))for(let r=0,g=n.length;ra)return k(`Search depth limit reached for "${this._type}" tree.`),null;let r=i.get("Kids");if(!Array.isArray(r))return null;let g=0,o=r.length-1;for(;g<=o;){let I=g+o>>1,c=t.fetchIfRef(r[I]),l=c.get("Limits");if(At.fetchIfRef(l[1]))g=I+1;else{i=c;break}}if(g>o)return null}let n=i.get(this._type);if(Array.isArray(n)){let r=0,g=n.length-2;for(;r<=g;){let o=r+g>>1,I=o+(o&1),c=t.fetchIfRef(n[I]);if(Ac)r=I+2;else return t.fetchIfRef(n[I+1])}}return null}},Fi=class extends Zr{constructor(A,t){super(A,t,"Names")}},va=class extends Zr{constructor(A,t){super(A,t,"Nums")}};function E1(){L2(),vu(),A2(),hs.cleanup()}function mE(e){return e instanceof F?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}function G9(e){return e.substring(e.lastIndexOf("/")+1)}var Qn,qa=class{constructor(A,t,i=!1){HA(this,Qn,!1);A instanceof F&&(this.xref=t,this.root=A,A.has("FS")&&(this.fs=A.get("FS")),A.has("RF")&&k("Related file specifications are not supported"),i||(A.has("EF")?_s(this,Qn,!0):k("Non-embedded file specifications are not supported")))}get filename(){let A="",t=mE(this.root);return t&&typeof t=="string"&&(A=jA(t).replaceAll("\\\\\\\\","\\\\").replaceAll("\\\\/","/").replaceAll("\\\\","/")),nA(this,"filename",A||"unnamed")}get content(){var t;if(!ne(this,Qn))return null;this._contentRef||(this._contentRef=mE((t=this.root)==null?void 0:t.get("EF")));let A=null;if(this._contentRef){let i=this.xref.fetchIfRef(this._contentRef);i instanceof KA?A=i.getBytes():k("Embedded file specification points to non-existing/invalid content")}else k("Embedded file specification does not have any content");return A}get description(){var i;let A="",t=(i=this.root)==null?void 0:i.get("Desc");return t&&typeof t=="string"&&(A=jA(t)),nA(this,"description",A)}get serializable(){return{rawFilename:this.filename,filename:G9(this.filename),content:this.content,description:this.description}}};Qn=new WeakMap;var ht={NoError:0,EndOfDocument:-1,UnterminatedCdat:-2,UnterminatedXmlDeclaration:-3,UnterminatedDoctypeDeclaration:-4,UnterminatedComment:-5,MalformedElement:-6,OutOfMemory:-7,UnterminatedAttributeValue:-8,UnterminatedElement:-9,ElementNeverBegun:-10};function $0(e,A){let t=e[A];return t===" "||t===`\n`||t==="\\r"||t===" "}function U9(e){for(let A=0,t=e.length;A{if(i.substring(0,2)==="#x")return String.fromCodePoint(parseInt(i.substring(2),16));if(i.substring(0,1)==="#")return String.fromCodePoint(parseInt(i.substring(1),10));switch(i){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return\'"\';case"apos":return"\'"}return this.onResolveEntity(i)})}_parseContent(A,t){let i=[],s=t;function a(){for(;s"&&A[s]!=="/";)++s;let n=A.substring(t,s);for(a();s"&&A[s]!=="/"&&A[s]!=="?";){a();let r="",g="";for(;s"&&A[i]!=="?"&&A[i]!=="/";)++i;let a=A.substring(t,i);s();let n=i;for(;i");)++i;let r=A.substring(n,i);return{name:a,value:r,parsed:i-t}}parseXml(A){let t=0;for(;t",s),n<0){this.onError(ht.UnterminatedElement);return}this.onEndElement(A.substring(s,n)),s=n+1;break;case"?":++s;let r=this._parseProcessingInstruction(A,s);if(A.substring(s+r.parsed,s+r.parsed+2)!=="?>"){this.onError(ht.UnterminatedXmlDeclaration);return}this.onPi(r.name,r.value),s+=r.parsed+2;break;case"!":if(A.substring(s+1,s+3)==="--"){if(n=A.indexOf("-->",s+3),n<0){this.onError(ht.UnterminatedComment);return}this.onComment(A.substring(s+3,n)),s=n+3}else if(A.substring(s+1,s+8)==="[CDATA["){if(n=A.indexOf("]]>",s+8),n<0){this.onError(ht.UnterminatedCdat);return}this.onCdata(A.substring(s+8,n)),s=n+3}else if(A.substring(s+1,s+8)==="DOCTYPE"){let I=A.indexOf("[",s+8),c=!1;if(n=A.indexOf(">",s+8),n<0){this.onError(ht.UnterminatedDoctypeDeclaration);return}if(I>0&&n>I){if(n=A.indexOf("]>",s+8),n<0){this.onError(ht.UnterminatedDoctypeDeclaration);return}c=!0}let l=A.substring(s+8,n+(c?1:0));this.onDoctype(l),s=n+(c?2:1)}else{this.onError(ht.MalformedElement);return}break;default:let g=this._parseContent(A,s);if(g===null){this.onError(ht.MalformedElement);return}let o=!1;if(A.substring(s+g.parsed,s+g.parsed+2)==="/>")o=!0;else if(A.substring(s+g.parsed,s+g.parsed+1)!==">"){this.onError(ht.UnterminatedElement);return}this.onBeginElement(g.name,g.attributes,o),s+=g.parsed+(o?2:1);break}}else{for(;s0}searchNode(A,t){var n;if(t>=A.length)return this;let i=A[t];if(i.name.startsWith("#")&&t0)s.push([a,0]),a=a.childNodes[0];else{if(s.length===0)return null;for(;s.length!==0;){let[r,g]=s.pop(),o=g+1;if(o");for(let t of this.childNodes)t.dump(A);A.push(``)}else this.nodeValue?A.push(`>${ls(this.nodeValue)}`):A.push("/>")}},Ls=class extends jr{constructor({hasAttributes:A=!1,lowerCaseName:t=!1}){super(),this._currentFragment=null,this._stack=null,this._errorCode=ht.NoError,this._hasAttributes=A,this._lowerCaseName=t}parseFromString(A){if(this._currentFragment=[],this._stack=[],this._errorCode=ht.NoError,this.parseXml(A),this._errorCode!==ht.NoError)return;let[t]=this._currentFragment;if(t)return{documentElement:t}}onText(A){if(U9(A))return;let t=new u0("#text",A);this._currentFragment.push(t)}onCdata(A){let t=new u0("#text",A);this._currentFragment.push(t)}onBeginElement(A,t,i){this._lowerCaseName&&(A=A.toLowerCase());let s=new u0(A);s.childNodes=[],this._hasAttributes&&(s.attributes=t),this._currentFragment.push(s),!i&&(this._stack.push(this._currentFragment),this._currentFragment=s.childNodes)}onEndElement(A){this._currentFragment=this._stack.pop()||[];let t=this._currentFragment.at(-1);if(!t)return null;for(let i of t.childNodes)i.parentNode=t;return t}onError(A){this._errorCode=A}},ac=class{constructor(A){A=this._repair(A);let i=new Ls({lowerCaseName:!0}).parseFromString(A);this._metadataMap=new Map,this._data=A,i&&this._parse(i)}_repair(A){return A.replace(/^[^<]+/,"").replaceAll(/>\\\\376\\\\377([^<]+)/g,function(t,i){let s=i.replaceAll(/\\\\([0-3])([0-7])([0-7])/g,function(n,r,g,o){return String.fromCharCode(r*64+g*8+o*1)}).replaceAll(/&(amp|apos|gt|lt|quot);/g,function(n,r){switch(r){case"amp":return"&";case"apos":return"\'";case"gt":return">";case"lt":return"<";case"quot":return\'"\'}throw new Error(`_repair: ${r} isn\'t defined.`)}),a=[">"];for(let n=0,r=s.length;n=32&&g<127&&g!==60&&g!==62&&g!==38?a.push(String.fromCharCode(g)):a.push("&#x"+(65536+g).toString(16).substring(1)+";")}return a.join("")})}_getSequence(A){let t=A.nodeName;return t!=="rdf:bag"&&t!=="rdf:seq"&&t!=="rdf:alt"?null:A.childNodes.filter(i=>i.nodeName==="rdf:li")}_parseArray(A){if(!A.hasChildNodes())return;let[t]=A.childNodes,i=this._getSequence(t)||[];this._metadataMap.set(A.nodeName,i.map(s=>s.textContent.trim()))}_parse(A){let t=A.documentElement;if(t.nodeName!=="rdf:rdf")for(t=t.firstChild;t&&t.nodeName!=="rdf:rdf";)t=t.nextSibling;if(!(!t||t.nodeName!=="rdf:rdf"||!t.hasChildNodes())){for(let i of t.childNodes)if(i.nodeName==="rdf:description")for(let s of i.childNodes){let a=s.nodeName;switch(a){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(s);continue}this._metadataMap.set(a,s.textContent.trim())}}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}},pE=512,nc=class extends Me{constructor(A,t,i){super(t),this.str=A,this.dict=A.dict,this.decrypt=i,this.nextChunk=null,this.initialized=!1}readBlock(){var r;let A;if(this.initialized?A=this.nextChunk:(A=this.str.getBytes(pE),this.initialized=!0),!A||A.length===0){this.eof=!0;return}this.nextChunk=this.str.getBytes(pE);let t=((r=this.nextChunk)==null?void 0:r.length)>0,i=this.decrypt;A=i(A,!t);let s=this.bufferLength,a=s+A.length;this.ensureBuffer(a).set(A,s),this.bufferLength=a}},ci=class{constructor(A){this.a=0,this.b=0;let t=new Uint8Array(256),i=A.length;for(let s=0;s<256;++s)t[s]=s;for(let s=0,a=0;s<256;++s){let n=t[s];a=a+n+A[s%i]&255,t[s]=t[a],t[a]=n}this.s=t}encryptBlock(A){let t=this.a,i=this.b,s=this.s,a=A.length,n=new Uint8Array(a);for(let r=0;r>5&255,l[h++]=n>>13&255,l[h++]=n>>21&255,l[h++]=n>>>29&255,l[h++]=0,l[h++]=0,l[h++]=0;let Q=new Int32Array(16);for(h=0;h>>32-S)|0,E=m}r=r+E|0,g=g+f|0,o=o+u|0,I=I+d|0}return new Uint8Array([r&255,r>>8&255,r>>16&255,r>>>24&255,g&255,g>>8&255,g>>16&255,g>>>24&255,o&255,o>>8&255,o>>16&255,o>>>24&255,I&255,I>>8&255,I>>16&255,I>>>24&255])}return i}(),sA=class{constructor(A,t){this.high=A|0,this.low=t|0}and(A){this.high&=A.high,this.low&=A.low}xor(A){this.high^=A.high,this.low^=A.low}or(A){this.high|=A.high,this.low|=A.low}shiftRight(A){A>=32?(this.low=this.high>>>A-32|0,this.high=0):(this.low=this.low>>>A|this.high<<32-A,this.high=this.high>>>A|0)}shiftLeft(A){A>=32?(this.high=this.low<>>32-A,this.low<<=A)}rotateRight(A){let t,i;A&32?(i=this.low,t=this.high):(t=this.low,i=this.high),A&=31,this.low=t>>>A|i<<32-A,this.high=i>>>A|t<<32-A}not(){this.high=~this.high,this.low=~this.low}add(A){let t=(this.low>>>0)+(A.low>>>0),i=(this.high>>>0)+(A.high>>>0);t>4294967295&&(i+=1),this.low=t|0,this.high=i|0}copyTo(A,t){A[t]=this.high>>>24&255,A[t+1]=this.high>>16&255,A[t+2]=this.high>>8&255,A[t+3]=this.high&255,A[t+4]=this.low>>>24&255,A[t+5]=this.low>>16&255,A[t+6]=this.low>>8&255,A[t+7]=this.low&255}assign(A){this.high=A.high,this.low=A.low}},ss=function(){function A(I,c){return I>>>c|I<<32-c}function t(I,c,l){return I&c^~I&l}function i(I,c,l){return I&c^I&l^c&l}function s(I){return A(I,2)^A(I,13)^A(I,22)}function a(I){return A(I,6)^A(I,11)^A(I,25)}function n(I){return A(I,7)^A(I,18)^I>>>3}function r(I){return A(I,17)^A(I,19)^I>>>10}let g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function o(I,c,l){let h=1779033703,C=3144134277,B=1013904242,Q=2773480762,E=1359893119,f=2600822924,u=528734635,d=1541459225,x=Math.ceil((l+9)/64)*64,p=new Uint8Array(x),m,D;for(m=0;m>>29&255,p[m++]=l>>21&255,p[m++]=l>>13&255,p[m++]=l>>5&255,p[m++]=l<<3&255;let w=new Uint32Array(64);for(m=0;m>24&255,h>>16&255,h>>8&255,h&255,C>>24&255,C>>16&255,C>>8&255,C&255,B>>24&255,B>>16&255,B>>8&255,B&255,Q>>24&255,Q>>16&255,Q>>8&255,Q&255,E>>24&255,E>>16&255,E>>8&255,E&255,f>>24&255,f>>16&255,f>>8&255,f&255,u>>24&255,u>>16&255,u>>8&255,u&255,d>>24&255,d>>16&255,d>>8&255,d&255])}return o}(),Sf=function(){function A(o,I,c,l,h){o.assign(I),o.and(c),h.assign(I),h.not(),h.and(l),o.xor(h)}function t(o,I,c,l,h){o.assign(I),o.and(c),h.assign(I),h.and(l),o.xor(h),h.assign(c),h.and(l),o.xor(h)}function i(o,I,c){o.assign(I),o.rotateRight(28),c.assign(I),c.rotateRight(34),o.xor(c),c.assign(I),c.rotateRight(39),o.xor(c)}function s(o,I,c){o.assign(I),o.rotateRight(14),c.assign(I),c.rotateRight(18),o.xor(c),c.assign(I),c.rotateRight(41),o.xor(c)}function a(o,I,c){o.assign(I),o.rotateRight(1),c.assign(I),c.rotateRight(8),o.xor(c),c.assign(I),c.shiftRight(7),o.xor(c)}function n(o,I,c){o.assign(I),o.rotateRight(19),c.assign(I),c.rotateRight(61),o.xor(c),c.assign(I),c.shiftRight(6),o.xor(c)}let r=[new sA(1116352408,3609767458),new sA(1899447441,602891725),new sA(3049323471,3964484399),new sA(3921009573,2173295548),new sA(961987163,4081628472),new sA(1508970993,3053834265),new sA(2453635748,2937671579),new sA(2870763221,3664609560),new sA(3624381080,2734883394),new sA(310598401,1164996542),new sA(607225278,1323610764),new sA(1426881987,3590304994),new sA(1925078388,4068182383),new sA(2162078206,991336113),new sA(2614888103,633803317),new sA(3248222580,3479774868),new sA(3835390401,2666613458),new sA(4022224774,944711139),new sA(264347078,2341262773),new sA(604807628,2007800933),new sA(770255983,1495990901),new sA(1249150122,1856431235),new sA(1555081692,3175218132),new sA(1996064986,2198950837),new sA(2554220882,3999719339),new sA(2821834349,766784016),new sA(2952996808,2566594879),new sA(3210313671,3203337956),new sA(3336571891,1034457026),new sA(3584528711,2466948901),new sA(113926993,3758326383),new sA(338241895,168717936),new sA(666307205,1188179964),new sA(773529912,1546045734),new sA(1294757372,1522805485),new sA(1396182291,2643833823),new sA(1695183700,2343527390),new sA(1986661051,1014477480),new sA(2177026350,1206759142),new sA(2456956037,344077627),new sA(2730485921,1290863460),new sA(2820302411,3158454273),new sA(3259730800,3505952657),new sA(3345764771,106217008),new sA(3516065817,3606008344),new sA(3600352804,1432725776),new sA(4094571909,1467031594),new sA(275423344,851169720),new sA(430227734,3100823752),new sA(506948616,1363258195),new sA(659060556,3750685593),new sA(883997877,3785050280),new sA(958139571,3318307427),new sA(1322822218,3812723403),new sA(1537002063,2003034995),new sA(1747873779,3602036899),new sA(1955562222,1575990012),new sA(2024104815,1125592928),new sA(2227730452,2716904306),new sA(2361852424,442776044),new sA(2428436474,593698344),new sA(2756734187,3733110249),new sA(3204031479,2999351573),new sA(3329325298,3815920427),new sA(3391569614,3928383900),new sA(3515267271,566280711),new sA(3940187606,3454069534),new sA(4118630271,4000239992),new sA(116418474,1914138554),new sA(174292421,2731055270),new sA(289380356,3203993006),new sA(460393269,320620315),new sA(685471733,587496836),new sA(852142971,1086792851),new sA(1017036298,365543100),new sA(1126000580,2618297676),new sA(1288033470,3409855158),new sA(1501505948,4234509866),new sA(1607167915,987167468),new sA(1816402316,1246189591)];function g(o,I,c,l=!1){let h,C,B,Q,E,f,u,d;l?(h=new sA(3418070365,3238371032),C=new sA(1654270250,914150663),B=new sA(2438529370,812702999),Q=new sA(355462360,4144912697),E=new sA(1731405415,4290775857),f=new sA(2394180231,1750603025),u=new sA(3675008525,1694076839),d=new sA(1203062813,3204075428)):(h=new sA(1779033703,4089235720),C=new sA(3144134277,2227873595),B=new sA(1013904242,4271175723),Q=new sA(2773480762,1595750129),E=new sA(1359893119,2917565137),f=new sA(2600822924,725511199),u=new sA(528734635,4215389547),d=new sA(1541459225,327033209));let x=Math.ceil((c+17)/128)*128,p=new Uint8Array(x),m,D;for(m=0;m>>29&255,p[m++]=c>>21&255,p[m++]=c>>13&255,p[m++]=c>>5&255,p[m++]=c<<3&255;let w=new Array(80);for(m=0;m<80;m++)w[m]=new sA(0,0);let Y=new sA(0,0),U=new sA(0,0),K=new sA(0,0),Z=new sA(0,0),AA=new sA(0,0),gA=new sA(0,0),R=new sA(0,0),_=new sA(0,0),tA=new sA(0,0),IA=new sA(0,0),QA=new sA(0,0),V=new sA(0,0),lA;for(m=0;m=1;--r){i=n[13],n[13]=n[9],n[9]=n[5],n[5]=n[1],n[1]=i,i=n[14],s=n[10],n[14]=n[6],n[10]=n[2],n[6]=i,n[2]=s,i=n[15],s=n[11],a=n[7],n[15]=n[3],n[11]=i,n[7]=s,n[3]=a;for(let g=0;g<16;++g)n[g]=this._inv_s[n[g]];for(let g=0,o=r*16;g<16;++g,++o)n[g]^=t[o];for(let g=0;g<16;g+=4){let o=this._mix[n[g]],I=this._mix[n[g+1]],c=this._mix[n[g+2]],l=this._mix[n[g+3]];i=o^I>>>8^I<<24^c>>>16^c<<16^l>>>24^l<<8,n[g]=i>>>24&255,n[g+1]=i>>16&255,n[g+2]=i>>8&255,n[g+3]=i&255}}i=n[13],n[13]=n[9],n[9]=n[5],n[5]=n[1],n[1]=i,i=n[14],s=n[10],n[14]=n[6],n[10]=n[2],n[6]=i,n[2]=s,i=n[15],s=n[11],a=n[7],n[15]=n[3],n[11]=i,n[7]=s,n[3]=a;for(let r=0;r<16;++r)n[r]=this._inv_s[n[r]],n[r]^=t[r];return n}_encrypt(A,t){let i=this._s,s,a,n,r=new Uint8Array(16);r.set(A);for(let g=0;g<16;++g)r[g]^=t[g];for(let g=1;g=h;--l)if(I[l]!==c){c=0;break}g-=c,n[n.length-1]=I.subarray(0,16-c)}}let o=new Uint8Array(g);for(let I=0,c=0,l=n.length;I=256&&(a=(a^27)&255));for(let l=0;l<4;++l)s[I]=n^=s[I-32],I++,s[I]=r^=s[I-32],I++,s[I]=g^=s[I-32],I++,s[I]=o^=s[I-32],I++}return s}},gc=class{checkOwnerPassword(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=ss(a,0,a.length);return Ss(n,s)}checkUserPassword(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=ss(s,0,s.length);return Ss(a,i)}getOwnerKey(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=ss(a,0,a.length);return new R0(n).decryptBlock(s,!1,new Uint8Array(16))}getUserKey(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=ss(s,0,s.length);return new R0(a).decryptBlock(i,!1,new Uint8Array(16))}},oc=class{_hash(A,t,i){let s=ss(t,0,t.length).subarray(0,32),a=[0],n=0;for(;n<64||a.at(-1)>n-32;){let r=A.length+s.length+i.length,g=new Uint8Array(r),o=0;g.set(A,o),o+=A.length,g.set(s,o),o+=s.length,g.set(i,o);let I=new Uint8Array(r*64);for(let h=0,C=0;h<64;h++,C+=r)I.set(g,C);a=new Xr(s.subarray(0,16)).encrypt(I,s.subarray(16,32));let l=a.slice(0,16).reduce((h,C)=>h+C,0)%3;l===0?s=ss(a,0,a.length):l===1?s=M9(a,0,a.length):l===2&&(s=Sf(a,0,a.length)),n++}return s.subarray(0,32)}checkOwnerPassword(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=this._hash(A,a,i);return Ss(n,s)}checkUserPassword(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=this._hash(A,s,[]);return Ss(a,i)}getOwnerKey(A,t,i,s){let a=new Uint8Array(A.length+56);a.set(A,0),a.set(t,A.length),a.set(i,A.length+t.length);let n=this._hash(A,a,i);return new R0(n).decryptBlock(s,!1,new Uint8Array(16))}getUserKey(A,t,i){let s=new Uint8Array(A.length+8);s.set(A,0),s.set(t,A.length);let a=this._hash(A,s,[]);return new R0(a).decryptBlock(i,!1,new Uint8Array(16))}},Vr=class{constructor(A,t){this.StringCipherConstructor=A,this.StreamCipherConstructor=t}createStream(A,t){let i=new this.StreamCipherConstructor;return new nc(A,t,function(a,n){return i.decryptBlock(a,n)})}decryptString(A){let t=new this.StringCipherConstructor,i=Pe(A);return i=t.decryptBlock(i,!0),Qt(i)}encryptString(A){let t=new this.StringCipherConstructor;if(t instanceof Ta){let a=16-A.length%16;A+=String.fromCharCode(a).repeat(a);let n=new Uint8Array(16);if(typeof crypto!="undefined")crypto.getRandomValues(n);else for(let o=0;o<16;o++)n[o]=Math.floor(256*Math.random());let r=Pe(A);r=t.encrypt(r,n);let g=new Uint8Array(16+r.length);return g.set(n),g.set(r,16),Qt(g)}let i=Pe(A);return i=t.encrypt(i),Qt(i)}},Q0,Jg,Ff,En,Ic,Yg,Rf,ws,Ir,fn,cc,cs=class{constructor(A,t,i){HA(this,Jg);HA(this,En);HA(this,Yg);HA(this,ws);HA(this,fn);let s=A.get("Filter");if(!ye(s,"Standard"))throw new v("unknown encryption method");this.filterName=s.name,this.dict=A;let a=A.get("V");if(!Number.isInteger(a)||a!==1&&a!==2&&a!==4&&a!==5)throw new v("unsupported encryption algorithm");this.algorithm=a;let n=A.get("Length");if(!n)if(a<=3)n=40;else{let E=A.get("CF"),f=A.get("StmF");if(E instanceof F&&f instanceof M){E.suppressEncryption=!0;let u=E.get(f.name);n=(u==null?void 0:u.get("Length"))||128,n<40&&(n<<=3)}}if(!Number.isInteger(n)||n<40||n%8!==0)throw new v("invalid key length");let r=Pe(A.get("O")),g=Pe(A.get("U")),o=r.subarray(0,32),I=g.subarray(0,32),c=A.get("P"),l=A.get("R"),h=(a===4||a===5)&&A.get("EncryptMetadata")!==!1;this.encryptMetadata=h;let C=Pe(t),B;if(i){if(l===6)try{i=Yo(i)}catch(E){k("CipherTransformFactory: Unable to convert UTF8 encoded password.")}B=Pe(i)}let Q;if(a!==5)Q=mA(this,En,Ic).call(this,C,B,o,I,c,l,n,h);else{let E=r.subarray(32,40),f=r.subarray(40,48),u=g.subarray(0,48),d=g.subarray(32,40),x=g.subarray(40,48),p=Pe(A.get("OE")),m=Pe(A.get("UE")),D=Pe(A.get("Perms"));Q=mA(this,Jg,Ff).call(this,l,B,o,E,f,u,I,d,x,p,m,D)}if(!Q&&!i)throw new bs("No password given",G1.NEED_PASSWORD);if(!Q&&i){let E=mA(this,Yg,Rf).call(this,B,o,l,n);Q=mA(this,En,Ic).call(this,C,E,o,I,c,l,n,h)}if(!Q)throw new bs("Incorrect Password",G1.INCORRECT_PASSWORD);if(this.encryptionKey=Q,a>=4){let E=A.get("CF");E instanceof F&&(E.suppressEncryption=!0),this.cf=E,this.stmf=A.get("StmF")||M.get("Identity"),this.strf=A.get("StrF")||M.get("Identity"),this.eff=A.get("EFF")||this.stmf}}createCipherTransform(A,t){if(this.algorithm===4||this.algorithm===5)return new Vr(mA(this,fn,cc).call(this,this.cf,this.strf,A,t,this.encryptionKey),mA(this,fn,cc).call(this,this.cf,this.stmf,A,t,this.encryptionKey));let i=mA(this,ws,Ir).call(this,A,t,this.encryptionKey,!1),s=function(){return new ci(i)};return new Vr(s,s)}},or=cs;Q0=new WeakMap,Jg=new WeakSet,Ff=function(A,t,i,s,a,n,r,g,o,I,c,l){if(t){let C=Math.min(127,t.length);t=t.subarray(0,C)}else t=[];let h=A===6?new oc:new gc;return h.checkUserPassword(t,g,r)?h.getUserKey(t,o,c):t.length&&h.checkOwnerPassword(t,s,n,i)?h.getOwnerKey(t,a,n,I):null},En=new WeakSet,Ic=function(A,t,i,s,a,n,r,g){let o=40+i.length+A.length,I=new Uint8Array(o),c=0,l,h;if(t)for(h=Math.min(32,t.length);c>8&255,I[c++]=a>>16&255,I[c++]=a>>>24&255,l=0,h=A.length;l=4&&!g&&(I[c++]=255,I[c++]=255,I[c++]=255,I[c++]=255);let C=Ri(I,0,c),B=r>>3;if(n>=3)for(l=0;l<50;++l)C=Ri(C,0,B);let Q=C.subarray(0,B),E,f;if(n>=3){for(c=0;c<32;++c)I[c]=ne(cs,Q0)[c];for(l=0,h=A.length;l>3;if(i>=3)for(g=0;g<50;++g)o=Ri(o,0,o.length);let c,l;if(i>=3){l=t;let h=new Uint8Array(I);for(g=19;g>=0;g--){for(let C=0;C>8&255,a[r++]=A>>16&255,a[r++]=t&255,a[r++]=t>>8&255,s&&(a[r++]=115,a[r++]=65,a[r++]=108,a[r++]=84),Ri(a,0,r).subarray(0,Math.min(i.length+5,16))},fn=new WeakSet,cc=function(A,t,i,s,a){if(!(t instanceof M))throw new v("Invalid crypt filter name.");let n=this,r=A.get(t.name),g=r==null?void 0:r.get("CFM");if(!g||g.name==="None")return function(){return new rc};if(g.name==="V2")return function(){var o;return new ci(mA(o=n,ws,Ir).call(o,i,s,a,!1))};if(g.name==="AESV2")return function(){var o;return new Xr(mA(o=n,ws,Ir).call(o,i,s,a,!0))};if(g.name==="AESV3")return function(){return new R0(a)};throw new v("Unknown crypto method")},HA(or,Q0,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]));async function ot(e,A,t,{encrypt:i=null}){let s=i==null?void 0:i.createCipherTransform(e.num,e.gen);t.push(`${e.num} ${e.gen} obj\n`),A instanceof F?await Ao(A,t,s):A instanceof KA?await Nf(A,t,s):(Array.isArray(A)||ArrayBuffer.isView(A))&&await Gf(A,t,s),t.push(`\nendobj\n`)}async function Ao(e,A,t){A.push("<<");for(let i of e.getKeys())A.push(` /${o1(i)} `),await Uf(e.getRaw(i),A,t);A.push(">>")}async function Nf(e,A,t){let i=e.getBytes(),{dict:s}=e,[a,n]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),r=Array.isArray(a)?await s.xref.fetchIfRefAsync(a[0]):a,g=ye(r,"FlateDecode"),o=256;if(i.length>=o||g)try{let c=new CompressionStream("deflate"),l=c.writable.getWriter();l.write(i),l.close();let h=await new Response(c.readable).arrayBuffer();i=new Uint8Array(h);let C,B;a?g||(C=Array.isArray(a)?[M.get("FlateDecode"),...a]:[M.get("FlateDecode"),a],n&&(B=Array.isArray(n)?[null,...n]:[null,n])):C=M.get("FlateDecode"),C&&s.set("Filter",C),B&&s.set("DecodeParms",B)}catch(c){PA(`writeStream - cannot compress data: "${c}".`)}let I=Qt(i);t&&(I=t.encryptString(I)),s.set("Length",I.length),await Ao(s,A,t),A.push(` stream\n`,I,`\nendstream`)}async function Gf(e,A,t){A.push("[");let i=!0;for(let s of e)i?i=!1:A.push(" "),await Uf(s,A,t);A.push("]")}async function Uf(e,A,t){e instanceof M?A.push(`/${o1(e.name)}`):e instanceof oA?A.push(`${e.num} ${e.gen} R`):Array.isArray(e)||ArrayBuffer.isView(e)?await Gf(e,A,t):typeof e=="string"?(t&&(e=t.encryptString(e)),A.push(`(${Fs(e)})`)):typeof e=="number"?A.push(Ae(e)):typeof e=="boolean"?A.push(e.toString()):e instanceof F?await Ao(e,A,t):e instanceof KA?await Nf(e,A,t):e===null?A.push("null"):k(`Unhandled value in writer: ${typeof e}, please file a bug.`)}function Fo(e,A,t,i){for(let s=A+t-1;s>t-1;s--)i[s]=e&255,e>>=8;return t+A}function Mf(e,A,t){for(let i=0,s=e.length;ig+o.length,0);for(let g of Object.values(A.info))s.push(g),a+=g.length;let n=new Uint8Array(a),r=0;for(let g of s)Mf(g,r,n),r+=g.length;return Qt(Ri(n))}function H9(e,A){let t=new Ls({hasAttributes:!0}).parseFromString(e);for(let{xfa:s}of A){if(!s)continue;let{path:a,value:n}=s;if(!a)continue;let r=_E(a),g=t.documentElement.searchNode(r,0);!g&&r.length>1&&(g=t.documentElement.searchNode([r.at(-1)],0)),g?g.childNodes=Array.isArray(n)?n.map(o=>new u0("value",o)):[new u0("#text",n)]:k(`Node not found for path: ${a}`)}let i=[];return t.documentElement.dump(i),i.join("")}async function J9({xref:e,acroForm:A,acroFormRef:t,hasXfa:i,hasXfaDatasetsEntry:s,xfaDatasetsRef:a,needAppearances:n,newRefs:r}){if(i&&!s&&!a&&k("XFA - Cannot save it"),!n&&(!i||!a||s))return;let g=A.clone();if(i&&!s){let I=A.get("XFA").slice();I.splice(2,0,"datasets"),I.splice(3,0,a),g.set("XFA",I)}n&&g.set("NeedAppearances",!0);let o=[];await ot(t,g,o,e),r.push({ref:t,data:o.join("")})}function Y9({xfaData:e,xfaDatasetsRef:A,newRefs:t,xref:i}){if(e===null){let n=i.fetchIfRef(A);e=H9(n.getString(),t)}let s=i.encrypt;s&&(e=s.createCipherTransform(A.num,A.gen).encryptString(e));let a=`${A.num} ${A.gen} obj\n<< /Type /EmbeddedFile /Length ${e.length}>>\nstream\n`+e+`\nendstream\nendobj\n`;t.push({ref:A,data:a})}async function K9(e,A,t,i,s){s.push(`xref\n`);let a=Lf(t),n=0;for(let{ref:r,data:g}of t)r.num===a[n]&&(s.push(`${a[n]} ${a[n+1]}\n`),n+=2),g!==null?(s.push(`${A.toString().padStart(10,"0")} ${Math.min(r.gen,65535).toString().padStart(5,"0")} n\\r\n`),A+=g.length):s.push(`0000000000 ${Math.min(r.gen+1,65535).toString().padStart(5,"0")} f\\r\n`);Hf(A,e,i),s.push(`trailer\n`),await Ao(i,s),s.push(`\nstartxref\n`,A.toString(),`\n%%EOF\n`)}function Lf(e){let A=[];for(let{ref:t}of e)t.num===A.at(-2)+A.at(-1)?A[A.length-1]+=1:A.push(t.num,1);return A}async function v9(e,A,t,i,s){let a=[],n=0,r=0;for(let{ref:B,data:Q}of t){let E;n=Math.max(n,A),Q!==null?(E=Math.min(B.gen,65535),a.push([1,A,E]),A+=Q.length):(E=Math.min(B.gen+1,65535),a.push([0,0,E])),r=Math.max(r,E)}i.set("Index",Lf(t));let g=M1(n),o=M1(r),I=[1,g,o];i.set("W",I),Hf(A,e,i);let c=I.reduce((B,Q)=>B+Q,0),l=new Uint8Array(c*a.length),h=new Ie(l);h.dict=i;let C=0;for(let[B,Q,E]of a)C=Fo(B,I[0],C,l),C=Fo(Q,I[1],C,l),C=Fo(E,I[2],C,l);await ot(e.newRef,h,s,{}),s.push(`startxref\n`,A.toString(),`\n%%EOF\n`)}function Hf(e,A,t){if(Array.isArray(A.fileIds)&&A.fileIds.length>0){let i=L9(e,A);t.set("ID",[A.fileIds[0],i])}}function q9(e,A,t){let i=new F(null);i.set("Prev",e.startXRef);let s=e.newRef;return t?(A.push({ref:s,data:""}),i.set("Size",s.num+1),i.set("Type",M.get("XRef"))):i.set("Size",s.num),e.rootRef!==null&&i.set("Root",e.rootRef),e.infoRef!==null&&i.set("Info",e.infoRef),e.encryptRef!==null&&i.set("Encrypt",e.encryptRef),i}async function T9({originalData:e,xrefInfo:A,newRefs:t,xref:i=null,hasXfa:s=!1,xfaDatasetsRef:a=null,hasXfaDatasetsEntry:n=!1,needAppearances:r,acroFormRef:g=null,acroForm:o=null,xfaData:I=null,useXrefStream:c=!1}){await J9({xref:i,acroForm:o,acroFormRef:g,hasXfa:s,hasXfaDatasetsEntry:n,xfaDatasetsRef:a,needAppearances:r,newRefs:t}),s&&Y9({xfaData:I,xfaDatasetsRef:a,newRefs:t,xref:i});let l=[],h=e.length,C=e.at(-1);C!==10&&C!==13&&(l.push(`\n`),h+=1);let B=q9(A,t,c);t=t.sort((u,d)=>u.ref.num-d.ref.num);for(let{data:u}of t)u!==null&&l.push(u);await(c?v9(A,h,t,B,l):K9(A,h,t,B,l));let Q=l.reduce((u,d)=>u+d.length,e.length),E=new Uint8Array(Q);E.set(e);let f=e.length;for(let u of l)Mf(u,f,E),f+=u.length;return E}var wE=40,Nt={PAGE_CONTENT:1,STREAM_CONTENT:2,OBJECT:3,ANNOTATION:4,ELEMENT:5},Kg,Jf,un,lc,vg,Yf,qg,Kf,Tg=class{constructor(A,t){HA(this,Kg);this.dict=A,this.ref=t instanceof oA?t:null,this.roleMap=new Map,this.structParentIds=null}init(){this.readRoleMap()}addAnnotationIdToPage(A,t){mA(this,Kg,Jf).call(this,A,t,Nt.ANNOTATION)}readRoleMap(){let A=this.dict.get("RoleMap");A instanceof F&&A.forEach((t,i)=>{i instanceof M&&this.roleMap.set(t,i.name)})}static async canCreateStructureTree({catalogRef:A,pdfManager:t,newAnnotationsByPage:i}){var n;if(!(A instanceof oA))return k("Cannot save the struct tree: no catalog reference."),!1;let s=0,a=!0;for(let[r,g]of i){let{ref:o}=await t.getPage(r);if(!(o instanceof oA)){k(`Cannot save the struct tree: page ${r} has no ref.`),a=!0;break}for(let I of g)(n=I.accessibilityData)!=null&&n.type&&(I.parentTreeId=s++,a=!1)}if(a){for(let r of i.values())for(let g of r)delete g.parentTreeId;return!1}return!0}static async createStructureTree({newAnnotationsByPage:A,xref:t,catalogRef:i,pdfManager:s,newRefs:a}){let n=s.catalog.cloneDict(),r=new mt;r.put(i,n);let g=t.getNewTemporaryRef();n.set("StructTreeRoot",g);let o=new F(t);o.set("Type",M.get("StructTreeRoot"));let I=t.getNewTemporaryRef();o.set("ParentTree",I);let c=[];o.set("K",c),r.put(g,o);let l=new F(t),h=[];l.set("Nums",h);let C=await mA(this,un,lc).call(this,{newAnnotationsByPage:A,structTreeRootRef:g,kids:c,nums:h,xref:t,pdfManager:s,cache:r});o.set("ParentTreeNextKey",C),r.put(I,l);let B=[];for(let[Q,E]of r.items())B.length=0,await ot(Q,E,B,t),a.push({ref:Q,data:B.join("")})}async canUpdateStructTree({pdfManager:A,xref:t,newAnnotationsByPage:i}){var o,I;if(!this.ref)return k("Cannot update the struct tree: no root reference."),!1;let s=this.dict.get("ParentTreeNextKey");if(!Number.isInteger(s)||s<0)return k("Cannot update the struct tree: invalid next key."),!1;let a=this.dict.get("ParentTree");if(!(a instanceof F))return k("Cannot update the struct tree: ParentTree isn\'t a dict."),!1;let n=a.get("Nums");if(!Array.isArray(n))return k("Cannot update the struct tree: nums isn\'t an array."),!1;let r=new va(a,t);for(let c of i.keys()){let{pageDict:l}=await A.getPage(c);if(!l.has("StructParents"))continue;let h=l.get("StructParents");if(!Number.isInteger(h)||!Array.isArray(r.get(h)))return k(`Cannot save the struct tree: page ${c} has a wrong id.`),!1}let g=!0;for(let[c,l]of i){let{pageDict:h}=await A.getPage(c);mA(o=Tg,vg,Yf).call(o,{elements:l,xref:this.dict.xref,pageDict:h,numberTree:r});for(let C of l)(I=C.accessibilityData)!=null&&I.type&&(C.parentTreeId=s++,g=!1)}if(g){for(let c of i.values())for(let l of c)delete l.parentTreeId,delete l.structTreeParent;return!1}return!0}async updateStructureTree({newAnnotationsByPage:A,pdfManager:t,newRefs:i}){var C;let s=this.dict.xref,a=this.dict.clone(),n=this.ref,r=new mt;r.put(n,a);let g=a.getRaw("ParentTree"),o;g instanceof oA?o=s.fetch(g):(o=g,g=s.getNewTemporaryRef(),a.set("ParentTree",g)),o=o.clone(),r.put(g,o);let I=o.getRaw("Nums"),c=null;I instanceof oA&&(c=I,I=s.fetch(c)),I=I.slice(),c||o.set("Nums",I);let l=await mA(C=Tg,un,lc).call(C,{newAnnotationsByPage:A,structTreeRootRef:n,kids:null,nums:I,xref:s,pdfManager:t,cache:r});a.set("ParentTreeNextKey",l),c&&r.put(c,I);let h=[];for(let[B,Q]of r.items())h.length=0,await ot(B,Q,h,s),i.push({ref:B,data:h.join("")})}},Ui=Tg;Kg=new WeakSet,Jf=function(A,t,i){if(!(A instanceof oA)||t<0)return;this.structParentIds||(this.structParentIds=new mt);let s=this.structParentIds.get(A);s||(s=[],this.structParentIds.put(A,s)),s.push([t,i])},un=new WeakSet,lc=async function({newAnnotationsByPage:A,structTreeRootRef:t,kids:i,nums:s,xref:a,pdfManager:n,cache:r}){let g=M.get("OBJR"),o=-1/0;for(let[I,c]of A){let{ref:l}=await n.getPage(I),h=l instanceof oA;for(let{accessibilityData:C,ref:B,parentTreeId:Q,structTreeParent:E}of c){if(!(C!=null&&C.type))continue;let{type:f,title:u,lang:d,alt:x,expanded:p,actualText:m}=C;o=Math.max(o,Q);let D=a.getNewTemporaryRef(),S=new F(a);S.set("S",M.get(f)),u&&S.set("T",ii(u)),d&&S.set("Lang",d),x&&S.set("Alt",ii(x)),p&&S.set("E",ii(p)),m&&S.set("ActualText",ii(m)),await mA(this,qg,Kf).call(this,{structTreeParent:E,tagDict:S,newTagRef:D,structTreeRootRef:t,fallbackKids:i,xref:a,cache:r});let w=new F(a);S.set("K",w),w.set("Type",g),h&&w.set("Pg",l),w.set("Obj",B),r.put(D,S),s.push(Q,D)}}return o+1},vg=new WeakSet,Yf=function({elements:A,xref:t,pageDict:i,numberTree:s}){let a=new Map;for(let o of A)if(o.structTreeParentId){let I=parseInt(o.structTreeParentId.split("_mc")[1],10),c=a.get(I);c||(c=[],a.set(I,c)),c.push(o)}let n=i.get("StructParents");if(!Number.isInteger(n))return;let r=s.get(n),g=(o,I,c)=>{let l=a.get(o);if(l){let h=I.getRaw("P"),C=t.fetchIfRef(h);if(h instanceof oA&&C instanceof F){let B={ref:c,dict:I};for(let Q of l)Q.structTreeParent=B}return!0}return!1};for(let o of r){if(!(o instanceof oA))continue;let I=t.fetch(o),c=I.get("K");if(Number.isInteger(c)){g(c,I,o);continue}if(Array.isArray(c))for(let l of c){if(l=t.fetchIfRef(l),Number.isInteger(l)&&g(l,I,o))break;if(!(l instanceof F))continue;if(!ye(l.get("Type"),"MCR"))break;let h=l.get("MCID");if(Number.isInteger(h)&&g(h,I,o))break}}},qg=new WeakSet,Kf=async function({structTreeParent:A,tagDict:t,newTagRef:i,structTreeRootRef:s,fallbackKids:a,xref:n,cache:r}){let g=null,o;A?({ref:g}=A,o=A.dict.getRaw("P")||s):o=s,t.set("P",o);let I=n.fetchIfRef(o);if(!I){a.push(i);return}let c=r.get(o);c||(c=I.clone(),r.put(o,c));let l=c.getRaw("K"),h=l instanceof oA?r.get(l):null;if(!h){h=n.fetchIfRef(l),h=Array.isArray(h)?h.slice():[l];let B=n.getNewTemporaryRef();c.set("K",B),r.put(B,h)}let C=h.indexOf(g);h.splice(C>=0?C+1:h.length,0,i)},HA(Ui,un),HA(Ui,vg),HA(Ui,qg);var hc=class{constructor(A,t){this.tree=A,this.dict=t,this.kids=[],this.parseKids()}get role(){let A=this.dict.get("S"),t=A instanceof M?A.name:"",{root:i}=this.tree;return i.roleMap.has(t)?i.roleMap.get(t):t}parseKids(){let A=null,t=this.dict.getRaw("Pg");t instanceof oA&&(A=t.toString());let i=this.dict.get("K");if(Array.isArray(i))for(let s of i){let a=this.parseKid(A,s);a&&this.kids.push(a)}else{let s=this.parseKid(A,i);s&&this.kids.push(s)}}parseKid(A,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==A?null:new as({type:Nt.PAGE_CONTENT,mcid:t,pageObjId:A});let i=null;if(t instanceof oA?i=this.dict.xref.fetch(t):t instanceof F&&(i=t),!i)return null;let s=i.getRaw("Pg");s instanceof oA&&(A=s.toString());let a=i.get("Type")instanceof M?i.get("Type").name:null;if(a==="MCR"){if(this.tree.pageDict.objId!==A)return null;let n=i.getRaw("Stm");return new as({type:Nt.STREAM_CONTENT,refObjId:n instanceof oA?n.toString():null,pageObjId:A,mcid:i.get("MCID")})}if(a==="OBJR"){if(this.tree.pageDict.objId!==A)return null;let n=i.getRaw("Obj");return new as({type:Nt.OBJECT,refObjId:n instanceof oA?n.toString():null,pageObjId:A})}return new as({type:Nt.ELEMENT,dict:i})}},as=class{constructor({type:A,dict:t=null,mcid:i=null,pageObjId:s=null,refObjId:a=null}){this.type=A,this.dict=t,this.mcid=i,this.pageObjId=s,this.refObjId=a,this.parentNode=null}},Cc=class{constructor(A,t){this.root=A,this.rootDict=A?A.dict:null,this.pageDict=t,this.nodes=[]}parse(A){var r,g;if(!this.root||!this.rootDict)return;let t=this.rootDict.get("ParentTree");if(!t)return;let i=this.pageDict.get("StructParents"),s=A instanceof oA&&((r=this.root.structParentIds)==null?void 0:r.get(A));if(!Number.isInteger(i)&&!s)return;let a=new Map,n=new va(t,this.rootDict.xref);if(Number.isInteger(i)){let o=n.get(i);if(Array.isArray(o))for(let I of o)I instanceof oA&&this.addNode(this.rootDict.xref.fetch(I),a)}if(s)for(let[o,I]of s){let c=n.get(o);if(c){let l=this.addNode(this.rootDict.xref.fetchIfRef(c),a);((g=l==null?void 0:l.kids)==null?void 0:g.length)===1&&l.kids[0].type===Nt.OBJECT&&(l.kids[0].type=I)}}}addNode(A,t,i=0){if(i>wE)return k("StructTree MAX_DEPTH reached."),null;if(!(A instanceof F))return null;if(t.has(A))return t.get(A);let s=new hc(this,A);t.set(A,s);let a=A.get("P");if(!a||ye(a.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(A,s)||t.delete(A),s;let n=this.addNode(a,t,i+1);if(!n)return s;let r=!1;for(let g of n.kids)g.type===Nt.ELEMENT&&g.dict===A&&(g.parentNode=s,r=!0);return r||t.delete(A),s}addTopLevelNode(A,t){let i=this.rootDict.get("K");if(!i)return!1;if(i instanceof F)return i.objId!==A.objId?!1:(this.nodes[0]=t,!0);if(!Array.isArray(i))return!0;let s=!1;for(let a=0;awE){k("StructTree too deep to be fully serialized.");return}let n=Object.create(null);n.role=i.role,n.children=[],s.children.push(n);let r=i.dict.get("Alt");typeof r=="string"&&(n.alt=jA(r));let g=i.dict.get("Lang");typeof g=="string"&&(n.lang=jA(g));for(let o of i.kids){let I=o.type===Nt.ELEMENT?o.parentNode:null;if(I){A(I,n,a+1);continue}else o.type===Nt.PAGE_CONTENT||o.type===Nt.STREAM_CONTENT?n.children.push({type:"content",id:`p${o.pageObjId}_mc${o.mcid}`}):o.type===Nt.OBJECT?n.children.push({type:"object",id:o.refObjId}):o.type===Nt.ANNOTATION&&n.children.push({type:"annotation",id:`${Yu}${o.refObjId}`})}}let t=Object.create(null);t.children=[],t.role="Root";for(let i of this.nodes)i&&A(i,t);return t}};function f1(e){if(!Array.isArray(e)||e.length<2)return!1;let[A,t,...i]=e;if(!(A instanceof oA)&&!Number.isInteger(A)||!(t instanceof M))return!1;let s=i.length,a=!0;switch(t.name){case"XYZ":if(s<2||s>3)return!1;break;case"Fit":case"FitB":return s===0;case"FitH":case"FitBH":case"FitV":case"FitBV":if(s>1)return!1;break;case"FitR":if(s!==4)return!1;a=!1;break;default:return!1}for(let n of i)if(!(typeof n=="number"||a&&n===null))return!1;return!0}function On(e){return e instanceof F&&(e=e.get("D")),f1(e)?e:null}function yE(e){let A=e.get("D");if(A){if(A instanceof M&&(A=A.name),typeof A=="string")return jA(A);if(f1(A))return JSON.stringify(A)}return null}var Pg,vf,Wg,qf,Og=class{constructor(A,t){HA(this,Pg);HA(this,Wg);if(this.pdfManager=A,this.xref=t,this._catDict=t.getCatalogObj(),!(this._catDict instanceof F))throw new v("Catalog object is not a dictionary.");this.toplevelPagesDict,this._actualNumPages=null,this.fontCache=new mt,this.builtInCMapCache=new Map,this.standardFontDataCache=new Map,this.globalImageCache=new z0,this.pageKidsCountCache=new mt,this.pageIndexCache=new mt,this.pageDictCache=new mt,this.nonBlendModesSet=new be,this.systemFontCache=new Map}cloneDict(){return this._catDict.clone()}get version(){let A=this._catDict.get("Version");if(A instanceof M){if(XE.test(A.name))return nA(this,"version",A.name);k(`Invalid PDF catalog version: ${A.name}`)}return nA(this,"version",null)}get lang(){let A=this._catDict.get("Lang");return nA(this,"lang",A&&typeof A=="string"?jA(A):null)}get needsRendering(){let A=this._catDict.get("NeedsRendering");return nA(this,"needsRendering",typeof A=="boolean"?A:!1)}get collection(){let A=null;try{let t=this._catDict.get("Collection");t instanceof F&&t.size>0&&(A=t)}catch(t){if(t instanceof ge)throw t;PA("Cannot fetch Collection entry; assuming no collection is present.")}return nA(this,"collection",A)}get acroForm(){let A=null;try{let t=this._catDict.get("AcroForm");t instanceof F&&t.size>0&&(A=t)}catch(t){if(t instanceof ge)throw t;PA("Cannot fetch AcroForm entry; assuming no forms are present.")}return nA(this,"acroForm",A)}get acroFormRef(){let A=this._catDict.getRaw("AcroForm");return nA(this,"acroFormRef",A instanceof oA?A:null)}get metadata(){var i;let A=this._catDict.getRaw("Metadata");if(!(A instanceof oA))return nA(this,"metadata",null);let t=null;try{let s=this.xref.fetch(A,!((i=this.xref.encrypt)!=null&&i.encryptMetadata));if(s instanceof KA&&s.dict instanceof F){let a=s.dict.get("Type"),n=s.dict.get("Subtype");if(ye(a,"Metadata")&&ye(n,"XML")){let r=ka(s.getString());r&&(t=new ac(r).serializable)}}}catch(s){if(s instanceof ge)throw s;PA(`Skipping invalid Metadata: "${s}".`)}return nA(this,"metadata",t)}get markInfo(){let A=null;try{A=this._readMarkInfo()}catch(t){if(t instanceof ge)throw t;k("Unable to read mark info.")}return nA(this,"markInfo",A)}_readMarkInfo(){let A=this._catDict.get("MarkInfo");if(!(A instanceof F))return null;let t={Marked:!1,UserProperties:!1,Suspects:!1};for(let i in t){let s=A.get(i);typeof s=="boolean"&&(t[i]=s)}return t}get structTreeRoot(){let A=null;try{A=this._readStructTreeRoot()}catch(t){if(t instanceof ge)throw t;k("Unable read to structTreeRoot info.")}return nA(this,"structTreeRoot",A)}_readStructTreeRoot(){let A=this._catDict.getRaw("StructTreeRoot"),t=this.xref.fetchIfRef(A);if(!(t instanceof F))return null;let i=new Ui(t,A);return i.init(),i}get toplevelPagesDict(){let A=this._catDict.get("Pages");if(!(A instanceof F))throw new v("Invalid top-level pages dictionary.");return nA(this,"toplevelPagesDict",A)}get documentOutline(){let A=null;try{A=this._readDocumentOutline()}catch(t){if(t instanceof ge)throw t;k("Unable to read document outline.")}return nA(this,"documentOutline",A)}_readDocumentOutline(){let A=this._catDict.get("Outlines");if(!(A instanceof F)||(A=A.getRaw("First"),!(A instanceof oA)))return null;let t={items:[]},i=[{obj:A,parent:t}],s=new be;s.put(A);let a=this.xref,n=new Uint8ClampedArray(3);for(;i.length>0;){let r=i.shift(),g=a.fetchIfRef(r.obj);if(g===null)continue;g.has("Title")||k("Invalid outline item encountered.");let o={url:null,dest:null,action:null};Og.parseDestDictionary({destDict:g,resultObj:o,docBaseUrl:this.baseUrl,docAttachments:this.attachments});let I=g.get("Title"),c=g.get("F")||0,l=g.getArray("C"),h=g.get("Count"),C=n;wt(l,3)&&(l[0]!==0||l[1]!==0||l[2]!==0)&&(C=JA.singletons.rgb.getRgb(l,0));let B={action:o.action,attachment:o.attachment,dest:o.dest,url:o.url,unsafeUrl:o.unsafeUrl,newWindow:o.newWindow,setOCGState:o.setOCGState,title:typeof I=="string"?jA(I):"",color:C,count:Number.isInteger(h)?h:void 0,bold:!!(c&2),italic:!!(c&1),items:[]};r.parent.items.push(B),A=g.getRaw("First"),A instanceof oA&&!s.has(A)&&(i.push({obj:A,parent:B}),s.put(A)),A=g.getRaw("Next"),A instanceof oA&&!s.has(A)&&(i.push({obj:A,parent:r.parent}),s.put(A))}return t.items.length>0?t.items:null}get permissions(){let A=null;try{A=this._readPermissions()}catch(t){if(t instanceof ge)throw t;k("Unable to read permissions.")}return nA(this,"permissions",A)}_readPermissions(){let A=this.xref.trailer.get("Encrypt");if(!(A instanceof F))return null;let t=A.get("P");if(typeof t!="number")return null;t+=2**32;let i=[];for(let s in N1){let a=N1[s];t&a&&i.push(a)}return i}get optionalContentConfig(){let A=null;try{let t=this._catDict.get("OCProperties");if(!t)return nA(this,"optionalContentConfig",null);let i=t.get("D");if(!i)return nA(this,"optionalContentConfig",null);let s=t.get("OCGs");if(!Array.isArray(s))return nA(this,"optionalContentConfig",null);let a=[],n=new be;for(let r of s)!(r instanceof oA)||n.has(r)||(n.put(r),a.push(mA(this,Pg,vf).call(this,r)));A=mA(this,Wg,qf).call(this,i,n),A.groups=a}catch(t){if(t instanceof ge)throw t;k(`Unable to read optional content config: ${t}`)}return nA(this,"optionalContentConfig",A)}setActualNumPages(A=null){this._actualNumPages=A}get hasActualNumPages(){return this._actualNumPages!==null}get _pagesCount(){let A=this.toplevelPagesDict.get("Count");if(!Number.isInteger(A))throw new v("Page count in top-level pages dictionary is not an integer.");return nA(this,"_pagesCount",A)}get numPages(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}get destinations(){let A=this._readDests(),t=Object.create(null);if(A instanceof Fi)for(let[i,s]of A.getAll()){let a=On(s);a&&(t[jA(i)]=a)}else A instanceof F&&A.forEach(function(i,s){let a=On(s);a&&(t[i]=a)});return nA(this,"destinations",t)}getDestination(A){let t=this._readDests();if(t instanceof Fi){let i=On(t.get(A));if(i)return i;let s=this.destinations[A];if(s)return k(`Found "${A}" at an incorrect position in the NameTree.`),s}else if(t instanceof F){let i=On(t.get(A));if(i)return i}return null}_readDests(){let A=this._catDict.get("Names");if(A!=null&&A.has("Dests"))return new Fi(A.getRaw("Dests"),this.xref);if(this._catDict.has("Dests"))return this._catDict.get("Dests")}get pageLabels(){let A=null;try{A=this._readPageLabels()}catch(t){if(t instanceof ge)throw t;k("Unable to read page labels.")}return nA(this,"pageLabels",A)}_readPageLabels(){let A=this._catDict.getRaw("PageLabels");if(!A)return null;let t=new Array(this.numPages),i=null,s="",n=new va(A,this.xref).getAll(),r="",g=1;for(let o=0,I=this.numPages;o=1))throw new v("Invalid start in PageLabel dictionary.");g=l}else g=1}switch(i){case"D":r=g;break;case"R":case"r":r=qu(g,i==="r");break;case"A":case"a":let l=26,B=i==="a"?97:65,Q=g-1;r=String.fromCharCode(B+Q%l).repeat(Math.floor(Q/l)+1);break;default:if(i)throw new v(`Invalid style "${i}" in PageLabel dictionary.`);r=""}t[o]=s+r,g++}return t}get pageLayout(){let A=this._catDict.get("PageLayout"),t="";if(A instanceof M)switch(A.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=A.name}return nA(this,"pageLayout",t)}get pageMode(){let A=this._catDict.get("PageMode"),t="UseNone";if(A instanceof M)switch(A.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=A.name}return nA(this,"pageMode",t)}get viewerPreferences(){let A=this._catDict.get("ViewerPreferences");if(!(A instanceof F))return nA(this,"viewerPreferences",null);let t=null;for(let i of A.getKeys()){let s=A.get(i),a;switch(i){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":typeof s=="boolean"&&(a=s);break;case"NonFullScreenPageMode":if(s instanceof M)switch(s.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":a=s.name;break;default:a="UseNone"}break;case"Direction":if(s instanceof M)switch(s.name){case"L2R":case"R2L":a=s.name;break;default:a="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(s instanceof M)switch(s.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":a=s.name;break;default:a="CropBox"}break;case"PrintScaling":if(s instanceof M)switch(s.name){case"None":case"AppDefault":a=s.name;break;default:a="AppDefault"}break;case"Duplex":if(s instanceof M)switch(s.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":a=s.name;break;default:a="None"}break;case"PrintPageRange":Array.isArray(s)&&s.length%2===0&&s.every((r,g,o)=>Number.isInteger(r)&&r>0&&(g===0||r>=o[g-1])&&r<=this.numPages)&&(a=s);break;case"NumCopies":Number.isInteger(s)&&s>0&&(a=s);break;default:k(`Ignoring non-standard key in ViewerPreferences: ${i}.`);continue}if(a===void 0){k(`Bad value, for key "${i}", in ViewerPreferences: ${s}.`);continue}t||(t=Object.create(null)),t[i]=a}return nA(this,"viewerPreferences",t)}get openAction(){let A=this._catDict.get("OpenAction"),t=Object.create(null);if(A instanceof F){let i=new F(this.xref);i.set("A",A);let s={url:null,dest:null,action:null};Og.parseDestDictionary({destDict:i,resultObj:s}),Array.isArray(s.dest)?t.dest=s.dest:s.action&&(t.action=s.action)}else Array.isArray(A)&&(t.dest=A);return nA(this,"openAction",OE(t)>0?t:null)}get attachments(){let A=this._catDict.get("Names"),t=null;if(A instanceof F&&A.has("EmbeddedFiles")){let i=new Fi(A.getRaw("EmbeddedFiles"),this.xref);for(let[s,a]of i.getAll()){let n=new qa(a,this.xref);t||(t=Object.create(null)),t[jA(s)]=n.serializable}}return nA(this,"attachments",t)}get xfaImages(){let A=this._catDict.get("Names"),t=null;if(A instanceof F&&A.has("XFAImages")){let i=new Fi(A.getRaw("XFAImages"),this.xref);for(let[s,a]of i.getAll())t||(t=new F(this.xref)),t.set(jA(s),a)}return nA(this,"xfaImages",t)}_collectJavaScript(){let A=this._catDict.get("Names"),t=null;function i(a,n){if(!(n instanceof F)||!ye(n.get("S"),"JavaScript"))return;let r=n.get("JS");if(r instanceof KA)r=r.getString();else if(typeof r!="string")return;r=jA(r).replaceAll("\\0",""),r&&(t||(t=new Map)).set(a,r)}if(A instanceof F&&A.has("JavaScript")){let a=new Fi(A.getRaw("JavaScript"),this.xref);for(let[n,r]of a.getAll())i(jA(n),r)}let s=this._catDict.get("OpenAction");return s&&i("OpenAction",s),t}get jsActions(){let A=this._collectJavaScript(),t=Vg(this.xref,this._catDict,Fu);if(A){t||(t=Object.create(null));for(let[i,s]of A)i in t?t[i].push(s):t[i]=[s]}return nA(this,"jsActions",t)}async fontFallback(A,t){let i=await Promise.all(this.fontCache);for(let s of i)if(s.loadedName===A){s.fallback(t);return}}async cleanup(A=!1){E1(),this.globalImageCache.clear(A),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.pageDictCache.clear(),this.nonBlendModesSet.clear();let t=await Promise.all(this.fontCache);for(let{dict:i}of t)delete i.cacheKey;this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear(),this.systemFontCache.clear()}async getPageDict(A){let t=[this.toplevelPagesDict],i=new be,s=this._catDict.getRaw("Pages");s instanceof oA&&i.put(s);let a=this.xref,n=this.pageKidsCountCache,r=this.pageIndexCache,g=this.pageDictCache,o=0;for(;t.length;){let I=t.pop();if(I instanceof oA){let C=n.get(I);if(C>=0&&o+C<=A){o+=C;continue}if(i.has(I))throw new v("Pages tree contains circular reference.");i.put(I);let B=await(g.get(I)||a.fetchAsync(I));if(B instanceof F){let Q=B.getRaw("Type");if(Q instanceof oA&&(Q=await a.fetchAsync(Q)),ye(Q,"Page")||!B.has("Kids")){if(n.has(I)||n.put(I,1),r.has(I)||r.put(I,o),o===A)return[B,I];o++;continue}}t.push(B);continue}if(!(I instanceof F))throw new v("Page dictionary kid reference points to wrong type of object.");let{objId:c}=I,l=I.getRaw("Count");if(l instanceof oA&&(l=await a.fetchAsync(l)),Number.isInteger(l)&&l>=0&&(c&&!n.has(c)&&n.put(c,l),o+l<=A)){o+=l;continue}let h=I.getRaw("Kids");if(h instanceof oA&&(h=await a.fetchAsync(h)),!Array.isArray(h)){let C=I.getRaw("Type");if(C instanceof oA&&(C=await a.fetchAsync(C)),ye(C,"Page")||!I.has("Kids")){if(o===A)return[I,null];o++;continue}throw new v("Page dictionary kids object is not an array.")}for(let C=h.length-1;C>=0;C--){let B=h[C];t.push(B),I===this.toplevelPagesDict&&B instanceof oA&&!g.has(B)&&g.put(B,a.fetchAsync(B))}}throw new Error(`Page index ${A} not found.`)}async getAllPageDicts(A=!1){let{ignoreErrors:t}=this.pdfManager.evaluatorOptions,i=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new be,a=this._catDict.getRaw("Pages");a instanceof oA&&s.put(a);let n=new Map,r=this.xref,g=this.pageIndexCache,o=0;function I(l,h){h&&!g.has(h)&&g.put(h,o),n.set(o++,[l,h])}function c(l){if(l instanceof ti&&!A)throw l;A&&t&&o===0&&(k(`getAllPageDicts - Skipping invalid first page: "${l}".`),l=F.empty),n.set(o++,[l,null])}for(;i.length>0;){let l=i.at(-1),{currentNode:h,posInKids:C}=l,B=h.getRaw("Kids");if(B instanceof oA)try{B=await r.fetchAsync(B)}catch(u){c(u);break}if(!Array.isArray(B)){c(new v("Page dictionary kids object is not an array."));break}if(C>=B.length){i.pop();continue}let Q=B[C],E;if(Q instanceof oA){if(s.has(Q)){c(new v("Pages tree contains circular reference."));break}s.put(Q);try{E=await r.fetchAsync(Q)}catch(u){c(u);break}}else E=Q;if(!(E instanceof F)){c(new v("Page dictionary kid reference points to wrong type of object."));break}let f=E.getRaw("Type");if(f instanceof oA)try{f=await r.fetchAsync(f)}catch(u){c(u);break}ye(f,"Page")||!E.has("Kids")?I(E,Q instanceof oA?Q:null):i.push({currentNode:E,posInKids:0}),l.posInKids++}return n}getPageIndex(A){let t=this.pageIndexCache.get(A);if(t!==void 0)return Promise.resolve(t);let i=this.xref;function s(r){let g=0,o;return i.fetchAsync(r).then(function(I){if(ur(r,A)&&!jE(I,"Page")&&!(I instanceof F&&!I.has("Type")&&I.has("Contents")))throw new v("The reference does not point to a /Page dictionary.");if(!I)return null;if(!(I instanceof F))throw new v("Node must be a dictionary.");return o=I.getRaw("Parent"),I.getAsync("Parent")}).then(function(I){if(!I)return null;if(!(I instanceof F))throw new v("Parent must be a dictionary.");return I.getAsync("Kids")}).then(function(I){if(!I)return null;let c=[],l=!1;for(let h of I){if(!(h instanceof oA))throw new v("Kid must be a reference.");if(ur(h,r)){l=!0;break}c.push(i.fetchAsync(h).then(function(C){if(!(C instanceof F))throw new v("Kid node must be a dictionary.");C.has("Count")?g+=C.get("Count"):g++}))}if(!l)throw new v("Kid reference not found in parent\'s kids.");return Promise.all(c).then(function(){return[g,o]})})}let a=0,n=r=>s(r).then(g=>{if(!g)return this.pageIndexCache.put(A,a),a;let[o,I]=g;return a+=o,n(I)});return n(A)}get baseUrl(){let A=this._catDict.get("URI");if(A instanceof F){let t=A.get("Base");if(typeof t=="string"){let i=Qr(t,null,{tryConvertEncoding:!0});if(i)return nA(this,"baseUrl",i.href)}}return nA(this,"baseUrl",this.pdfManager.docBaseUrl)}static parseDestDictionary({destDict:A,resultObj:t,docBaseUrl:i=null,docAttachments:s=null}){if(!(A instanceof F)){k("parseDestDictionary: `destDict` must be a dictionary.");return}let a=A.get("A"),n,r;if(a instanceof F||(A.has("Dest")?a=A.get("Dest"):(a=A.get("AA"),a instanceof F&&(a.has("D")?a=a.get("D"):a.has("U")&&(a=a.get("U"))))),a instanceof F){let g=a.get("S");if(!(g instanceof M)){k("parseDestDictionary: Invalid type in Action dictionary.");return}let o=g.name;switch(o){case"ResetForm":let I=a.get("Flags"),c=((typeof I=="number"?I:0)&1)===0,l=[],h=[];for(let w of a.get("Fields")||[])w instanceof oA?h.push(w.toString()):typeof w=="string"&&l.push(jA(w));t.resetForm={fields:l,refs:h,include:c};break;case"URI":n=a.get("URI"),n instanceof M&&(n="/"+n.name);break;case"GoTo":r=a.get("D");break;case"Launch":case"GoToR":let C=a.get("F");if(C instanceof F){let w=new qa(C,null,!0),{rawFilename:Y}=w.serializable;n=Y}else typeof C=="string"&&(n=C);let B=yE(a);B&&typeof n=="string"&&(n=n.split("#",1)[0]+"#"+B);let Q=a.get("NewWindow");typeof Q=="boolean"&&(t.newWindow=Q);break;case"GoToE":let E=a.get("T"),f;if(s&&E instanceof F){let w=E.get("R"),Y=E.get("N");ye(w,"C")&&typeof Y=="string"&&(f=s[jA(Y)])}if(f){t.attachment=f;let w=yE(a);w&&(t.attachmentDest=w)}else k(\'parseDestDictionary - unimplemented "GoToE" action.\');break;case"Named":let u=a.get("N");u instanceof M&&(t.action=u.name);break;case"SetOCGState":let d=a.get("State"),x=a.get("PreserveRB");if(!Array.isArray(d)||d.length===0)break;let p=[];for(let w of d)if(w instanceof M)switch(w.name){case"ON":case"OFF":case"Toggle":p.push(w.name);break}else w instanceof oA&&p.push(w.toString());if(p.length!==d.length)break;t.setOCGState={state:p,preserveRB:typeof x=="boolean"?x:!0};break;case"JavaScript":let m=a.get("JS"),D;m instanceof KA?D=m.getString():typeof m=="string"&&(D=m);let S=D&&zE(jA(D));if(S){n=S.url,t.newWindow=S.newWindow;break}default:if(o==="JavaScript"||o==="SubmitForm")break;k(`parseDestDictionary - unsupported action: "${o}".`);break}}else A.has("Dest")&&(r=A.get("Dest"));if(typeof n=="string"){let g=Qr(n,i,{addDefaultProtocol:!0,tryConvertEncoding:!0});g&&(t.url=g.href),t.unsafeUrl=n}r&&(r instanceof M&&(r=r.name),typeof r=="string"?t.dest=jA(r):f1(r)&&(t.dest=r))}},Pa=Og;Pg=new WeakSet,vf=function(A){let t=this.xref.fetch(A),i={id:A.toString(),name:null,intent:null,usage:{print:null,view:null}},s=t.get("Name");typeof s=="string"&&(i.name=jA(s));let a=t.getArray("Intent");Array.isArray(a)||(a=[a]),a.every(I=>I instanceof M)&&(i.intent=a.map(I=>I.name));let n=t.get("Usage");if(!(n instanceof F))return i;let r=i.usage,g=n.get("Print");if(g instanceof F){let I=g.get("PrintState");if(I instanceof M)switch(I.name){case"ON":case"OFF":r.print={printState:I.name}}}let o=n.get("View");if(o instanceof F){let I=o.get("ViewState");if(I instanceof M)switch(I.name){case"ON":case"OFF":r.view={viewState:I.name}}}return i},Wg=new WeakSet,qf=function(A,t){function i(o){let I=[];if(Array.isArray(o))for(let c of o)c instanceof oA&&t.has(c)&&I.push(c.toString());return I}function s(o,I=0){if(!Array.isArray(o))return null;let c=[];for(let h of o){if(h instanceof oA&&t.has(h)){r.put(h),c.push(h.toString());continue}let C=a(h,I);C&&c.push(C)}if(I>0)return c;let l=[];for(let h of t)r.has(h)||l.push(h.toString());return l.length&&c.push({name:null,order:l}),c}function a(o,I){if(++I>g)return k("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;let c=n.fetchIfRef(o);if(!Array.isArray(c))return null;let l=n.fetchIfRef(c[0]);if(typeof l!="string")return null;let h=s(c.slice(1),I);return!h||!h.length?null:{name:jA(l),order:h}}let n=this.xref,r=new be,g=10;return{name:typeof A.get("Name")=="string"?jA(A.get("Name")):null,creator:typeof A.get("Creator")=="string"?jA(A.get("Creator")):null,baseState:A.get("BaseState")instanceof M?A.get("BaseState").name:null,on:i(A.get("ON")),off:i(A.get("OFF")),order:s(A.get("Order")),groups:null}};function P9(e){return e instanceof oA||e instanceof F||e instanceof KA||Array.isArray(e)}function W9(e,A){if(e instanceof F)e=e.getRawValues();else if(e instanceof KA)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(let t of e)P9(t)&&A.push(t)}var Hs=class{constructor(A,t,i){this.dict=A,this.keys=t,this.xref=i,this.refSet=null}async load(){if(this.xref.stream.isDataLoaded)return;let{keys:A,dict:t}=this;this.refSet=new be;let i=[];for(let s of A){let a=t.getRaw(s);a!==void 0&&i.push(a)}return this._walk(i)}async _walk(A){let t=[],i=[];for(;A.length;){let s=A.pop();if(s instanceof oA){if(this.refSet.has(s))continue;try{this.refSet.put(s),s=this.xref.fetch(s)}catch(a){if(!(a instanceof ge)){k(`ObjectLoader._walk - requesting all data: "${a}".`),this.refSet=null;let{manager:n}=this.xref.stream;return n.requestAllChunks()}t.push(s),i.push({begin:a.begin,end:a.end})}}if(s instanceof KA){let a=s.getBaseStreams();if(a){let n=!1;for(let r of a)r.isDataLoaded||(n=!0,i.push({begin:r.start,end:r.end}));n&&t.push(s)}}W9(s,A)}if(i.length){await this.xref.stream.manager.requestRanges(i);for(let s of t)s instanceof oA&&this.refSet.remove(s);return this._walk(t)}this.refSet=null}},eo=Symbol(),d0=Symbol(),Be=Symbol(),_i=Symbol(),Yt=Symbol(),ns=Symbol(),cr=Symbol(),Tt=Symbol(),$t=Symbol(),P=Symbol("content"),Ht=Symbol("data"),Js=Symbol(),L=Symbol("extra"),se=Symbol(),wn=Symbol(),Bc=Symbol(),Tf=Symbol(),x0=Symbol(),to=Symbol(),Wa=Symbol(),da=Symbol(),u1=Symbol(),We=Symbol(),xa=Symbol(),Ue=Symbol(),Ys=Symbol(),Ci=Symbol(),xe=Symbol(),MA=Symbol(),ue=Symbol(),ie=Symbol(),Oa=Symbol(),As=Symbol(),Qc=Symbol(),lr=Symbol(),d1=Symbol(),J0=Symbol(),rs=Symbol(),Mi=Symbol(),ma=Symbol(),di=Symbol(),pi=Symbol(),Za=Symbol(),ja=Symbol(),O9=Symbol(),de=Symbol("namespaceId"),XA=Symbol("nodeName"),qi=Symbol(),ni=Symbol(),Ec=Symbol(),xi=Symbol(),ri=Symbol(),Bt=Symbol(),Xs=Symbol(),Ti=Symbol(),Pf=Symbol("root"),ha=Symbol(),Bi=Symbol(),fc=Symbol(),Wf=Symbol(),Et=Symbol(),qt=Symbol(),Se=Symbol(),Of=Symbol(),SA=Symbol(),pa=Symbol(),ZA=Symbol(),$A=Symbol("uid"),Zt=Symbol(),me={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=>e==="http://ns.adobe.com/xdp/pdf/"},signature:{id:6,check:e=>e==="http://www.w3.org/2000/09/xmldsig#"},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>e==="http://www.w3.org/1999/XSL/Transform"},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=>e==="http://ns.adobe.com/xdp/"},xfdf:{id:12,check:e=>e==="http://ns.adobe.com/xfdf/"},xhtml:{id:13,check:e=>e==="http://www.w3.org/1999/xhtml"},xmpmeta:{id:14,check:e=>e==="http://ns.adobe.com/xmpmeta/"}},Z9={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/(10*2.54)*72,in:e=>e*72,px:e=>e},j9=/([+-]?\\d+\\.?\\d*)(.*)/;function io(e){return e.startsWith("\'")||e.startsWith(\'"\')?e.slice(1,-1):e}function GA({data:e,defaultValue:A,validate:t}){if(!e)return A;e=e.trim();let i=parseInt(e,10);return!isNaN(i)&&t(i)?i:A}function _r({data:e,defaultValue:A,validate:t}){if(!e)return A;e=e.trim();let i=parseFloat(e);return!isNaN(i)&&t(i)?i:A}function so({data:e,defaultValue:A,validate:t}){return e?(e=e.trim(),t(e)?e:A):A}function O(e,A){return so({data:e,defaultValue:A[0],validate:t=>A.includes(t)})}function hA(e,A="0"){if(A||(A="0"),!e)return hA(A);let t=e.trim().match(j9);if(!t)return hA(A);let[,i,s]=t,a=parseFloat(i);if(isNaN(a))return hA(A);if(a===0)return 0;let n=Z9[s];return n?n(a):a}function bE(e){if(!e)return{num:1,den:1};let A=e.trim().split(/\\s*:\\s*/).map(s=>parseFloat(s)).filter(s=>!isNaN(s));if(A.length===1&&A.push(1),A.length===0)return{num:1,den:1};let[t,i]=A;return{num:t,den:i}}function jt(e){return e?e.trim().split(/\\s+/).map(A=>({excluded:A[0]==="-",viewname:A.substring(1)})):[]}function X9(e,A=[0,0,0]){let[t,i,s]=A;if(!e)return{r:t,g:i,b:s};let a=e.trim().split(/\\s*,\\s*/).map(n=>Math.min(Math.max(0,parseInt(n.trim(),10)),255)).map(n=>isNaN(n)?0:n);return a.length<3?{r:t,g:i,b:s}:([t,i,s]=a,{r:t,g:i,b:s})}function V9(e){if(!e)return{x:-1,y:-1,width:-1,height:-1};let t=e.trim().split(/\\s*,\\s*/).map(r=>hA(r,"-1"));if(t.length<4||t[2]<0||t[3]<0)return{x:-1,y:-1,width:-1,height:-1};let[i,s,a,n]=t;return{x:i,y:s,width:a,height:n}}var dA=class{static get FAILURE(){return nA(this,"FAILURE",new dA(!1,null,null,null))}static get EMPTY(){return nA(this,"EMPTY",new dA(!0,null,null,null))}constructor(A,t,i,s){this.success=A,this.html=t,this.bbox=i,this.breakNode=s}isBreak(){return!!this.breakNode}static breakNode(A){return new dA(!1,null,null,A)}static success(A,t=null){return new dA(!0,A,t,null)}},uc=class{constructor(A){this.fonts=new Map,this.cache=new Map,this.warned=new Set,this.defaultFont=null,this.add(A)}add(A,t=null){for(let s of A)this.addPdfFont(s);for(let s of this.fonts.values())s.regular||(s.regular=s.italic||s.bold||s.bolditalic);if(!t||t.size===0)return;let i=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(let s of t)this.fonts.set(s,i)}addPdfFont(A){var r,g,o;let t=A.cssFontInfo,i=t.fontFamily,s=this.fonts.get(i);s||(s=Object.create(null),this.fonts.set(i,s),this.defaultFont||(this.defaultFont=s));let a="",n=parseFloat(t.fontWeight);parseFloat(t.italicAngle)!==0?a=n>=700?"bolditalic":"italic":n>=700&&(a="bold"),a||((A.name.includes("Bold")||(r=A.psName)!=null&&r.includes("Bold"))&&(a="bold"),(A.name.includes("Italic")||A.name.endsWith("It")||(g=A.psName)!=null&&g.includes("Italic")||(o=A.psName)!=null&&o.endsWith("It"))&&(a+="italic")),a||(a="regular"),s[a]=A}getDefault(){return this.defaultFont}find(A,t=!0){var r,g;let i=this.fonts.get(A)||this.cache.get(A);if(i)return i;let s=/,|-|_| |bolditalic|bold|italic|regular|it/gi,a=A.replaceAll(s,"");if(i=this.fonts.get(a),i)return this.cache.set(A,i),i;a=a.toLowerCase();let n=[];for(let[o,I]of this.fonts.entries())o.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(I);if(n.length===0)for(let[,o]of this.fonts.entries())(r=o.regular.name)!=null&&r.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(o);if(n.length===0){a=a.replaceAll(/psmt|mt/gi,"");for(let[o,I]of this.fonts.entries())o.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(I)}if(n.length===0)for(let o of this.fonts.values())(g=o.regular.name)!=null&&g.replaceAll(s,"").toLowerCase().startsWith(a)&&n.push(o);return n.length>=1?(n.length!==1&&t&&k(`XFA - Too many choices to guess the correct font: ${A}`),this.cache.set(A,n[0]),n[0]):(t&&!this.warned.has(A)&&(this.warned.add(A),k(`XFA - Cannot find the font: ${A}`)),null)}};function x1(e,A){return e.posture==="italic"?e.weight==="bold"?A.bolditalic:A.italic:e.weight==="bold"?A.bold:A.regular}function _9(e,A=!1){let t=null;if(e){let n=io(e.typeface),r=e[ie].fontFinder.find(n);t=x1(e,r)}if(!t)return{lineHeight:12,lineGap:2,lineNoGap:10};let i=e.size||10,s=t.lineHeight?Math.max(A?0:1.2,t.lineHeight):1.2,a=t.lineGap===void 0?.2:t.lineGap;return{lineHeight:s*i,lineGap:a*i,lineNoGap:Math.max(1,s-a)*i}}var z9=1.02,zr=class{constructor(A,t,i,s){if(this.lineHeight=i,this.paraMargin=t||{top:0,bottom:0,left:0,right:0},!A){[this.pdfFont,this.xfaFont]=this.defaultFont(s);return}this.xfaFont={typeface:A.typeface,posture:A.posture,weight:A.weight,size:A.size,letterSpacing:A.letterSpacing};let a=s.find(A.typeface);if(!a){[this.pdfFont,this.xfaFont]=this.defaultFont(s);return}this.pdfFont=x1(A,a),this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(s))}defaultFont(A){let t=A.find("Helvetica",!1)||A.find("Myriad Pro",!1)||A.find("Arial",!1)||A.getDefault();if(t!=null&&t.regular){let s=t.regular,n={typeface:s.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0};return[s,n]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}},dc=class{constructor(A,t,i,s){this.fontFinder=s,this.stack=[new zr(A,t,i,s)]}pushData(A,t,i){let s=this.stack.at(-1);for(let n of["typeface","posture","weight","size","letterSpacing"])A[n]||(A[n]=s.xfaFont[n]);for(let n of["top","bottom","left","right"])isNaN(t[n])&&(t[n]=s.paraMargin[n]);let a=new zr(A,t,i||s.lineHeight,this.fontFinder);a.pdfFont||(a.pdfFont=s.pdfFont),this.stack.push(a)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}},xc=class{constructor(A,t,i,s){this.glyphs=[],this.fontSelector=new dc(A,t,i,s),this.extraHeight=0}pushData(A,t,i){this.fontSelector.pushData(A,t,i)}popFont(A){return this.fontSelector.popFont()}addPara(){let A=this.fontSelector.topFont();this.extraHeight+=A.paraMargin.top+A.paraMargin.bottom}addString(A){if(!A)return;let t=this.fontSelector.topFont(),i=t.xfaFont.size;if(t.pdfFont){let s=t.xfaFont.letterSpacing,a=t.pdfFont,n=a.lineHeight||1.2,r=t.lineHeight||Math.max(1.2,n)*i,g=a.lineGap===void 0?.2:a.lineGap,o=n-g,I=Math.max(1,o)*i,c=i/1e3,l=a.defaultWidth||a.charsToGlyphs(" ")[0].width;for(let h of A.split(/[\\u2029\\n]/)){let C=a.encodeString(h).join(""),B=a.charsToGlyphs(C);for(let Q of B){let E=Q.width||l;this.glyphs.push([E*c+s,r,I,Q.unicode,!1])}this.glyphs.push([0,0,0,`\n`,!0])}this.glyphs.pop();return}for(let s of A.split(/[\\u2029\\n]/)){for(let a of s.split(""))this.glyphs.push([i,1.2*i,i,a,!1]);this.glyphs.push([0,0,0,`\n`,!0])}this.glyphs.pop()}compute(A){let t=-1,i=0,s=0,a=0,n=0,r=0,g=!1,o=!0;for(let I=0,c=this.glyphs.length;IA?(s=Math.max(s,n),n=0,a+=r,r=f,t=-1,i=0,g=!0,o=!1):(r=Math.max(f,r),i=n,n+=l,t=I);continue}if(n+l>A){a+=r,r=f,t!==-1?(I=t,s=Math.max(s,i),n=0,t=-1,i=0):(s=Math.max(s,n),n=l),g=!0,o=!1;continue}n+=l,r=Math.max(f,r)}return s=Math.max(s,n),a+=r+this.extraHeight,{width:z9*s,height:a,isBroken:g}}},DE=/^[^.[]+/,$9=/^[^\\]]+/,xt={dot:0,dotDot:1,dotHash:2,dotBracket:3,dotParen:4},Zf=new Map([["$data",(e,A)=>e.datasets?e.datasets.data:e],["$record",(e,A)=>(e.datasets?e.datasets.data:e)[Ue]()[0]],["$template",(e,A)=>e.template],["$connectionSet",(e,A)=>e.connectionSet],["$form",(e,A)=>e.form],["$layout",(e,A)=>e.layout],["$host",(e,A)=>e.host],["$dataWindow",(e,A)=>e.dataWindow],["$event",(e,A)=>e.event],["!",(e,A)=>e.datasets],["$xfa",(e,A)=>e],["xfa",(e,A)=>e],["$",(e,A)=>A]]),kE=new WeakMap;function Ax(e){return e=e.trim(),e==="*"?1/0:parseInt(e,10)||0}function jf(e,A,t=!0){let i=e.match(DE);if(!i)return null;let[s]=i,a=[{name:s,cacheName:"."+s,index:0,js:null,formCalc:null,operator:xt.dot}],n=s.length;for(;n0&&C.push(Q)}if(C.length===0&&!g&&r===0){if(A=A[MA](),!A)return null;r=-1,e=[A];continue}e=isFinite(h)?C.filter(B=>hB[h]):C.flat()}return e.length===0?null:e}function ex(e,A,t){let i=jf(t);if(!i||i.some(n=>n.operator===xt.dotDot))return null;let s=Zf.get(i[0].name),a=0;s?(e=s(e,A),a=1):e=A||e;for(let n=i.length;aA[Se]()).join("")}get[P0](){let A=Object.getPrototypeOf(this);if(!A._attributes){let t=A._attributes=new Set;for(let i of Object.getOwnPropertyNames(this)){if(this[i]===null||this[i]instanceof J||this[i]instanceof b)break;t.add(i)}}return nA(this,P0,A._attributes)}[Mi](A){let t=this;for(;t;){if(t===A)return!0;t=t[MA]()}return!1}[MA](){return this[Rt]}[xe](){return this[MA]()}[Ue](A=null){return A?this[A]:this[vA]}[Js](){let A=Object.create(null);this[P]&&(A.$content=this[P]);for(let t of Object.getOwnPropertyNames(this)){let i=this[t];i!==null&&(i instanceof J?A[t]=i[Js]():i instanceof b?i.isEmpty()||(A[t]=i.dump()):A[t]=i)}return A}[ZA](){return null}[SA](){return dA.EMPTY}*[Ys](){for(let A of this[Ue]())yield A}*[SE](A,t){for(let i of this[Ys]())if(!A||t===A.has(i[XA])){let s=this[x0](),a=i[SA](s);a.success||(this[L].failingNode=i),yield a}}[wn](){return null}[d0](A,t){this[L].children.push(A)}[x0](){}[_i]({filter:A=null,include:t=!0}){if(!this[L].generator)this[L].generator=this[SE](A,t);else{let i=this[x0](),s=this[L].failingNode[SA](i);if(!s.success)return s;s.html&&this[d0](s.html,s.bbox),delete this[L].failingNode}for(;;){let i=this[L].generator.next();if(i.done)break;let s=i.value;if(!s.success)return s;s.html&&this[d0](s.html,s.bbox)}return this[L].generator=null,dA.EMPTY}[Wf](A){this[ca]=new Set(Object.keys(A))}[FE](A){let t=this[P0],i=this[ca];return[...A].filter(s=>t.has(s)&&!i.has(s))}[ha](A,t=new Set){for(let i of this[vA])i[Ia](A,t)}[Ia](A,t){let i=this[Go](A,t);i?this[Zn](i,A,t):this[ha](A,t)}[Go](A,t){let{use:i,usehref:s}=this;if(!i&&!s)return null;let a=null,n=null,r=null,g=i;if(s?(g=s,s.startsWith("#som(")&&s.endsWith(")")?n=s.slice(5,-1):s.startsWith(".#som(")&&s.endsWith(")")?n=s.slice(6,-1):s.startsWith("#")?r=s.slice(1):s.startsWith(".#")&&(r=s.slice(2))):i.startsWith("#")?r=i.slice(1):n=i,this.use=this.usehref="",r?a=A.get(r):(a=Ni(A.get(Pf),this,n,!0,!1),a&&(a=a[0])),!a)return k(`XFA - Invalid prototype reference: ${g}.`),null;if(a[XA]!==this[XA])return k(`XFA - Incompatible prototype: ${a[XA]} !== ${this[XA]}.`),null;if(t.has(a))return k("XFA - Cycle detected in prototypes use."),null;t.add(a);let o=a[Go](A,t);return o&&a[Zn](o,A,t),a[ha](A,t),t.delete(a),a}[Zn](A,t,i){if(i.has(A)){k("XFA - Cycle detected in prototypes use.");return}!this[P]&&A[P]&&(this[P]=A[P]),new Set(i).add(A);for(let a of this[FE](A[ca]))this[a]=A[a],this[ca]&&this[ca].add(a);for(let a of Object.getOwnPropertyNames(this)){if(this[P0].has(a))continue;let n=this[a],r=A[a];if(n instanceof b){for(let g of n[vA])g[Ia](t,i);for(let g=n[vA].length,o=r[vA].length;gJ[Ro](t)):typeof A=="object"&&A!==null?Object.assign({},A):A}[Tt](){let A=Object.create(Object.getPrototypeOf(this));for(let t of Object.getOwnPropertySymbols(this))try{A[t]=this[t]}catch(i){nA(A,t,this[t])}A[$A]=`${A[XA]}${mc++}`,A[vA]=[];for(let t of Object.getOwnPropertyNames(this)){if(this[P0].has(t)){A[t]=J[Ro](this[t]);continue}let i=this[t];A[t]=i instanceof b?new b(i[Ca]):null}for(let t of this[vA]){let i=t[XA],s=t[Tt]();A[vA].push(s),s[Rt]=A,A[i]===null?A[i]=s:A[i][vA].push(s)}return A}[Ue](A=null){return A?this[vA].filter(t=>t[XA]===A):this[vA]}[to](A){return this[A]}[Wa](A,t,i=!0){return Array.from(this[da](A,t,i))}*[da](A,t,i=!0){if(A==="parent"){yield this[Rt];return}for(let s of this[vA])s[XA]===A&&(yield s),s.name===A&&(yield s),(t||s[Za]())&&(yield*s[da](A,t,!1));i&&this[P0].has(A)&&(yield new Xa(this,A,this[A]))}},b=class{constructor(A=1/0){this[Ca]=A,this[vA]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(A){return this[vA].length<=this[Ca]?(this[vA].push(A),!0):(k(`XFA - node "${A[XA]}" accepts no more than ${this[Ca]} children`),!1)}isEmpty(){return this[vA].length===0}dump(){return this[vA].length===1?this[vA][0][Js]():this[vA].map(A=>A[Js]())}[Tt](){let A=new b(this[Ca]);return A[vA]=this[vA].map(t=>t[Tt]()),A}get children(){return this[vA]}clear(){this[vA].length=0}},Xa=class{constructor(A,t,i){this[Rt]=A,this[XA]=t,this[P]=i,this[$t]=!1,this[$A]=`attribute${mc++}`}[MA](){return this[Rt]}[rs](){return!0}[u1](){return this[P].trim()}[Et](A){A=A.value||"",this[P]=A.toString()}[Se](){return this[P]}[Mi](A){return this[Rt]===A||this[Rt][Mi](A)}},Jt=class extends J{constructor(A,t,i={}){if(super(A,t),this[P]="",this[Si]=null,t!=="#text"){let s=new Map;this[a0]=s;for(let[a,n]of Object.entries(i))s.set(a,new Xa(this,a,n));if(i.hasOwnProperty(qi)){let a=i[qi].xfa.dataNode;a!==void 0&&(a==="dataGroup"?this[Si]=!1:a==="dataValue"&&(this[Si]=!0))}}this[$t]=!1}[pa](A){let t=this[XA];if(t==="#text"){A.push(ls(this[P]));return}let i=Yo(t),s=this[de]===Xf?"xfa:":"";A.push(`<${s}${i}`);for(let[a,n]of this[a0].entries()){let r=Yo(a);A.push(` ${r}="${ls(n[P])}"`)}if(this[Si]!==null&&(this[Si]?A.push(\' xfa:dataNode="dataValue"\'):A.push(\' xfa:dataNode="dataGroup"\')),!this[P]&&this[vA].length===0){A.push("/>");return}if(A.push(">"),this[P])typeof this[P]=="string"?A.push(ls(this[P])):this[P][pa](A);else for(let a of this[vA])a[pa](A);A.push(``)}[ni](A){if(this[P]){let t=new Jt(this[de],"#text");this[Be](t),t[P]=this[P],this[P]=""}return this[Be](A),!0}[xi](A){this[P]+=A}[se](){if(this[P]&&this[vA].length>0){let A=new Jt(this[de],"#text");this[Be](A),A[P]=this[P],delete this[P]}}[SA](){return this[XA]==="#text"?dA.success({name:"#text",value:this[P]}):dA.EMPTY}[Ue](A=null){return A?this[vA].filter(t=>t[XA]===A):this[vA]}[Tf](){return this[a0]}[to](A){let t=this[a0].get(A);return t!==void 0?t:this[Ue](A)}*[da](A,t){let i=this[a0].get(A);i&&(yield i);for(let s of this[vA])s[XA]===A&&(yield s),t&&(yield*s[da](A,t))}*[Bc](A,t){let i=this[a0].get(A);i&&(!t||!i[$t])&&(yield i);for(let s of this[vA])yield*s[Bc](A,t)}*[xa](A,t,i){for(let s of this[vA])s[XA]===A&&(!i||!s[$t])&&(yield s),t&&(yield*s[xa](A,t,i))}[rs](){return this[Si]===null?this[vA].length===0||this[vA][0][de]===me.xhtml.id:this[Si]}[u1](){return this[Si]===null?this[vA].length===0?this[P].trim():this[vA][0][de]===me.xhtml.id?this[vA][0][Se]().trim():null:this[P].trim()}[Et](A){A=A.value||"",this[P]=A.toString()}[Js](A=!1){let t=Object.create(null);A&&(t.$ns=this[de]),this[P]&&(t.$content=this[P]),t.$name=this[XA],t.children=[];for(let i of this[vA])t.children.push(i[Js](A));t.attributes=Object.create(null);for(let[i,s]of this[a0])t.attributes[i]=s[P];return t}},ce=class extends J{constructor(A,t){super(A,t),this[P]=""}[xi](A){this[P]+=A}[se](){}},_A=class extends ce{constructor(A,t,i){super(A,t),this[jn]=i}[se](){this[P]=so({data:this[P],defaultValue:this[jn][0],validate:A=>this[jn].includes(A)})}[Yt](A){super[Yt](A),delete this[jn]}},qA=class extends ce{[se](){this[P]=this[P].trim()}},yt=class extends ce{constructor(A,t,i,s){super(A,t),this[No]=i,this[Mo]=s}[se](){this[P]=GA({data:this[P],defaultValue:this[No],validate:this[Mo]})}[Yt](A){super[Yt](A),delete this[No],delete this[Mo]}},pe=class extends yt{constructor(A,t){super(A,t,0,i=>i===1)}},$r=class extends yt{constructor(A,t){super(A,t,1,i=>i===0)}};function NA(e){return typeof e=="string"?"0px":Number.isInteger(e)?`${e}px`:`${e.toFixed(2)}px`}var RE={anchorType(e,A){let t=e[xe]();if(!(!t||t.layout&&t.layout!=="position"))switch("transform"in A||(A.transform=""),e.anchorType){case"bottomCenter":A.transform+="translate(-50%, -100%)";break;case"bottomLeft":A.transform+="translate(0,-100%)";break;case"bottomRight":A.transform+="translate(-100%,-100%)";break;case"middleCenter":A.transform+="translate(-50%,-50%)";break;case"middleLeft":A.transform+="translate(0,-50%)";break;case"middleRight":A.transform+="translate(-100%,-50%)";break;case"topCenter":A.transform+="translate(-50%,0)";break;case"topRight":A.transform+="translate(-100%,0)";break}},dimensions(e,A){var a;let t=e[xe](),i=e.w,s=e.h;if((a=t.layout)!=null&&a.includes("row")){let n=t[L],r=e.colSpan,g;r===-1?(g=n.columnWidths.slice(n.currentColumn).reduce((o,I)=>o+I,0),n.currentColumn=0):(g=n.columnWidths.slice(n.currentColumn,n.currentColumn+r).reduce((o,I)=>o+I,0),n.currentColumn=(n.currentColumn+e.colSpan)%n.columnWidths.length),isNaN(g)||(i=e.w=g)}A.width=i!==""?NA(i):"auto",A.height=s!==""?NA(s):"auto"},position(e,A){let t=e[xe]();t!=null&&t.layout&&t.layout!=="position"||(A.position="absolute",A.left=NA(e.x),A.top=NA(e.y))},rotate(e,A){e.rotate&&("transform"in A||(A.transform=""),A.transform+=`rotate(-${e.rotate}deg)`,A.transformOrigin="top left")},presence(e,A){switch(e.presence){case"invisible":A.visibility="hidden";break;case"hidden":case"inactive":A.display="none";break}},hAlign(e,A){if(e[XA]==="para")switch(e.hAlign){case"justifyAll":A.textAlign="justify-all";break;case"radix":A.textAlign="left";break;default:A.textAlign=e.hAlign}else switch(e.hAlign){case"left":A.alignSelf="start";break;case"center":A.alignSelf="center";break;case"right":A.alignSelf="end";break}},margin(e,A){e.margin&&(A.margin=e.margin[ZA]().margin)}};function Vf(e,A){e[xe]().layout==="position"&&(e.minW>0&&(A.minWidth=NA(e.minW)),e.maxW>0&&(A.maxWidth=NA(e.maxW)),e.minH>0&&(A.minHeight=NA(e.minH)),e.maxH>0&&(A.maxHeight=NA(e.maxH)))}function NE(e,A,t,i,s,a){let n=new xc(A,t,i,s);return typeof e=="string"?n.addString(e):e[ri](n),n.compute(a)}function m1(e,A){let t=null,i=null,s=!1;if((!e.w||!e.h)&&e.value){let a=0,n=0;e.margin&&(a=e.margin.leftInset+e.margin.rightInset,n=e.margin.topInset+e.margin.bottomInset);let r=null,g=null;e.para&&(g=Object.create(null),r=e.para.lineHeight===""?null:e.para.lineHeight,g.top=e.para.spaceAbove===""?0:e.para.spaceAbove,g.bottom=e.para.spaceBelow===""?0:e.para.spaceBelow,g.left=e.para.marginLeft===""?0:e.para.marginLeft,g.right=e.para.marginRight===""?0:e.para.marginRight);let o=e.font;if(!o){let l=e[ue](),h=e[MA]();for(;h&&h!==l;){if(h.font){o=h.font;break}h=h[MA]()}}let I=(e.w||A.width)-a,c=e[ie].fontFinder;if(e.value.exData&&e.value.exData[P]&&e.value.exData.contentType==="text/html"){let l=NE(e.value.exData[P],o,g,r,c,I);i=l.width,t=l.height,s=l.isBroken}else{let l=e.value[Se]();if(l){let h=NE(l,o,g,r,c,I);i=h.width,t=h.height,s=h.isBroken}}i!==null&&!e.w&&(i+=a),t!==null&&!e.h&&(t+=n)}return{w:i,h:t,isBroken:s}}function _f(e,A,t){let i;if(e.w!==""&&e.h!=="")i=[e.x,e.y,e.w,e.h];else{if(!t)return null;let s=e.w;if(s===""){if(e.maxW===0){let n=e[xe]();s=n.layout==="position"&&n.w!==""?0:e.minW}else s=Math.min(e.maxW,t.width);A.attributes.style.width=NA(s)}let a=e.h;if(a===""){if(e.maxH===0){let n=e[xe]();a=n.layout==="position"&&n.h!==""?0:e.minH}else a=Math.min(e.maxH,t.height);A.attributes.style.height=NA(a)}i=[e.x,e.y,s,a]}return i}function ao(e){var t;let A=e[xe]();if((t=A.layout)!=null&&t.includes("row")){let i=A[L],s=e.colSpan,a;s===-1?a=i.columnWidths.slice(i.currentColumn).reduce((n,r)=>n+r,0):a=i.columnWidths.slice(i.currentColumn,i.currentColumn+s).reduce((n,r)=>n+r,0),isNaN(a)||(e.w=a)}A.layout&&A.layout!=="position"&&(e.x=e.y=0),e.layout==="table"&&e.w===""&&Array.isArray(e.columnWidths)&&(e.w=e.columnWidths.reduce((i,s)=>i+s,0))}function zf(e){switch(e.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 lt(e,...A){let t=Object.create(null);for(let i of A){let s=e[i];if(s!==null){if(RE.hasOwnProperty(i)){RE[i](e,t);continue}if(s instanceof J){let a=s[ZA]();a?Object.assign(t,a):k(`(DEBUG) - XFA - style for ${i} not implemented yet`)}}}return t}function m0(e,A){let{attributes:t}=A,{style:i}=t,s={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(t.class.push("xfaWrapped"),e.border){let{widths:a,insets:n}=e.border[L],r,g,o=n[0],I=n[3],c=n[0]+n[2],l=n[1]+n[3];switch(e.border.hand){case"even":o-=a[0]/2,I-=a[3]/2,r=`calc(100% + ${(a[1]+a[3])/2-l}px)`,g=`calc(100% + ${(a[0]+a[2])/2-c}px)`;break;case"left":o-=a[0],I-=a[3],r=`calc(100% + ${a[1]+a[3]-l}px)`,g=`calc(100% + ${a[0]+a[2]-c}px)`;break;case"right":r=l?`calc(100% - ${l}px)`:"100%",g=c?`calc(100% - ${c}px)`:"100%";break}let h=["xfaBorder"];Vs(e.border)&&h.push("xfaPrintOnly");let C={name:"div",attributes:{class:h,style:{top:`${o}px`,left:`${I}px`,width:r,height:g}},children:[]};for(let B of["border","borderWidth","borderColor","borderRadius","borderStyle"])i[B]!==void 0&&(C.attributes.style[B]=i[B],delete i[B]);s.children.push(C,A)}else s.children.push(A);for(let a of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])i[a]!==void 0&&(s.attributes.style[a]=i[a],delete i[a]);return s.attributes.style.position=i.position==="absolute"?"absolute":"relative",delete i.position,i.alignSelf&&(s.attributes.style.alignSelf=i.alignSelf,delete i.alignSelf),s}function $f(e){let A=hA(e.textIndent,"0px");if(A>=0)return;let i="padding"+((e.textAlign==="right"?"right":"left")==="left"?"Left":"Right"),s=hA(e[i],"0px");e[i]=`${s-A}px`}function p1(e,A){switch(e.access){case"nonInteractive":A.push("xfaNonInteractive");break;case"readOnly":A.push("xfaReadOnly");break;case"protected":A.push("xfaDisabled");break}}function Vs(e){return e.relevant.length>0&&!e.relevant[0].excluded&&e.relevant[0].viewname==="print"}function Au(e){let A=e[ue]()[L].paraStack;return A.length?A.at(-1):null}function eu(e,A,t){var i;if((i=t.attributes.class)!=null&&i.includes("xfaRich")){A&&(e.h===""&&(A.height="auto"),e.w===""&&(A.width="auto"));let s=Au(e);if(s){let a=t.attributes.style;switch(a.display="flex",a.flexDirection="column",s.vAlign){case"top":a.justifyContent="start";break;case"bottom":a.justifyContent="end";break;case"middle":a.justifyContent="center";break}let n=s[ZA]();for(let[r,g]of Object.entries(n))r in a||(a[r]=g)}}}function tu(e,A,t,i){if(!t){delete i.fontFamily;return}let s=io(e.typeface);i.fontFamily=`"${s}"`;let a=t.find(s);if(a){let{fontFamily:n}=a.regular.cssFontInfo;n!==s&&(i.fontFamily=`"${n}"`);let r=Au(A);if(r&&r.lineHeight!==""||i.lineHeight)return;let g=x1(e,a);g&&(i.lineHeight=Math.max(1.2,g.lineHeight))}}function iu(e){let A=Qr(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return A?A.href:null}function su(e,A){return{name:"div",attributes:{class:[e.layout==="lr-tb"?"xfaLr":"xfaRl"]},children:A}}function au(e){if(!e[L])return null;let t={name:"div",attributes:e[L].attributes,children:e[L].children};if(e[L].failingNode){let i=e[L].failingNode[wn]();i&&(e.layout.endsWith("-tb")?t.children.push(su(e,[i])):t.children.push(i))}return t.children.length===0?null:t}function nu(e,A,t){let i=e[L],s=i.availableSpace,[a,n,r,g]=t;switch(e.layout){case"position":{i.width=Math.max(i.width,a+r),i.height=Math.max(i.height,n+g),i.children.push(A);break}case"lr-tb":case"rl-tb":(!i.line||i.attempt===1)&&(i.line=su(e,[]),i.children.push(i.line),i.numberInLine=0),i.numberInLine+=1,i.line.children.push(A),i.attempt===0?(i.currentWidth+=r,i.height=Math.max(i.height,i.prevHeight+g)):(i.currentWidth=r,i.prevHeight=i.height,i.height+=g,i.attempt=0),i.width=Math.max(i.width,i.currentWidth);break;case"rl-row":case"row":{i.children.push(A),i.width+=r,i.height=Math.max(i.height,g);let o=NA(i.height);for(let I of i.children)I.attributes.style.height=o;break}case"table":{i.width=Math.min(s.width,Math.max(i.width,r)),i.height+=g,i.children.push(A);break}case"tb":{i.width=Math.min(s.width,Math.max(i.width,r)),i.height+=g,i.children.push(A);break}}}function ru(e){let A=e[L].availableSpace,t=e.margin?e.margin.topInset+e.margin.bottomInset:0,i=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return e[L].attempt===0?{width:A.width-i-e[L].currentWidth,height:A.height-t-e[L].prevHeight}:{width:A.width-i,height:A.height-t-e[L].height};case"rl-row":case"row":return{width:e[L].columnWidths.slice(e[L].currentColumn).reduce((a,n)=>a+n),height:A.height-i};case"table":case"tb":return{width:A.width-i,height:A.height-t-e[L].height};case"position":default:return A}}function tx(e){let A=e.w===""?NaN:e.w,t=e.h===""?NaN:e.h,[i,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[i,s]=[A/2,t];break;case"bottomLeft":[i,s]=[0,t];break;case"bottomRight":[i,s]=[A,t];break;case"middleCenter":[i,s]=[A/2,t/2];break;case"middleLeft":[i,s]=[0,t/2];break;case"middleRight":[i,s]=[A,t/2];break;case"topCenter":[i,s]=[A/2,0];break;case"topRight":[i,s]=[A,0];break}let a,n;switch(e.rotate||0){case 0:[a,n]=[-i,-s];break;case 90:[a,n]=[-s,i],[A,t]=[t,-A];break;case 180:[a,n]=[i,s],[A,t]=[-A,-t];break;case 270:[a,n]=[s,-i],[A,t]=[-t,A];break}return[e.x+a+Math.min(0,A),e.y+n+Math.min(0,t),Math.abs(A),Math.abs(t)]}function no(e,A){var g;if(e[ue]()[L].firstUnsplittable===null||e.w===0||e.h===0)return!0;let t=2,i=e[xe](),s=((g=i[L])==null?void 0:g.attempt)||0,[,a,n,r]=tx(e);switch(i.layout){case"lr-tb":case"rl-tb":return s===0?e[ue]()[L].noLayoutFailure?e.w!==""?Math.round(n-A.width)<=t:A.width>t:e.h!==""&&Math.round(r-A.height)>t?!1:e.w!==""?Math.round(n-A.width)<=t?!0:i[L].numberInLine===0?A.height>t:!1:A.width>t:e[ue]()[L].noLayoutFailure?!0:e.h!==""&&Math.round(r-A.height)>t?!1:e.w===""||Math.round(n-A.width)<=t?A.height>t:i[pi]()?!1:A.height>t;case"table":case"tb":return e[ue]()[L].noLayoutFailure?!0:e.h!==""&&!e[di]()?Math.round(r-A.height)<=t:e.w===""||Math.round(n-A.width)<=t?A.height>t:i[pi]()?!1:A.height>t;case"position":if(e[ue]()[L].noLayoutFailure||e.h===""||Math.round(r+a-A.height)<=t)return!0;let o=e[ue]()[L].currentContentArea;return r+a>o.h;case"rl-row":case"row":return e[ue]()[L].noLayoutFailure?!0:e.h!==""?Math.round(r-A.height)<=t:!0;default:return!0}}var eA=me.template.id,p0="http://www.w3.org/2000/svg",Ag=2,ix=3,sx=5e3,ax=/^H(\\d+)$/,nx=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"]),rx=[[[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 GE(e){if(!e||!e.border)return{w:0,h:0};let A=e.border[We]();return A?{w:A.widths[0]+A.widths[2]+A.insets[0]+A.insets[2],h:A.widths[1]+A.widths[3]+A.insets[1]+A.insets[3]}:{w:0,h:0}}function w1(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function y1(e,A){if(!e.value){let t=new an({});e[Be](t),e.value=t}e.value[Et](A)}function*b1(e){for(let A of e[Ue]()){if(A instanceof en){yield*A[Ys]();continue}yield A}}function yn(e){var A;return((A=e.validate)==null?void 0:A.nullTest)==="error"}function ro(e){for(;e;){if(!e.traversal){e[qt]=e[MA]()[qt];return}if(e[qt])return;let A=null;for(let s of e.traversal[Ue]())if(s.operation==="next"){A=s;break}if(!A||!A.ref){e[qt]=e[MA]()[qt];return}let t=e[ue]();e[qt]=++t[qt];let i=t[Bi](A.ref,e);if(!i)return;e=i[0]}}function go(e,A){var i;let t=e.assist;if(t){let s=t[SA]();s&&(A.title=s);let n=t.role.match(ax);if(n){let r="heading",g=n[1];A.role=r,A["aria-level"]=g}}if(e.layout==="table")A.role="table";else if(e.layout==="row")A.role="row";else{let s=e[MA]();s.layout==="row"&&(A.role=((i=s.assist)==null?void 0:i.role)==="TH"?"columnheader":"cell")}}function N0(e){if(!e.assist)return null;let A=e.assist;return A.speak&&A.speak[P]!==""?A.speak[P]:A.toolTip?A.toolTip[P]:null}function A0(e){return dA.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function oo(e){let A=e[ue]();A[L].firstUnsplittable===null&&(A[L].firstUnsplittable=e,A[L].noLayoutFailure=!0)}function Io(e){let A=e[ue]();A[L].firstUnsplittable===e&&(A[L].noLayoutFailure=!1)}function UE(e){if(e[L]||(e[L]=Object.create(null),e.targetType==="auto"))return!1;let A=e[ue](),t=null;if(e.target){if(t=A[Bi](e.target,e[MA]()),!t)return!1;t=t[0]}let{currentPageArea:i,currentContentArea:s}=A[L];if(e.targetType==="pageArea")return t instanceof zi||(t=null),e.startNew?(e[L].target=t||i,!0):t&&t!==i?(e[L].target=t,!0):!1;t instanceof _a||(t=null);let a=t&&t[MA](),n,r=a;if(e.startNew)if(t){let g=a.contentArea.children,o=g.indexOf(s),I=g.indexOf(t);o!==-1&&oe,i[L].noLayoutFailure=!0;let n=A[SA](t);e[d0](n.html,n.bbox),i[L].noLayoutFailure=s,A[xe]=a}var pc=class extends qA{constructor(A){super(eA,"appearanceFilter"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},eg=class extends J{constructor(A){super(eA,"arc",!0),this.circular=GA({data:A.circular,defaultValue:0,validate:t=>t===1}),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.startAngle=_r({data:A.startAngle,defaultValue:0,validate:t=>!0}),this.sweepAngle=_r({data:A.sweepAngle,defaultValue:360,validate:t=>!0}),this.use=A.use||"",this.usehref=A.usehref||"",this.edge=null,this.fill=null}[SA](){var g;let A=this.edge||new G0({}),t=A[ZA](),i=Object.create(null);((g=this.fill)==null?void 0:g.presence)==="visible"?Object.assign(i,this.fill[ZA]()):i.fill="transparent",i.strokeWidth=NA(A.presence==="visible"?A.thickness:0),i.stroke=t.color;let s,a={xmlns:p0,style:{width:"100%",height:"100%",overflow:"visible"}};if(this.sweepAngle===360)s={name:"ellipse",attributes:{xmlns:p0,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:i}};else{let o=this.startAngle*Math.PI/180,I=this.sweepAngle*Math.PI/180,c=this.sweepAngle>180?1:0,[l,h,C,B]=[50*(1+Math.cos(o)),50*(1-Math.sin(o)),50*(1+Math.cos(o+I)),50*(1-Math.sin(o+I))];s={name:"path",attributes:{xmlns:p0,d:`M ${l} ${h} A 50 50 0 ${c} 0 ${C} ${B}`,vectorEffect:"non-scaling-stroke",style:i}},Object.assign(a,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}let n={name:"svg",children:[s],attributes:a},r=this[MA]()[MA]();return w1(r)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[n]}):(n.attributes.style.position="absolute",dA.success(n))}},wc=class extends J{constructor(A){super(eA,"area",!0),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.id=A.id||"",this.name=A.name||"",this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.desc=null,this.extras=null,this.area=new b,this.draw=new b,this.exObject=new b,this.exclGroup=new b,this.field=new b,this.subform=new b,this.subformSet=new b}*[Ys](){yield*b1(this)}[Za](){return!0}[J0](){return!0}[d0](A,t){let[i,s,a,n]=t;this[L].width=Math.max(this[L].width,i+a),this[L].height=Math.max(this[L].height,s+n),this[L].children.push(A)}[x0](){return this[L].availableSpace}[SA](A){let t=lt(this,"position"),i={style:t,id:this[$A],class:["xfaArea"]};Vs(this)&&i.class.push("xfaPrintOnly"),this.name&&(i.xfaName=this.name);let s=[];this[L]={children:s,width:0,height:0,availableSpace:A};let a=this[_i]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!a.success)return a.isBreak()?a:(delete this[L],dA.FAILURE);t.width=NA(this[L].width),t.height=NA(this[L].height);let n={name:"div",attributes:i,children:s},r=[this.x,this.y,this[L].width,this[L].height];return delete this[L],dA.success(n,r)}},yc=class extends J{constructor(A){super(eA,"assist",!0),this.id=A.id||"",this.role=A.role||"",this.use=A.use||"",this.usehref=A.usehref||"",this.speak=null,this.toolTip=null}[SA](){var A;return((A=this.toolTip)==null?void 0:A[P])||null}},bc=class extends J{constructor(A){super(eA,"barcode",!0),this.charEncoding=so({data:A.charEncoding?A.charEncoding.toLowerCase():"",defaultValue:"",validate:t=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(t)||t.match(/iso-8859-\\d{2}/)}),this.checksum=O(A.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),this.dataColumnCount=GA({data:A.dataColumnCount,defaultValue:-1,validate:t=>t>=0}),this.dataLength=GA({data:A.dataLength,defaultValue:-1,validate:t=>t>=0}),this.dataPrep=O(A.dataPrep,["none","flateCompress"]),this.dataRowCount=GA({data:A.dataRowCount,defaultValue:-1,validate:t=>t>=0}),this.endChar=A.endChar||"",this.errorCorrectionLevel=GA({data:A.errorCorrectionLevel,defaultValue:-1,validate:t=>t>=0&&t<=8}),this.id=A.id||"",this.moduleHeight=hA(A.moduleHeight,"5mm"),this.moduleWidth=hA(A.moduleWidth,"0.25mm"),this.printCheckDigit=GA({data:A.printCheckDigit,defaultValue:0,validate:t=>t===1}),this.rowColumnRatio=bE(A.rowColumnRatio),this.startChar=A.startChar||"",this.textLocation=O(A.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),this.truncate=GA({data:A.truncate,defaultValue:0,validate:t=>t===1}),this.type=O(A.type?A.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=O(A.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),this.use=A.use||"",this.usehref=A.usehref||"",this.wideNarrowRatio=bE(A.wideNarrowRatio),this.encrypt=null,this.extras=null}},Dc=class extends J{constructor(A){super(eA,"bind",!0),this.match=O(A.match,["once","dataRef","global","none"]),this.ref=A.ref||"",this.picture=null}},Va=class extends J{constructor(A){super(eA,"bindItems"),this.connection=A.connection||"",this.labelRef=A.labelRef||"",this.ref=A.ref||"",this.valueRef=A.valueRef||""}},kc=class extends J{constructor(A){super(eA,"bookend"),this.id=A.id||"",this.leader=A.leader||"",this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||""}},Sc=class extends pe{constructor(A){super(eA,"boolean"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[SA](A){return A0(this[P]===1?"1":"0")}},tg=class extends J{constructor(A){super(eA,"border",!0),this.break=O(A.break,["close","open"]),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.corner=new b(4),this.edge=new b(4),this.extras=null,this.fill=null,this.margin=null}[We](){if(!this[L]){let A=this.edge.children.slice();if(A.length<4){let s=A.at(-1)||new G0({});for(let a=A.length;a<4;a++)A.push(s)}let t=A.map(s=>s.thickness),i=[0,0,0,0];this.margin&&(i[0]=this.margin.topInset,i[1]=this.margin.rightInset,i[2]=this.margin.bottomInset,i[3]=this.margin.leftInset),this[L]={widths:t,insets:i,edges:A}}return this[L]}[ZA](){var s;let{edges:A}=this[We](),t=A.map(a=>{let n=a[ZA]();return n.color||(n.color="#000000"),n}),i=Object.create(null);if(this.margin&&Object.assign(i,this.margin[ZA]()),((s=this.fill)==null?void 0:s.presence)==="visible"&&Object.assign(i,this.fill[ZA]()),this.corner.children.some(a=>a.radius!==0)){let a=this.corner.children.map(n=>n[ZA]());if(a.length===2||a.length===3){let n=a.at(-1);for(let r=a.length;r<4;r++)a.push(n)}i.borderRadius=a.map(n=>n.radius).join(" ")}switch(this.presence){case"invisible":case"hidden":i.borderStyle="";break;case"inactive":i.borderStyle="none";break;default:i.borderStyle=t.map(a=>a.style).join(" ");break}return i.borderWidth=t.map(a=>a.width).join(" "),i.borderColor=t.map(a=>a.color).join(" "),i}},Fc=class extends J{constructor(A){super(eA,"break",!0),this.after=O(A.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.afterTarget=A.afterTarget||"",this.before=O(A.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.beforeTarget=A.beforeTarget||"",this.bookendLeader=A.bookendLeader||"",this.bookendTrailer=A.bookendTrailer||"",this.id=A.id||"",this.overflowLeader=A.overflowLeader||"",this.overflowTarget=A.overflowTarget||"",this.overflowTrailer=A.overflowTrailer||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},ig=class extends J{constructor(A){super(eA,"breakAfter",!0),this.id=A.id||"",this.leader=A.leader||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.target=A.target||"",this.targetType=O(A.targetType,["auto","contentArea","pageArea"]),this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||"",this.script=null}},sg=class extends J{constructor(A){super(eA,"breakBefore",!0),this.id=A.id||"",this.leader=A.leader||"",this.startNew=GA({data:A.startNew,defaultValue:0,validate:t=>t===1}),this.target=A.target||"",this.targetType=O(A.targetType,["auto","contentArea","pageArea"]),this.trailer=A.trailer||"",this.use=A.use||"",this.usehref=A.usehref||"",this.script=null}[SA](A){return this[L]={},dA.FAILURE}},Rc=class extends J{constructor(A){super(eA,"button",!0),this.highlight=O(A.highlight,["inverted","none","outline","push"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[SA](A){let i=this[MA]()[MA](),s={name:"button",attributes:{id:this[$A],class:["xfaButton"],style:{}},children:[]};for(let a of i.event.children){if(a.activity!=="click"||!a.script)continue;let n=zE(a.script[P]);if(!n)continue;let r=iu(n.url);r&&s.children.push({name:"a",attributes:{id:"link"+this[$A],href:r,newWindow:n.newWindow,class:["xfaLink"],style:{}},children:[]})}return dA.success(s)}},Nc=class extends J{constructor(A){super(eA,"calculate",!0),this.id=A.id||"",this.override=O(A.override,["disabled","error","ignore","warning"]),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.message=null,this.script=null}},Gc=class extends J{constructor(A){super(eA,"caption",!0),this.id=A.id||"",this.placement=O(A.placement,["left","bottom","inline","right","top"]),this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.reserve=Math.ceil(hA(A.reserve)),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.font=null,this.margin=null,this.para=null,this.value=null}[Et](A){y1(this,A)}[We](A){if(!this[L]){let{width:t,height:i}=A;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":i=this.reserve<=0?i:this.reserve;break}this[L]=m1(this,{width:t,height:i})}return this[L]}[SA](A){if(!this.value)return dA.EMPTY;this[Xs]();let t=this.value[SA](A).html;if(!t)return this[Bt](),dA.EMPTY;let i=this.reserve;if(this.reserve<=0){let{w:n,h:r}=this[We](A);switch(this.placement){case"left":case"right":case"inline":this.reserve=n;break;case"top":case"bottom":this.reserve=r;break}}let s=[];typeof t=="string"?s.push({name:"#text",value:t}):s.push(t);let a=lt(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(a.width=NA(this.reserve));break;case"top":case"bottom":this.reserve>0&&(a.height=NA(this.reserve));break}return eu(this,null,t),this[Bt](),this.reserve=i,dA.success({name:"div",attributes:{style:a,class:["xfaCaption"]},children:s})}},Uc=class extends qA{constructor(A){super(eA,"certificate"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},Mc=class extends J{constructor(A){super(eA,"certificates",!0),this.credentialServerPolicy=O(A.credentialServerPolicy,["optional","required"]),this.id=A.id||"",this.url=A.url||"",this.urlPolicy=A.urlPolicy||"",this.use=A.use||"",this.usehref=A.usehref||"",this.encryption=null,this.issuers=null,this.keyUsage=null,this.oids=null,this.signing=null,this.subjectDNs=null}},ag=class extends J{constructor(A){super(eA,"checkButton",!0),this.id=A.id||"",this.mark=O(A.mark,["default","check","circle","cross","diamond","square","star"]),this.shape=O(A.shape,["square","round"]),this.size=hA(A.size,"10pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){var Q,E,f;let t=lt("margin"),i=NA(this.size);t.width=t.height=i;let s,a,n,r=this[MA]()[MA](),g=r.items.children.length&&r.items.children[0][SA]().html||[],o={on:(g[0]!==void 0?g[0]:"on").toString(),off:(g[1]!==void 0?g[1]:"off").toString()},c=(((Q=r.value)==null?void 0:Q[Se]())||"off")===o.on||void 0,l=r[xe](),h=r[$A],C;l instanceof og?(n=l[$A],s="radio",a="xfaRadio",C=((E=l[Ht])==null?void 0:E[$A])||l[$A]):(s="checkbox",a="xfaCheckbox",C=((f=r[Ht])==null?void 0:f[$A])||r[$A]);let B={name:"input",attributes:{class:[a],style:t,fieldId:h,dataId:C,type:s,checked:c,xfaOn:o.on,xfaOff:o.off,"aria-label":N0(r),"aria-required":!1}};return n&&(B.attributes.name=n),yn(r)&&(B.attributes["aria-required"]=!0,B.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[B]})}},ng=class extends J{constructor(A){super(eA,"choiceList",!0),this.commitOn=O(A.commitOn,["select","exit"]),this.id=A.id||"",this.open=O(A.open,["userControl","always","multiSelect","onEntry"]),this.textEntry=GA({data:A.textEntry,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){var o,I,c;let t=lt(this,"border","margin"),s=this[MA]()[MA](),n={fontSize:`calc(${((o=s.font)==null?void 0:o.size)||10}px * var(--scale-factor))`},r=[];if(s.items.children.length>0){let l=s.items,h=0,C=0;l.children.length===2&&(h=l.children[0].save,C=1-h);let B=l.children[h][SA]().html,Q=l.children[C][SA]().html,E=!1,f=((I=s.value)==null?void 0:I[Se]())||"";for(let u=0,d=B.length;ut>=0}),this.use=A.use||"",this.usehref=A.usehref||""}},Jc=class extends J{constructor(A){super(eA,"connect",!0),this.connection=A.connection||"",this.id=A.id||"",this.ref=A.ref||"",this.usage=O(A.usage,["exportAndImport","exportOnly","importOnly"]),this.use=A.use||"",this.usehref=A.usehref||"",this.picture=null}},_a=class extends J{constructor(A){super(eA,"contentArea",!0),this.h=hA(A.h),this.id=A.id||"",this.name=A.name||"",this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.w=hA(A.w),this.x=hA(A.x,"0pt"),this.y=hA(A.y,"0pt"),this.desc=null,this.extras=null}[SA](A){let t=NA(this.x),i=NA(this.y),s={left:t,top:i,width:NA(this.w),height:NA(this.h)},a=["xfaContentarea"];return Vs(this)&&a.push("xfaPrintOnly"),dA.success({name:"div",children:[],attributes:{style:s,class:a,id:this[$A]}})}},rg=class extends J{constructor(A){super(eA,"corner",!0),this.id=A.id||"",this.inverted=GA({data:A.inverted,defaultValue:0,validate:t=>t===1}),this.join=O(A.join,["square","round"]),this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.radius=hA(A.radius),this.stroke=O(A.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=hA(A.thickness,"0.5pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](){let A=lt(this,"visibility");return A.radius=NA(this.join==="square"?0:this.radius),A}},Yc=class extends ce{constructor(A){super(eA,"date"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},Kc=class extends ce{constructor(A){super(eA,"dateTime"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},vc=class extends J{constructor(A){super(eA,"dateTimeEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.picker=O(A.picker,["host","none"]),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a;let t=lt(this,"border","font","margin"),i=this[MA]()[MA](),s={name:"input",attributes:{type:"text",fieldId:i[$A],dataId:((a=i[Ht])==null?void 0:a[$A])||i[$A],class:["xfaTextfield"],style:t,"aria-label":N0(i),"aria-required":!1}};return yn(i)&&(s.attributes["aria-required"]=!0,s.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[s]})}},qc=class extends ce{constructor(A){super(eA,"decimal"),this.fracDigits=GA({data:A.fracDigits,defaultValue:2,validate:t=>!0}),this.id=A.id||"",this.leadDigits=GA({data:A.leadDigits,defaultValue:-1,validate:t=>!0}),this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseFloat(this[P].trim());this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},Tc=class extends J{constructor(A){super(eA,"defaultUi",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},Pc=class extends J{constructor(A){super(eA,"desc",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}},Wc=class extends _A{constructor(A){super(eA,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Oc=class extends J{constructor(A){super(eA,"digestMethods",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.digestMethod=new b}},gg=class extends J{constructor(A){super(eA,"draw",!0),this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.rotate=GA({data:A.rotate,defaultValue:0,validate:t=>t%90===0}),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.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 b}[Et](A){y1(this,A)}[SA](A){if(ro(this),this.presence==="hidden"||this.presence==="inactive")return dA.EMPTY;ao(this),this[Xs]();let t=this.w,i=this.h,{w:s,h:a,isBroken:n}=m1(this,A);if(s&&this.w===""){if(n&&this[xe]()[pi]())return this[Bt](),dA.FAILURE;this.w=s}if(a&&this.h===""&&(this.h=a),oo(this),!no(this,A))return this.w=t,this.h=i,this[Bt](),dA.FAILURE;Io(this);let r=lt(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");Vf(this,r),r.margin&&(r.padding=r.margin,delete r.margin);let g=["xfaDraw"];this.font&&g.push("xfaFont"),Vs(this)&&g.push("xfaPrintOnly");let o={style:r,id:this[$A],class:g};this.name&&(o.xfaName=this.name);let I={name:"div",attributes:o,children:[]};go(this,o);let c=_f(this,I,A),l=this.value?this.value[SA](A).html:null;return l===null?(this.w=t,this.h=i,this[Bt](),dA.success(m0(this,I),c)):(I.children.push(l),eu(this,r,l),this.w=t,this.h=i,this[Bt](),dA.success(m0(this,I),c))}},G0=class extends J{constructor(A){super(eA,"edge",!0),this.cap=O(A.cap,["square","butt","round"]),this.id=A.id||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.stroke=O(A.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=hA(A.thickness,"0.5pt"),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](){let A=lt(this,"visibility");if(Object.assign(A,{linecap:this.cap,width:NA(this.thickness),color:this.color?this.color[ZA]():"#000000",style:""}),this.presence!=="visible")A.style="none";else switch(this.stroke){case"solid":A.style="solid";break;case"dashDot":A.style="dashed";break;case"dashDotDot":A.style="dashed";break;case"dashed":A.style="dashed";break;case"dotted":A.style="dotted";break;case"embossed":A.style="ridge";break;case"etched":A.style="groove";break;case"lowered":A.style="inset";break;case"raised":A.style="outset";break}return A}},Zc=class extends _A{constructor(A){super(eA,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},jc=class extends J{constructor(A){super(eA,"encodings",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.encoding=new b}},Xc=class extends J{constructor(A){super(eA,"encrypt",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=null}},Vc=class extends J{constructor(A){super(eA,"encryptData",!0),this.id=A.id||"",this.operation=O(A.operation,["encrypt","decrypt"]),this.target=A.target||"",this.use=A.use||"",this.usehref=A.usehref||"",this.filter=null,this.manifest=null}},_c=class extends J{constructor(A){super(eA,"encryption",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},zc=class extends _A{constructor(A){super(eA,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},$c=class extends J{constructor(A){super(eA,"encryptionMethods",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.encryptionMethod=new b}},Al=class extends J{constructor(A){super(eA,"event",!0),this.activity=O(A.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=A.id||"",this.listen=O(A.listen,["refOnly","refAndDescendents"]),this.name=A.name||"",this.ref=A.ref||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.encryptData=null,this.execute=null,this.script=null,this.signData=null,this.submit=null}},el=class extends ce{constructor(A){super(eA,"exData"),this.contentType=A.contentType||"",this.href=A.href||"",this.id=A.id||"",this.maxLength=GA({data:A.maxLength,defaultValue:-1,validate:t=>t>=-1}),this.name=A.name||"",this.rid=A.rid||"",this.transferEncoding=O(A.transferEncoding,["none","base64","package"]),this.use=A.use||"",this.usehref=A.usehref||""}[d1](){return this.contentType==="text/html"}[ni](A){return this.contentType==="text/html"&&A[de]===me.xhtml.id?(this[P]=A,!0):this.contentType==="text/xml"?(this[P]=A,!0):!1}[SA](A){return this.contentType!=="text/html"||!this[P]?dA.EMPTY:this[P][SA](A)}},tl=class extends J{constructor(A){super(eA,"exObject",!0),this.archive=A.archive||"",this.classId=A.classId||"",this.codeBase=A.codeBase||"",this.codeType=A.codeType||"",this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.exObject=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}},og=class extends J{constructor(A){super(eA,"exclGroup",!0),this.access=O(A.access,["open","nonInteractive","protected","readOnly"]),this.accessKey=A.accessKey||"",this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.layout=O(A.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.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 b,this.event=new b,this.field=new b,this.setProperty=new b}[J0](){return!0}[Oa](){return!0}[Et](A){for(let t of this.field.children){if(!t.value){let i=new an({});t[Be](i),t.value=i}t.value[Et](A)}}[pi](){return this.layout.endsWith("-tb")&&this[L].attempt===0&&this[L].numberInLine>0||this[MA]()[pi]()}[di](){var t;let A=this[xe]();return A[di]()?this[L]._isSplittable!==void 0?this[L]._isSplittable:this.layout==="position"||this.layout.includes("row")?(this[L]._isSplittable=!1,!1):(t=A.layout)!=null&&t.endsWith("-tb")&&A[L].numberInLine!==0?!1:(this[L]._isSplittable=!0,!0):!1}[wn](){return au(this)}[d0](A,t){nu(this,A,t)}[x0](){return ru(this)}[SA](A){if(ro(this),this.presence==="hidden"||this.presence==="inactive"||this.h===0||this.w===0)return dA.EMPTY;ao(this);let t=[],i={id:this[$A],class:[]};p1(this,i.class),this[L]||(this[L]=Object.create(null)),Object.assign(this[L],{children:t,attributes:i,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,A.width),height:Math.min(this.h||1/0,A.height)},width:0,height:0,prevHeight:0,currentWidth:0});let s=this[di]();if(s||oo(this),!no(this,A))return dA.FAILURE;let a=new Set(["field"]);if(this.layout.includes("row")){let E=this[xe]().columnWidths;Array.isArray(E)&&E.length>0&&(this[L].columnWidths=E,this[L].currentColumn=0)}let n=lt(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),r=["xfaExclgroup"],g=zf(this);g&&r.push(g),Vs(this)&&r.push("xfaPrintOnly"),i.style=n,i.class=r,this.name&&(i.xfaName=this.name),this[Xs]();let o=this.layout==="lr-tb"||this.layout==="rl-tb",I=o?Ag:1;for(;this[L].attemptt>=1||t===-1}),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.rotate=GA({data:A.rotate,defaultValue:0,validate:t=>t%90===0}),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.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 b(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 b,this.connect=new b,this.event=new b,this.setProperty=new b}[J0](){return!0}[Et](A){y1(this,A)}[SA](A){var E,f,u;if(ro(this),!this.ui){this.ui=new sn({}),this.ui[ie]=this[ie],this[Be](this.ui);let d;switch(this.items.children.length){case 0:d=new Bg({}),this.ui.textEdit=d;break;case 1:d=new ag({}),this.ui.checkButton=d;break;case 2:d=new ng({}),this.ui.choiceList=d;break}this.ui[Be](d)}if(!this.ui||this.presence==="hidden"||this.presence==="inactive"||this.h===0||this.w===0)return dA.EMPTY;this.caption&&delete this.caption[L],this[Xs]();let t=this.caption?this.caption[SA](A).html:null,i=this.w,s=this.h,a=0,n=0;this.margin&&(a=this.margin.leftInset+this.margin.rightInset,n=this.margin.topInset+this.margin.bottomInset);let r=null;if(this.w===""||this.h===""){let d=null,x=null,p=0,m=0;if(this.ui.checkButton)p=m=this.ui.checkButton.size;else{let{w:D,h:S}=m1(this,A);D!==null?(p=D,m=S):m=_9(this.font,!0).lineNoGap}if(r=GE(this.ui[We]()),p+=r.w,m+=r.h,this.caption){let{w:D,h:S,isBroken:w}=this.caption[We](A);if(w&&this[xe]()[pi]())return this[Bt](),dA.FAILURE;switch(d=D,x=S,this.caption.placement){case"left":case"right":case"inline":d+=p;break;case"top":case"bottom":x+=m;break}}else d=p,x=m;d&&this.w===""&&(d+=a,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1t>=1&&t<=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}},rl=class extends ce{constructor(A){super(eA,"float"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseFloat(this[P].trim());this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},gl=class extends J{constructor(A){super(eA,"font",!0),this.baselineShift=hA(A.baselineShift),this.fontHorizontalScale=_r({data:A.fontHorizontalScale,defaultValue:100,validate:t=>t>=0}),this.fontVerticalScale=_r({data:A.fontVerticalScale,defaultValue:100,validate:t=>t>=0}),this.id=A.id||"",this.kerningMode=O(A.kerningMode,["none","pair"]),this.letterSpacing=hA(A.letterSpacing,"0"),this.lineThrough=GA({data:A.lineThrough,defaultValue:0,validate:t=>t===1||t===2}),this.lineThroughPeriod=O(A.lineThroughPeriod,["all","word"]),this.overline=GA({data:A.overline,defaultValue:0,validate:t=>t===1||t===2}),this.overlinePeriod=O(A.overlinePeriod,["all","word"]),this.posture=O(A.posture,["normal","italic"]),this.size=hA(A.size,"10pt"),this.typeface=A.typeface||"Courier",this.underline=GA({data:A.underline,defaultValue:0,validate:t=>t===1||t===2}),this.underlinePeriod=O(A.underlinePeriod,["all","word"]),this.use=A.use||"",this.usehref=A.usehref||"",this.weight=O(A.weight,["normal","bold"]),this.extras=null,this.fill=null}[Yt](A){super[Yt](A),this[ie].usedTypefaces.add(this.typeface)}[ZA](){let A=lt(this,"fill"),t=A.color;return t&&(t==="#000000"?delete A.color:t.startsWith("#")||(A.background=t,A.backgroundClip="text",A.color="transparent")),this.baselineShift&&(A.verticalAlign=NA(this.baselineShift)),A.fontKerning=this.kerningMode==="none"?"none":"normal",A.letterSpacing=NA(this.letterSpacing),this.lineThrough!==0&&(A.textDecoration="line-through",this.lineThrough===2&&(A.textDecorationStyle="double")),this.overline!==0&&(A.textDecoration="overline",this.overline===2&&(A.textDecorationStyle="double")),A.fontStyle=this.posture,A.fontSize=NA(.99*this.size),tu(this,this,this[ie].fontFinder,A),this.underline!==0&&(A.textDecoration="underline",this.underline===2&&(A.textDecorationStyle="double")),A.fontWeight=this.weight,A}},ol=class extends J{constructor(A){super(eA,"format",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.picture=null}},Il=class extends qA{constructor(A){super(eA,"handler"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},cl=class extends J{constructor(A){super(eA,"hyphenation"),this.excludeAllCaps=GA({data:A.excludeAllCaps,defaultValue:0,validate:t=>t===1}),this.excludeInitialCap=GA({data:A.excludeInitialCap,defaultValue:0,validate:t=>t===1}),this.hyphenate=GA({data:A.hyphenate,defaultValue:0,validate:t=>t===1}),this.id=A.id||"",this.pushCharacterCount=GA({data:A.pushCharacterCount,defaultValue:3,validate:t=>t>=0}),this.remainCharacterCount=GA({data:A.remainCharacterCount,defaultValue:3,validate:t=>t>=0}),this.use=A.use||"",this.usehref=A.usehref||"",this.wordCharacterCount=GA({data:A.wordCharacterCount,defaultValue:7,validate:t=>t>=0})}},Ig=class extends qA{constructor(A){super(eA,"image"),this.aspect=O(A.aspect,["fit","actual","height","none","width"]),this.contentType=A.contentType||"",this.href=A.href||"",this.id=A.id||"",this.name=A.name||"",this.transferEncoding=O(A.transferEncoding,["base64","none","package"]),this.use=A.use||"",this.usehref=A.usehref||""}[SA](){if(this.contentType&&!nx.has(this.contentType.toLowerCase()))return dA.EMPTY;let A=this[ie].images&&this[ie].images.get(this.href);if(!A&&(this.href||!this[P])||(!A&&this.transferEncoding==="base64"&&(A=Pe(atob(this[P]))),!A))return dA.EMPTY;if(!this.contentType){for(let[a,n]of rx)if(A.length>a.length&&a.every((r,g)=>r===A[g])){this.contentType=n;break}if(!this.contentType)return dA.EMPTY}let t=new Blob([A],{type:this.contentType}),i;switch(this.aspect){case"fit":case"actual":break;case"height":i={height:"100%",objectFit:"fill"};break;case"none":i={width:"100%",height:"100%",objectFit:"fill"};break;case"width":i={width:"100%",objectFit:"fill"};break}let s=this[MA]();return dA.success({name:"img",attributes:{class:["xfaImage"],style:i,src:URL.createObjectURL(t),alt:s?N0(s[MA]()):null}})}},ll=class extends J{constructor(A){super(eA,"imageEdit",!0),this.data=O(A.data,["link","embed"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}[SA](A){return this.data==="embed"?dA.success({name:"div",children:[],attributes:{}}):dA.EMPTY}},hl=class extends ce{constructor(A){super(eA,"integer"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=parseInt(this[P].trim(),10);this[P]=isNaN(A)?null:A}[SA](A){return A0(this[P]!==null?this[P].toString():"")}},Cl=class extends J{constructor(A){super(eA,"issuers",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},$a=class extends J{constructor(A){super(eA,"items",!0),this.id=A.id||"",this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.ref=A.ref||"",this.save=GA({data:A.save,defaultValue:0,validate:t=>t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.text=new b,this.time=new b}[SA](){let A=[];for(let t of this[Ue]())A.push(t[Se]());return dA.success(A)}},Bl=class extends J{constructor(A){super(eA,"keep",!0),this.id=A.id||"";let t=["none","contentArea","pageArea"];this.intact=O(A.intact,t),this.next=O(A.next,t),this.previous=O(A.previous,t),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}},Ql=class extends J{constructor(A){super(eA,"keyUsage");let t=["","yes","no"];this.crlSign=O(A.crlSign,t),this.dataEncipherment=O(A.dataEncipherment,t),this.decipherOnly=O(A.decipherOnly,t),this.digitalSignature=O(A.digitalSignature,t),this.encipherOnly=O(A.encipherOnly,t),this.id=A.id||"",this.keyAgreement=O(A.keyAgreement,t),this.keyCertSign=O(A.keyCertSign,t),this.keyEncipherment=O(A.keyEncipherment,t),this.nonRepudiation=O(A.nonRepudiation,t),this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},El=class extends J{constructor(A){super(eA,"line",!0),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.slope=O(A.slope,["\\\\","/"]),this.use=A.use||"",this.usehref=A.usehref||"",this.edge=null}[SA](){let A=this[MA]()[MA](),t=this.edge||new G0({}),i=t[ZA](),s=Object.create(null),a=t.presence==="visible"?t.thickness:0;s.strokeWidth=NA(a),s.stroke=i.color;let n,r,g,o,I="100%",c="100%";A.w<=a?([n,r,g,o]=["50%",0,"50%","100%"],I=s.strokeWidth):A.h<=a?([n,r,g,o]=[0,"50%","100%","50%"],c=s.strokeWidth):this.slope==="\\\\"?[n,r,g,o]=[0,0,"100%","100%"]:[n,r,g,o]=[0,"100%","100%",0];let h={name:"svg",children:[{name:"line",attributes:{xmlns:p0,x1:n,y1:r,x2:g,y2:o,style:s}}],attributes:{xmlns:p0,width:I,height:c,style:{overflow:"visible"}}};return w1(A)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[h]}):(h.attributes.style.position="absolute",dA.success(h))}},fl=class extends J{constructor(A){super(eA,"linear",!0),this.id=A.id||"",this.type=O(A.type,["toRight","toBottom","toLeft","toTop"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.type.replace(/([RBLT])/," $1").toLowerCase(),i=this.color?this.color[ZA]():"#000000";return`linear-gradient(${t}, ${A}, ${i})`}},ul=class extends ce{constructor(A){super(eA,"lockDocument"),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}[se](){this[P]=O(this[P],["auto","0","1"])}},dl=class extends J{constructor(A){super(eA,"manifest",!0),this.action=O(A.action,["include","all","exclude"]),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.ref=new b}},xl=class extends J{constructor(A){super(eA,"margin",!0),this.bottomInset=hA(A.bottomInset,"0"),this.id=A.id||"",this.leftInset=hA(A.leftInset,"0"),this.rightInset=hA(A.rightInset,"0"),this.topInset=hA(A.topInset,"0"),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[ZA](){return{margin:NA(this.topInset)+" "+NA(this.rightInset)+" "+NA(this.bottomInset)+" "+NA(this.leftInset)}}},ml=class extends J{constructor(A){super(eA,"mdp"),this.id=A.id||"",this.permissions=GA({data:A.permissions,defaultValue:2,validate:t=>t===1||t===3}),this.signatureType=O(A.signatureType,["filler","author"]),this.use=A.use||"",this.usehref=A.usehref||""}},pl=class extends J{constructor(A){super(eA,"medium"),this.id=A.id||"",this.imagingBBox=V9(A.imagingBBox),this.long=hA(A.long),this.orientation=O(A.orientation,["portrait","landscape"]),this.short=hA(A.short),this.stock=A.stock||"",this.trayIn=O(A.trayIn,["auto","delegate","pageFront"]),this.trayOut=O(A.trayOut,["auto","delegate"]),this.use=A.use||"",this.usehref=A.usehref||""}},wl=class extends J{constructor(A){super(eA,"message",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.text=new b}},yl=class extends J{constructor(A){super(eA,"numericEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a;let t=lt(this,"border","font","margin"),i=this[MA]()[MA](),s={name:"input",attributes:{type:"text",fieldId:i[$A],dataId:((a=i[Ht])==null?void 0:a[$A])||i[$A],class:["xfaTextfield"],style:t,"aria-label":N0(i),"aria-required":!1}};return yn(i)&&(s.attributes["aria-required"]=!0,s.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[s]})}},bl=class extends J{constructor(A){super(eA,"occur",!0),this.id=A.id||"",this.initial=A.initial!==""?GA({data:A.initial,defaultValue:"",validate:t=>!0}):"",this.max=A.max!==""?GA({data:A.max,defaultValue:1,validate:t=>!0}):"",this.min=A.min!==""?GA({data:A.min,defaultValue:1,validate:t=>!0}):"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[Yt](){let A=this[MA](),t=this.min;this.min===""&&(this.min=A instanceof zi||A instanceof U0?0:1),this.max===""&&(t===""?this.max=A instanceof zi||A instanceof U0?-1:1:this.max=this.min),this.max!==-1&&this.max!0}),this.name=A.name||"",this.numbered=GA({data:A.numbered,defaultValue:1,validate:t=>!0}),this.oddOrEven=O(A.oddOrEven,["any","even","odd"]),this.pagePosition=O(A.pagePosition,["any","first","last","only","rest"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.desc=null,this.extras=null,this.medium=null,this.occur=null,this.area=new b,this.contentArea=new b,this.draw=new b,this.exclGroup=new b,this.field=new b,this.subform=new b}[ja](){return this[L]?!this.occur||this.occur.max===-1||this[L].numberOfUsea.oddOrEven===t&&a.pagePosition===i);return s||(s=this.pageArea.children.find(a=>a.oddOrEven==="any"&&a.pagePosition===i),s)||(s=this.pageArea.children.find(a=>a.oddOrEven==="any"&&a.pagePosition==="any"),s)?s:this.pageArea.children[0]}},Sl=class extends J{constructor(A){super(eA,"para",!0),this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.lineHeight=A.lineHeight?hA(A.lineHeight,"0pt"):"",this.marginLeft=A.marginLeft?hA(A.marginLeft,"0pt"):"",this.marginRight=A.marginRight?hA(A.marginRight,"0pt"):"",this.orphans=GA({data:A.orphans,defaultValue:0,validate:t=>t>=0}),this.preserve=A.preserve||"",this.radixOffset=A.radixOffset?hA(A.radixOffset,"0pt"):"",this.spaceAbove=A.spaceAbove?hA(A.spaceAbove,"0pt"):"",this.spaceBelow=A.spaceBelow?hA(A.spaceBelow,"0pt"):"",this.tabDefault=A.tabDefault?hA(this.tabDefault):"",this.tabStops=(A.tabStops||"").trim().split(/\\s+/).map((t,i)=>i%2===1?hA(t):t),this.textIndent=A.textIndent?hA(A.textIndent,"0pt"):"",this.use=A.use||"",this.usehref=A.usehref||"",this.vAlign=O(A.vAlign,["top","bottom","middle"]),this.widows=GA({data:A.widows,defaultValue:0,validate:t=>t>=0}),this.hyphenation=null}[ZA](){let A=lt(this,"hAlign");return this.marginLeft!==""&&(A.paddingLeft=NA(this.marginLeft)),this.marginRight!==""&&(A.paddingight=NA(this.marginRight)),this.spaceAbove!==""&&(A.paddingTop=NA(this.spaceAbove)),this.spaceBelow!==""&&(A.paddingBottom=NA(this.spaceBelow)),this.textIndent!==""&&(A.textIndent=NA(this.textIndent),$f(A)),this.lineHeight>0&&(A.lineHeight=NA(this.lineHeight)),this.tabDefault!==""&&(A.tabSize=NA(this.tabDefault)),this.tabStops.length>0,this.hyphenatation&&Object.assign(A,this.hyphenatation[ZA]()),A}},Fl=class extends J{constructor(A){super(eA,"passwordEdit",!0),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.passwordChar=A.passwordChar||"*",this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.margin=null}},Rl=class extends J{constructor(A){super(eA,"pattern",!0),this.id=A.id||"",this.type=O(A.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.color?this.color[ZA]():"#000000",i=5,s="repeating-linear-gradient",a=`${A},${A} ${i}px,${t} ${i}px,${t} ${2*i}px`;switch(this.type){case"crossHatch":return`${s}(to top,${a}) ${s}(to right,${a})`;case"crossDiagonal":return`${s}(45deg,${a}) ${s}(-45deg,${a})`;case"diagonalLeft":return`${s}(45deg,${a})`;case"diagonalRight":return`${s}(-45deg,${a})`;case"horizontal":return`${s}(to top,${a})`;case"vertical":return`${s}(to right,${a})`}return""}},Nl=class extends qA{constructor(A){super(eA,"picture"),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Gl=class extends J{constructor(A){super(eA,"proto",!0),this.appearanceFilter=new b,this.arc=new b,this.area=new b,this.assist=new b,this.barcode=new b,this.bindItems=new b,this.bookend=new b,this.boolean=new b,this.border=new b,this.break=new b,this.breakAfter=new b,this.breakBefore=new b,this.button=new b,this.calculate=new b,this.caption=new b,this.certificate=new b,this.certificates=new b,this.checkButton=new b,this.choiceList=new b,this.color=new b,this.comb=new b,this.connect=new b,this.contentArea=new b,this.corner=new b,this.date=new b,this.dateTime=new b,this.dateTimeEdit=new b,this.decimal=new b,this.defaultUi=new b,this.desc=new b,this.digestMethod=new b,this.digestMethods=new b,this.draw=new b,this.edge=new b,this.encoding=new b,this.encodings=new b,this.encrypt=new b,this.encryptData=new b,this.encryption=new b,this.encryptionMethod=new b,this.encryptionMethods=new b,this.event=new b,this.exData=new b,this.exObject=new b,this.exclGroup=new b,this.execute=new b,this.extras=new b,this.field=new b,this.fill=new b,this.filter=new b,this.float=new b,this.font=new b,this.format=new b,this.handler=new b,this.hyphenation=new b,this.image=new b,this.imageEdit=new b,this.integer=new b,this.issuers=new b,this.items=new b,this.keep=new b,this.keyUsage=new b,this.line=new b,this.linear=new b,this.lockDocument=new b,this.manifest=new b,this.margin=new b,this.mdp=new b,this.medium=new b,this.message=new b,this.numericEdit=new b,this.occur=new b,this.oid=new b,this.oids=new b,this.overflow=new b,this.pageArea=new b,this.pageSet=new b,this.para=new b,this.passwordEdit=new b,this.pattern=new b,this.picture=new b,this.radial=new b,this.reason=new b,this.reasons=new b,this.rectangle=new b,this.ref=new b,this.script=new b,this.setProperty=new b,this.signData=new b,this.signature=new b,this.signing=new b,this.solid=new b,this.speak=new b,this.stipple=new b,this.subform=new b,this.subformSet=new b,this.subjectDN=new b,this.subjectDNs=new b,this.submit=new b,this.text=new b,this.textEdit=new b,this.time=new b,this.timeStamp=new b,this.toolTip=new b,this.traversal=new b,this.traverse=new b,this.ui=new b,this.validate=new b,this.value=new b,this.variables=new b}},Ul=class extends J{constructor(A){super(eA,"radial",!0),this.id=A.id||"",this.type=O(A.type,["toEdge","toCenter"]),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){A=A?A[ZA]():"#FFFFFF";let t=this.color?this.color[ZA]():"#000000";return`radial-gradient(circle at center, ${this.type==="toEdge"?`${A},${t}`:`${t},${A}`})`}},Ml=class extends qA{constructor(A){super(eA,"reason"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},Ll=class extends J{constructor(A){super(eA,"reasons",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.reason=new b}},lg=class extends J{constructor(A){super(eA,"rectangle",!0),this.hand=O(A.hand,["even","left","right"]),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.corner=new b(4),this.edge=new b(4),this.fill=null}[SA](){var o;let A=this.edge.children.length?this.edge.children[0]:new G0({}),t=A[ZA](),i=Object.create(null);((o=this.fill)==null?void 0:o.presence)==="visible"?Object.assign(i,this.fill[ZA]()):i.fill="transparent",i.strokeWidth=NA(A.presence==="visible"?A.thickness:0),i.stroke=t.color;let a=(this.corner.children.length?this.corner.children[0]:new rg({}))[ZA](),r={name:"svg",children:[{name:"rect",attributes:{xmlns:p0,width:"100%",height:"100%",x:0,y:0,rx:a.radius,ry:a.radius,style:i}}],attributes:{xmlns:p0,style:{overflow:"visible"},width:"100%",height:"100%"}},g=this[MA]()[MA]();return w1(g)?dA.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[r]}):(r.attributes.style.position="absolute",dA.success(r))}},Hl=class extends qA{constructor(A){super(eA,"ref"),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||""}},Jl=class extends qA{constructor(A){super(eA,"script"),this.binding=A.binding||"",this.contentType=A.contentType||"",this.id=A.id||"",this.name=A.name||"",this.runAt=O(A.runAt,["client","both","server"]),this.use=A.use||"",this.usehref=A.usehref||""}},An=class extends J{constructor(A){super(eA,"setProperty"),this.connection=A.connection||"",this.ref=A.ref||"",this.target=A.target||""}},Yl=class extends J{constructor(A){super(eA,"signData",!0),this.id=A.id||"",this.operation=O(A.operation,["sign","clear","verify"]),this.ref=A.ref||"",this.target=A.target||"",this.use=A.use||"",this.usehref=A.usehref||"",this.filter=null,this.manifest=null}},Kl=class extends J{constructor(A){super(eA,"signature",!0),this.id=A.id||"",this.type=O(A.type,["PDF1.3","PDF1.6"]),this.use=A.use||"",this.usehref=A.usehref||"",this.border=null,this.extras=null,this.filter=null,this.manifest=null,this.margin=null}},vl=class extends J{constructor(A){super(eA,"signing",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.certificate=new b}},ql=class extends J{constructor(A){super(eA,"solid",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null}[ZA](A){return A?A[ZA]():"#FFFFFF"}},Tl=class extends qA{constructor(A){super(eA,"speak"),this.disable=GA({data:A.disable,defaultValue:0,validate:t=>t===1}),this.id=A.id||"",this.priority=O(A.priority,["custom","caption","name","toolTip"]),this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}},Pl=class extends J{constructor(A){super(eA,"stipple",!0),this.id=A.id||"",this.rate=GA({data:A.rate,defaultValue:50,validate:t=>t>=0&&t<=100}),this.use=A.use||"",this.usehref=A.usehref||"",this.color=null,this.extras=null}[ZA](A){let t=this.rate/100;return Ce.makeHexColor(Math.round(A.value.r*(1-t)+this.value.r*t),Math.round(A.value.g*(1-t)+this.value.g*t),Math.round(A.value.b*(1-t)+this.value.b*t))}},hg=class extends J{constructor(A){super(eA,"subform",!0),this.access=O(A.access,["open","nonInteractive","protected","readOnly"]),this.allowMacro=GA({data:A.allowMacro,defaultValue:0,validate:t=>t===1}),this.anchorType=O(A.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=GA({data:A.colSpan,defaultValue:1,validate:t=>t>=1||t===-1}),this.columnWidths=(A.columnWidths||"").trim().split(/\\s+/).map(t=>t==="-1"?-1:hA(t)),this.h=A.h?hA(A.h):"",this.hAlign=O(A.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=A.id||"",this.layout=O(A.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.locale=A.locale||"",this.maxH=hA(A.maxH,"0pt"),this.maxW=hA(A.maxW,"0pt"),this.mergeMode=O(A.mergeMode,["consumeData","matchTemplate"]),this.minH=hA(A.minH,"0pt"),this.minW=hA(A.minW,"0pt"),this.name=A.name||"",this.presence=O(A.presence,["visible","hidden","inactive","invisible"]),this.relevant=jt(A.relevant),this.restoreState=O(A.restoreState,["manual","auto"]),this.scope=O(A.scope,["name","none"]),this.use=A.use||"",this.usehref=A.usehref||"",this.w=A.w?hA(A.w):"",this.x=hA(A.x,"0pt"),this.y=hA(A.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 b,this.breakAfter=new b,this.breakBefore=new b,this.connect=new b,this.draw=new b,this.event=new b,this.exObject=new b,this.exclGroup=new b,this.field=new b,this.proto=new b,this.setProperty=new b,this.subform=new b,this.subformSet=new b}[xe](){let A=this[MA]();return A instanceof en?A[xe]():A}[J0](){return!0}[pi](){return this.layout.endsWith("-tb")&&this[L].attempt===0&&this[L].numberInLine>0||this[MA]()[pi]()}*[Ys](){yield*b1(this)}[wn](){return au(this)}[d0](A,t){nu(this,A,t)}[x0](){return ru(this)}[di](){var t;let A=this[xe]();return A[di]()?this[L]._isSplittable!==void 0?this[L]._isSplittable:this.layout==="position"||this.layout.includes("row")?(this[L]._isSplittable=!1,!1):this.keep&&this.keep.intact!=="none"?(this[L]._isSplittable=!1,!1):(t=A.layout)!=null&&t.endsWith("-tb")&&A[L].numberInLine!==0?!1:(this[L]._isSplittable=!0,!0):!1}[SA](A){var d;if(ro(this),this.break){if(this.break.after!=="auto"||this.break.afterTarget!==""){let x=new ig({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});x[ie]=this[ie],this[Be](x),this.breakAfter.push(x)}if(this.break.before!=="auto"||this.break.beforeTarget!==""){let x=new sg({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});x[ie]=this[ie],this[Be](x),this.breakBefore.push(x)}if(this.break.overflowTarget!==""){let x=new cg({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});x[ie]=this[ie],this[Be](x),this.overflow.push(x)}this[Ti](this.break),this.break=null}if(this.presence==="hidden"||this.presence==="inactive")return dA.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&k("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){let x=this.breakBefore.children[0];if(UE(x))return dA.breakNode(x)}if((d=this[L])!=null&&d.afterBreakAfter)return dA.EMPTY;ao(this);let t=[],i={id:this[$A],class:[]};p1(this,i.class),this[L]||(this[L]=Object.create(null)),Object.assign(this[L],{children:t,line:null,attributes:i,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,A.width),height:Math.min(this.h||1/0,A.height)},width:0,height:0,prevHeight:0,currentWidth:0});let s=this[ue](),a=s[L].noLayoutFailure,n=this[di]();if(n||oo(this),!no(this,A))return dA.FAILURE;let r=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){let x=this[xe]().columnWidths;Array.isArray(x)&&x.length>0&&(this[L].columnWidths=x,this[L].currentColumn=0)}let g=lt(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),o=["xfaSubform"],I=zf(this);if(I&&o.push(I),i.style=g,i.class=o,this.name&&(i.xfaName=this.name),this.overflow){let x=this.overflow[We]();x.addLeader&&(x.addLeader=!1,ME(this,x.leader,A))}this[Xs]();let c=this.layout==="lr-tb"||this.layout==="rl-tb",l=c?Ag:1;for(;this[L].attempt=1){let x=this.breakAfter.children[0];if(UE(x))return this[L].afterBreakAfter=u,dA.breakNode(x)}return delete this[L],u}},en=class extends J{constructor(A){super(eA,"subformSet",!0),this.id=A.id||"",this.name=A.name||"",this.relation=O(A.relation,["ordered","choice","unordered"]),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.usehref||"",this.bookend=null,this.break=null,this.desc=null,this.extras=null,this.occur=null,this.overflow=null,this.breakAfter=new b,this.breakBefore=new b,this.subform=new b,this.subformSet=new b}*[Ys](){yield*b1(this)}[xe](){let A=this[MA]();for(;!(A instanceof hg);)A=A[MA]();return A}[J0](){return!0}},Wl=class extends ce{constructor(A){super(eA,"subjectDN"),this.delimiter=A.delimiter||",",this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){this[P]=new Map(this[P].split(this.delimiter).map(A=>(A=A.split("=",2),A[0]=A[0].trim(),A)))}},Ol=class extends J{constructor(A){super(eA,"subjectDNs",!0),this.id=A.id||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||"",this.subjectDN=new b}},Zl=class extends J{constructor(A){super(eA,"submit",!0),this.embedPDF=GA({data:A.embedPDF,defaultValue:0,validate:t=>t===1}),this.format=O(A.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),this.id=A.id||"",this.target=A.target||"",this.textEncoding=so({data:A.textEncoding?A.textEncoding.toLowerCase():"",defaultValue:"",validate:t=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(t)||t.match(/iso-8859-\\d{2}/)}),this.use=A.use||"",this.usehref=A.usehref||"",this.xdpContent=A.xdpContent||"",this.encrypt=null,this.encryptData=new b,this.signData=new b}},tn=class extends J{constructor(A){super(eA,"template",!0),this.baseProfile=O(A.baseProfile,["full","interactiveForms"]),this.extras=null,this.subform=new b}[se](){this.subform.children.length===0&&k("XFA - No subforms in template node."),this.subform.children.length>=2&&k("XFA - Several subforms in template node: please file a bug."),this[qt]=sx}[di](){return!0}[Bi](A,t){return A.startsWith("#")?[this[As].get(A.slice(1))]:Ni(this,t,A,!0,!0)}*[Of](){var C,B,Q;if(!this.subform.children.length)return dA.success({name:"div",children:[]});this[L]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};let A=this.subform.children[0];A.pageSet[ns]();let t=A.pageSet.pageArea.children,i={name:"div",children:[]},s=null,a=null,n=null;if(A.breakBefore.children.length>=1?(a=A.breakBefore.children[0],n=a.target):A.subform.children.length>=1&&A.subform.children[0].breakBefore.children.length>=1?(a=A.subform.children[0].breakBefore.children[0],n=a.target):(C=A.break)!=null&&C.beforeTarget?(a=A.break,n=a.beforeTarget):A.subform.children.length>=1&&((B=A.subform.children[0].break)!=null&&B.beforeTarget)&&(a=A.subform.children[0].break,n=a.beforeTarget),a){let E=this[Bi](n,a[MA]());E instanceof zi&&(s=E,a[L]={})}s||(s=t[0]),s[L]={numberOfUse:1};let r=s[MA]();r[L]={numberOfUse:1,pageIndex:r.pageArea.children.indexOf(s),pageSetIndex:0};let g,o=null,I=null,c=!0,l=0,h=0;for(;;){if(c)l=0;else if(i.children.pop(),++l===ix)return k("XFA - Something goes wrong: please file a bug."),i;g=null,this[L].currentPageArea=s;let E=s[SA]().html;i.children.push(E),o&&(this[L].noLayoutFailure=!0,E.children.push(o[SA](s[L].space).html),o=null),I&&(this[L].noLayoutFailure=!0,E.children.push(I[SA](s[L].space).html),I=null);let f=s.contentArea.children,u=E.children.filter(x=>x.attributes.class.includes("xfaContentarea"));c=!1,this[L].firstUnsplittable=null,this[L].noLayoutFailure=!1;let d=x=>{var m;let p=A[wn]();p&&(c||(c=((m=p.children)==null?void 0:m.length)>0),u[x].children.push(p))};for(let x=h,p=f.length;x0),u[x].children.push(S.html)):!c&&i.children.length>1&&i.children.pop(),i;if(S.isBreak()){let w=S.breakNode;if(d(x),w.targetType==="auto")continue;w.leader&&(o=this[Bi](w.leader,w[MA]()),o=o?o[0]:null),w.trailer&&(I=this[Bi](w.trailer,w[MA]()),I=I?I[0]:null),w.targetType==="pageArea"?(g=w[L].target,x=1/0):w[L].target?(g=w[L].target,h=w[L].index+1,x=1/0):x=w[L].index;continue}if(this[L].overflowNode){let w=this[L].overflowNode;this[L].overflowNode=null;let Y=w[We](),U=Y.target;Y.addLeader=Y.leader!==null,Y.addTrailer=Y.trailer!==null,d(x);let K=x;if(x=1/0,U instanceof zi)g=U;else if(U instanceof _a){let Z=f.indexOf(U);Z!==-1?Z>K?x=Z-1:h=Z:(g=U[MA](),h=g.contentArea.children.indexOf(U))}continue}d(x)}this[L].pageNumber+=1,g&&(g[ja]()?g[L].numberOfUse+=1:g=null),s=g||s[Ci](),yield null}}},Cg=class extends ce{constructor(A){super(eA,"text"),this.id=A.id||"",this.maxChars=GA({data:A.maxChars,defaultValue:0,validate:t=>t>=0}),this.name=A.name||"",this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}[eo](){return!0}[ni](A){return A[de]===me.xhtml.id?(this[P]=A,!0):(k(`XFA - Invalid content in Text: ${A[XA]}.`),!1)}[xi](A){this[P]instanceof J||super[xi](A)}[se](){typeof this[P]=="string"&&(this[P]=this[P].replaceAll(`\\r\n`,`\n`))}[We](){return typeof this[P]=="string"?this[P].split(/[\\u2029\\u2028\\n]/).reduce((A,t)=>(t&&A.push(t),A),[]).join(`\n`):this[P][Se]()}[SA](A){if(typeof this[P]=="string"){let t=A0(this[P]).html;return this[P].includes("\\u2029")?(t.name="div",t.children=[],this[P].split("\\u2029").map(i=>i.split(/[\\u2028\\n]/).reduce((s,a)=>(s.push({name:"span",value:a},{name:"br"}),s),[])).forEach(i=>{t.children.push({name:"p",children:i})})):/[\\u2028\\n]/.test(this[P])&&(t.name="div",t.children=[],this[P].split(/[\\u2028\\n]/).forEach(i=>{t.children.push({name:"span",value:i},{name:"br"})})),dA.success(t)}return this[P][SA](A)}},Bg=class extends J{constructor(A){super(eA,"textEdit",!0),this.allowRichText=GA({data:A.allowRichText,defaultValue:0,validate:t=>t===1}),this.hScrollPolicy=O(A.hScrollPolicy,["auto","off","on"]),this.id=A.id||"",this.multiLine=GA({data:A.multiLine,defaultValue:"",validate:t=>t===0||t===1}),this.use=A.use||"",this.usehref=A.usehref||"",this.vScrollPolicy=O(A.vScrollPolicy,["auto","off","on"]),this.border=null,this.comb=null,this.extras=null,this.margin=null}[SA](A){var a,n;let t=lt(this,"border","font","margin"),i,s=this[MA]()[MA]();return this.multiLine===""&&(this.multiLine=s instanceof gg?1:0),this.multiLine===1?i={name:"textarea",attributes:{dataId:((a=s[Ht])==null?void 0:a[$A])||s[$A],fieldId:s[$A],class:["xfaTextfield"],style:t,"aria-label":N0(s),"aria-required":!1}}:i={name:"input",attributes:{type:"text",dataId:((n=s[Ht])==null?void 0:n[$A])||s[$A],fieldId:s[$A],class:["xfaTextfield"],style:t,"aria-label":N0(s),"aria-required":!1}},yn(s)&&(i.attributes["aria-required"]=!0,i.attributes.required=!0),dA.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}},jl=class extends qA{constructor(A){super(eA,"time"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}[se](){let A=this[P].trim();this[P]=A?new Date(A):null}[SA](A){return A0(this[P]?this[P].toString():"")}},Xl=class extends J{constructor(A){super(eA,"timeStamp"),this.id=A.id||"",this.server=A.server||"",this.type=O(A.type,["optional","required"]),this.use=A.use||"",this.usehref=A.usehref||""}},Vl=class extends qA{constructor(A){super(eA,"toolTip"),this.id=A.id||"",this.rid=A.rid||"",this.use=A.use||"",this.usehref=A.usehref||""}},_l=class extends J{constructor(A){super(eA,"traversal",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.traverse=new b}},zl=class extends J{constructor(A){super(eA,"traverse",!0),this.id=A.id||"",this.operation=O(A.operation,["next","back","down","first","left","right","up"]),this.ref=A.ref||"",this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.script=null}get name(){return this.operation}[Za](){return!1}},sn=class extends J{constructor(A){super(eA,"ui",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.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}[We](){if(this[L]===void 0){for(let A of Object.getOwnPropertyNames(this)){if(A==="extras"||A==="picture")continue;let t=this[A];if(t instanceof J)return this[L]=t,t}this[L]=null}return this[L]}[SA](A){let t=this[We]();return t?t[SA](A):dA.EMPTY}},$l=class extends J{constructor(A){super(eA,"validate",!0),this.formatTest=O(A.formatTest,["warning","disabled","error"]),this.id=A.id||"",this.nullTest=O(A.nullTest,["disabled","error","warning"]),this.scriptTest=O(A.scriptTest,["error","disabled","warning"]),this.use=A.use||"",this.usehref=A.usehref||"",this.extras=null,this.message=null,this.picture=null,this.script=null}},an=class extends J{constructor(A){super(eA,"value",!0),this.id=A.id||"",this.override=GA({data:A.override,defaultValue:0,validate:t=>t===1}),this.relevant=jt(A.relevant),this.use=A.use||"",this.usehref=A.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}[Et](A){var s;let t=this[MA]();if(t instanceof za&&(s=t.ui)!=null&&s.imageEdit){this.image||(this.image=new Ig({}),this[Be](this.image)),this.image[P]=A[P];return}let i=A[XA];if(this[i]!==null){this[i][P]=A[P];return}for(let a of Object.getOwnPropertyNames(this)){let n=this[a];n instanceof J&&(this[a]=null,this[Ti](n))}this[A[XA]]=A,this[Be](A)}[Se](){if(this.exData)return typeof this.exData[P]=="string"?this.exData[P].trim():this.exData[P][Se]().trim();for(let A of Object.getOwnPropertyNames(this)){if(A==="image")continue;let t=this[A];if(t instanceof J)return(t[P]||"").toString().trim()}return null}[SA](A){for(let t of Object.getOwnPropertyNames(this)){let i=this[t];if(i instanceof J)return i[SA](A)}return dA.EMPTY}},Ah=class extends J{constructor(A){super(eA,"variables",!0),this.id=A.id||"",this.use=A.use||"",this.usehref=A.usehref||"",this.boolean=new b,this.date=new b,this.dateTime=new b,this.decimal=new b,this.exData=new b,this.float=new b,this.image=new b,this.integer=new b,this.manifest=new b,this.script=new b,this.text=new b,this.time=new b}[Za](){return!0}},Ks=class{static[Zt](A,t){if(Ks.hasOwnProperty(A)){let i=Ks[A](t);return i[Wf](t),i}}static appearanceFilter(A){return new pc(A)}static arc(A){return new eg(A)}static area(A){return new wc(A)}static assist(A){return new yc(A)}static barcode(A){return new bc(A)}static bind(A){return new Dc(A)}static bindItems(A){return new Va(A)}static bookend(A){return new kc(A)}static boolean(A){return new Sc(A)}static border(A){return new tg(A)}static break(A){return new Fc(A)}static breakAfter(A){return new ig(A)}static breakBefore(A){return new sg(A)}static button(A){return new Rc(A)}static calculate(A){return new Nc(A)}static caption(A){return new Gc(A)}static certificate(A){return new Uc(A)}static certificates(A){return new Mc(A)}static checkButton(A){return new ag(A)}static choiceList(A){return new ng(A)}static color(A){return new Lc(A)}static comb(A){return new Hc(A)}static connect(A){return new Jc(A)}static contentArea(A){return new _a(A)}static corner(A){return new rg(A)}static date(A){return new Yc(A)}static dateTime(A){return new Kc(A)}static dateTimeEdit(A){return new vc(A)}static decimal(A){return new qc(A)}static defaultUi(A){return new Tc(A)}static desc(A){return new Pc(A)}static digestMethod(A){return new Wc(A)}static digestMethods(A){return new Oc(A)}static draw(A){return new gg(A)}static edge(A){return new G0(A)}static encoding(A){return new Zc(A)}static encodings(A){return new jc(A)}static encrypt(A){return new Xc(A)}static encryptData(A){return new Vc(A)}static encryption(A){return new _c(A)}static encryptionMethod(A){return new zc(A)}static encryptionMethods(A){return new $c(A)}static event(A){return new Al(A)}static exData(A){return new el(A)}static exObject(A){return new tl(A)}static exclGroup(A){return new og(A)}static execute(A){return new il(A)}static extras(A){return new sl(A)}static field(A){return new za(A)}static fill(A){return new al(A)}static filter(A){return new nl(A)}static float(A){return new rl(A)}static font(A){return new gl(A)}static format(A){return new ol(A)}static handler(A){return new Il(A)}static hyphenation(A){return new cl(A)}static image(A){return new Ig(A)}static imageEdit(A){return new ll(A)}static integer(A){return new hl(A)}static issuers(A){return new Cl(A)}static items(A){return new $a(A)}static keep(A){return new Bl(A)}static keyUsage(A){return new Ql(A)}static line(A){return new El(A)}static linear(A){return new fl(A)}static lockDocument(A){return new ul(A)}static manifest(A){return new dl(A)}static margin(A){return new xl(A)}static mdp(A){return new ml(A)}static medium(A){return new pl(A)}static message(A){return new wl(A)}static numericEdit(A){return new yl(A)}static occur(A){return new bl(A)}static oid(A){return new Dl(A)}static oids(A){return new kl(A)}static overflow(A){return new cg(A)}static pageArea(A){return new zi(A)}static pageSet(A){return new U0(A)}static para(A){return new Sl(A)}static passwordEdit(A){return new Fl(A)}static pattern(A){return new Rl(A)}static picture(A){return new Nl(A)}static proto(A){return new Gl(A)}static radial(A){return new Ul(A)}static reason(A){return new Ml(A)}static reasons(A){return new Ll(A)}static rectangle(A){return new lg(A)}static ref(A){return new Hl(A)}static script(A){return new Jl(A)}static setProperty(A){return new An(A)}static signData(A){return new Yl(A)}static signature(A){return new Kl(A)}static signing(A){return new vl(A)}static solid(A){return new ql(A)}static speak(A){return new Tl(A)}static stipple(A){return new Pl(A)}static subform(A){return new hg(A)}static subformSet(A){return new en(A)}static subjectDN(A){return new Wl(A)}static subjectDNs(A){return new Ol(A)}static submit(A){return new Zl(A)}static template(A){return new tn(A)}static text(A){return new Cg(A)}static textEdit(A){return new Bg(A)}static time(A){return new jl(A)}static timeStamp(A){return new Xl(A)}static toolTip(A){return new Vl(A)}static traversal(A){return new _l(A)}static traverse(A){return new zl(A)}static ui(A){return new sn(A)}static validate(A){return new $l(A)}static value(A){return new an(A)}static variables(A){return new Ah(A)}},LE=me.datasets.id;function Xn(e){let A=new Cg({});return A[P]=e,A}var eh=class{constructor(A){var t;this.root=A,this.datasets=A.datasets,this.data=((t=A.datasets)==null?void 0:t.data)||new Jt(me.datasets.id,"data"),this.emptyMerge=this.data[Ue]().length===0,this.root.form=this.form=A.template[Tt]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){return this._bindElement(this.form,this.data),this.form}getData(){return this.data}_bindValue(A,t,i){var s,a;if(A[Ht]=t,A[Oa]())if(t[rs]()){let n=t[u1]();A[Et](Xn(n))}else if(A instanceof za&&((a=(s=A.ui)==null?void 0:s.choiceList)==null?void 0:a.open)==="multiSelect"){let n=t[Ue]().map(r=>r[P].trim()).join(`\n`);A[Et](Xn(n))}else this._isConsumeData()&&k("XFA - Nodes haven\'t the same type.");else!t[rs]()||this._isMatchTemplate()?this._bindElement(A,t):k("XFA - Nodes haven\'t the same type.")}_findDataByNameToConsume(A,t,i,s){if(!A)return null;let a,n;for(let r=0;r<3;r++){for(a=i[xa](A,!1,!0);n=a.next().value,!!n;)if(t===n[rs]())return n;if(i[de]===me.datasets.id&&i[XA]==="data")break;i=i[MA]()}return s?(a=this.data[xa](A,!0,!1),n=a.next().value,n||(a=this.data[Bc](A,!0),n=a.next().value,n!=null&&n[rs]())?n:null):null}_setProperties(A,t){if(A.hasOwnProperty("setProperty"))for(let{ref:i,target:s,connection:a}of A.setProperty.children){if(a||!i)continue;let n=Ni(this.root,t,i,!1,!1);if(!n){k(`XFA - Invalid reference: ${i}.`);continue}let[r]=n;if(!r[Mi](this.data)){k("XFA - Invalid node: must be a data node.");continue}let g=Ni(this.root,A,s,!1,!1);if(!g){k(`XFA - Invalid target: ${s}.`);continue}let[o]=g;if(!o[Mi](A)){k("XFA - Invalid target: must be a property or subproperty.");continue}let I=o[MA]();if(o instanceof An||I instanceof An){k("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(o instanceof Va||I instanceof Va){k("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}let c=r[Se](),l=o[XA];if(o instanceof Xa){let h=Object.create(null);h[l]=c;let C=Reflect.construct(Object.getPrototypeOf(I).constructor,[h]);I[l]=C[l];continue}if(!o.hasOwnProperty(P)){k("XFA - Invalid node to use in setProperty");continue}o[Ht]=r,o[P]=c,o[se]()}}_bindItems(A,t){if(!A.hasOwnProperty("items")||!A.hasOwnProperty("bindItems")||A.bindItems.isEmpty())return;for(let a of A.items.children)A[Ti](a);A.items.clear();let i=new $a({}),s=new $a({});A[Be](i),A.items.push(i),A[Be](s),A.items.push(s);for(let{ref:a,labelRef:n,valueRef:r,connection:g}of A.bindItems.children){if(g||!a)continue;let o=Ni(this.root,t,a,!1,!1);if(!o){k(`XFA - Invalid reference: ${a}.`);continue}for(let I of o){if(!I[Mi](this.datasets)){k(`XFA - Invalid ref (${a}): must be a datasets child.`);continue}let c=Ni(this.root,I,n,!0,!1);if(!c){k(`XFA - Invalid label: ${n}.`);continue}let[l]=c;if(!l[Mi](this.datasets)){k("XFA - Invalid label: must be a datasets child.");continue}let h=Ni(this.root,I,r,!0,!1);if(!h){k(`XFA - Invalid value: ${r}.`);continue}let[C]=h;if(!C[Mi](this.datasets)){k("XFA - Invalid value: must be a datasets child.");continue}let B=Xn(l[Se]()),Q=Xn(C[Se]());i[Be](B),i.text.push(B),s[Be](Q),s.text.push(Q)}}}_bindOccurrences(A,t,i){let s;if(t.length>1&&(s=A[Tt](),s[Ti](s.occur),s.occur=null),this._bindValue(A,t[0],i),this._setProperties(A,t[0]),this._bindItems(A,t[0]),t.length===1)return;let a=A[MA](),n=A[XA],r=a[Qc](A);for(let g=1,o=t.length;gg.name===A.name).length:a=i[s].children.length;let n=i[Qc](A)+1,r=t.initial-a;if(r){let g=A[Tt]();g[Ti](g.occur),g.occur=null,i[s].push(g),i[lr](n,g);for(let o=1;o0)this._bindOccurrences(s,[c[0]],null);else if(this.emptyMerge){let l=t[de]===LE?-1:t[de],h=s[Ht]=new Jt(l,s.name||"root");t[Be](h),this._bindElement(s,h)}continue}if(!s[J0]())continue;let a=!1,n=null,r=null,g=null;if(s.bind){switch(s.bind.match){case"none":this._setAndBind(s,t);continue;case"global":a=!0;break;case"dataRef":if(!s.bind.ref){k(`XFA - ref is empty in node ${s[XA]}.`),this._setAndBind(s,t);continue}r=s.bind.ref;break;default:break}s.bind.picture&&(n=s.bind.picture[P])}let[o,I]=this._getOccurInfo(s);if(r)if(g=Ni(this.root,t,r,!0,!1),g===null){if(g=ex(this.data,t,r),!g)continue;this._isConsumeData()&&(g[$t]=!0),this._setAndBind(s,g);continue}else this._isConsumeData()&&(g=g.filter(c=>!c[$t])),g.length>I?g=g.slice(0,I):g.length===0&&(g=null),g&&this._isConsumeData()&&g.forEach(c=>{c[$t]=!0});else{if(!s.name){this._setAndBind(s,t);continue}if(this._isConsumeData()){let c=[];for(;c.length0?c:null}else{if(g=t[xa](s.name,!1,this.emptyMerge).next().value,!g){if(o===0){i.push(s);continue}let c=t[de]===LE?-1:t[de];g=s[Ht]=new Jt(c,s.name),this.emptyMerge&&(g[$t]=!0),t[Be](g),this._setAndBind(s,g);continue}this.emptyMerge&&(g[$t]=!0),g=[g]}}g?this._bindOccurrences(s,g,n):o>0?this._setAndBind(s,t):i.push(s)}i.forEach(s=>s[MA]()[Ti](s))}},th=class{constructor(A,t){this.data=t,this.dataset=A.datasets||null}serialize(A){let t=[[-1,this.data[Ue]()]];for(;t.length>0;){let s=t.at(-1),[a,n]=s;if(a+1===n.length){t.pop();continue}let r=n[++s[0]],g=A.get(r[$A]);if(g)r[Et](g);else{let I=r[Tf]();for(let c of I.values()){let l=A.get(c[$A]);if(l){c[Et](l);break}}}let o=r[Ue]();o.length>0&&t.push([-1,o])}let i=[\'\'];if(this.dataset)for(let s of this.dataset[Ue]())s[XA]!=="data"&&s[pa](i);return this.data[pa](i),i.push(""),i.join("")}},j=me.config.id,ih=class extends J{constructor(A){super(j,"acrobat",!0),this.acrobat7=null,this.autoSave=null,this.common=null,this.validate=null,this.validateApprovalSignatures=null,this.submitUrl=new b}},sh=class extends J{constructor(A){super(j,"acrobat7",!0),this.dynamicRender=null}},ah=class extends _A{constructor(A){super(j,"ADBE_JSConsole",["delegate","Enable","Disable"])}},nh=class extends _A{constructor(A){super(j,"ADBE_JSDebugger",["delegate","Enable","Disable"])}},rh=class extends pe{constructor(A){super(j,"addSilentPrint")}},gh=class extends pe{constructor(A){super(j,"addViewerPreferences")}},oh=class extends $r{constructor(A){super(j,"adjustData")}},Ih=class extends yt{constructor(A){super(j,"adobeExtensionLevel",0,t=>t>=1&&t<=8)}},ch=class extends J{constructor(A){super(j,"agent",!0),this.name=A.name?A.name.trim():"",this.common=new b}},lh=class extends ce{constructor(A){super(j,"alwaysEmbed")}},hh=class extends qA{constructor(A){super(j,"amd")}},Ch=class extends J{constructor(A){super(j,"area"),this.level=GA({data:A.level,defaultValue:0,validate:t=>t>=1&&t<=3}),this.name=O(A.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}},Bh=class extends _A{constructor(A){super(j,"attributes",["preserve","delegate","ignore"])}},Qh=class extends _A{constructor(A){super(j,"autoSave",["disabled","enabled"])}},Eh=class extends qA{constructor(A){super(j,"base")}},fh=class extends J{constructor(A){super(j,"batchOutput"),this.format=O(A.format,["none","concat","zip","zipCompress"])}},uh=class extends ce{constructor(A){super(j,"behaviorOverride")}[se](){this[P]=new Map(this[P].trim().split(/\\s+/).filter(A=>A.includes(":")).map(A=>A.split(":",2)))}},dh=class extends J{constructor(A){super(j,"cache",!0),this.templateCache=null}},xh=class extends pe{constructor(A){super(j,"change")}},mh=class extends J{constructor(A){super(j,"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 b}},ph=class extends J{constructor(A){super(j,"compress"),this.scope=O(A.scope,["imageOnly","document"])}},wh=class extends pe{constructor(A){super(j,"compressLogicalStructure")}},yh=class extends $r{constructor(A){super(j,"compressObjectStream")}},bh=class extends J{constructor(A){super(j,"compression",!0),this.compressLogicalStructure=null,this.compressObjectStream=null,this.level=null,this.type=null}},Dh=class extends J{constructor(A){super(j,"config",!0),this.acrobat=null,this.present=null,this.trace=null,this.agent=new b}},kh=class extends _A{constructor(A){super(j,"conformance",["A","B"])}},Sh=class extends pe{constructor(A){super(j,"contentCopy")}},Fh=class extends yt{constructor(A){super(j,"copies",1,t=>t>=1)}},Rh=class extends qA{constructor(A){super(j,"creator")}},Nh=class extends yt{constructor(A){super(j,"currentPage",0,t=>t>=0)}},Gh=class extends J{constructor(A){super(j,"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 b,this.transform=new b}},Uh=class extends J{constructor(A){super(j,"debug",!0),this.uri=null}},Mh=class extends ce{constructor(A){super(j,"defaultTypeface"),this.writingScript=O(A.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}},Lh=class extends _A{constructor(A){super(j,"destination",["pdf","pcl","ps","webClient","zpl"])}},Hh=class extends pe{constructor(A){super(j,"documentAssembly")}},Jh=class extends J{constructor(A){super(j,"driver",!0),this.name=A.name?A.name.trim():"",this.fontInfo=null,this.xdc=null}},Yh=class extends _A{constructor(A){super(j,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}},Kh=class extends _A{constructor(A){super(j,"dynamicRender",["forbidden","required"])}},vh=class extends pe{constructor(A){super(j,"embed")}},qh=class extends pe{constructor(A){super(j,"encrypt")}},Th=class extends J{constructor(A){super(j,"encryption",!0),this.encrypt=null,this.encryptionLevel=null,this.permissions=null}},Ph=class extends _A{constructor(A){super(j,"encryptionLevel",["40bit","128bit"])}},Wh=class extends qA{constructor(A){super(j,"enforce")}},Oh=class extends J{constructor(A){super(j,"equate"),this.force=GA({data:A.force,defaultValue:1,validate:t=>t===0}),this.from=A.from||"",this.to=A.to||""}},Zh=class extends J{constructor(A){super(j,"equateRange"),this.from=A.from||"",this.to=A.to||"",this._unicodeRange=A.unicodeRange||""}get unicodeRange(){let A=[],t=/U\\+([0-9a-fA-F]+)/,i=this._unicodeRange;for(let s of i.split(",").map(a=>a.trim()).filter(a=>!!a))s=s.split("-",2).map(a=>{let n=a.match(t);return n?parseInt(n[1],16):0}),s.length===1&&s.push(s[0]),A.push(s);return nA(this,"unicodeRange",A)}},jh=class extends ce{constructor(A){super(j,"exclude")}[se](){this[P]=this[P].trim().split(/\\s+/).filter(A=>A&&["calculate","close","enter","exit","initialize","ready","validate"].includes(A))}},Xh=class extends qA{constructor(A){super(j,"excludeNS")}},Vh=class extends _A{constructor(A){super(j,"flipLabel",["usePrinterSetting","on","off"])}},_h=class extends J{constructor(A){super(j,"fontInfo",!0),this.embed=null,this.map=null,this.subsetBelow=null,this.alwaysEmbed=new b,this.defaultTypeface=new b,this.neverEmbed=new b}},zh=class extends pe{constructor(A){super(j,"formFieldFilling")}},$h=class extends qA{constructor(A){super(j,"groupParent")}},AC=class extends _A{constructor(A){super(j,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}},eC=class extends qA{constructor(A){super(j,"includeXDPContent")}},tC=class extends _A{constructor(A){super(j,"incrementalLoad",["none","forwardOnly"])}},iC=class extends pe{constructor(A){super(j,"incrementalMerge")}},sC=class extends pe{constructor(A){super(j,"interactive")}},aC=class extends _A{constructor(A){super(j,"jog",["usePrinterSetting","none","pageSet"])}},nC=class extends J{constructor(A){super(j,"labelPrinter",!0),this.name=O(A.name,["zpl","dpl","ipl","tcpl"]),this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}},rC=class extends _A{constructor(A){super(j,"layout",["paginate","panel"])}},gC=class extends yt{constructor(A){super(j,"level",0,t=>t>0)}},oC=class extends pe{constructor(A){super(j,"linearized")}},IC=class extends qA{constructor(A){super(j,"locale")}},cC=class extends qA{constructor(A){super(j,"localeSet")}},lC=class extends J{constructor(A){super(j,"log",!0),this.mode=null,this.threshold=null,this.to=null,this.uri=null}},hC=class extends J{constructor(A){super(j,"map",!0),this.equate=new b,this.equateRange=new b}},CC=class extends J{constructor(A){super(j,"mediumInfo",!0),this.map=null}},BC=class extends J{constructor(A){super(j,"message",!0),this.msgId=null,this.severity=null}},QC=class extends J{constructor(A){super(j,"messaging",!0),this.message=new b}},EC=class extends _A{constructor(A){super(j,"mode",["append","overwrite"])}},fC=class extends pe{constructor(A){super(j,"modifyAnnots")}},uC=class extends yt{constructor(A){super(j,"msgId",1,t=>t>=1)}},dC=class extends qA{constructor(A){super(j,"nameAttr")}},xC=class extends ce{constructor(A){super(j,"neverEmbed")}},mC=class extends yt{constructor(A){super(j,"numberOfCopies",null,t=>t>=2&&t<=5)}},pC=class extends J{constructor(A){super(j,"openAction",!0),this.destination=null}},wC=class extends J{constructor(A){super(j,"output",!0),this.to=null,this.type=null,this.uri=null}},yC=class extends qA{constructor(A){super(j,"outputBin")}},bC=class extends J{constructor(A){super(j,"outputXSL",!0),this.uri=null}},DC=class extends _A{constructor(A){super(j,"overprint",["none","both","draw","field"])}},kC=class extends qA{constructor(A){super(j,"packets")}[se](){this[P]!=="*"&&(this[P]=this[P].trim().split(/\\s+/).filter(A=>["config","datasets","template","xfdf","xslt"].includes(A)))}},SC=class extends J{constructor(A){super(j,"pageOffset"),this.x=GA({data:A.x,defaultValue:"useXDCSetting",validate:t=>!0}),this.y=GA({data:A.y,defaultValue:"useXDCSetting",validate:t=>!0})}},FC=class extends qA{constructor(A){super(j,"pageRange")}[se](){let A=this[P].trim().split(/\\s+/).map(i=>parseInt(i,10)),t=[];for(let i=0,s=A.length;i!1)}},UC=class extends J{constructor(A){super(j,"pcl",!0),this.name=A.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}},MC=class extends J{constructor(A){super(j,"pdf",!0),this.name=A.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}},LC=class extends J{constructor(A){super(j,"pdfa",!0),this.amd=null,this.conformance=null,this.includeXDPContent=null,this.part=null}},HC=class extends J{constructor(A){super(j,"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}},JC=class extends pe{constructor(A){super(j,"pickTrayByPDFSize")}},YC=class extends qA{constructor(A){super(j,"picture")}},KC=class extends pe{constructor(A){super(j,"plaintextMetadata")}},vC=class extends _A{constructor(A){super(j,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}},qC=class extends J{constructor(A){super(j,"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 b,this.labelPrinter=new b,this.pcl=new b,this.pdf=new b,this.ps=new b,this.submitUrl=new b,this.webClient=new b,this.zpl=new b}},TC=class extends pe{constructor(A){super(j,"print")}},PC=class extends pe{constructor(A){super(j,"printHighQuality")}},WC=class extends _A{constructor(A){super(j,"printScaling",["appdefault","noScaling"])}},OC=class extends qA{constructor(A){super(j,"printerName")}},ZC=class extends qA{constructor(A){super(j,"producer")}},jC=class extends J{constructor(A){super(j,"ps",!0),this.name=A.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.staple=null,this.xdc=null}},XC=class extends ce{constructor(A){super(j,"range")}[se](){this[P]=this[P].trim().split(/\\s*,\\s*/,2).map(A=>A.split("-").map(t=>parseInt(t.trim(),10))).filter(A=>A.every(t=>!isNaN(t))).map(A=>(A.length===1&&A.push(A[0]),A))}},VC=class extends ce{constructor(A){super(j,"record")}[se](){this[P]=this[P].trim();let A=parseInt(this[P],10);!isNaN(A)&&A>=0&&(this[P]=A)}},_C=class extends ce{constructor(A){super(j,"relevant")}[se](){this[P]=this[P].trim().split(/\\s+/)}},zC=class extends ce{constructor(A){super(j,"rename")}[se](){this[P]=this[P].trim(),(this[P].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[P]))&&k("XFA - Rename: invalid XFA name")}},$C=class extends _A{constructor(A){super(j,"renderPolicy",["server","client"])}},AB=class extends _A{constructor(A){super(j,"runScripts",["both","client","none","server"])}},eB=class extends J{constructor(A){super(j,"script",!0),this.currentPage=null,this.exclude=null,this.runScripts=null}},tB=class extends _A{constructor(A){super(j,"scriptModel",["XFA","none"])}},iB=class extends _A{constructor(A){super(j,"severity",["ignore","error","information","trace","warning"])}},sB=class extends J{constructor(A){super(j,"silentPrint",!0),this.addSilentPrint=null,this.printerName=null}},aB=class extends J{constructor(A){super(j,"staple"),this.mode=O(A.mode,["usePrinterSetting","on","off"])}},nB=class extends qA{constructor(A){super(j,"startNode")}},rB=class extends yt{constructor(A){super(j,"startPage",0,t=>!0)}},gB=class extends _A{constructor(A){super(j,"submitFormat",["html","delegate","fdf","xml","pdf"])}},oB=class extends qA{constructor(A){super(j,"submitUrl")}},IB=class extends yt{constructor(A){super(j,"subsetBelow",100,t=>t>=0&&t<=100)}},cB=class extends pe{constructor(A){super(j,"suppressBanner")}},lB=class extends pe{constructor(A){super(j,"tagged")}},hB=class extends J{constructor(A){super(j,"template",!0),this.base=null,this.relevant=null,this.startPage=null,this.uri=null,this.xsl=null}},CB=class extends _A{constructor(A){super(j,"threshold",["trace","error","information","warning"])}},BB=class extends _A{constructor(A){super(j,"to",["null","memory","stderr","stdout","system","uri"])}},QB=class extends J{constructor(A){super(j,"templateCache"),this.maxEntries=GA({data:A.maxEntries,defaultValue:5,validate:t=>t>=0})}},EB=class extends J{constructor(A){super(j,"trace",!0),this.area=new b}},fB=class extends J{constructor(A){super(j,"transform",!0),this.groupParent=null,this.ifEmpty=null,this.nameAttr=null,this.picture=null,this.presence=null,this.rename=null,this.whitespace=null}},uB=class extends _A{constructor(A){super(j,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}},dB=class extends qA{constructor(A){super(j,"uri")}},xB=class extends _A{constructor(A){super(j,"validate",["preSubmit","prePrint","preExecute","preSave"])}},mB=class extends ce{constructor(A){super(j,"validateApprovalSignatures")}[se](){this[P]=this[P].trim().split(/\\s+/).filter(A=>["docReady","postSign"].includes(A))}},pB=class extends _A{constructor(A){super(j,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}},wB=class extends _A{constructor(A){super(j,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}},yB=class extends J{constructor(A){super(j,"VersionControl"),this.outputBelow=O(A.outputBelow,["warn","error","update"]),this.sourceAbove=O(A.sourceAbove,["warn","error"]),this.sourceBelow=O(A.sourceBelow,["update","maintain"])}},bB=class extends J{constructor(A){super(j,"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}},DB=class extends J{constructor(A){super(j,"webClient",!0),this.name=A.name?A.name.trim():"",this.fontInfo=null,this.xdc=null}},kB=class extends _A{constructor(A){super(j,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}},SB=class extends ce{constructor(A){super(j,"window")}[se](){let A=this[P].trim().split(/\\s*,\\s*/,2).map(t=>parseInt(t,10));if(A.some(t=>isNaN(t))){this[P]=[0,0];return}A.length===1&&A.push(A[0]),this[P]=A}},FB=class extends J{constructor(A){super(j,"xdc",!0),this.uri=new b,this.xsl=new b}},RB=class extends J{constructor(A){super(j,"xdp",!0),this.packets=null}},NB=class extends J{constructor(A){super(j,"xsl",!0),this.debug=null,this.uri=null}},GB=class extends J{constructor(A){super(j,"zpl",!0),this.name=A.name?A.name.trim():"",this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}},vs=class{static[Zt](A,t){if(vs.hasOwnProperty(A))return vs[A](t)}static acrobat(A){return new ih(A)}static acrobat7(A){return new sh(A)}static ADBE_JSConsole(A){return new ah(A)}static ADBE_JSDebugger(A){return new nh(A)}static addSilentPrint(A){return new rh(A)}static addViewerPreferences(A){return new gh(A)}static adjustData(A){return new oh(A)}static adobeExtensionLevel(A){return new Ih(A)}static agent(A){return new ch(A)}static alwaysEmbed(A){return new lh(A)}static amd(A){return new hh(A)}static area(A){return new Ch(A)}static attributes(A){return new Bh(A)}static autoSave(A){return new Qh(A)}static base(A){return new Eh(A)}static batchOutput(A){return new fh(A)}static behaviorOverride(A){return new uh(A)}static cache(A){return new dh(A)}static change(A){return new xh(A)}static common(A){return new mh(A)}static compress(A){return new ph(A)}static compressLogicalStructure(A){return new wh(A)}static compressObjectStream(A){return new yh(A)}static compression(A){return new bh(A)}static config(A){return new Dh(A)}static conformance(A){return new kh(A)}static contentCopy(A){return new Sh(A)}static copies(A){return new Fh(A)}static creator(A){return new Rh(A)}static currentPage(A){return new Nh(A)}static data(A){return new Gh(A)}static debug(A){return new Uh(A)}static defaultTypeface(A){return new Mh(A)}static destination(A){return new Lh(A)}static documentAssembly(A){return new Hh(A)}static driver(A){return new Jh(A)}static duplexOption(A){return new Yh(A)}static dynamicRender(A){return new Kh(A)}static embed(A){return new vh(A)}static encrypt(A){return new qh(A)}static encryption(A){return new Th(A)}static encryptionLevel(A){return new Ph(A)}static enforce(A){return new Wh(A)}static equate(A){return new Oh(A)}static equateRange(A){return new Zh(A)}static exclude(A){return new jh(A)}static excludeNS(A){return new Xh(A)}static flipLabel(A){return new Vh(A)}static fontInfo(A){return new _h(A)}static formFieldFilling(A){return new zh(A)}static groupParent(A){return new $h(A)}static ifEmpty(A){return new AC(A)}static includeXDPContent(A){return new eC(A)}static incrementalLoad(A){return new tC(A)}static incrementalMerge(A){return new iC(A)}static interactive(A){return new sC(A)}static jog(A){return new aC(A)}static labelPrinter(A){return new nC(A)}static layout(A){return new rC(A)}static level(A){return new gC(A)}static linearized(A){return new oC(A)}static locale(A){return new IC(A)}static localeSet(A){return new cC(A)}static log(A){return new lC(A)}static map(A){return new hC(A)}static mediumInfo(A){return new CC(A)}static message(A){return new BC(A)}static messaging(A){return new QC(A)}static mode(A){return new EC(A)}static modifyAnnots(A){return new fC(A)}static msgId(A){return new uC(A)}static nameAttr(A){return new dC(A)}static neverEmbed(A){return new xC(A)}static numberOfCopies(A){return new mC(A)}static openAction(A){return new pC(A)}static output(A){return new wC(A)}static outputBin(A){return new yC(A)}static outputXSL(A){return new bC(A)}static overprint(A){return new DC(A)}static packets(A){return new kC(A)}static pageOffset(A){return new SC(A)}static pageRange(A){return new FC(A)}static pagination(A){return new RC(A)}static paginationOverride(A){return new NC(A)}static part(A){return new GC(A)}static pcl(A){return new UC(A)}static pdf(A){return new MC(A)}static pdfa(A){return new LC(A)}static permissions(A){return new HC(A)}static pickTrayByPDFSize(A){return new JC(A)}static picture(A){return new YC(A)}static plaintextMetadata(A){return new KC(A)}static presence(A){return new vC(A)}static present(A){return new qC(A)}static print(A){return new TC(A)}static printHighQuality(A){return new PC(A)}static printScaling(A){return new WC(A)}static printerName(A){return new OC(A)}static producer(A){return new ZC(A)}static ps(A){return new jC(A)}static range(A){return new XC(A)}static record(A){return new VC(A)}static relevant(A){return new _C(A)}static rename(A){return new zC(A)}static renderPolicy(A){return new $C(A)}static runScripts(A){return new AB(A)}static script(A){return new eB(A)}static scriptModel(A){return new tB(A)}static severity(A){return new iB(A)}static silentPrint(A){return new sB(A)}static staple(A){return new aB(A)}static startNode(A){return new nB(A)}static startPage(A){return new rB(A)}static submitFormat(A){return new gB(A)}static submitUrl(A){return new oB(A)}static subsetBelow(A){return new IB(A)}static suppressBanner(A){return new cB(A)}static tagged(A){return new lB(A)}static template(A){return new hB(A)}static templateCache(A){return new QB(A)}static threshold(A){return new CB(A)}static to(A){return new BB(A)}static trace(A){return new EB(A)}static transform(A){return new fB(A)}static type(A){return new uB(A)}static uri(A){return new dB(A)}static validate(A){return new xB(A)}static validateApprovalSignatures(A){return new mB(A)}static validationMessaging(A){return new pB(A)}static version(A){return new wB(A)}static versionControl(A){return new yB(A)}static viewerPreferences(A){return new bB(A)}static webClient(A){return new DB(A)}static whitespace(A){return new kB(A)}static window(A){return new SB(A)}static xdc(A){return new FB(A)}static xdp(A){return new RB(A)}static xsl(A){return new NB(A)}static zpl(A){return new GB(A)}},Kt=me.connectionSet.id,UB=class extends J{constructor(A){super(Kt,"connectionSet",!0),this.wsdlConnection=new b,this.xmlConnection=new b,this.xsdConnection=new b}},MB=class extends J{constructor(A){super(Kt,"effectiveInputPolicy"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},LB=class extends J{constructor(A){super(Kt,"effectiveOutputPolicy"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},HB=class extends qA{constructor(A){super(Kt,"operation"),this.id=A.id||"",this.input=A.input||"",this.name=A.name||"",this.output=A.output||"",this.use=A.use||"",this.usehref=A.usehref||""}},JB=class extends qA{constructor(A){super(Kt,"rootElement"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},YB=class extends qA{constructor(A){super(Kt,"soapAction"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},KB=class extends qA{constructor(A){super(Kt,"soapAddress"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},vB=class extends qA{constructor(A){super(Kt,"uri"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},qB=class extends qA{constructor(A){super(Kt,"wsdlAddress"),this.id=A.id||"",this.name=A.name||"",this.use=A.use||"",this.usehref=A.usehref||""}},TB=class extends J{constructor(A){super(Kt,"wsdlConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.effectiveInputPolicy=null,this.effectiveOutputPolicy=null,this.operation=null,this.soapAction=null,this.soapAddress=null,this.wsdlAddress=null}},PB=class extends J{constructor(A){super(Kt,"xmlConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.uri=null}},WB=class extends J{constructor(A){super(Kt,"xsdConnection",!0),this.dataDescription=A.dataDescription||"",this.name=A.name||"",this.rootElement=null,this.uri=null}},qs=class{static[Zt](A,t){if(qs.hasOwnProperty(A))return qs[A](t)}static connectionSet(A){return new UB(A)}static effectiveInputPolicy(A){return new MB(A)}static effectiveOutputPolicy(A){return new LB(A)}static operation(A){return new HB(A)}static rootElement(A){return new JB(A)}static soapAction(A){return new YB(A)}static soapAddress(A){return new KB(A)}static uri(A){return new vB(A)}static wsdlAddress(A){return new qB(A)}static wsdlConnection(A){return new TB(A)}static xmlConnection(A){return new PB(A)}static xsdConnection(A){return new WB(A)}},OB=me.datasets.id,ZB=class extends Jt{constructor(A){super(OB,"data",A)}[ma](){return!0}},jB=class extends J{constructor(A){super(OB,"datasets",!0),this.data=null,this.Signature=null}[ni](A){let t=A[XA];(t==="data"&&A[de]===OB||t==="Signature"&&A[de]===me.signature.id)&&(this[t]=A),this[Be](A)}},Ts=class{static[Zt](A,t){if(Ts.hasOwnProperty(A))return Ts[A](t)}static datasets(A){return new jB(A)}static data(A){return new ZB(A)}},Qe=me.localeSet.id,XB=class extends J{constructor(A){super(Qe,"calendarSymbols",!0),this.name="gregorian",this.dayNames=new b(2),this.eraNames=null,this.meridiemNames=null,this.monthNames=new b(2)}},VB=class extends qA{constructor(A){super(Qe,"currencySymbol"),this.name=O(A.name,["symbol","isoname","decimal"])}},_B=class extends J{constructor(A){super(Qe,"currencySymbols",!0),this.currencySymbol=new b(3)}},zB=class extends qA{constructor(A){super(Qe,"datePattern"),this.name=O(A.name,["full","long","med","short"])}},$B=class extends J{constructor(A){super(Qe,"datePatterns",!0),this.datePattern=new b(4)}},AQ=class extends ce{constructor(A){super(Qe,"dateTimeSymbols")}},eQ=class extends qA{constructor(A){super(Qe,"day")}},tQ=class extends J{constructor(A){super(Qe,"dayNames",!0),this.abbr=GA({data:A.abbr,defaultValue:0,validate:t=>t===1}),this.day=new b(7)}},iQ=class extends qA{constructor(A){super(Qe,"era")}},sQ=class extends J{constructor(A){super(Qe,"eraNames",!0),this.era=new b(2)}},aQ=class extends J{constructor(A){super(Qe,"locale",!0),this.desc=A.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}},nQ=class extends J{constructor(A){super(Qe,"localeSet",!0),this.locale=new b}},rQ=class extends qA{constructor(A){super(Qe,"meridiem")}},gQ=class extends J{constructor(A){super(Qe,"meridiemNames",!0),this.meridiem=new b(2)}},oQ=class extends qA{constructor(A){super(Qe,"month")}},IQ=class extends J{constructor(A){super(Qe,"monthNames",!0),this.abbr=GA({data:A.abbr,defaultValue:0,validate:t=>t===1}),this.month=new b(12)}},cQ=class extends qA{constructor(A){super(Qe,"numberPattern"),this.name=O(A.name,["full","long","med","short"])}},lQ=class extends J{constructor(A){super(Qe,"numberPatterns",!0),this.numberPattern=new b(4)}},hQ=class extends qA{constructor(A){super(Qe,"numberSymbol"),this.name=O(A.name,["decimal","grouping","percent","minus","zero"])}},CQ=class extends J{constructor(A){super(Qe,"numberSymbols",!0),this.numberSymbol=new b(5)}},BQ=class extends qA{constructor(A){super(Qe,"timePattern"),this.name=O(A.name,["full","long","med","short"])}},QQ=class extends J{constructor(A){super(Qe,"timePatterns",!0),this.timePattern=new b(4)}},EQ=class extends J{constructor(A){super(Qe,"typeFace",!0),this.name=A.name|""}},fQ=class extends J{constructor(A){super(Qe,"typeFaces",!0),this.typeFace=new b}},Ps=class{static[Zt](A,t){if(Ps.hasOwnProperty(A))return Ps[A](t)}static calendarSymbols(A){return new XB(A)}static currencySymbol(A){return new VB(A)}static currencySymbols(A){return new _B(A)}static datePattern(A){return new zB(A)}static datePatterns(A){return new $B(A)}static dateTimeSymbols(A){return new AQ(A)}static day(A){return new eQ(A)}static dayNames(A){return new tQ(A)}static era(A){return new iQ(A)}static eraNames(A){return new sQ(A)}static locale(A){return new aQ(A)}static localeSet(A){return new nQ(A)}static meridiem(A){return new rQ(A)}static meridiemNames(A){return new gQ(A)}static month(A){return new oQ(A)}static monthNames(A){return new IQ(A)}static numberPattern(A){return new cQ(A)}static numberPatterns(A){return new lQ(A)}static numberSymbol(A){return new hQ(A)}static numberSymbols(A){return new CQ(A)}static timePattern(A){return new BQ(A)}static timePatterns(A){return new QQ(A)}static typeFace(A){return new EQ(A)}static typeFaces(A){return new fQ(A)}},gx=me.signature.id,uQ=class extends J{constructor(A){super(gx,"signature",!0)}},Ws=class{static[Zt](A,t){if(Ws.hasOwnProperty(A))return Ws[A](t)}static signature(A){return new uQ(A)}},ox=me.stylesheet.id,dQ=class extends J{constructor(A){super(ox,"stylesheet",!0)}},Os=class{static[Zt](A,t){if(Os.hasOwnProperty(A))return Os[A](t)}static stylesheet(A){return new dQ(A)}},Ix=me.xdp.id,xQ=class extends J{constructor(A){super(Ix,"xdp",!0),this.uuid=A.uuid||"",this.timeStamp=A.timeStamp||"",this.config=null,this.connectionSet=null,this.datasets=null,this.localeSet=null,this.stylesheet=new b,this.template=null}[Ec](A){let t=me[A[XA]];return t&&A[de]===t.id}},Zs=class{static[Zt](A,t){if(Zs.hasOwnProperty(A))return Zs[A](t)}static xdp(A){return new xQ(A)}},cx=me.xhtml.id,Vn=Symbol(),lx=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"]),hx=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>e==="none"?"none":"normal"],["xfa-font-horizontal-scale",e=>`scaleX(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-font-vertical-scale",e=>`scaleY(${Math.max(0,Math.min(parseInt(e)/100)).toFixed(2)})`],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,A)=>(e=A.fontSize=hA(e),NA(.99*e))],["letter-spacing",e=>NA(hA(e))],["line-height",e=>NA(hA(e))],["margin",e=>NA(hA(e))],["margin-bottom",e=>NA(hA(e))],["margin-left",e=>NA(hA(e))],["margin-right",e=>NA(hA(e))],["margin-top",e=>NA(hA(e))],["text-indent",e=>NA(hA(e))],["font-family",e=>e],["vertical-align",e=>NA(hA(e))]]),Cx=/\\s+/g,Bx=/[\\r\\n]+/g,Qx=/\\r\\n?/g;function Ex(e,A,t){let i=Object.create(null);if(!e)return i;let s=Object.create(null);for(let[a,n]of e.split(";").map(r=>r.split(":",2))){let r=hx.get(a);if(r==="")continue;let g=n;r&&(g=typeof r=="string"?r:r(n,s)),a.endsWith("scale")?i.transform=i.transform?`${i[a]} ${g}`:g:i[a.replaceAll(/-([a-zA-Z])/g,(o,I)=>I.toUpperCase())]=g}if(i.fontFamily&&tu({typeface:i.fontFamily,weight:i.fontWeight||"normal",posture:i.fontStyle||"normal",size:s.fontSize||0},A,A[ie].fontFinder,i),t&&i.verticalAlign&&i.verticalAlign!=="0px"&&i.fontSize){let r=hA(i.fontSize);i.fontSize=NA(r*.583),i.verticalAlign=NA(Math.sign(hA(i.verticalAlign))*r*.333)}return t&&i.fontSize&&(i.fontSize=`calc(${i.fontSize} * var(--scale-factor))`),$f(i),i}function fx(e){return e.style?e.style.trim().split(/\\s*;\\s*/).filter(A=>!!A).map(A=>A.split(/\\s*:\\s*/,2)).filter(([A,t])=>(A==="font-family"&&e[ie].usedTypefaces.add(t),lx.has(A))).map(A=>A.join(":")).join(";"):""}var ux=new Set(["body","html"]),ct=class extends Jt{constructor(A,t){super(cx,t),this[Vn]=!1,this.style=A.style||""}[Yt](A){super[Yt](A),this.style=fx(this)}[eo](){return!ux.has(this[XA])}[xi](A,t=!1){t?this[Vn]=!0:(A=A.replaceAll(Bx,""),this.style.includes("xfa-spacerun:yes")||(A=A.replaceAll(Cx," "))),A&&(this[P]+=A)}[ri](A,t=!0){let i=Object.create(null),s={top:NaN,bottom:NaN,left:NaN,right:NaN},a=null;for(let[n,r]of this.style.split(";").map(g=>g.split(":",2)))switch(n){case"font-family":i.typeface=io(r);break;case"font-size":i.size=hA(r);break;case"font-weight":i.weight=r;break;case"font-style":i.posture=r;break;case"letter-spacing":i.letterSpacing=hA(r);break;case"margin":let g=r.split(/ \\t/).map(o=>hA(o));switch(g.length){case 1:s.top=s.bottom=s.left=s.right=g[0];break;case 2:s.top=s.bottom=g[0],s.left=s.right=g[1];break;case 3:s.top=g[0],s.bottom=g[2],s.left=s.right=g[1];break;case 4:s.top=g[0],s.left=g[1],s.bottom=g[2],s.right=g[3];break}break;case"margin-top":s.top=hA(r);break;case"margin-bottom":s.bottom=hA(r);break;case"margin-left":s.left=hA(r);break;case"margin-right":s.right=hA(r);break;case"line-height":a=hA(r);break}if(A.pushData(i,s,a),this[P])A.addString(this[P]);else for(let n of this[Ue]()){if(n[XA]==="#text"){A.addString(n[P]);continue}n[ri](A)}t&&A.popFont()}[SA](A){let t=[];if(this[L]={children:t},this[_i]({}),t.length===0&&!this[P])return dA.EMPTY;let i;return this[Vn]?i=this[P]?this[P].replaceAll(Qx,`\n`):void 0:i=this[P]||void 0,dA.success({name:this[XA],attributes:{href:this.href,style:Ex(this.style,this,this[Vn])},children:t,value:i})}},mQ=class extends ct{constructor(A){super(A,"a"),this.href=iu(A.href)||""}},pQ=class extends ct{constructor(A){super(A,"b")}[ri](A){A.pushFont({weight:"bold"}),super[ri](A),A.popFont()}},wQ=class extends ct{constructor(A){super(A,"body")}[SA](A){let t=super[SA](A),{html:i}=t;return i?(i.name="div",i.attributes.class=["xfaRich"],t):dA.EMPTY}},yQ=class extends ct{constructor(A){super(A,"br")}[Se](){return`\n`}[ri](A){A.addString(`\n`)}[SA](A){return dA.success({name:"br"})}},bQ=class extends ct{constructor(A){super(A,"html")}[SA](A){var i;let t=[];if(this[L]={children:t},this[_i]({}),t.length===0)return dA.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[P]||""});if(t.length===1){let s=t[0];if((i=s.attributes)!=null&&i.class.includes("xfaRich"))return dA.success(s)}return dA.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}},DQ=class extends ct{constructor(A){super(A,"i")}[ri](A){A.pushFont({posture:"italic"}),super[ri](A),A.popFont()}},kQ=class extends ct{constructor(A){super(A,"li")}},SQ=class extends ct{constructor(A){super(A,"ol")}},FQ=class extends ct{constructor(A){super(A,"p")}[ri](A){super[ri](A,!1),A.addString(`\n`),A.addPara(),A.popFont()}[Se](){return this[MA]()[Ue]().at(-1)===this?super[Se]():super[Se]()+`\n`}},RQ=class extends ct{constructor(A){super(A,"span")}},NQ=class extends ct{constructor(A){super(A,"sub")}},GQ=class extends ct{constructor(A){super(A,"sup")}},UQ=class extends ct{constructor(A){super(A,"ul")}},$i=class{static[Zt](A,t){if($i.hasOwnProperty(A))return $i[A](t)}static a(A){return new mQ(A)}static b(A){return new pQ(A)}static body(A){return new wQ(A)}static br(A){return new yQ(A)}static html(A){return new bQ(A)}static i(A){return new DQ(A)}static li(A){return new kQ(A)}static ol(A){return new SQ(A)}static p(A){return new FQ(A)}static span(A){return new RQ(A)}static sub(A){return new NQ(A)}static sup(A){return new GQ(A)}static ul(A){return new UQ(A)}},HE={config:vs,connection:qs,datasets:Ts,localeSet:Ps,signature:Ws,stylesheet:Os,template:Ks,xdp:Zs,xhtml:$i},Qg=class{constructor(A){this.namespaceId=A}[Zt](A,t){return new Jt(this.namespaceId,A,t)}},MQ=class extends J{constructor(A){super(-1,"root",Object.create(null)),this.element=null,this[As]=A}[ni](A){return this.element=A,!0}[se](){super[se](),this.element.template instanceof tn&&(this[As].set(Pf,this.element),this.element.template[ha](this[As]),this.element.template[As]=this[As])}},LQ=class extends J{constructor(){super(-1,"",Object.create(null))}[ni](A){return!1}},HQ=class{constructor(A=null){this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max(...Object.values(me).map(({id:t})=>t)),this._currentNamespace=A||new Qg(++this._nextNsId)}buildRoot(A){return new MQ(A)}build({nsPrefix:A,name:t,attributes:i,namespace:s,prefixes:a}){let n=s!==null;if(n&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(s)),a&&this._addNamespacePrefix(a),i.hasOwnProperty(qi)){let o=HE.datasets,I=i[qi],c=null;for(let[l,h]of Object.entries(I))if(this._getNamespaceToUse(l)===o){c={xfa:h};break}c?i[qi]=c:delete i[qi]}let r=this._getNamespaceToUse(A),g=(r==null?void 0:r[Zt](t,i))||new LQ;return g[ma]()&&this._nsAgnosticLevel++,(n||a||g[ma]())&&(g[cr]={hasNamespace:n,prefixes:a,nsAgnostic:g[ma]()}),g}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(A){let t=this._namespaces.get(A);if(t)return t;for(let[i,{check:s}]of Object.entries(me))if(s(A)){if(t=HE[i],t)return this._namespaces.set(A,t),t;break}return t=new Qg(++this._nextNsId),this._namespaces.set(A,t),t}_addNamespacePrefix(A){for(let{prefix:t,value:i}of A){let s=this._searchNamespace(i),a=this._namespacePrefixes.get(t);a||(a=[],this._namespacePrefixes.set(t,a)),a.push(s)}}_getNamespaceToUse(A){if(!A)return this._currentNamespace;let t=this._namespacePrefixes.get(A);return(t==null?void 0:t.length)>0?t.at(-1):(k(`Unknown namespace prefix: ${A}.`),null)}clean(A){let{hasNamespace:t,prefixes:i,nsAgnostic:s}=A;t&&(this._currentNamespace=this._namespaceStack.pop()),i&&i.forEach(({prefix:a})=>{this._namespacePrefixes.get(a).pop()}),s&&this._nsAgnosticLevel--}},js=class extends jr{constructor(A=null,t=!1){super(),this._builder=new HQ(A),this._stack=[],this._globalData={usedTypefaces:new Set},this._ids=new Map,this._current=this._builder.buildRoot(this._ids),this._errorCode=ht.NoError,this._whiteRegex=/^\\s+$/,this._nbsps=/\\xa0+/g,this._richText=t}parse(A){if(this.parseXml(A),this._errorCode===ht.NoError)return this._current[se](),this._current.element}onText(A){if(A=A.replace(this._nbsps,t=>t.slice(1)+" "),this._richText||this._current[eo]()){this._current[xi](A,this._richText);return}this._whiteRegex.test(A)||this._current[xi](A.trim())}onCdata(A){this._current[xi](A)}_mkAttributes(A,t){let i=null,s=null,a=Object.create({});for(let{name:n,value:r}of A)if(n==="xmlns")i?k(`XFA - multiple namespace definition in <${t}>`):i=r;else if(n.startsWith("xmlns:")){let g=n.substring(6);s||(s=[]),s.push({prefix:g,value:r})}else{let g=n.indexOf(":");if(g===-1)a[n]=r;else{let o=a[qi];o||(o=a[qi]=Object.create(null));let[I,c]=[n.slice(0,g),n.slice(g+1)],l=o[I]||(o[I]=Object.create(null));l[c]=r}}return[i,s,a]}_getNameAndPrefix(A,t){let i=A.indexOf(":");return i===-1?[A,null]:[A.substring(i+1),t?"":A.substring(0,i)]}onBeginElement(A,t,i){let[s,a,n]=this._mkAttributes(t,A),[r,g]=this._getNameAndPrefix(A,this._builder.isNsAgnostic()),o=this._builder.build({nsPrefix:g,name:r,attributes:n,namespace:s,prefixes:a});if(o[ie]=this._globalData,i){o[se](),this._current[ni](o)&&o[fc](this._ids),o[Yt](this._builder);return}this._stack.push(this._current),this._current=o}onEndElement(A){let t=this._current;if(t[d1]()&&typeof t[P]=="string"){let i=new js;i._globalData=this._globalData;let s=i.parse(t[P]);t[P]=null,t[ni](s)}t[se](),this._current=this._stack.pop(),this._current[ni](t)&&t[fc](this._ids),t[Yt](this._builder)}onError(A){this._errorCode=A}},M0=class{constructor(A){try{this.root=new js().parse(M0._createDocument(A));let t=new eh(this.root);this.form=t.bind(),this.dataHandler=new th(this.root,t.getData()),this.form[ie].template=this.form}catch(t){k(`XFA - an error occurred during parsing and binding: ${t}`)}}isValid(){return this.root&&this.form}_createPagesHelper(){let A=this.form[Of]();return new Promise((t,i)=>{let s=()=>{try{let a=A.next();a.done?t(a.value):setTimeout(s,0)}catch(a){i(a)}};setTimeout(s,0)})}async _createPages(){try{this.pages=await this._createPagesHelper(),this.dims=this.pages.children.map(A=>{let{width:t,height:i}=A.attributes.style;return[0,0,parseInt(t),parseInt(i)]})}catch(A){k(`XFA - an error occurred during layout: ${A}`)}}getBoundingBox(A){return this.dims[A]}async getNumPages(){return this.pages||await this._createPages(),this.dims.length}setImages(A){this.form[ie].images=A}setFonts(A){this.form[ie].fontFinder=new uc(A);let t=[];for(let i of this.form[ie].usedTypefaces)i=io(i),this.form[ie].fontFinder.find(i)||t.push(i);return t.length>0?t:null}appendFonts(A,t){this.form[ie].fontFinder.add(A,t)}async getPages(){this.pages||await this._createPages();let A=this.pages;return this.pages=null,A}serializeData(A){return this.dataHandler.serialize(A)}static _createDocument(A){return A["/xdp:xdp"]?Object.values(A).join(""):A["xdp:xdp"]}static getRichTextAsHtml(A){if(!A||typeof A!="string")return null;try{let t=new js($i,!0).parse(A);if(!["body","xhtml"].includes(t[XA])){let n=$i.body({});n[Be](t),t=n}let i=t[SA]();if(!i.success)return null;let{html:s}=i,{attributes:a}=s;return a&&(a.class&&(a.class=a.class.filter(n=>!n.startsWith("xfa"))),a.dir="auto"),{html:s,str:t[Se]()}}catch(t){k(`XFA - an error occurred during parsing of rich text: ${t}`)}return null}},ei=class{static createGlobals(A){return Promise.all([A.ensureCatalog("acroForm"),A.ensureDoc("xfaDatasets"),A.ensureCatalog("structTreeRoot"),A.ensureCatalog("baseUrl"),A.ensureCatalog("attachments")]).then(([t,i,s,a,n])=>({pdfManager:A,acroForm:t instanceof F?t:F.empty,xfaDatasets:i,structTreeRoot:s,baseUrl:a,attachments:n}),t=>(k(`createGlobals: "${t}".`),null))}static async create(A,t,i,s,a,n){let r=a?await this._getPageIndex(A,t,i.pdfManager):null;return i.pdfManager.ensure(this,"_create",[A,t,i,s,a,r,n])}static _create(A,t,i,s,a=!1,n=null,r=null){let g=A.fetchIfRef(t);if(!(g instanceof F))return;let{acroForm:o,pdfManager:I}=i,c=t instanceof oA?t.toString():`annot_${s.createObjId()}`,l=g.get("Subtype");l=l instanceof M?l.name:null;let h={xref:A,ref:t,dict:g,subtype:l,id:c,annotationGlobals:i,collectFields:a,needAppearances:!a&&o.get("NeedAppearances")===!0,pageIndex:n,evaluatorOptions:I.evaluatorOptions,pageRef:r};switch(l){case"Link":return new PQ(h);case"Text":return new TQ(h);case"Widget":let C=Mt({dict:g,key:"FT"});switch(C=C instanceof M?C.name:null,C){case"Tx":return new KQ(h);case"Btn":return new vQ(h);case"Ch":return new qQ(h);case"Sig":return new Eg(h)}return k(`Unimplemented widget field type "${C}", falling back to base field type.`),new bt(h);case"Popup":return new fg(h);case"FreeText":return new wa(h);case"Line":return new WQ(h);case"Square":return new OQ(h);case"Circle":return new ZQ(h);case"PolyLine":return new ug(h);case"Polygon":return new dg(h);case"Caret":return new jQ(h);case"Ink":return new l0(h);case"Highlight":return new ya(h);case"Underline":return new XQ(h);case"Squiggly":return new VQ(h);case"StrikeOut":return new _Q(h);case"Stamp":return new gs(h);case"FileAttachment":return new zQ(h);default:return a||k(l?`Unimplemented annotation type "${l}", falling back to base annotation.`:"Annotation is missing the required /Subtype."),new L0(h)}}static async _getPageIndex(A,t,i){try{let s=await A.fetchIfRefAsync(t);if(!(s instanceof F))return-1;let a=s.getRaw("P");if(a instanceof oA)try{return await i.ensureCatalog("getPageIndex",[a])}catch(r){PA(`_getPageIndex -- not a valid page reference: "${r}".`)}if(s.has("Kids"))return-1;let n=await i.ensureDoc("numPages");for(let r=0;rA/255)}function bn(e,A){let t=e.getArray("QuadPoints");if(!wt(t,null)||t.length===0||t.length%8>0)return null;let i=new Float32Array(t.length);for(let s=0,a=t.length;sA[2]||QA[3]))return null;i.set([C,E,B,E,C,Q,B,Q],s)}return i}function JQ(e,A,t){let[i,s,a,n]=Ce.getAxialAlignedBoundingBox(A,t);if(i===a||s===n)return[1,0,0,1,e[0],e[1]];let r=(e[2]-e[0])/(a-i),g=(e[3]-e[1])/(n-s);return[r,0,0,g,e[0]-i*r,e[1]-s*g]}var L0=class{constructor(A){let{dict:t,xref:i,annotationGlobals:s}=A;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);let a=t.get("MK");this.setBorderAndBackgroundColors(a),this.setRotation(a,t),this.ref=A.ref instanceof oA?A.ref:null,this._streams=[],this.appearance&&this._streams.push(this.appearance);let n=!!(this.flags&it.LOCKED),r=!!(this.flags&it.LOCKEDCONTENTS);if(s.structTreeRoot){let g=t.get("StructParent");g=Number.isInteger(g)&&g>=0?g:-1,s.structTreeRoot.addAnnotationIdToPage(A.pageRef,g)}if(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:A.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:A.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&it.NOROTATE),noHTML:n&&r,isEditable:!1},A.collectFields){let g=t.get("Kids");if(Array.isArray(g)){let o=[];for(let I of g)I instanceof oA&&o.push(I.toString());o.length!==0&&(this.data.kidIds=o)}this.data.actions=Vg(i,t,WE),this.data.fieldName=this._constructFieldName(t),this.data.pageIndex=A.pageIndex}this._isOffscreenCanvasSupported=A.evaluatorOptions.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}_hasFlag(A,t){return!!(A&t)}_isViewable(A){return!this._hasFlag(A,it.INVISIBLE)&&!this._hasFlag(A,it.NOVIEW)}_isPrintable(A){return this._hasFlag(A,it.PRINT)&&!this._hasFlag(A,it.HIDDEN)&&!this._hasFlag(A,it.INVISIBLE)}mustBeViewed(A,t){var s;let i=(s=A==null?void 0:A.get(this.data.id))==null?void 0:s.noView;return i!==void 0?!i:this.viewable&&!this._hasFlag(this.flags,it.HIDDEN)}mustBePrinted(A){var i;let t=(i=A==null?void 0:A.get(this.data.id))==null?void 0:i.noPrint;return t!==void 0?!t:this.printable}mustBeViewedWhenEditing(A,t=null){return A?!this.data.isEditable:!(t!=null&&t.has(this.data.id))}get viewable(){return this.data.quadPoints===null?!1:this.flags===0?!0:this._isViewable(this.flags)}get printable(){return this.data.quadPoints===null||this.flags===0?!1:this._isPrintable(this.flags)}_parseStringHelper(A){let t=typeof A=="string"?jA(A):"",i=t&&yf(t).dir==="rtl"?"rtl":"ltr";return{str:t,dir:i}}setDefaultAppearance(A){let{dict:t,annotationGlobals:i}=A,s=Mt({dict:t,key:"DA"})||i.acroForm.get("DA");this._defaultAppearance=typeof s=="string"?s:"",this.data.defaultAppearanceData=Q1(this._defaultAppearance)}setTitle(A){this._title=this._parseStringHelper(A)}setContents(A){this._contents=this._parseStringHelper(A)}setModificationDate(A){this.modificationDate=typeof A=="string"?A:null}setFlags(A){this.flags=Number.isInteger(A)&&A>0?A:0,this.flags&it.INVISIBLE&&this.constructor.name!=="Annotation"&&(this.flags^=it.INVISIBLE)}hasFlag(A){return this._hasFlag(this.flags,A)}setRectangle(A){this.rectangle=Ei(A,[0,0,0,0])}setColor(A){this.color=Qs(A)}setLineEndings(A){if(this.lineEndings=["None","None"],Array.isArray(A)&&A.length===2)for(let t=0;t<2;t++){let i=A[t];if(i instanceof M)switch(i.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]=i.name;continue}k(`Ignoring invalid lineEnding: ${i}`)}}setRotation(A,t){this.rotation=0;let i=A instanceof F?A.get("R")||0:t.get("Rotate")||0;Number.isInteger(i)&&i!==0&&(i%=360,i<0&&(i+=360),i%90===0&&(this.rotation=i))}setBorderAndBackgroundColors(A){A instanceof F?(this.borderColor=Qs(A.getArray("BC"),null),this.backgroundColor=Qs(A.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}setBorderStyle(A){if(this.borderStyle=new YQ,A instanceof F)if(A.has("BS")){let t=A.get("BS");if(t instanceof F){let i=t.get("Type");(!i||ye(i,"Border"))&&(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}}else if(A.has("Border")){let t=A.getArray("Border");Array.isArray(t)&&t.length>=3&&(this.borderStyle.setHorizontalCornerRadius(t[0]),this.borderStyle.setVerticalCornerRadius(t[1]),this.borderStyle.setWidth(t[2],this.rectangle),t.length===4&&this.borderStyle.setDashArray(t[3],!0))}else this.borderStyle.setWidth(0)}setAppearance(A){this.appearance=null;let t=A.get("AP");if(!(t instanceof F))return;let i=t.get("N");if(i instanceof KA){this.appearance=i;return}if(!(i instanceof F))return;let s=A.get("AS");if(!(s instanceof M)||!i.has(s.name))return;let a=i.get(s.name);a instanceof KA&&(this.appearance=a)}setOptionalContent(A){this.oc=null;let t=A.get("OC");t instanceof M?k("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof F&&(this.oc=t)}loadResources(A,t){return t.dict.getAsync("Resources").then(i=>i?new Hs(i,A,i.xref).load().then(function(){return i}):void 0)}async getOperatorList(A,t,i,s){let{hasOwnCanvas:a,id:n,rect:r}=this.data,g=this.appearance,o=!!(a&&i&st.DISPLAY);if(o&&(r[0]===r[2]||r[1]===r[3]))return this.data.hasOwnCanvas=!1,{opList:new ze,separateForm:!1,separateCanvas:!1};if(!g){if(!o)return{opList:new ze,separateForm:!1,separateCanvas:!1};g=new It(""),g.dict=new F}let I=g.dict,c=await this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],g),l=Ko(I.getArray("BBox"),[0,0,1,1]),h=Ki(I.getArray("Matrix"),Wt),C=JQ(r,l,h),B=new ze,Q;return this.oc&&(Q=await A.parseMarkedContentProps(this.oc,null)),Q!==void 0&&B.addOp(y.beginMarkedContentProps,["OC",Q]),B.addOp(y.beginAnnotation,[n,r,C,h,o]),await A.getOperatorList({stream:g,task:t,resources:c,operatorList:B,fallbackFontDict:this._fallbackFontDict}),B.addOp(y.endAnnotation,[]),Q!==void 0&&B.addOp(y.endMarkedContent,[]),this.reset(),{opList:B,separateForm:!1,separateCanvas:o}}async save(A,t,i){return null}get hasTextContent(){return!1}async extractTextContent(A,t,i){if(!this.appearance)return;let s=await this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance),a=[],n=[],r=null,g={desiredSize:Math.Infinity,ready:!0,enqueue(o,I){for(let c of o.items)c.str!==void 0&&(r||(r=c.transform.slice(-2)),n.push(c.str),c.hasEOL&&(a.push(n.join("").trimEnd()),n.length=0))}};if(await A.getTextContent({stream:this.appearance,task:t,resources:s,includeMarkedContent:!0,keepWhiteSpace:!0,sink:g,viewBox:i}),this.reset(),n.length&&a.push(n.join("").trimEnd()),a.length>1||a[0]){let o=this.appearance.dict,I=Ko(o.getArray("BBox"),null),c=Ki(o.getArray("Matrix"),null);this.data.textPosition=this._transformPoint(r,I,c),this.data.textContent=a}}_transformPoint(A,t,i){let{rect:s}=this.data;t||(t=[0,0,1,1]),i||(i=[1,0,0,1,0,0]);let a=JQ(s,t,i);return a[4]-=s[0],a[5]-=s[1],A=Ce.applyTransform(A,a),Ce.applyTransform(A,i)}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(let A of this._streams)A.reset()}_constructFieldName(A){if(!A.has("T")&&!A.has("Parent"))return k("Unknown field name, falling back to empty field name."),"";if(!A.has("Parent"))return jA(A.get("T"));let t=[];A.has("T")&&t.unshift(jA(A.get("T")));let i=A,s=new be;for(A.objId&&s.put(A.objId);i.has("Parent")&&(i=i.get("Parent"),!(!(i instanceof F)||i.objId&&s.has(i.objId)));)i.objId&&s.put(i.objId),i.has("T")&&t.unshift(jA(i.get("T")));return t.join(".")}},YQ=class{constructor(){this.width=1,this.style=Y0.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}setWidth(A,t=[0,0,0,0]){if(A instanceof M){this.width=0;return}if(typeof A=="number"){if(A>0){let i=(t[2]-t[0])/2,s=(t[3]-t[1])/2;i>0&&s>0&&(A>i||A>s)&&(k(`AnnotationBorderStyle.setWidth - ignoring width: ${A}`),A=1)}this.width=A}}setStyle(A){if(A instanceof M)switch(A.name){case"S":this.style=Y0.SOLID;break;case"D":this.style=Y0.DASHED;break;case"B":this.style=Y0.BEVELED;break;case"I":this.style=Y0.INSET;break;case"U":this.style=Y0.UNDERLINE;break;default:break}}setDashArray(A,t=!1){if(Array.isArray(A)){let i=!0,s=!0;for(let a of A)if(+a>=0)a>0&&(s=!1);else{i=!1;break}A.length===0||i&&!s?(this.dashArray=A,t&&this.setStyle(M.get("D"))):this.width=0}else A&&(this.width=0)}setHorizontalCornerRadius(A){Number.isInteger(A)&&(this.horizontalCornerRadius=A)}setVerticalCornerRadius(A){Number.isInteger(A)&&(this.verticalCornerRadius=A)}},$e=class extends L0{constructor(A){super(A);let{dict:t}=A;if(t.has("IRT")){let s=t.getRaw("IRT");this.data.inReplyTo=s instanceof oA?s.toString():null;let a=t.get("RT");this.data.replyType=a instanceof M?a.name:Ho.REPLY}let i=null;if(this.data.replyType===Ho.GROUP){let s=t.get("IRT");this.setTitle(s.get("T")),this.data.titleObj=this._title,this.setContents(s.get("Contents")),this.data.contentsObj=this._contents,s.has("CreationDate")?(this.setCreationDate(s.get("CreationDate")),this.data.creationDate=this.creationDate):this.data.creationDate=null,s.has("M")?(this.setModificationDate(s.get("M")),this.data.modificationDate=this.modificationDate):this.data.modificationDate=null,i=s.getRaw("Popup"),s.has("C")?(this.setColor(s.getArray("C")),this.data.color=this.color):this.data.color=null}else this.data.titleObj=this._title,this.setCreationDate(t.get("CreationDate")),this.data.creationDate=this.creationDate,i=t.getRaw("Popup"),t.has("C")||(this.data.color=null);this.data.popupRef=i instanceof oA?i.toString():null,t.has("RC")&&(this.data.richText=M0.getRichTextAsHtml(t.get("RC")))}setCreationDate(A){this.creationDate=typeof A=="string"?A:null}_setDefaultAppearance({xref:A,extra:t,strokeColor:i,fillColor:s,blendMode:a,strokeAlpha:n,fillAlpha:r,pointsCallback:g}){let o=Number.MAX_VALUE,I=Number.MAX_VALUE,c=Number.MIN_VALUE,l=Number.MIN_VALUE,h=["q"];t&&h.push(t),i&&h.push(`${i[0]} ${i[1]} ${i[2]} RG`),s&&h.push(`${s[0]} ${s[1]} ${s[2]} rg`);let C=this.data.quadPoints;C||(C=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 m=0,D=C.length;mtypeof t=="string").map(t=>jA(t)):A instanceof M?jA(A.name):typeof A=="string"?jA(A):null}hasFieldFlag(A){return!!(this.data.fieldFlags&A)}_isViewable(A){return!0}mustBeViewed(A,t){return t?this.viewable:super.mustBeViewed(A,t)&&!this._hasFlag(this.flags,it.NOVIEW)}getRotationMatrix(A){var a;let t=(a=A==null?void 0:A.get(this.data.id))==null?void 0:a.rotation;if(t===void 0&&(t=this.rotation),t===0)return Wt;let i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1];return xr(t,i,s)}getBorderAndBackgroundAppearances(A){var r;let t=(r=A==null?void 0:A.get(this.data.id))==null?void 0:r.rotation;if(t===void 0&&(t=this.rotation),!this.backgroundColor&&!this.borderColor)return"";let i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1],a=t===0||t===180?`0 0 ${i} ${s} re`:`0 0 ${s} ${i} re`,n="";if(this.backgroundColor&&(n=`${mi(this.backgroundColor,!0)} ${a} f `),this.borderColor){let g=this.borderStyle.width||1;n+=`${g} w ${mi(this.borderColor,!1)} ${a} S `}return n}async getOperatorList(A,t,i,s){if(i&st.ANNOTATIONS_FORMS&&!(this instanceof Eg)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new ze,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(A,t,i,s);let a=await this._getAppearance(A,t,i,s);if(this.appearance&&a===null)return super.getOperatorList(A,t,i,s);let n=new ze;if(!this._defaultAppearance||a===null)return{opList:n,separateForm:!1,separateCanvas:!1};let r=!!(this.data.hasOwnCanvas&&i&st.DISPLAY),g=[1,0,0,1,0,0],o=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],I=JQ(this.data.rect,o,g),c;this.oc&&(c=await A.parseMarkedContentProps(this.oc,null)),c!==void 0&&n.addOp(y.beginMarkedContentProps,["OC",c]),n.addOp(y.beginAnnotation,[this.data.id,this.data.rect,I,this.getRotationMatrix(s),r]);let l=new It(a);return await A.getOperatorList({stream:l,task:t,resources:this._fieldResources.mergedResources,operatorList:n}),n.addOp(y.endAnnotation,[]),c!==void 0&&n.addOp(y.endMarkedContent,[]),{opList:n,separateForm:!1,separateCanvas:r}}_getMKDict(A){let t=new F(null);return A&&t.set("R",A),this.borderColor&&t.set("BC",ft(this.borderColor)),this.backgroundColor&&t.set("BG",ft(this.backgroundColor)),t.size>0?t:null}amendSavedDict(A,t){}async save(A,t,i){let s=i==null?void 0:i.get(this.data.id),a=s==null?void 0:s.value,n=s==null?void 0:s.rotation;if(a===this.data.fieldValue||a===void 0){if(!this._hasValueFromXFA&&n===void 0)return null;a||(a=this.data.fieldValue)}if(n===void 0&&!this._hasValueFromXFA&&Array.isArray(a)&&Array.isArray(this.data.fieldValue)&&a.length===this.data.fieldValue.length&&a.every((Q,E)=>Q===this.data.fieldValue[E]))return null;n===void 0&&(n=this.rotation);let r=null;if(!this._needAppearances&&(r=await this._getAppearance(A,t,st.SAVE,i),r===null))return null;let g=!1;r!=null&&r.needAppearances&&(g=!0,r=null);let{xref:o}=A,I=o.fetchIfRef(this.ref);if(!(I instanceof F))return null;let c=new F(o);for(let Q of I.getKeys())Q!=="AP"&&c.set(Q,I.getRaw(Q));let l={path:this.data.fieldName,value:a};c.set("V",Array.isArray(a)?a.map(ii):ii(a)),this.amendSavedDict(i,c);let h=this._getMKDict(n);h&&c.set("MK",h);let C=[],B=[{ref:this.ref,data:"",xfa:l,needAppearances:g}];if(r!==null){let Q=o.getNewTemporaryRef(),E=new F(o);c.set("AP",E),E.set("N",Q);let f=this._getSaveFieldResources(o),u=new It(r),d=u.dict=new F(o);d.set("Subtype",M.get("Form")),d.set("Resources",f),d.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]);let x=this.getRotationMatrix(i);x!==Wt&&d.set("Matrix",x),await ot(Q,u,C,o),B.push({ref:Q,data:C.join(""),xfa:null,needAppearances:!1}),C.length=0}return c.set("M",`D:${Zi()}`),await ot(this.ref,c,C,o),B[0].data=C.join(""),B}async _getAppearance(A,t,i,s){if(this.hasFieldFlag(Te.PASSWORD))return null;let n=s==null?void 0:s.get(this.data.id),r,g;if(n&&(r=n.formattedValue||n.value,g=n.rotation),g===void 0&&r===void 0&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;let o=this.getBorderAndBackgroundAppearances(s);if(r===void 0&&(r=this.data.fieldValue,!r))return`/Tx BMC q ${o}Q EMC`;if(Array.isArray(r)&&r.length===1&&(r=r[0]),gt(typeof r=="string","Expected `value` to be a string."),r=r.trim(),this.data.combo){let U=this.data.options.find(({exportValue:K})=>r===K);r=(U==null?void 0:U.displayValue)||r}if(r==="")return`/Tx BMC q ${o}Q EMC`;g===void 0&&(g=this.rotation);let I=-1,c;this.data.multiLine?(c=r.split(/\\r\\n?|\\n/).map(U=>U.normalize("NFC")),I=c.length):c=[r.replace(/\\r\\n?|\\n/,"").normalize("NFC")];let l=1,h=2,C=this.data.rect[3]-this.data.rect[1],B=this.data.rect[2]-this.data.rect[0];(g===90||g===270)&&([B,C]=[C,B]),this._defaultAppearance||(this.data.defaultAppearanceData=Q1(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let Q=await bt._getFontData(A,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources),E,f,u,d=[],x=!1;for(let U of c){let K=Q.encodeString(U);K.length>1&&(x=!0),d.push(K.join(""))}if(x&&i&st.SAVE)return{needAppearances:!0};if(x&&this._isOffscreenCanvasSupported){let U=this.data.comb?"monospace":"sans-serif",K=new Ut(A.xref,U),Z=K.createFontResources(c.join("")),AA=Z.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){let _=this._fieldResources.mergedResources.get("Font");for(let tA of AA.getKeys())_.set(tA,AA.getRaw(tA))}else this._fieldResources.mergedResources.set("Font",AA);let gA=K.fontName.name;Q=await bt._getFontData(A,t,{fontName:gA,fontSize:0},Z);for(let _=0,tA=d.length;_2)return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 ${Ae(h)} ${Ae(S)} Tm (${Fs(d[0])}) Tj ET Q EMC`;let w={shift:0},Y=this._renderText(d[0],Q,f,B,D,w,h,S);return`/Tx BMC q ${o}BT `+E+` 1 0 0 1 0 0 Tm ${Y} ET Q EMC`}static async _getFontData(A,t,i,s){let a=new ze,n={font:null,clone(){return this}},{fontName:r,fontSize:g}=i;return await A.handleSetFont(s,[r&&M.get(r),g],null,a,t,n,null),n.font}_getTextWidth(A,t){return t.charsToGlyphs(A).reduce((i,s)=>i+s.width,0)/1e3}_computeFontSize(A,t,i,s,a){let{fontSize:n}=this.data.defaultAppearanceData,r=(n||12)*Qi,g=Math.round(A/r);if(!n){let o=l=>Math.floor(l*100)/100;if(a===-1){let l=this._getTextWidth(i,s);n=o(Math.min(A/Qi,l>t?t/l:1/0)),g=1}else{let l=i.split(/\\r\\n?|\\n/),h=[];for(let B of l){let Q=s.encodeString(B).join(""),E=s.charsToGlyphs(Q),f=s.getCharPositions(Q);h.push({line:Q,glyphs:E,positions:f})}let C=B=>{let Q=0;for(let E of h){let f=this._splitLine(null,s,B,t,E);if(Q+=f.length*B,Q>A)return!0}return!1};for(g=Math.max(g,a);;){if(r=A/g,n=o(r/Qi),C(n)){g++;continue}break}}let{fontName:I,fontColor:c}=this.data.defaultAppearanceData;this._defaultAppearance=N9({fontSize:n,fontName:I,fontColor:c})}return[this._defaultAppearance,n,A/g]}_renderText(A,t,i,s,a,n,r,g){let o;if(a===1){let c=this._getTextWidth(A,t)*i;o=(s-c)/2}else if(a===2){let c=this._getTextWidth(A,t)*i;o=s-c-r}else o=r;let I=Ae(o-n.shift);return n.shift=o,g=Ae(g),`${I} ${g} Td (${Fs(A)}) Tj`}_getSaveFieldResources(A){var n;let{localResources:t,appearanceResources:i,acroFormResources:s}=this._fieldResources,a=(n=this.data.defaultAppearanceData)==null?void 0:n.fontName;if(!a)return t||F.empty;for(let r of[t,i])if(r instanceof F){let g=r.get("Font");if(g instanceof F&&g.has(a))return r}if(s instanceof F){let r=s.get("Font");if(r instanceof F&&r.has(a)){let g=new F(A);g.set(a,r.getRaw(a));let o=new F(A);return o.set("Font",g),F.merge({xref:A,dictArray:[o,t],mergeSubDicts:!0})}}return t||F.empty}getFieldObject(){return null}},KQ=class extends bt{constructor(A){super(A);let{dict:t}=A;t.has("PMD")&&(this.flags|=it.HIDDEN,this.data.hidden=!0,k("Barcodes are not supported")),this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML,this._hasText=!0,typeof this.data.fieldValue!="string"&&(this.data.fieldValue="");let i=Mt({dict:t,key:"Q"});(!Number.isInteger(i)||i<0||i>2)&&(i=null),this.data.textAlignment=i;let s=Mt({dict:t,key:"MaxLen"});(!Number.isInteger(s)||s<0)&&(s=0),this.data.maxLen=s,this.data.multiLine=this.hasFieldFlag(Te.MULTILINE),this.data.comb=this.hasFieldFlag(Te.COMB)&&!this.hasFieldFlag(Te.MULTILINE)&&!this.hasFieldFlag(Te.PASSWORD)&&!this.hasFieldFlag(Te.FILESELECT)&&this.data.maxLen!==0,this.data.doNotScroll=this.hasFieldFlag(Te.DONOTSCROLL)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(A,t,i,s,a,n,r,g,o,I,c){let l=a/this.data.maxLen,h=this.getBorderAndBackgroundAppearances(c),C=[],B=t.getCharPositions(i);for(let[E,f]of B)C.push(`(${Fs(i.substring(E,f))}) Tj`);let Q=C.join(` ${Ae(l)} 0 Td `);return`/Tx BMC q ${h}BT `+A+` 1 0 0 1 ${Ae(r)} ${Ae(g+o)} Tm ${Q} ET Q EMC`}_getMultilineAppearance(A,t,i,s,a,n,r,g,o,I,c,l){let h=[],C=a-2*g,B={shift:0};for(let f=0,u=t.length;fs?(o.push(A.substring(h,E)),h=E,C=d,I=-1,l=-1):(C+=d,I=E,c=f,l=B):C+d>s?I!==-1?(o.push(A.substring(h,c)),h=c,B=l+1,I=-1,C=0):(o.push(A.substring(h,E)),h=E,C=d):C+=d}return hI!=="Off");n.length=0,n.push("Off",o)}n.includes(this.data.fieldValue)||(this.data.fieldValue="Off"),this.data.exportValue=n[1];let r=i.get(this.data.exportValue);this.checkedAppearance=r instanceof KA?r:null;let g=i.get("Off");this.uncheckedAppearance=g instanceof KA?g:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(A,"check"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict,this.data.defaultFieldValue===null&&(this.data.defaultFieldValue="Off")}_processRadioButton(A){this.data.buttonValue=null;let t=A.dict.get("Parent");if(t instanceof F){this.parent=A.dict.getRaw("Parent");let r=t.get("V");r instanceof M&&(this.data.fieldValue=this._decodeFormValue(r))}let i=A.dict.get("AP");if(!(i instanceof F))return;let s=i.get("N");if(!(s instanceof F))return;for(let r of s.getKeys())if(r!=="Off"){this.data.buttonValue=this._decodeFormValue(r);break}let a=s.get(this.data.buttonValue);this.checkedAppearance=a instanceof KA?a:null;let n=s.get("Off");this.uncheckedAppearance=n instanceof KA?n:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(A,"disc"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict,this.data.defaultFieldValue===null&&(this.data.defaultFieldValue="Off")}_processPushButton(A){let{dict:t,annotationGlobals:i}=A;if(!t.has("A")&&!t.has("AA")&&!this.data.alternativeText){k("Push buttons without action dictionaries are not supported");return}this.data.isTooltipOnly=!t.has("A")&&!t.has("AA"),Pa.parseDestDictionary({destDict:t,resultObj:this.data,docBaseUrl:i.baseUrl,docAttachments:i.attachments})}getFieldObject(){let A="button",t;return this.data.checkBox?(A="checkbox",t=this.data.exportValue):this.data.radioButton&&(A="radiobutton",t=this.data.buttonValue),{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:t,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:A}}get fallbackFontDict(){let A=new F;return A.set("BaseFont",M.get("ZapfDingbats")),A.set("Type",M.get("FallbackType")),A.set("Subtype",M.get("FallbackType")),A.set("Encoding",M.get("ZapfDingbatsEncoding")),nA(this,"fallbackFontDict",A)}},qQ=class extends bt{constructor(A){super(A);let{dict:t,xref:i}=A;this.indices=t.getArray("I"),this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0,this.data.options=[];let s=Mt({dict:t,key:"Opt"});if(Array.isArray(s))for(let a=0,n=s.length;a=0&&n0?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:A}}amendSavedDict(A,t){var n;if(!this.hasIndices)return;let i=(n=A==null?void 0:A.get(this.data.id))==null?void 0:n.value;Array.isArray(i)||(i=[i]);let s=[],{options:a}=this.data;for(let r=0,g=0,o=a.length;rS&&(S=U,w=Y)}[B,Q]=this._computeFontSize(D,c-2*o,w,C,-1)}let E=Q*Qi,f=(E-Q)/2,u=Math.floor(I/E),d=0;if(h.length>0){let D=Math.min(...h),S=Math.max(...h);d=Math.max(0,S-u+1),d>D&&(d=D)}let x=Math.min(d+u+1,l),p=["/Tx BMC q",`1 1 ${c} ${I} re W n`];if(h.length){p.push("0.600006 0.756866 0.854904 rg");for(let D of h)d<=D&&DI.trimEnd());let{coords:r,bbox:g,matrix:o}=Ut.getFirstPositionInfo(this.rectangle,this.rotation,n);this.data.textPosition=this._transformPoint(r,g,o)}if(this._isOffscreenCanvasSupported){let r=A.dict.get("CA"),g=new Ut(i,"sans-serif");this.appearance=g.createAppearance(this._contents.str,this.rectangle,this.rotation,n,a,r),this._streams.push(this.appearance)}else k("FreeTextAnnotation: OffscreenCanvas is not supported, annotation may not render correctly.")}}get hasTextContent(){return this._hasAppearance}static createNewDict(A,t,{apRef:i,ap:s,oldAnnotation:a}){let{color:n,fontSize:r,rect:g,rotation:o,user:I,value:c}=A,l=a||new F(t);l.set("Type",M.get("Annot")),l.set("Subtype",M.get("FreeText")),a?(l.set("M",`D:${Zi()}`),l.delete("RC")):l.set("CreationDate",`D:${Zi()}`),l.set("Rect",g);let h=`/Helv ${r} Tf ${mi(n,!0)}`;if(l.set("DA",h),l.set("Contents",ii(c)),l.set("F",4),l.set("Border",[0,0,0]),l.set("Rotate",o),I&&l.set("T",ii(I)),i||s){let C=new F(t);l.set("AP",C),i?C.set("N",i):C.set("N",s)}return l}static async createNewAppearanceStream(A,t,i){let{baseFontRef:s,evaluator:a,task:n}=i,{color:r,fontSize:g,rect:o,rotation:I,value:c}=A,l=new F(t),h=new F(t);if(s)h.set("Helv",s);else{let EA=new F(t);EA.set("BaseFont",M.get("Helvetica")),EA.set("Type",M.get("Font")),EA.set("Subtype",M.get("Type1")),EA.set("Encoding",M.get("WinAnsiEncoding")),h.set("Helv",EA)}l.set("Font",h);let C=await bt._getFontData(a,n,{fontName:"Helv",fontSize:g},l),[B,Q,E,f]=o,u=E-B,d=f-Q;I%180!==0&&([u,d]=[d,u]);let x=c.split(`\n`),p=g/1e3,m=-1/0,D=[];for(let EA of x){let fA=C.encodeString(EA);if(fA.length>1)return null;EA=fA.join(""),D.push(EA);let CA=0,N=C.charsToGlyphs(EA);for(let H of N)CA+=H.width*p;m=Math.max(m,CA)}let S=1;m>u&&(S=u/m);let w=1,Y=Qi*g,U=(Qi-Cr)*g,K=Y*x.length;K>d&&(w=d/K);let Z=Math.min(S,w),AA=g*Z,gA,R,_;switch(I){case 0:_=[1,0,0,1],R=[o[0],o[1],u,d],gA=[o[0],o[3]-U];break;case 90:_=[0,1,-1,0],R=[o[1],-o[2],u,d],gA=[o[1],-o[0]-U];break;case 180:_=[-1,0,0,-1],R=[-o[2],-o[3],u,d],gA=[-o[2],-o[1]-U];break;case 270:_=[0,-1,1,0],R=[-o[3],o[0],u,d],gA=[-o[3],o[2]-U];break}let tA=["q",`${_.join(" ")} 0 0 cm`,`${R.join(" ")} re W n`,"BT",`${mi(r,!0)}`,`0 Tc /Helv ${Ae(AA)} Tf`];tA.push(`${gA.join(" ")} Td (${Fs(D[0])}) Tj`);let IA=Ae(Y);for(let EA=1,fA=D.length;EA(h.push(`${s[0]} ${s[1]} m`,`${s[2]} ${s[3]} l`,"S"),[C[0]-I,C[2]+I,C[7]-I,C[3]+I])})}}},OQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.SQUARE,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1,!this.appearance){let s=this.color?ft(this.color):[0,0,0],a=t.get("CA"),n=Qs(t.getArray("IC"),null),r=n?ft(n):null,g=r?a:null;if(this.borderStyle.width===0&&!r)return;this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:s,fillColor:r,strokeAlpha:a,fillAlpha:g,pointsCallback:(o,I)=>{let c=I[4]+this.borderStyle.width/2,l=I[5]+this.borderStyle.width/2,h=I[6]-I[4]-this.borderStyle.width,C=I[3]-I[7]-this.borderStyle.width;return o.push(`${c} ${l} ${h} ${C} re`),r?o.push("B"):o.push("S"),[I[0],I[2],I[7],I[3]]}})}}},ZQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.CIRCLE,!this.appearance){let s=this.color?ft(this.color):[0,0,0],a=t.get("CA"),n=Qs(t.getArray("IC"),null),r=n?ft(n):null,g=r?a:null;if(this.borderStyle.width===0&&!r)return;let o=4/3*Math.tan(Math.PI/(2*4));this._setDefaultAppearance({xref:i,extra:`${this.borderStyle.width} w`,strokeColor:s,fillColor:r,strokeAlpha:a,fillAlpha:g,pointsCallback:(I,c)=>{let l=c[0]+this.borderStyle.width/2,h=c[1]-this.borderStyle.width/2,C=c[6]-this.borderStyle.width/2,B=c[7]+this.borderStyle.width/2,Q=l+(C-l)/2,E=h+(B-h)/2,f=(C-l)/2*o,u=(B-h)/2*o;return I.push(`${Q} ${B} m`,`${Q+f} ${B} ${C} ${E+u} ${C} ${E} c`,`${C} ${E-u} ${Q+f} ${h} ${Q} ${h} c`,`${Q-f} ${h} ${l} ${E-u} ${l} ${E} c`,`${l} ${E+u} ${Q-f} ${B} ${Q} ${B} c`,"h"),r?I.push("B"):I.push("S"),[c[0],c[2],c[7],c[3]]}})}}},ug=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;this.data.annotationType=Le.POLYLINE,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1,this.data.vertices=null,this instanceof dg||(this.setLineEndings(t.getArray("LE")),this.data.lineEndings=this.lineEndings);let s=t.getArray("Vertices");if(!wt(s,null))return;let a=this.data.vertices=Float32Array.from(s);if(!this.appearance){let n=this.color?ft(this.color):[0,0,0],r=t.get("CA"),g=this.borderStyle.width||1,o=2*g,I=[1/0,1/0,-1/0,-1/0];for(let c=0,l=a.length;c{for(let h=0,C=a.length;h{for(let l of this.data.inkLists){for(let h=0,C=l.length;hB.points)),l.set("F",4),l.set("Rotate",I),g&&l.set("IT",M.get("InkHighlight"));let h=new F(t);l.set("BS",h),h.set("W",c),l.set("C",Array.from(a,B=>B/255)),l.set("CA",n);let C=new F(t);return l.set("AP",C),i?C.set("N",i):C.set("N",s),l}static async createNewAppearanceStream(A,t,i){if(A.outlines)return this.createNewAppearanceStreamForHighlight(A,t,i);let{color:s,rect:a,paths:n,thickness:r,opacity:g}=A,o=[`${r} w 1 J 1 j`,`${mi(s,!1)}`];g!==1&&o.push("/R0 gs");let I=[];for(let{bezier:C}of n){if(I.length=0,I.push(`${Ae(C[0])} ${Ae(C[1])} m`),C.length===2)I.push(`${Ae(C[0])} ${Ae(C[1])} l S`);else{for(let B=2,Q=C.length;B(o.push(`${I[0]} ${I[1]} m`,`${I[2]} ${I[3]} l`,`${I[6]} ${I[7]} l`,`${I[4]} ${I[5]} l`,"f"),[I[0],I[2],I[7],I[3]])})}}else this.data.popupRef=null}static createNewDict(A,t,{apRef:i,ap:s}){let{color:a,opacity:n,rect:r,rotation:g,user:o,quadPoints:I}=A,c=new F(t);if(c.set("Type",M.get("Annot")),c.set("Subtype",M.get("Highlight")),c.set("CreationDate",`D:${Zi()}`),c.set("Rect",r),c.set("F",4),c.set("Border",[0,0,0]),c.set("Rotate",g),c.set("QuadPoints",I),c.set("C",Array.from(a,l=>l/255)),c.set("CA",n),o&&c.set("T",ii(o)),i||s){let l=new F(t);c.set("AP",l),l.set("N",i||s)}return c}static async createNewAppearanceStream(A,t,i){let{color:s,rect:a,outlines:n,opacity:r}=A,g=[`${mi(s,!0)}`,"/R0 gs"],o=[];for(let Q of n){o.length=0,o.push(`${Ae(Q[0])} ${Ae(Q[1])} m`);for(let E=2,f=Q.length;E(r.push(`${g[4]} ${g[5]+1.3} m`,`${g[6]} ${g[7]+1.3} l`,"S"),[g[0],g[2],g[7],g[3]])})}}else this.data.popupRef=null}},VQ=class extends $e{constructor(A){super(A);let{dict:t,xref:i}=A;if(this.data.annotationType=Le.SQUIGGLY,this.data.quadPoints=bn(t,null)){if(!this.appearance){let a=this.color?ft(this.color):[0,0,0],n=t.get("CA");this._setDefaultAppearance({xref:i,extra:"[] 0 d 1 w",strokeColor:a,strokeAlpha:n,pointsCallback:(r,g)=>{let o=(g[1]-g[5])/6,I=o,c=g[4],l=g[5],h=g[6];r.push(`${c} ${l+I} m`);do c+=2,I=I===0?o:0,r.push(`${c} ${l+I} l`);while(c(r.push(`${(g[0]+g[4])/2} ${(g[1]+g[5])/2} m`,`${(g[2]+g[6])/2} ${(g[3]+g[7])/2} l`,"S"),[g[0],g[2],g[7],g[3]])})}}else this.data.popupRef=null}},gs=class extends $e{constructor(A){super(A),this.data.annotationType=Le.STAMP,this.data.hasOwnCanvas=this.data.noRotate,this.data.noHTML=!1}static async createImage(A,t){let{width:i,height:s}=A,a=new OffscreenCanvas(i,s),n=a.getContext("2d",{alpha:!0});n.drawImage(A,0,0);let r=n.getImageData(0,0,i,s).data,g=new Uint32Array(r.buffer),o=g.some(Ot.isLittleEndian?Q=>Q>>>24!==255:Q=>(Q&255)!==255);o&&(n.fillStyle="white",n.fillRect(0,0,i,s),n.drawImage(A,0,0));let I=a.convertToBlob({type:"image/jpeg",quality:1}).then(Q=>Q.arrayBuffer()),c=M.get("XObject"),l=M.get("Image"),h=new F(t);h.set("Type",c),h.set("Subtype",l),h.set("BitsPerComponent",8),h.set("ColorSpace",M.get("DeviceRGB")),h.set("Filter",M.get("DCTDecode")),h.set("BBox",[0,0,i,s]),h.set("Width",i),h.set("Height",s);let C=null;if(o){let Q=new Uint8Array(g.length);if(Ot.isLittleEndian)for(let f=0,u=g.length;f>>24;else for(let f=0,u=g.length;f=0&&n<=1?n:null}};function JE(e){try{return ka(e)}catch(A){return k(`UTF-8 decoding failed: "${A}".`),e}}var $Q=class extends Ls{constructor(A){super(A),this.node=null}onEndElement(A){let t=super.onEndElement(A);if(t&&A==="xfa:datasets")throw this.node=t,new Error("Aborting DatasetXMLParser.")}},A1=class{constructor(A){if(A.datasets)this.node=new Ls({hasAttributes:!0}).parseFromString(A.datasets).documentElement;else{let t=new $Q({hasAttributes:!0});try{t.parseFromString(A["xdp:xdp"])}catch(i){}this.node=t.node}}getValue(A){if(!this.node||!A)return"";let t=this.node.searchNode(_E(A),0);if(!t)return"";let i=t.firstChild;return(i==null?void 0:i.nodeName)==="value"?t.children.map(s=>JE(s.textContent)):JE(t.textContent)}},dn,e1=class{constructor(A,t){HA(this,dn,null);this.stream=A,this.pdfManager=t,this.entries=[],this._xrefStms=new Set,this._cacheMap=new Map,this._pendingRefs=new be,this._newPersistentRefNum=null,this._newTemporaryRefNum=null,this._persistentRefsCache=null}getNewPersistentRef(A){this._newPersistentRefNum===null&&(this._newPersistentRefNum=this.entries.length||1);let t=this._newPersistentRefNum++;return this._cacheMap.set(t,A),oA.get(t,0)}getNewTemporaryRef(){if(this._newTemporaryRefNum===null&&(this._newTemporaryRefNum=this.entries.length||1,this._newPersistentRefNum)){this._persistentRefsCache=new Map;for(let A=this._newTemporaryRefNum;A0;){let[r,g]=n;if(!Number.isInteger(r)||!Number.isInteger(g))throw new v(`Invalid XRef range fields: ${r}, ${g}`);if(!Number.isInteger(i)||!Number.isInteger(s)||!Number.isInteger(a))throw new v(`Invalid XRef entry fields length: ${r}, ${g}`);for(let o=t.entryNum;o=w.length);)U+=String.fromCharCode(K),K=w[Y];return U}function g(w,Y,U){let K=U.length,Z=w.length,AA=0;for(;Y=K)break;Y++,AA++}return AA}let o=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g,I=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,l=new Uint8Array([116,114,97,105,108,101,114]),h=new Uint8Array([115,116,97,114,116,120,114,101,102]),C=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();let B=this.stream;B.pos=0;let Q=B.getBytes(),E=Qt(Q),f=Q.length,u=B.start,d=[],x=[];for(;u=f)break;w=Q[u]}while(w!==10&&w!==13);continue}let Y=r(Q,u),U;if(Y.startsWith("xref")&&(Y.length===4||/\\s/.test(Y[4])))u+=g(Q,u,l),d.push(u),u+=g(Q,u,h);else if(U=c.exec(Y)){let K=U[1]|0,Z=U[2]|0,AA=u+Y.length,gA,R=!1;if(!this.entries[K])R=!0;else if(this.entries[K].gen===Z)try{new zt({lexer:new dt(B.makeSubStream(AA))}).getObj(),R=!0}catch(QA){QA instanceof Sa?k(`indexObjects -- checking object (${Y}): "${QA}".`):R=!0}R&&(this.entries[K]={offset:u-B.start,gen:Z,uncompressed:!0}),o.lastIndex=AA;let _=o.exec(E);_?(gA=o.lastIndex+1-u,_[1]!=="endobj"&&(k(`indexObjects: Found "${_[1]}" inside of another "obj", caused by missing "endobj" -- trying to recover.`),gA-=_[1].length+1)):gA=f-u;let tA=Q.subarray(u,u+gA),IA=g(tA,0,C);IA0?Math.max(...this._xrefStms):null}getEntry(A){let t=this.entries[A];return t&&!t.free&&t.offset?t:null}fetchIfRef(A,t=!1){return A instanceof oA?this.fetch(A,t):A}fetch(A,t=!1){if(!(A instanceof oA))throw new Error("ref object is not a reference");let i=A.num,s=this._cacheMap.get(i);if(s!==void 0)return s instanceof F&&!s.objId&&(s.objId=A.toString()),s;let a=this.getEntry(i);if(a===null)return this._cacheMap.set(i,a),a;if(this._pendingRefs.has(A))return this._pendingRefs.remove(A),k(`Ignoring circular reference: ${A}.`),Ku;this._pendingRefs.put(A);try{a=a.uncompressed?this.fetchUncompressed(A,a,t):this.fetchCompressed(A,a,t),this._pendingRefs.remove(A)}catch(n){throw this._pendingRefs.remove(A),n}return a instanceof F?a.objId=A.toString():a instanceof KA&&(a.dict.objId=A.toString()),a}fetchUncompressed(A,t,i=!1){let s=A.gen,a=A.num;if(t.gen!==s){let c=`Inconsistent generation in XRef: ${A}`;if(this._generationFallback&&t.gen0&&t[3]-t[1]>0)return t;k(`Empty, or invalid, /${A} entry.`)}return null}get mediaBox(){return nA(this,"mediaBox",this._getBoundingBox("MediaBox")||xx)}get cropBox(){return nA(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let A=this.pageDict.get("UserUnit");return(typeof A!="number"||A<=0)&&(A=dx),nA(this,"userUnit",A)}get view(){let{cropBox:A,mediaBox:t}=this;if(A!==t&&!Ss(A,t)){let i=Ce.intersect(A,t);if(i&&i[2]-i[0]>0&&i[3]-i[1]>0)return nA(this,"view",i);k("Empty /CropBox and /MediaBox intersection.")}return nA(this,"view",t)}get rotate(){let A=this._getInheritableProperty("Rotate")||0;return A%90!==0?A=0:A>=360?A%=360:A<0&&(A=(A%360+360)%360),nA(this,"rotate",A)}_onSubStreamError(A,t){if(this.evaluatorOptions.ignoreErrors){k(`getContentStream - ignoring sub-stream (${t}): "${A}".`);return}throw A}getContentStream(){return this.pdfManager.ensure(this,"content").then(A=>A instanceof KA?A:Array.isArray(A)?new sI(A,this._onSubStreamError.bind(this)):new Rs)}get xfaData(){return nA(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async saveNewAnnotations(A,t,i,s){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");let a=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),n=new mt,r=new be;mA(this,xn,t1).call(this,i,n,r);let g=this.pageDict,o=this.annotations.filter(C=>!(C instanceof oA&&n.has(C))),I=await ei.saveNewAnnotations(a,t,i,s);for(let{ref:C}of I.annotations)C instanceof oA&&!r.has(C)&&o.push(C);let c=g.get("Annots");g.set("Annots",o);let l=[];await ot(this.ref,g,l,this.xref),c&&g.set("Annots",c);let h=I.dependencies;h.push({ref:this.ref,data:l.join("")},...I.annotations);for(let C of n)h.push({ref:C,data:null});return h}save(A,t,i){let s=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});return this._parsedAnnotations.then(function(a){let n=[];for(let r of a)r.mustBePrinted(i)&&n.push(r.save(s,t,i).catch(function(g){return k(`save - ignoring annotation data during "${t.name}" task: "${g}".`),null}));return Promise.all(n).then(function(r){return r.filter(g=>!!g)})})}loadResources(A){return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then(()=>new Hs(this.resources,A,this.xref).load())}getOperatorList({handler:A,sink:t,task:i,intent:s,cacheKey:a,annotationStorage:n=null,modifiedIds:r=null}){let g=this.getContentStream(),o=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),I=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),c=this.xfaFactory?null:$E(n),l=c==null?void 0:c.get(this.pageIndex),h=Promise.resolve(null),C=null;if(l){let Q=this.pdfManager.ensureDoc("annotationGlobals"),E,f=new Set;for(let{bitmapId:d,bitmap:x}of l)d&&!x&&!f.has(d)&&f.add(d);let{isOffscreenCanvasSupported:u}=this.evaluatorOptions;if(f.size>0){let d=l.slice();for(let[x,p]of n)x.startsWith(TE)&&p.bitmap&&f.has(p.bitmapId)&&d.push(p);E=ei.generateImages(d,this.xref,u)}else E=ei.generateImages(l,this.xref,u);C=new be,mA(this,xn,t1).call(this,l,C,null),h=Q.then(d=>d?ei.printNewAnnotations(d,I,i,l,E):null)}let B=Promise.all([g,o]).then(([Q])=>{let E=new ze(s,t);return A.send("StartRenderPage",{transparency:I.hasBlendModes(this.resources,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:a}),I.getOperatorList({stream:Q,task:i,resources:this.resources,operatorList:E}).then(function(){return E})});return Promise.all([B,this._parsedAnnotations,h]).then(function([Q,E,f]){if(f){E=E.filter(S=>!(S.ref&&C.has(S.ref)));for(let S=0,w=f.length;SK.ref&&ur(K.ref,Y.refToReplace));U>=0&&(E.splice(U,1,Y),f.splice(S--,1),w--)}}E=E.concat(f)}if(E.length===0||s&st.ANNOTATIONS_DISABLE)return Q.flush(!0),{length:Q.totalLength};let u=!!(s&st.ANNOTATIONS_FORMS),d=!!(s&st.IS_EDITING),x=!!(s&st.ANY),p=!!(s&st.DISPLAY),m=!!(s&st.PRINT),D=[];for(let S of E)(x||p&&S.mustBeViewed(n,u)&&S.mustBeViewedWhenEditing(d,r)||m&&S.mustBePrinted(n))&&D.push(S.getOperatorList(I,i,s,n).catch(function(w){return k(`getOperatorList - ignoring annotation data during "${i.name}" task: "${w}".`),{opList:null,separateForm:!1,separateCanvas:!1}}));return Promise.all(D).then(function(S){let w=!1,Y=!1;for(let{opList:U,separateForm:K,separateCanvas:Z}of S)Q.addOpList(U),w||(w=K),Y||(Y=Z);return Q.flush(!0,{form:w,canvas:Y}),{length:Q.totalLength}})})}async extractTextContent({handler:A,task:t,includeMarkedContent:i,disableNormalization:s,sink:a}){let n=this.getContentStream(),r=this.loadResources(["ExtGState","Font","Properties","XObject"]),g=this.pdfManager.ensureCatalog("lang"),[o,,I]=await Promise.all([n,r,g]);return new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}).getTextContent({stream:o,task:t,resources:this.resources,includeMarkedContent:i,disableNormalization:s,sink:a,viewBox:this.view,lang:I})}async getStructTree(){let A=await this.pdfManager.ensureCatalog("structTreeRoot");return A?(await this._parsedAnnotations,(await this.pdfManager.ensure(this,"_parseStructTree",[A])).serializable):null}_parseStructTree(A){let t=new Cc(A,this.pageDict);return t.parse(this.ref),t}async getAnnotationsData(A,t,i){let s=await this._parsedAnnotations;if(s.length===0)return s;let a=[],n=[],r,g=!!(i&st.ANY),o=!!(i&st.DISPLAY),I=!!(i&st.PRINT);for(let c of s){let l=g||o&&c.viewable;(l||I&&c.printable)&&a.push(c.data),c.hasTextContent&&l&&(r||(r=new Lt({xref:this.xref,handler:A,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions})),n.push(c.extractTextContent(r,t,[-1/0,-1/0,1/0,1/0]).catch(function(h){k(`getAnnotationsData - ignoring textContent during "${t.name}" task: "${h}".`)})))}return await Promise.all(n),a}get annotations(){let A=this._getInheritableProperty("Annots");return nA(this,"annotations",Array.isArray(A)?A:[])}get _parsedAnnotations(){let A=this.pdfManager.ensure(this,"annotations").then(async t=>{if(t.length===0)return t;let i=await this.pdfManager.ensureDoc("annotationGlobals");if(!i)return[];let s=[];for(let g of t)s.push(ei.create(this.xref,g,i,this._localIdFactory,!1,this.ref).catch(function(o){return k(`_parsedAnnotations: "${o}".`),null}));let a=[],n,r;for(let g of await Promise.all(s))if(g){if(g instanceof bt){(r||(r=[])).push(g);continue}if(g instanceof fg){(n||(n=[])).push(g);continue}a.push(g)}return r&&a.push(...r),n&&a.push(...n),a});return nA(this,"_parsedAnnotations",A)}get jsActions(){let A=Vg(this.xref,this.pageDict,Ru);return nA(this,"jsActions",A)}};xn=new WeakSet,t1=function(A,t,i){for(let s of A)if(s.id){let a=oA.fromString(s.id);if(!a){k(`A non-linked annotation cannot be modified: ${s.id}`);continue}if(s.deleted){t.put(a,a);continue}i==null||i.put(a),s.ref=a,delete s.id}};var YE=new Uint8Array([37,80,68,70,45]),KE=new Uint8Array([115,116,97,114,116,120,114,101,102]),mx=new Uint8Array([101,110,100,111,98,106]),vE=1024,px="\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0";function Lo(e,A,t=1024,i=!1){let s=A.length,a=e.peekBytes(t),n=a.length-s;if(n<=0)return!1;if(i){let r=s-1,g=a.length-1;for(;g>=r;){let o=0;for(;o=s)return e.pos+=g-r,!0;g--}}else{let r=0;for(;r<=n;){let g=0;for(;g=s)return e.pos+=r,!0;r++}}return!1}var mn,i1,mg=class{constructor(A,t){HA(this,mn);if(t.length<=0)throw new ks("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=A,this.stream=t,this.xref=new e1(t,A),this._pagePromises=new Map,this._version=null;let i={font:0};this._globalIdFactory=class{static getDocId(){return`g_${A.docId}`}static createFontId(){return`f${++i.font}`}static createObjId(){OA("Abstract method `createObjId` called.")}static getPageObjId(){OA("Abstract method `getPageObjId` called.")}}}parse(A){this.xref.parse(A),this.catalog=new Pa(this.pdfManager,this.xref)}get linearization(){let A=null;try{A=mI.create(this.stream)}catch(t){if(t instanceof ge)throw t;PA(t)}return nA(this,"linearization",A)}get startXRef(){let A=this.stream,t=0;if(this.linearization){if(A.reset(),Lo(A,mx)){A.skip(6);let i=A.peekByte();for(;pt(i);)A.pos++,i=A.peekByte();t=A.pos-A.start}}else{let s=KE.length,a=!1,n=A.end;for(;!a&&n>0;)n-=1024-s,n<0&&(n=0),A.pos=n,a=Lo(A,KE,1024,!0);if(a){A.skip(9);let r;do r=A.getByte();while(pt(r));let g="";for(;r>=32&&r<=57;)g+=String.fromCharCode(r),r=A.getByte();t=parseInt(g,10),isNaN(t)&&(t=0)}}return nA(this,"startXRef",t)}checkHeader(){let A=this.stream;if(A.reset(),!Lo(A,YE))return;A.moveStart(),A.skip(YE.length);let t="",i;for(;(i=A.getByte())>32&&t.length<7;)t+=String.fromCharCode(i);XE.test(t)?this._version=t:k(`Invalid PDF header version: ${t}`)}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let A=0;return this.catalog.hasActualNumPages?A=this.catalog.numPages:this.xfaFactory?A=this.xfaFactory.getNumPages():this.linearization?A=this.linearization.numPages:A=this.catalog.numPages,nA(this,"numPages",A)}_hasOnlyDocumentSignatures(A,t=0){return Array.isArray(A)?A.every(s=>{if(s=this.xref.fetchIfRef(s),!(s instanceof F))return!1;if(s.has("Kids"))return++t>10?(k("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):this._hasOnlyDocumentSignatures(s.get("Kids"),t);let a=ye(s.get("FT"),"Sig"),n=s.get("Rect"),r=Array.isArray(n)&&n.every(g=>g===0);return a&&r}):!1}get _xfaStreams(){let A=this.catalog.acroForm;if(!A)return null;let t=A.get("XFA"),i={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof KA&&!t.isEmpty)return i["xdp:xdp"]=t,i;if(!Array.isArray(t)||t.length===0)return null;for(let s=0,a=t.length;s{l.set(Q,E)});let h=[];for(let[Q,E]of l){let f=E.get("FontDescriptor");if(!(f instanceof F))continue;let u=f.get("FontFamily");u=u.replaceAll(/[ ]+(\\d)/g,"$1");let d=f.get("FontWeight"),x=-f.get("ItalicAngle"),p={fontFamily:u,fontWeight:d,italicAngle:x};Ou(p)&&h.push(g.handleSetFont(s,[M.get(Q),1],null,o,t,c,null,p).catch(function(m){return k(`loadXfaFonts: "${m}".`),null}))}await Promise.all(h);let C=this.xfaFactory.setFonts(I);if(!C)return;r.ignoreErrors=!0,h.length=0,I.length=0;let B=new Set;for(let Q of C)B1(`${Q}-Regular`)||B.add(Q);B.size&&C.push("PdfJS-Fallback");for(let Q of C)if(!B.has(Q))for(let E 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}]){let f=`${Q}-${E.name}`,u=pf(f);h.push(g.handleSetFont(s,[M.get(f),1],null,o,t,c,u,{fontFamily:Q,fontWeight:E.fontWeight,italicAngle:E.italicAngle}).catch(function(d){return k(`loadXfaFonts: "${d}".`),null}))}await Promise.all(h),this.xfaFactory.appendFonts(I,B)}async serializeXfaData(A){return this.xfaFactory?this.xfaFactory.serializeData(A):null}get version(){return this.catalog.version||this._version}get formInfo(){let A={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},t=this.catalog.acroForm;if(!t)return nA(this,"formInfo",A);try{let i=t.get("Fields"),s=Array.isArray(i)&&i.length>0;A.hasFields=s;let a=t.get("XFA");A.hasXfa=Array.isArray(a)&&a.length>0||a instanceof KA&&!a.isEmpty;let r=!!(t.get("SigFlags")&1),g=r&&this._hasOnlyDocumentSignatures(i);A.hasAcroForm=s&&!g,A.hasSignatures=r}catch(i){if(i instanceof ge)throw i;k(`Cannot fetch form information: "${i}".`)}return nA(this,"formInfo",A)}get documentInfo(){let A={PDFFormatVersion:this.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},t;try{t=this.xref.trailer.get("Info")}catch(i){if(i instanceof ge)throw i;PA("The document information dictionary is invalid.")}if(!(t instanceof F))return nA(this,"documentInfo",A);for(let i of t.getKeys()){let s=t.get(i);switch(i){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if(typeof s=="string"){A[i]=jA(s);continue}break;case"Trapped":if(s instanceof M){A[i]=s;continue}break;default:let a;switch(typeof s){case"string":a=jA(s);break;case"number":case"boolean":a=s;break;default:s instanceof M&&(a=s);break}if(a===void 0){k(`Bad value, for custom key "${i}", in Info: ${s}.`);continue}A.Custom||(A.Custom=Object.create(null)),A.Custom[i]=a;continue}k(`Bad value, for key "${i}", in Info: ${s}.`)}return nA(this,"documentInfo",A)}get fingerprints(){function A(n){return typeof n=="string"&&n.length>0&&n!==px}function t(n){let r=[];for(let g of n){let o=g.toString(16);r.push(o.padStart(2,"0"))}return r.join("")}let i=this.xref.trailer.get("ID"),s,a;return Array.isArray(i)&&A(i[0])?(s=Pe(i[0]),i[1]!==i[0]&&A(i[1])&&(a=Pe(i[1]))):s=Ri(this.stream.getByteRange(0,vE),0,vE),nA(this,"fingerprints",[t(s),a?t(a):null])}async _getLinearizationPage(A){let{catalog:t,linearization:i,xref:s}=this,a=oA.get(i.objectNumberFirst,0);try{let n=await s.fetchAsync(a);if(n instanceof F){let r=n.getRaw("Type");if(r instanceof oA&&(r=await s.fetchAsync(r)),ye(r,"Page")||!n.has("Type")&&!n.has("Kids")&&n.has("Contents"))return t.pageKidsCountCache.has(a)||t.pageKidsCountCache.put(a,1),t.pageIndexCache.has(a)||t.pageIndexCache.put(a,0),[n,a]}throw new v("The Linearization dictionary doesn\'t point to a valid Page dictionary.")}catch(n){return k(`_getLinearizationPage: "${n.message}".`),t.getPageDict(A)}}getPage(A){let t=this._pagePromises.get(A);if(t)return t;let{catalog:i,linearization:s,xfaFactory:a}=this,n;return a?n=Promise.resolve([F.empty,null]):(s==null?void 0:s.pageFirst)===A?n=this._getLinearizationPage(A):n=i.getPageDict(A),n=n.then(([r,g])=>new xg({pdfManager:this.pdfManager,xref:this.xref,pageIndex:A,pageDict:r,ref:g,globalIdFactory:this._globalIdFactory,fontCache:i.fontCache,builtInCMapCache:i.builtInCMapCache,standardFontDataCache:i.standardFontDataCache,globalImageCache:i.globalImageCache,systemFontCache:i.systemFontCache,nonBlendModesSet:i.nonBlendModesSet,xfaFactory:a})),this._pagePromises.set(A,n),n}async checkFirstPage(A=!1){if(!A)try{await this.getPage(0)}catch(t){if(t instanceof ti)throw this._pagePromises.delete(0),await this.cleanup(),new Pi}}async checkLastPage(A=!1){let{catalog:t,pdfManager:i}=this;t.setActualNumPages();let s;try{if(await Promise.all([i.ensureDoc("xfaFactory"),i.ensureDoc("linearization"),i.ensureCatalog("numPages")]),this.xfaFactory)return;if(this.linearization?s=this.linearization.numPages:s=t.numPages,Number.isInteger(s)){if(s<=1)return}else throw new v("Page count is not an integer.");await this.getPage(s-1)}catch(a){if(this._pagePromises.delete(s-1),await this.cleanup(),a instanceof ti&&!A)throw new Pi;k(`checkLastPage - invalid /Pages tree /Count: ${s}.`);let n;try{n=await t.getAllPageDicts(A)}catch(r){if(r instanceof ti&&!A)throw new Pi;t.setActualNumPages(1);return}for(let[r,[g,o]]of n){let I;g instanceof Error?(I=Promise.reject(g),I.catch(()=>{})):I=Promise.resolve(new xg({pdfManager:i,xref:this.xref,pageIndex:r,pageDict:g,ref:o,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(r,I)}t.setActualNumPages(n.size)}}fontFallback(A,t){return this.catalog.fontFallback(A,t)}async cleanup(A=!1){return this.catalog?this.catalog.cleanup(A):E1()}get fieldObjects(){if(!this.formInfo.hasFields)return nA(this,"fieldObjects",Promise.resolve(null));let A=Promise.all([this.pdfManager.ensureDoc("annotationGlobals"),this.pdfManager.ensureCatalog("acroForm")]).then(async([t,i])=>{if(!t)return null;let s=new be,a=Object.create(null),n=new Map;for(let g of await i.getAsync("Fields"))await mA(this,mn,i1).call(this,"",g,n,t,s);let r=[];for(let[g,o]of n)r.push(Promise.all(o).then(I=>{I=I.filter(c=>!!c),I.length>0&&(a[g]=I)}));return await Promise.all(r),a});return nA(this,"fieldObjects",A)}get hasJSActions(){let A=this.pdfManager.ensureDoc("_parseHasJSActions");return nA(this,"hasJSActions",A)}async _parseHasJSActions(){let[A,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return A?!0:t?Object.values(t).some(i=>i.some(s=>s.actions!==null)):!1}get calculationOrderIds(){let A=this.catalog.acroForm;if(!(A!=null&&A.has("CO")))return nA(this,"calculationOrderIds",null);let t=A.get("CO");if(!Array.isArray(t)||t.length===0)return nA(this,"calculationOrderIds",null);let i=[];for(let s of t)s instanceof oA&&i.push(s.toString());return i.length===0?nA(this,"calculationOrderIds",null):nA(this,"calculationOrderIds",i)}get annotationGlobals(){return nA(this,"annotationGlobals",ei.createGlobals(this.pdfManager))}};mn=new WeakSet,i1=async function(A,t,i,s,a){let{xref:n}=this;if(!(t instanceof oA)||a.has(t))return;a.put(t);let r=await n.fetchAsync(t);if(!(r instanceof F))return;if(r.has("T")){let o=jA(await r.getAsync("T"));A=A===""?o:`${A}.${o}`}else{let o=r;for(;;){if(o=o.getRaw("Parent"),o instanceof oA){if(a.has(o))break;o=await n.fetchAsync(o)}if(!(o instanceof F))break;if(o.has("T")){let I=jA(await o.getAsync("T"));A=A===""?I:`${A}.${I}`;break}}}if(i.has(A)||i.set(A,[]),i.get(A).push(ei.create(n,t,s,null,!0,null).then(o=>o==null?void 0:o.getFieldObject()).catch(function(o){return k(`#collectFieldObjects: "${o}".`),null})),!r.has("Kids"))return;let g=await r.getAsync("Kids");if(Array.isArray(g))for(let o of g)await mA(this,mn,i1).call(this,A,o,i,s,a)};function wx(e){if(e){let A=Qr(e);if(A)return A.href;k(`Invalid absolute docBaseUrl: "${e}".`)}return null}var pg=class{constructor(A){var t;this._docBaseUrl=wx(A.docBaseUrl),this._docId=A.docId,this._password=A.password,this.enableXfa=A.enableXfa,(t=A.evaluatorOptions).isOffscreenCanvasSupported&&(t.isOffscreenCanvasSupported=Ot.isOffscreenCanvasSupported),this.evaluatorOptions=Object.freeze(A.evaluatorOptions)}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){return this._docBaseUrl}get catalog(){return this.pdfDocument.catalog}ensureDoc(A,t){return this.ensure(this.pdfDocument,A,t)}ensureXRef(A,t){return this.ensure(this.pdfDocument.xref,A,t)}ensureCatalog(A,t){return this.ensure(this.pdfDocument.catalog,A,t)}getPage(A){return this.pdfDocument.getPage(A)}fontFallback(A,t){return this.pdfDocument.fontFallback(A,t)}loadXfaFonts(A,t){return this.pdfDocument.loadXfaFonts(A,t)}loadXfaImages(){return this.pdfDocument.loadXfaImages()}serializeXfaData(A){return this.pdfDocument.serializeXfaData(A)}cleanup(A=!1){return this.pdfDocument.cleanup(A)}async ensure(A,t,i){OA("Abstract method `ensure` called")}requestRange(A,t){OA("Abstract method `requestRange` called")}requestLoadedStream(A=!1){OA("Abstract method `requestLoadedStream` called")}sendProgressiveData(A){OA("Abstract method `sendProgressiveData` called")}updatePassword(A){this._password=A}terminate(A){OA("Abstract method `terminate` called")}},wg=class extends pg{constructor(A){super(A);let t=new Ie(A.source);this.pdfDocument=new mg(this,t),this._loadedStreamPromise=Promise.resolve(t)}async ensure(A,t,i){let s=A[t];return typeof s=="function"?s.apply(A,i):s}requestRange(A,t){return Promise.resolve()}requestLoadedStream(A=!1){return this._loadedStreamPromise}terminate(A){}},s1=class extends pg{constructor(A){super(A),this.streamManager=new To(A.source,{msgHandler:A.handler,length:A.length,disableAutoFetch:A.disableAutoFetch,rangeChunkSize:A.rangeChunkSize}),this.pdfDocument=new mg(this,this.streamManager.getStream())}async ensure(A,t,i){try{let s=A[t];return typeof s=="function"?s.apply(A,i):s}catch(s){if(!(s instanceof ge))throw s;return await this.requestRange(s.begin,s.end),this.ensure(A,t,i)}}requestRange(A,t){return this.streamManager.requestRange(A,t)}requestLoadedStream(A=!1){return this.streamManager.requestAllChunks(A)}sendProgressiveData(A){this.streamManager.onReceiveData({chunk:A})}terminate(A){this.streamManager.abort(A)}},_n={UNKNOWN:0,DATA:1,ERROR:2},ke={UNKNOWN:0,CANCEL:1,CANCEL_COMPLETE:2,CLOSE:3,ENQUEUE:4,ERROR:5,PULL:6,PULL_COMPLETE:7,START_COMPLETE:8};function ut(e){switch(e instanceof Error||typeof e=="object"&&e!==null||OA(\'wrapReason: Expected "reason" to be a (possibly cloned) Error.\'),e.name){case"AbortException":return new ve(e.message);case"MissingPDFException":return new Er(e.message);case"PasswordException":return new bs(e.message,e.code);case"UnexpectedResponseException":return new fr(e.message,e.status);case"UnknownErrorException":return new Ds(e.message,e.details);default:return new Ds(e.message,e.toString())}}var Zg,gu,jg,ou,ys,hr,yg=class{constructor(A,t,i){HA(this,Zg);HA(this,jg);HA(this,ys);this.sourceName=A,this.targetName=t,this.comObj=i,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=s=>{let a=s.data;if(a.targetName!==this.sourceName)return;if(a.stream){mA(this,jg,ou).call(this,a);return}if(a.callback){let r=a.callbackId,g=this.callbackCapabilities[r];if(!g)throw new Error(`Cannot resolve callback ${r}`);if(delete this.callbackCapabilities[r],a.callback===_n.DATA)g.resolve(a.data);else if(a.callback===_n.ERROR)g.reject(ut(a.reason));else throw new Error("Unexpected callback case");return}let n=this.actionHandler[a.action];if(!n)throw new Error(`Unknown action from worker: ${a.action}`);if(a.callbackId){let r=this.sourceName,g=a.sourceName;new Promise(function(o){o(n(a.data))}).then(function(o){i.postMessage({sourceName:r,targetName:g,callback:_n.DATA,callbackId:a.callbackId,data:o})},function(o){i.postMessage({sourceName:r,targetName:g,callback:_n.ERROR,callbackId:a.callbackId,reason:ut(o)})});return}if(a.streamId){mA(this,Zg,gu).call(this,a);return}n(a.data)},i.addEventListener("message",this._onComObjOnMessage)}on(A,t){let i=this.actionHandler;if(i[A])throw new Error(`There is already an actionName called "${A}"`);i[A]=t}send(A,t,i){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:A,data:t},i)}sendWithPromise(A,t,i){let s=this.callbackId++,a=Promise.withResolvers();this.callbackCapabilities[s]=a;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:A,callbackId:s,data:t},i)}catch(n){a.reject(n)}return a.promise}sendWithStream(A,t,i,s){let a=this.streamId++,n=this.sourceName,r=this.targetName,g=this.comObj;return new ReadableStream({start:o=>{let I=Promise.withResolvers();return this.streamControllers[a]={controller:o,startCall:I,pullCall:null,cancelCall:null,isClosed:!1},g.postMessage({sourceName:n,targetName:r,action:A,streamId:a,data:t,desiredSize:o.desiredSize},s),I.promise},pull:o=>{let I=Promise.withResolvers();return this.streamControllers[a].pullCall=I,g.postMessage({sourceName:n,targetName:r,stream:ke.PULL,streamId:a,desiredSize:o.desiredSize}),I.promise},cancel:o=>{gt(o instanceof Error,"cancel must have a valid reason");let I=Promise.withResolvers();return this.streamControllers[a].cancelCall=I,this.streamControllers[a].isClosed=!0,g.postMessage({sourceName:n,targetName:r,stream:ke.CANCEL,streamId:a,reason:ut(o)}),I.promise}},i)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}};Zg=new WeakSet,gu=function(A){let t=A.streamId,i=this.sourceName,s=A.sourceName,a=this.comObj,n=this,r=this.actionHandler[A.action],g={enqueue(o,I=1,c){if(this.isCancelled)return;let l=this.desiredSize;this.desiredSize-=I,l>0&&this.desiredSize<=0&&(this.sinkCapability=Promise.withResolvers(),this.ready=this.sinkCapability.promise),a.postMessage({sourceName:i,targetName:s,stream:ke.ENQUEUE,streamId:t,chunk:o},c)},close(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:i,targetName:s,stream:ke.CLOSE,streamId:t}),delete n.streamSinks[t])},error(o){gt(o instanceof Error,"error must have a valid reason"),!this.isCancelled&&(this.isCancelled=!0,a.postMessage({sourceName:i,targetName:s,stream:ke.ERROR,streamId:t,reason:ut(o)}))},sinkCapability:Promise.withResolvers(),onPull:null,onCancel:null,isCancelled:!1,desiredSize:A.desiredSize,ready:null};g.sinkCapability.resolve(),g.ready=g.sinkCapability.promise,this.streamSinks[t]=g,new Promise(function(o){o(r(A.data,g))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.START_COMPLETE,streamId:t,success:!0})},function(o){a.postMessage({sourceName:i,targetName:s,stream:ke.START_COMPLETE,streamId:t,reason:ut(o)})})},jg=new WeakSet,ou=function(A){let t=A.streamId,i=this.sourceName,s=A.sourceName,a=this.comObj,n=this.streamControllers[t],r=this.streamSinks[t];switch(A.stream){case ke.START_COMPLETE:A.success?n.startCall.resolve():n.startCall.reject(ut(A.reason));break;case ke.PULL_COMPLETE:A.success?n.pullCall.resolve():n.pullCall.reject(ut(A.reason));break;case ke.PULL:if(!r){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,success:!0});break}r.desiredSize<=0&&A.desiredSize>0&&r.sinkCapability.resolve(),r.desiredSize=A.desiredSize,new Promise(function(g){var o;g((o=r.onPull)==null?void 0:o.call(r))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,success:!0})},function(g){a.postMessage({sourceName:i,targetName:s,stream:ke.PULL_COMPLETE,streamId:t,reason:ut(g)})});break;case ke.ENQUEUE:if(gt(n,"enqueue should have stream controller"),n.isClosed)break;n.controller.enqueue(A.chunk);break;case ke.CLOSE:if(gt(n,"close should have stream controller"),n.isClosed)break;n.isClosed=!0,n.controller.close(),mA(this,ys,hr).call(this,n,t);break;case ke.ERROR:gt(n,"error should have stream controller"),n.controller.error(ut(A.reason)),mA(this,ys,hr).call(this,n,t);break;case ke.CANCEL_COMPLETE:A.success?n.cancelCall.resolve():n.cancelCall.reject(ut(A.reason)),mA(this,ys,hr).call(this,n,t);break;case ke.CANCEL:if(!r)break;new Promise(function(g){var o;g((o=r.onCancel)==null?void 0:o.call(r,ut(A.reason)))}).then(function(){a.postMessage({sourceName:i,targetName:s,stream:ke.CANCEL_COMPLETE,streamId:t,success:!0})},function(g){a.postMessage({sourceName:i,targetName:s,stream:ke.CANCEL_COMPLETE,streamId:t,reason:ut(g)})}),r.sinkCapability.reject(ut(A.reason)),r.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}},ys=new WeakSet,hr=async function(A,t){var i,s,a;await Promise.allSettled([(i=A.startCall)==null?void 0:i.promise,(s=A.pullCall)==null?void 0:s.promise,(a=A.cancelCall)==null?void 0:a.promise]),delete this.streamControllers[t]};var a1=class{constructor(A){this._msgHandler=A,this._contentLength=null,this._fullRequestReader=null,this._rangeRequestReaders=[]}getFullReader(){return gt(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once."),this._fullRequestReader=new n1(this._msgHandler),this._fullRequestReader}getRangeReader(A,t){let i=new r1(A,t,this._msgHandler);return this._rangeRequestReaders.push(i),i}cancelAllRequests(A){var t;(t=this._fullRequestReader)==null||t.cancel(A);for(let i of this._rangeRequestReaders.slice(0))i.cancel(A)}},n1=class{constructor(A){this._msgHandler=A,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;let t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then(i=>{this._isStreamingSupported=i.isStreamingSupported,this._isRangeSupported=i.isRangeSupported,this._contentLength=i.contentLength})}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){let{value:A,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:A.buffer,done:!1}}cancel(A){this._reader.cancel(A)}},r1=class{constructor(A,t,i){this._msgHandler=i,this.onProgress=null;let s=this._msgHandler.sendWithStream("GetRangeReader",{begin:A,end:t});this._reader=s.getReader()}get isStreamingSupported(){return!1}async read(){let{value:A,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:A.buffer,done:!1}}cancel(A){this._reader.cancel(A)}},li=class{constructor(A){this.name=A,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")}},H0=class{static setup(A,t){let i=!1;A.on("test",function(s){i||(i=!0,A.send("test",s instanceof Uint8Array))}),A.on("configure",function(s){Nu(s.verbosity)}),A.on("GetDocRequest",function(s){return H0.createDocumentHandler(s,t)})}static createDocumentHandler(A,t){let i,s=!1,a=null,n=new Set,r=Gu(),{docId:g,apiVersion:o}=A,I="4.6.82";if(o!==I)throw new Error(`The API version "${o}" does not match the Worker version "${I}".`);let c=[];for(let d in[])c.push(d);if(c.length)throw new Error("The `Array.prototype` contains unexpected enumerable properties: "+c.join(", ")+"; thus breaking e.g. `for...in` iteration of `Array`s.");let l=g+"_worker",h=new yg(l,g,t);function C(){if(s)throw new Error("Worker was terminated")}function B(d){n.add(d)}function Q(d){d.finish(),n.delete(d)}async function E(d){await i.ensureDoc("checkHeader"),await i.ensureDoc("parseStartXRef"),await i.ensureDoc("parse",[d]),await i.ensureDoc("checkFirstPage",[d]),await i.ensureDoc("checkLastPage",[d]);let x=await i.ensureDoc("isPureXfa");if(x){let S=new li("loadXfaFonts");B(S),await Promise.all([i.loadXfaFonts(h,S).catch(w=>{}).then(()=>Q(S)),i.loadXfaImages()])}let[p,m]=await Promise.all([i.ensureDoc("numPages"),i.ensureDoc("fingerprints")]),D=x?await i.ensureDoc("htmlForXfa"):null;return{numPages:p,fingerprints:m,htmlForXfa:D}}function f({data:d,password:x,disableAutoFetch:p,rangeChunkSize:m,length:D,docBaseUrl:S,enableXfa:w,evaluatorOptions:Y}){let U={source:null,disableAutoFetch:p,docBaseUrl:S,docId:g,enableXfa:w,evaluatorOptions:Y,handler:h,length:D,password:x,rangeChunkSize:m},K=Promise.withResolvers(),Z;if(d){try{U.source=d,Z=new wg(U),K.resolve(Z)}catch(IA){K.reject(IA)}return K.promise}let AA,gA=[];try{AA=new a1(h)}catch(IA){return K.reject(IA),K.promise}let R=AA.getFullReader();R.headersReady.then(function(){if(R.isRangeSupported){U.source=AA,U.length=R.contentLength,U.disableAutoFetch||(U.disableAutoFetch=R.isStreamingSupported),Z=new s1(U);for(let IA of gA)Z.sendProgressiveData(IA);gA=[],K.resolve(Z),a=null}}).catch(function(IA){K.reject(IA),a=null});let _=0,tA=function(){let IA=VE(gA);D&&IA.length!==D&&k("reported HTTP length is different from actual");try{U.source=IA,Z=new wg(U),K.resolve(Z)}catch(QA){K.reject(QA)}gA=[]};return new Promise(function(IA,QA){let V=function({value:lA,done:EA}){try{if(C(),EA){Z||tA(),a=null;return}_+=lA.byteLength,R.isStreamingSupported||h.send("DocProgress",{loaded:_,total:Math.max(_,R.contentLength||0)}),Z?Z.sendProgressiveData(lA):gA.push(lA),R.read().then(V,QA)}catch(fA){QA(fA)}};R.read().then(V,QA)}).catch(function(IA){K.reject(IA),a=null}),a=function(IA){AA.cancelAllRequests(IA)},K.promise}function u(d){function x(D){C(),h.send("GetDoc",{pdfInfo:D})}function p(D){if(C(),D instanceof bs){let S=new li(`PasswordException: response ${D.code}`);B(S),h.sendWithPromise("PasswordRequest",D).then(function({password:w}){Q(S),i.updatePassword(w),m()}).catch(function(){Q(S),h.send("DocException",D)})}else D instanceof ks||D instanceof Er||D instanceof fr||D instanceof Ds?h.send("DocException",D):h.send("DocException",new Ds(D.message,D.toString()))}function m(){C(),E(!1).then(x,function(D){if(C(),!(D instanceof Pi)){p(D);return}i.requestLoadedStream().then(function(){C(),E(!0).then(x,p)})})}C(),f(d).then(function(D){if(s)throw D.terminate(new ve("Worker was terminated.")),new Error("Worker was terminated");i=D,i.requestLoadedStream(!0).then(S=>{h.send("DataLoaded",{length:S.bytes.byteLength})})}).then(m,p)}return h.on("GetPage",function(d){return i.getPage(d.pageIndex).then(function(x){return Promise.all([i.ensure(x,"rotate"),i.ensure(x,"ref"),i.ensure(x,"userUnit"),i.ensure(x,"view")]).then(function([p,m,D,S]){var w;return{rotate:p,ref:m,refStr:(w=m==null?void 0:m.toString())!=null?w:null,userUnit:D,view:S}})})}),h.on("GetPageIndex",function(d){let x=oA.get(d.num,d.gen);return i.ensureCatalog("getPageIndex",[x])}),h.on("GetDestinations",function(d){return i.ensureCatalog("destinations")}),h.on("GetDestination",function(d){return i.ensureCatalog("getDestination",[d.id])}),h.on("GetPageLabels",function(d){return i.ensureCatalog("pageLabels")}),h.on("GetPageLayout",function(d){return i.ensureCatalog("pageLayout")}),h.on("GetPageMode",function(d){return i.ensureCatalog("pageMode")}),h.on("GetViewerPreferences",function(d){return i.ensureCatalog("viewerPreferences")}),h.on("GetOpenAction",function(d){return i.ensureCatalog("openAction")}),h.on("GetAttachments",function(d){return i.ensureCatalog("attachments")}),h.on("GetDocJSActions",function(d){return i.ensureCatalog("jsActions")}),h.on("GetPageJSActions",function({pageIndex:d}){return i.getPage(d).then(function(x){return i.ensure(x,"jsActions")})}),h.on("GetOutline",function(d){return i.ensureCatalog("documentOutline")}),h.on("GetOptionalContentConfig",function(d){return i.ensureCatalog("optionalContentConfig")}),h.on("GetPermissions",function(d){return i.ensureCatalog("permissions")}),h.on("GetMetadata",function(d){return Promise.all([i.ensureDoc("documentInfo"),i.ensureCatalog("metadata")])}),h.on("GetMarkInfo",function(d){return i.ensureCatalog("markInfo")}),h.on("GetData",function(d){return i.requestLoadedStream().then(function(x){return x.bytes})}),h.on("GetAnnotations",function({pageIndex:d,intent:x}){return i.getPage(d).then(function(p){let m=new li(`GetAnnotations: page ${d}`);return B(m),p.getAnnotationsData(h,m,x).then(D=>(Q(m),D),D=>{throw Q(m),D})})}),h.on("GetFieldObjects",function(d){return i.ensureDoc("fieldObjects")}),h.on("HasJSActions",function(d){return i.ensureDoc("hasJSActions")}),h.on("GetCalculationOrderIds",function(d){return i.ensureDoc("calculationOrderIds")}),h.on("SaveDocument",async function({isPureXfa:d,numPages:x,annotationStorage:p,filename:m}){var H;let D=[i.requestLoadedStream(),i.ensureCatalog("acroForm"),i.ensureCatalog("acroFormRef"),i.ensureDoc("startXRef"),i.ensureDoc("xref"),i.ensureDoc("linearization"),i.ensureCatalog("structTreeRoot")],S=[],w=d?null:$E(p),[Y,U,K,Z,AA,gA,R]=await Promise.all(D),_=AA.trailer.getRaw("Root")||null,tA;if(w){R?await R.canUpdateStructTree({pdfManager:i,xref:AA,newAnnotationsByPage:w})&&(tA=R):await Ui.canCreateStructureTree({catalogRef:_,pdfManager:i,newAnnotationsByPage:w})&&(tA=null);let q=ei.generateImages(p.values(),AA,i.evaluatorOptions.isOffscreenCanvasSupported),T=tA===void 0?S:[];for(let[$,X]of w)T.push(i.getPage($).then(W=>{let G=new li(`Save (editor): page ${$}`);return W.saveNewAnnotations(h,G,X,q).finally(function(){Q(G)})}));tA===null?S.push(Promise.all(T).then(async $=>(await Ui.createStructureTree({newAnnotationsByPage:w,xref:AA,catalogRef:_,pdfManager:i,newRefs:$}),$))):tA&&S.push(Promise.all(T).then(async $=>(await tA.updateStructureTree({newAnnotationsByPage:w,pdfManager:i,newRefs:$}),$)))}if(d)S.push(i.serializeXfaData(p));else for(let q=0;qq.needAppearances),EA=U instanceof F&&U.get("XFA")||null,fA=null,CA=!1;if(Array.isArray(EA)){for(let q=0,T=EA.length;q{typeof X=="string"&&(q[$]=jA(X))}),N={rootRef:_,encryptRef:AA.trailer.getRaw("Encrypt")||null,newRef:AA.getNewTemporaryRef(),infoRef:AA.trailer.getRaw("Info")||null,info:q,fileIds:AA.trailer.get("ID")||null,startXRef:gA?Z:(H=AA.lastXRefStreamPos)!=null?H:Z,filename:m}}return T9({originalData:Y.bytes,xrefInfo:N,newRefs:QA,xref:AA,hasXfa:!!EA,xfaDatasetsRef:fA,hasXfaDatasetsEntry:CA,needAppearances:lA,acroFormRef:K,acroForm:U,xfaData:V,useXrefStream:jE(AA.topDict,"XRef")}).finally(()=>{AA.resetNewTemporaryRef()})}),h.on("GetOperatorList",function(d,x){let p=d.pageIndex;i.getPage(p).then(function(m){let D=new li(`GetOperatorList: page ${p}`);B(D);let S=r>=Da.INFOS?Date.now():0;m.getOperatorList({handler:h,sink:x,task:D,intent:d.intent,cacheKey:d.cacheKey,annotationStorage:d.annotationStorage,modifiedIds:d.modifiedIds}).then(function(w){Q(D),S&&PA(`page=${p+1} - getOperatorList: time=${Date.now()-S}ms, len=${w.length}`),x.close()},function(w){Q(D),!D.terminated&&x.error(w)})})}),h.on("GetTextContent",function(d,x){let{pageIndex:p,includeMarkedContent:m,disableNormalization:D}=d;i.getPage(p).then(function(S){let w=new li("GetTextContent: page "+p);B(w);let Y=r>=Da.INFOS?Date.now():0;S.extractTextContent({handler:h,task:w,sink:x,includeMarkedContent:m,disableNormalization:D}).then(function(){Q(w),Y&&PA(`page=${p+1} - getTextContent: time=${Date.now()-Y}ms`),x.close()},function(U){Q(w),!w.terminated&&x.error(U)})})}),h.on("GetStructTree",function(d){return i.getPage(d.pageIndex).then(function(x){return i.ensure(x,"getStructTree")})}),h.on("FontFallback",function(d){return i.fontFallback(d.id,h)}),h.on("Cleanup",function(d){return i.cleanup(!0)}),h.on("Terminate",function(d){s=!0;let x=[];if(i){i.terminate(new ve("Worker was terminated."));let p=i.cleanup();x.push(p),i=null}else E1();a&&a(new ve("Worker was terminated."));for(let p of n)x.push(p.finished),p.terminate();return Promise.all(x).then(function(){h.destroy(),h=null})}),h.on("Ready",function(d){u(A),A=null}),l}static initializeFromPort(A){let t=new yg("worker","main",A);H0.setup(t,A),t.send("ready",null)}};function yx(e){return typeof e.postMessage=="function"&&"onmessage"in e}typeof window=="undefined"&&!ku&&typeof self!="undefined"&&yx(self)&&H0.initializeFromPort(self);var bx=qE.WorkerMessageHandler;\n'); } // src/processors/pdf.ts var isWorkerInitialized = false; function initializeWorker() { if (!isWorkerInitialized) { __webpack_exports__GlobalWorkerOptions.workerPort = new Worker2(); isWorkerInitialized = true; } } async function extractTextFromPDF(arrayBuffer) { logger.time("Extracting text from PDF"); try { initializeWorker(); const pdf = await __webpack_exports__getDocument({ data: arrayBuffer }).promise; const numPages = pdf.numPages; const textContents = await Promise.all( Array.from({ length: numPages }, (_, i) => getPageText(pdf, i + 1)) ); const fullText = textContents.join("\n\n"); logger.table("Extracted text from PDF", { textLength: fullText.length }); logger.timeEnd("Extracting text from PDF"); return fullText; } catch (error) { logger.error("Error extracting text from PDF", { error }); throw new Error(`Failed to extract text from PDF: ${error.message}`); } } async function getPageText(pdf, pageNum) { const page = await pdf.getPage(pageNum); const content = await page.getTextContent(); let lastY; const textItems = []; for (const item of content.items) { if ("str" in item) { if (lastY === item.transform[5] || !lastY) { textItems.push(item.str); } else { textItems.push(` ${item.str}`); } lastY = item.transform[5]; } } return textItems.join("") + "\n\n"; } // node_modules/idb/build/index.js var instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c); var idbProxyableTypes; var cursorAdvanceMethods; function getIdbProxyableTypes() { return idbProxyableTypes || (idbProxyableTypes = [ IDBDatabase, IDBObjectStore, IDBIndex, IDBCursor, IDBTransaction ]); } function getCursorAdvanceMethods() { return cursorAdvanceMethods || (cursorAdvanceMethods = [ IDBCursor.prototype.advance, IDBCursor.prototype.continue, IDBCursor.prototype.continuePrimaryKey ]); } var transactionDoneMap = /* @__PURE__ */ new WeakMap(); var transformCache = /* @__PURE__ */ new WeakMap(); var reverseTransformCache = /* @__PURE__ */ new WeakMap(); function promisifyRequest(request) { const promise = new Promise((resolve, reject) => { const unlisten = () => { request.removeEventListener("success", success); request.removeEventListener("error", error); }; const success = () => { resolve(wrap2(request.result)); unlisten(); }; const error = () => { reject(request.error); unlisten(); }; request.addEventListener("success", success); request.addEventListener("error", error); }); reverseTransformCache.set(promise, request); return promise; } function cacheDonePromiseForTransaction(tx) { if (transactionDoneMap.has(tx)) return; const done = new Promise((resolve, reject) => { const unlisten = () => { tx.removeEventListener("complete", complete); tx.removeEventListener("error", error); tx.removeEventListener("abort", error); }; const complete = () => { resolve(); unlisten(); }; const error = () => { reject(tx.error || new DOMException("AbortError", "AbortError")); unlisten(); }; tx.addEventListener("complete", complete); tx.addEventListener("error", error); tx.addEventListener("abort", error); }); transactionDoneMap.set(tx, done); } var idbProxyTraps = { get(target, prop, receiver) { if (target instanceof IDBTransaction) { if (prop === "done") return transactionDoneMap.get(target); if (prop === "store") { return receiver.objectStoreNames[1] ? void 0 : receiver.objectStore(receiver.objectStoreNames[0]); } } return wrap2(target[prop]); }, set(target, prop, value) { target[prop] = value; return true; }, has(target, prop) { if (target instanceof IDBTransaction && (prop === "done" || prop === "store")) { return true; } return prop in target; } }; function replaceTraps(callback) { idbProxyTraps = callback(idbProxyTraps); } function wrapFunction(func) { if (getCursorAdvanceMethods().includes(func)) { return function(...args) { func.apply(unwrap(this), args); return wrap2(this.request); }; } return function(...args) { return wrap2(func.apply(unwrap(this), args)); }; } function transformCachableValue(value) { if (typeof value === "function") return wrapFunction(value); if (value instanceof IDBTransaction) cacheDonePromiseForTransaction(value); if (instanceOfAny(value, getIdbProxyableTypes())) return new Proxy(value, idbProxyTraps); return value; } function wrap2(value) { if (value instanceof IDBRequest) return promisifyRequest(value); if (transformCache.has(value)) return transformCache.get(value); const newValue = transformCachableValue(value); if (newValue !== value) { transformCache.set(value, newValue); reverseTransformCache.set(newValue, value); } return newValue; } var unwrap = (value) => reverseTransformCache.get(value); function openDB(name, version2, { blocked, upgrade, blocking, terminated } = {}) { const request = indexedDB.open(name, version2); const openPromise = wrap2(request); if (upgrade) { request.addEventListener("upgradeneeded", (event) => { upgrade(wrap2(request.result), event.oldVersion, event.newVersion, wrap2(request.transaction), event); }); } if (blocked) { request.addEventListener("blocked", (event) => blocked( // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405 event.oldVersion, event.newVersion, event )); } openPromise.then((db) => { if (terminated) db.addEventListener("close", () => terminated()); if (blocking) { db.addEventListener("versionchange", (event) => blocking(event.oldVersion, event.newVersion, event)); } }).catch(() => { }); return openPromise; } var readMethods = ["get", "getKey", "getAll", "getAllKeys", "count"]; var writeMethods = ["put", "add", "delete", "clear"]; var cachedMethods = /* @__PURE__ */ new Map(); function getMethod(target, prop) { if (!(target instanceof IDBDatabase && !(prop in target) && typeof prop === "string")) { return; } if (cachedMethods.get(prop)) return cachedMethods.get(prop); const targetFuncName = prop.replace(/FromIndex$/, ""); const useIndex = prop !== targetFuncName; const isWrite = writeMethods.includes(targetFuncName); if ( // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge. !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) || !(isWrite || readMethods.includes(targetFuncName)) ) { return; } const method = async function(storeName, ...args) { const tx = this.transaction(storeName, isWrite ? "readwrite" : "readonly"); let target2 = tx.store; if (useIndex) target2 = target2.index(args.shift()); return (await Promise.all([ target2[targetFuncName](...args), isWrite && tx.done ]))[0]; }; cachedMethods.set(prop, method); return method; } replaceTraps((oldTraps) => ({ ...oldTraps, get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver), has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop) })); var advanceMethodProps = ["continue", "continuePrimaryKey", "advance"]; var methodMap = {}; var advanceResults = /* @__PURE__ */ new WeakMap(); var ittrProxiedCursorToOriginalProxy = /* @__PURE__ */ new WeakMap(); var cursorIteratorTraps = { get(target, prop) { if (!advanceMethodProps.includes(prop)) return target[prop]; let cachedFunc = methodMap[prop]; if (!cachedFunc) { cachedFunc = methodMap[prop] = function(...args) { advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args)); }; } return cachedFunc; } }; async function* iterate(...args) { let cursor = this; if (!(cursor instanceof IDBCursor)) { cursor = await cursor.openCursor(...args); } if (!cursor) return; cursor = cursor; const proxiedCursor = new Proxy(cursor, cursorIteratorTraps); ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor); reverseTransformCache.set(proxiedCursor, unwrap(cursor)); while (cursor) { yield proxiedCursor; cursor = await (advanceResults.get(proxiedCursor) || cursor.continue()); advanceResults.delete(proxiedCursor); } } function isIteratorProp(target, prop) { return prop === Symbol.asyncIterator && instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor]) || prop === "iterate" && instanceOfAny(target, [IDBIndex, IDBObjectStore]); } replaceTraps((oldTraps) => ({ ...oldTraps, get(target, prop, receiver) { if (isIteratorProp(target, prop)) return iterate; return oldTraps.get(target, prop, receiver); }, has(target, prop) { return isIteratorProp(target, prop) || oldTraps.has(target, prop); } })); // src/indexedDB.ts var FileCache = class { constructor() { this.db = null; this.vaultId = ""; } async init(vaultId) { this.vaultId = vaultId; const dbName = `LocalGPTCache/${this.vaultId}`; this.db = await openDB(dbName, 2, { upgrade(db, oldVersion, newVersion) { if (oldVersion < 1) { db.createObjectStore("embeddings"); } if (oldVersion < 2) { db.createObjectStore("content"); } } }); } async getEmbeddings(key) { if (!this.db) throw new Error("Database not initialized"); return this.db.get("embeddings", key); } async setEmbeddings(key, value) { if (!this.db) throw new Error("Database not initialized"); await this.db.put("embeddings", value, key); } async getContent(key) { if (!this.db) throw new Error("Database not initialized"); return this.db.get("content", key); } async setContent(key, value) { if (!this.db) throw new Error("Database not initialized"); await this.db.put("content", value, key); } async clearEmbeddings() { if (!this.db) throw new Error("Database not initialized"); await this.db.clear("embeddings"); } async clearContent() { if (!this.db) throw new Error("Database not initialized"); await this.db.clear("content"); } async clearAll() { if (!this.db) throw new Error("Database not initialized"); await this.db.clear("embeddings"); await this.db.clear("content"); } }; var fileCache = new FileCache(); // src/rag.ts var MAX_DEPTH = 10; async function startProcessing(linkedFiles, vault, metadataCache, activeFile) { logger.info("Starting RAG processing"); const processedDocs = /* @__PURE__ */ new Map(); await Promise.all( linkedFiles.map(async (file) => { const context = { vault, metadataCache, currentDocumentPath: file.path, activeFile }; await processDocumentForRAG(file, context, processedDocs, 0, false); }) ); return processedDocs; } async function getFileContent(file, vault) { switch (file.extension) { case "pdf": const cachedContent = await fileCache.getContent(file.path); if (cachedContent && cachedContent.mtime === file.stat.mtime) { return cachedContent.content; } const arrayBuffer = await vault.readBinary(file); const pdfContent = await extractTextFromPDF(arrayBuffer); await fileCache.setContent(file.path, { mtime: file.stat.mtime, content: pdfContent }); return pdfContent; case "md": default: return await vault.cachedRead(file); } } async function processDocumentForRAG(file, context, processedDocs, depth, isBacklink) { var _a2; logger.table("Processing document for RAG", { filePath: file.path, depth, isBacklink }); if (depth > MAX_DEPTH || processedDocs.has(file.path) || file.path === context.activeFile.path) { return processedDocs; } try { let content = ""; const isMdFile = file.extension === "md"; if (isMdFile) { content = await getFileContent(file, context.vault); } else { const cachedData = await fileCache.getEmbeddings(file.path); if (!((_a2 = cachedData == null ? void 0 : cachedData.chunks) == null ? void 0 : _a2.length) || cachedData.mtime !== file.stat.mtime) { content = await getFileContent(file, context.vault); } } const newDoc = new Document({ pageContent: content, metadata: { source: file.path, basename: file.basename, stat: file.stat, depth, isBacklink } }); processedDocs.set(file.path, newDoc); if (isMdFile && !isBacklink) { const linkedFiles = getLinkedFiles( content, context.vault, context.metadataCache, file.path ); for (const linkedFile of linkedFiles) { processedDocs = await processDocumentForRAG( linkedFile, context, processedDocs, depth + 1, false ); } const backlinkFiles = getBacklinkFiles( file, context, processedDocs ); for (const backlinkFile of backlinkFiles) { processedDocs = await processDocumentForRAG( backlinkFile, context, processedDocs, depth, true ); } } } catch (error) { console.error(`Error processing document ${file.path}:`, error); } return processedDocs; } function getLinkedFiles(content, vault, metadataCache, currentFilePath) { const linkRegex = /\[\[([^\]|#]+)(?:#[^\]|]+)?(?:\|[^\]]+)?\]\]/g; const matches = content.matchAll(linkRegex); return Array.from(matches, (match) => match[1]).map((linkText) => { const linkPath = metadataCache.getFirstLinkpathDest( linkText, currentFilePath ); return linkPath ? vault.getAbstractFileByPath(linkPath.path) : null; }).filter( (file) => file instanceof import_obsidian4.TFile && (file.extension === "md" || file.extension === "pdf") ); } function getBacklinkFiles(file, context, processedDocs) { const resolvedLinks = context.metadataCache.resolvedLinks; const backlinkPaths = Object.entries(resolvedLinks).filter( ([sourcePath, links]) => links[file.path] && !processedDocs.has(sourcePath) ).map(([sourcePath]) => sourcePath); return backlinkPaths.map((path) => context.vault.getAbstractFileByPath(path)).filter( (backlinkFile) => backlinkFile instanceof import_obsidian4.TFile && backlinkFile.extension === "md" ); } async function createVectorStore(documents, plugin, currentDocumentPath, aiProvider, addTotalProgressSteps, updateCompletedSteps) { var _a2, _b; const embedder = new CustomEmbeddings({ aiProvider, updateCompletedSteps }); const vectorStore = new MemoryVectorStore(embedder); const chunksToEmbed = []; const embeddingsByDocument = {}; for (const doc of documents) { if (doc.metadata.source !== currentDocumentPath) { const cachedData = await fileCache.getEmbeddings( doc.metadata.source ); embeddingsByDocument[doc.metadata.source] = embeddingsByDocument[doc.metadata.source] || []; if ((_a2 = cachedData == null ? void 0 : cachedData.chunks) == null ? void 0 : _a2.length) { if (cachedData.mtime === doc.metadata.stat.mtime) { logger.debug("Using cached embedding", doc.metadata.source); cachedData == null ? void 0 : cachedData.chunks.forEach((chunk) => { const chunkDoc = new Document({ pageContent: chunk.content, metadata: { ...doc.metadata } }); embeddingsByDocument[doc.metadata.source].push({ doc: chunkDoc, embedding: chunk.embedding }); }); continue; } else { logger.warn( "Cached embedding is outdated", doc.metadata.source ); } } const content = preprocessContent(doc.pageContent); const chunks = splitContent(content); for (const chunk of chunks) { logger.table("Chunk", chunk, chunk.length); const chunkDoc = new Document({ pageContent: chunk, metadata: { ...doc.metadata } }); chunksToEmbed.push({ chunk, doc: chunkDoc }); } } } if (chunksToEmbed.length > 0) { try { addTotalProgressSteps(chunksToEmbed.length + 1); const embeddings = await embedder.embedDocuments( chunksToEmbed.map((item) => item.chunk) ); for (const embedding of embeddings) { const i = embeddings.indexOf(embedding); const { doc } = chunksToEmbed[i]; embeddingsByDocument[doc.metadata.source] = embeddingsByDocument[doc.metadata.source] || []; embeddingsByDocument[doc.metadata.source].push({ doc, embedding }); } } catch (error) { if (!((_b = aiProvider.abortController) == null ? void 0 : _b.signal.aborted)) { console.error(`Error creating embeddings:`, error); } } } for (const [source, documentWithEmbeddings] of Object.entries( embeddingsByDocument )) { for (const { doc, embedding } of documentWithEmbeddings) { await vectorStore.addVectors([embedding], [doc]); } await fileCache.setEmbeddings(source, { mtime: documentWithEmbeddings[0].doc.metadata.stat.mtime, chunks: documentWithEmbeddings.map(({ doc, embedding }) => ({ content: doc.pageContent, embedding })) }); } return vectorStore; } async function queryVectorStore(query, vectorStore) { logger.debug("Querying vector store", query); const MAX_SEARCH_RESULTS = 10; const HIGH_SCORE_THRESHOLD = 0.51; const MAX_LOW_SCORE_RESULTS = 5; const MAX_CONTEXT_LENGTH = 1e4; logger.time("Querying vector store timer"); const results = await vectorStore.similaritySearchWithScore( query, MAX_SEARCH_RESULTS ); logger.timeEnd("Querying vector store timer"); let totalLength = 0; const groupedResults = results.reduce( (acc, [doc, score]) => { const basename = doc.metadata.basename || "Unknown"; if (!acc[basename]) { acc[basename] = { highScore: [], lowScore: [], createdTime: getCreatedTime(doc) }; } const content = doc.pageContent; if (totalLength + content.length <= MAX_CONTEXT_LENGTH) { if (score >= HIGH_SCORE_THRESHOLD) { acc[basename].highScore.push(content); } else { acc[basename].lowScore.push(content); } totalLength += content.length; } return acc; }, {} ); let totalLowScoreCount = 0; const finalResults = Object.entries(groupedResults).sort(([, a], [, b]) => b.createdTime - a.createdTime).map(([basename, { highScore, lowScore }]) => { const highScoreContent = highScore.join("\n\n"); let lowScoreContent = ""; if (totalLowScoreCount < MAX_LOW_SCORE_RESULTS) { const remainingSlots = MAX_LOW_SCORE_RESULTS - totalLowScoreCount; const lowScoreToInclude = lowScore.slice(0, remainingSlots); lowScoreContent = lowScoreToInclude.join("\n\n"); totalLowScoreCount += lowScoreToInclude.length; } const content = [highScoreContent, lowScoreContent].filter(Boolean).join("\n\n"); return `[[${basename}]] ${content}`; }); return finalResults.join("\n\n").trim(); } async function clearEmbeddingsCache() { await fileCache.clearEmbeddings(); } function getCreatedTime(doc) { const frontmatterMatch = doc.pageContent.match(/^---\n([\s\S]*?)\n---/); if (frontmatterMatch) { const frontmatter = frontmatterMatch[1]; const createdMatch = frontmatter.match( /created:\s*(\d{4}-\d{2}-\d{2})/ ); if (createdMatch) { return new Date(createdMatch[1]).getTime(); } } return doc.metadata.stat.ctime; } // src/LocalGPTSettingTab.ts var SEPARATOR = "\u2702\uFE0F"; var LocalGPTSettingTab = class extends import_obsidian5.PluginSettingTab { constructor(app, plugin) { super(app, plugin); this.editEnabled = false; this.modelsOptions = {}; this.changingOrder = false; this.useFallback = false; this.selectedProvider = ""; this.plugin = plugin; } display() { const { containerEl } = this; containerEl.empty(); this.selectedProvider = this.selectedProvider || this.plugin.settings.defaults.provider; this.useFallback = this.useFallback || Boolean(this.plugin.settings.defaults.fallbackProvider); const mainProviders = { ["ollama" /* OLLAMA */]: "Ollama", ["openaiCompatible" /* OPENAI_COMPATIBLE */]: "OpenAI compatible server" }; const fallbackProviders = { ...mainProviders }; if (this.plugin.settings.defaults.provider === "ollama" /* OLLAMA */) { delete fallbackProviders["ollama" /* OLLAMA */]; fallbackProviders["ollama_fallback" /* OLLAMA_FALLBACK */] = "2\uFE0F\u20E3 Ollama"; } if (this.plugin.settings.defaults.provider === "openaiCompatible" /* OPENAI_COMPATIBLE */) { delete fallbackProviders["openaiCompatible" /* OPENAI_COMPATIBLE */]; fallbackProviders["openaiCompatible_fallback" /* OPENAI_COMPATIBLE_FALLBACK */] = "2\uFE0F\u20E3 OpenAI compatible servers"; } const selectedAIProviderSetting = new import_obsidian5.Setting(containerEl).setHeading().setName("").addDropdown( (dropdown) => dropdown.addOptions(mainProviders).setValue(String(this.plugin.settings.defaults.provider)).onChange(async (value) => { this.plugin.settings.defaults.provider = value; this.selectedProvider = value; if (this.useFallback) { this.plugin.settings.fallbackProvider = Object.keys( mainProviders ).find((key) => key !== value); } await this.plugin.saveSettings(); this.display(); }) ); selectedAIProviderSetting.nameEl.innerHTML = "

Selected AI provider

"; new import_obsidian5.Setting(containerEl).setName("Creativity").setDesc("").addDropdown((dropdown) => { dropdown.addOption("", "\u26AA None").addOptions({ low: "\uFE0F\u{1F4A1} Low", medium: "\u{1F3A8} Medium", high: "\u{1F680} High" }).setValue( String(this.plugin.settings.defaults.creativity) || "" ).onChange(async (value) => { this.plugin.settings.defaults.creativity = value; await this.plugin.saveSettings(); }); }); new import_obsidian5.Setting(containerEl).setName("Use fallback").addToggle((component) => { component.setValue(this.useFallback).onChange(async (value) => { this.useFallback = value; if (value) { const firstAvailableProvider = Object.keys(fallbackProviders)[0]; this.plugin.settings.defaults.fallbackProvider = firstAvailableProvider; this.selectedProvider = firstAvailableProvider; } else { this.plugin.settings.defaults.fallbackProvider = ""; this.selectedProvider = this.plugin.settings.defaults.provider; } await this.plugin.saveSettings(); this.display(); }); }); if (this.useFallback) { new import_obsidian5.Setting(containerEl).setName("Fallback AI provider").setDesc( "If the Default provider is not accessible the plugin will try to reach the fallback one." ).addDropdown( (dropdown) => dropdown.addOptions(fallbackProviders).setValue( String( this.plugin.settings.defaults.fallbackProvider ) ).onChange(async (value) => { this.plugin.settings.defaults.fallbackProvider = value; this.selectedProvider = value; await this.plugin.saveSettings(); this.display(); }) ); } containerEl.createEl("div", { cls: "local-gpt-settings-separator" }); containerEl.createEl("h3", { text: "Providers configuration" }); const selectedProviderConfig = this.plugin.settings.providers[this.selectedProvider]; const aiProvider = new import_obsidian5.Setting(containerEl).setHeading().setName("Configure AI provider").addDropdown( (dropdown) => dropdown.addOptions({ ...mainProviders, ...this.useFallback && { ["ollama_fallback" /* OLLAMA_FALLBACK */]: "2\uFE0F\u20E3 Ollama", ["openaiCompatible_fallback" /* OPENAI_COMPATIBLE_FALLBACK */]: "2\uFE0F\u20E3 OpenAI compatible servers" } }).setValue(String(this.selectedProvider)).onChange(async (value) => { this.selectedProvider = value; this.display(); }) ); if (selectedProviderConfig.type === "ollama" /* OLLAMA */) { new import_obsidian5.Setting(containerEl).setName("Ollama URL").setDesc("Default is http://localhost:11434").addText( (text) => text.setPlaceholder("http://localhost:11434").setValue(selectedProviderConfig.ollamaUrl).onChange(async (value) => { selectedProviderConfig.ollamaUrl = value; await this.plugin.saveSettings(); }) ); const ollamaDefaultModel = new import_obsidian5.Setting(containerEl).setName("Default model").setDesc("Name of the default Ollama model to use in prompts"); const ollamaEmbeddingModel = new import_obsidian5.Setting(containerEl).setName("Embedding model").setDesc( "Optional. Name of the Ollama embedding model to use for Enhanced Actions" ); if (selectedProviderConfig.ollamaUrl) { OllamaAIProvider.getModels(selectedProviderConfig).then((models) => { this.modelsOptions = models; ollamaDefaultModel.addDropdown( (dropdown) => dropdown.addOptions(this.modelsOptions).setValue( String( selectedProviderConfig.defaultModel ) ).onChange(async (value) => { selectedProviderConfig.defaultModel = value; await this.plugin.saveSettings(); }) ).addButton( (button) => button.setIcon("refresh-cw").onClick(async () => { this.display(); }) ); ollamaEmbeddingModel.addDropdown( (dropdown) => dropdown.addOption("", "No enhancement").addOptions(this.modelsOptions).setValue( String( selectedProviderConfig.embeddingModel ) ).onChange(async (value) => { clearEmbeddingsCache(); selectedProviderConfig.embeddingModel = value; await this.plugin.saveSettings(); }) ); }).catch(() => { ollamaDefaultModel.descEl.innerHTML = `Get the models from Ollama library or check that Ollama URL is correct.`; ollamaDefaultModel.addButton( (button) => button.setIcon("refresh-cw").onClick(async () => { this.display(); }) ); }); } } if (selectedProviderConfig.type === "openaiCompatible" /* OPENAI_COMPATIBLE */) { const openAICompatible = new import_obsidian5.Setting(containerEl).setName("OpenAI compatible server URL").setDesc("").addText( (text) => text.setPlaceholder("http://localhost:8080").setValue(selectedProviderConfig.url).onChange(async (value) => { selectedProviderConfig.url = value; await this.plugin.saveSettings(); }) ); openAICompatible.descEl.innerHTML = ` There are several options to run local OpenAI-like server: After all installation and configuration make sure that you're using compatible model.
For llama.cpp it is necessary to use models in ChatML format (e.g. Orca 2) `; const apiKey = new import_obsidian5.Setting(containerEl).setName("API key").setDesc("").addText( (text) => text.setPlaceholder("").setValue(selectedProviderConfig.apiKey).onChange(async (value) => { selectedProviderConfig.apiKey = value; await this.plugin.saveSettings(); }) ); apiKey.descEl.innerHTML = ` Optional. Check the docs if you'd like to use OpenAI servers. `; const openaiDefaultModel = new import_obsidian5.Setting(containerEl).setName("Default model").setDesc( "Optional. Name of the default model to use in prompts" ); const openaiEmbeddingModel = new import_obsidian5.Setting(containerEl).setName("Embedding model").setDesc( "Optional. Name of the embedding model to use for Enhanced Actions" ); if (selectedProviderConfig.url) { OpenAICompatibleAIProvider.getModels(selectedProviderConfig).then((models) => { openaiDefaultModel.addDropdown( (dropdown) => dropdown.addOption("", "Not specified").addOptions(models).setValue( String( selectedProviderConfig.defaultModel ) || "" ).onChange(async (value) => { selectedProviderConfig.defaultModel = value; await this.plugin.saveSettings(); }) ).addButton( (button) => button.setIcon("refresh-cw").onClick(async () => { this.display(); }) ); openaiEmbeddingModel.addDropdown( (dropdown) => dropdown.addOption("", "No enhancement").addOptions(models).setValue( String( selectedProviderConfig.embeddingModel ) || "" ).onChange(async (value) => { clearEmbeddingsCache(); selectedProviderConfig.embeddingModel = value; await this.plugin.saveSettings(); }) ); }).catch(() => { openaiDefaultModel.addButton( (button) => button.setIcon("refresh-cw").onClick(async () => { this.display(); }) ); }); } } const editingAction = this.editExistingAction || { name: "", prompt: "", model: "", temperature: void 0, system: "", replace: false }; const sharingActionsMapping = { name: "Name: ", system: "System: ", prompt: "Prompt: ", replace: "Replace: ", model: "Model: " }; containerEl.createEl("div", { cls: "local-gpt-settings-separator" }); containerEl.createEl("h3", { text: "Actions" }); if (!this.editEnabled) { const quickAdd = new import_obsidian5.Setting(containerEl).setName("Quick add").setDesc("").addText((text) => { text.inputEl.style.minWidth = "100%"; text.setPlaceholder("Paste action"); text.onChange(async (value) => { const quickAddAction = value.split(SEPARATOR).map((part) => part.trim()).reduce((acc, part) => { const foundMatchKey = Object.keys( sharingActionsMapping ).find((key) => { return part.startsWith( sharingActionsMapping[key] ); }); if (foundMatchKey) { acc[foundMatchKey] = part.substring( sharingActionsMapping[foundMatchKey].length, part.length ); } return acc; }, {}); if (quickAddAction.name) { await this.addNewAction(quickAddAction); text.setValue(""); this.display(); } }); }); quickAdd.descEl.innerHTML = `You can share the best sets prompts or get one from the community.
Important: if you already have an action with the same name it will be overwritten.`; new import_obsidian5.Setting(containerEl).setName("Add new manually").addButton( (button) => button.setIcon("plus").onClick(async () => { this.editEnabled = true; this.editExistingAction = void 0; this.display(); }) ); } else { if (this.plugin.settings.providers[this.plugin.settings.defaults.provider].type === "ollama" /* OLLAMA */) { new import_obsidian5.Setting(containerEl).setName("Model").setDesc("Optional").addDropdown((dropdown) => { dropdown.addOption("", "Default model").addOptions(this.modelsOptions).onChange(async (value) => { editingAction.model = value; }); (editingAction == null ? void 0 : editingAction.model) && dropdown.setValue(editingAction.model); }); } new import_obsidian5.Setting(containerEl).setName("Action name").addText((text) => { (editingAction == null ? void 0 : editingAction.name) && text.setValue(editingAction.name); text.inputEl.style.minWidth = "100%"; text.setPlaceholder("Summarize selection"); text.onChange(async (value) => { editingAction.name = value; }); }); new import_obsidian5.Setting(containerEl).setName("System prompt").setDesc("Optional").addTextArea((text) => { (editingAction == null ? void 0 : editingAction.system) && text.setValue(editingAction.system); text.inputEl.style.minWidth = "100%"; text.inputEl.style.minHeight = "6em"; text.inputEl.style.resize = "vertical"; text.setPlaceholder("You are a helpful assistant."); text.onChange(async (value) => { editingAction.system = value; }); }); const promptSetting = new import_obsidian5.Setting(containerEl).setName("Prompt").setDesc("").addTextArea((text) => { (editingAction == null ? void 0 : editingAction.prompt) && text.setValue(editingAction.prompt); text.inputEl.style.minWidth = "100%"; text.inputEl.style.minHeight = "6em"; text.inputEl.style.resize = "vertical"; text.setPlaceholder(""); text.onChange(async (value) => { editingAction.prompt = value; }); }); promptSetting.descEl.innerHTML = `Please read about
Prompt templating
if you want to customize
your resulting prompts`; new import_obsidian5.Setting(containerEl).setName("Replace selected text").setDesc( "If checked, the highlighted text will be replaced with a response from the model." ).addToggle((component) => { (editingAction == null ? void 0 : editingAction.replace) && component.setValue(editingAction.replace); component.onChange(async (value) => { editingAction.replace = value; }); }); const actionButtonsRow = new import_obsidian5.Setting(containerEl).setName(""); if (this.editExistingAction) { actionButtonsRow.addButton((button) => { button.buttonEl.style.marginRight = "2em"; button.setButtonText("Remove").onClick(async () => { if (!button.buttonEl.hasClass("mod-warning")) { button.setClass("mod-warning"); return; } this.plugin.settings.actions = this.plugin.settings.actions.filter( (innerAction) => innerAction !== editingAction ); await this.plugin.saveSettings(); this.editExistingAction = void 0; this.editEnabled = false; this.display(); }); }); } actionButtonsRow.addButton((button) => { button.setButtonText("Close").onClick(async () => { this.editEnabled = false; this.editExistingAction = void 0; this.display(); }); }).addButton( (button) => button.setCta().setButtonText("Save").onClick(async () => { if (!editingAction.name) { new import_obsidian5.Notice( "Please enter a name for the action." ); return; } if (!this.editExistingAction) { if (this.plugin.settings.actions.find( (action) => action.name === editingAction.name )) { new import_obsidian5.Notice( `An action with the name "${editingAction.name}" already exists.` ); return; } await this.addNewAction(editingAction); } else { if (this.plugin.settings.actions.filter( (action) => action.name === editingAction.name ).length > 1) { new import_obsidian5.Notice( `An action with the name "${editingAction.name}" already exists.` ); return; } const index = this.plugin.settings.actions.findIndex( (innerAction) => innerAction === editingAction ); this.plugin.settings.actions[index] = editingAction; } await this.plugin.saveSettings(); this.editEnabled = false; this.editExistingAction = void 0; this.display(); }) ); } containerEl.createEl("h4", { text: "Actions list" }); let defaultModel = ""; if (selectedProviderConfig.type === "ollama" /* OLLAMA */) { defaultModel = selectedProviderConfig.defaultModel; } this.plugin.settings.actions.forEach((action, actionIndex) => { const sharingString = [ action.name && `${sharingActionsMapping.name}${action.name}`, action.system && `${sharingActionsMapping.system}${action.system}`, action.prompt && `${sharingActionsMapping.prompt}${action.prompt}`, action.replace && `${sharingActionsMapping.replace}${action.replace}`, this.plugin.settings.defaults.provider === "ollama" /* OLLAMA */ && (action.model || defaultModel) && `${sharingActionsMapping.model}${action.model || defaultModel}` ].filter(Boolean).join(` ${SEPARATOR} `); if (!this.changingOrder) { let escapeTitle = function(title) { if (!title) { return ""; } return title.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, "'"); }; const actionRow = new import_obsidian5.Setting(containerEl).setName(action.name).setDesc("").addButton( (button) => button.setIcon("copy").onClick(async () => { navigator.clipboard.writeText(sharingString); new import_obsidian5.Notice("Copied"); }) ).addButton( (button) => button.setButtonText("Edit").onClick(async () => { this.editEnabled = true; this.editExistingAction = this.plugin.settings.actions.find( (innerAction) => innerAction.name == action.name ); this.display(); }) ); const systemTitle = escapeTitle(action.system); const promptTitle = escapeTitle(action.prompt); actionRow.descEl.innerHTML = [ action.system && `
${sharingActionsMapping.system}${action.system}
`, action.prompt && `
${sharingActionsMapping.prompt}${action.prompt}
`, this.plugin.settings.defaults.provider === "ollama" /* OLLAMA */ && action.model && `${sharingActionsMapping.model}${action.model}` ].filter(Boolean).join("
\n"); } else { const actionRow = new import_obsidian5.Setting(containerEl).setName(action.name).setDesc(""); if (actionIndex > 0) { actionRow.addButton( (button) => button.setIcon("arrow-up").onClick(async () => { const prev = this.plugin.settings.actions[actionIndex - 1]; this.plugin.settings.actions[actionIndex - 1] = action; this.plugin.settings.actions[actionIndex] = prev; await this.plugin.saveSettings(); this.display(); }) ); } if (actionIndex < this.plugin.settings.actions.length - 1) { actionRow.addButton( (button) => button.setIcon("arrow-down").onClick(async () => { const next = this.plugin.settings.actions[actionIndex + 1]; this.plugin.settings.actions[actionIndex + 1] = action; this.plugin.settings.actions[actionIndex] = next; await this.plugin.saveSettings(); this.display(); }) ); } } }); if (this.plugin.settings.actions.length) { new import_obsidian5.Setting(containerEl).setName("").addButton((button) => { this.changingOrder && button.setCta(); button.setButtonText(this.changingOrder ? "Done" : "Change order").onClick(async () => { this.changingOrder = !this.changingOrder; this.display(); }); }); } containerEl.createEl("h4", { text: "Danger zone" }); new import_obsidian5.Setting(containerEl).setName("Reset actions").setDesc( "\u{1F6A8} Reset all actions to the default. This cannot be undone and will delete all your custom actions." ).addButton( (button) => button.setClass("mod-warning").setButtonText("Reset").onClick(async () => { button.setDisabled(true); button.buttonEl.setAttribute("disabled", "true"); button.buttonEl.classList.remove("mod-warning"); this.plugin.settings.actions = DEFAULT_SETTINGS.actions; await this.plugin.saveSettings(); this.display(); }) ); } async addNewAction(editingAction) { const alreadyExistingActionIndex = this.plugin.settings.actions.findIndex( (action) => action.name === editingAction.name ); if (alreadyExistingActionIndex >= 0) { this.plugin.settings.actions[alreadyExistingActionIndex] = editingAction; new import_obsidian5.Notice(`Rewritten "${editingAction.name}" action`); } else { this.plugin.settings.actions = [ editingAction, ...this.plugin.settings.actions ]; new import_obsidian5.Notice(`Added "${editingAction.name}" action`); } await this.plugin.saveSettings(); } }; // src/spinnerPlugin.ts var import_state = require("@codemirror/state"); var import_view = require("@codemirror/view"); var _LoaderWidget = class extends import_view.WidgetType { toDOM(view) { return _LoaderWidget.element.cloneNode(true); } }; var LoaderWidget = _LoaderWidget; LoaderWidget.element = document.createElement("span"); (() => { _LoaderWidget.element.addClasses(["local-gpt-loading", "local-gpt-dots"]); })(); var ContentWidget = class extends import_view.WidgetType { constructor(text) { super(); this.text = text; this.dom = null; } eq(other) { return other.text === this.text; } updateText(newText) { if (this.dom && this.text !== newText) { const addedText = newText.slice(this.text.length); this.dom.textContent = newText.slice(0, -addedText.length); let lastSpan = this.dom.querySelector("span:last-child"); if (!lastSpan) { lastSpan = document.createElement("span"); this.dom.appendChild(lastSpan); } lastSpan.textContent = addedText; this.text = newText; } } toDOM(view) { if (!this.dom) { this.dom = document.createElement("div"); this.dom.addClass("local-gpt-content"); this.updateText(this.text); } return this.dom; } }; var SpinnerPlugin = class { constructor(editorView) { this.editorView = editorView; this.positions = /* @__PURE__ */ new Map(); this.decorations = import_view.Decoration.none; } show(position) { const isEndOfLine = this.isPositionAtEndOfLine( this.editorView.state, position ); this.positions.set(position, { isEndOfLine, widget: new LoaderWidget() }); this.updateDecorations(); return () => this.hide(position); } hide(position) { this.positions.delete(position); this.updateDecorations(); } updateContent(text, position) { let updated = false; const updatePosition = (data) => { if (data.widget instanceof LoaderWidget) { data.widget = new ContentWidget(text); updated = true; } else if (data.widget instanceof ContentWidget) { data.widget.updateText(text); updated = true; } }; if (position !== void 0) { const data = this.positions.get(position); if (data) updatePosition(data); } else { this.positions.forEach(updatePosition); } if (updated) { this.updateDecorations(); } } update(update) { if (update.docChanged || update.viewportChanged) { this.updateDecorations(); } } updateDecorations() { const builder = new import_state.RangeSetBuilder(); this.positions.forEach((data, position) => { builder.add( position, position, import_view.Decoration.widget({ widget: data.widget, side: data.isEndOfLine ? 1 : -1 }) ); }); this.decorations = builder.finish(); this.editorView.requestMeasure(); } isPositionAtEndOfLine(state, position) { return position === state.doc.lineAt(position).to; } }; var spinnerPlugin = import_view.ViewPlugin.fromClass(SpinnerPlugin, { decorations: (v) => v.decorations }); // src/main.ts var LocalGPT = class extends import_obsidian6.Plugin { constructor() { super(...arguments); this.abortControllers = []; this.currentPercentage = 0; this.targetPercentage = 0; this.animationFrameId = null; this.totalProgressSteps = 0; this.completedProgressSteps = 0; this.escapeHandler = (event) => { if (event.key === "Escape") { this.abortControllers.forEach( (abortControllers) => { abortControllers.abort(); } ); this.abortControllers = []; } }; } async onload() { await this.loadSettings(); this.reload(); this.app.workspace.onLayoutReady(async () => { await fileCache.init(this.app.appId); window.setTimeout(() => { this.checkUpdates(); }, 5e3); }); this.registerEditorExtension(spinnerPlugin); this.addSettingTab(new LocalGPTSettingTab(this.app, this)); this.initializeStatusBar(); } initializeStatusBar() { this.statusBarItem = this.addStatusBarItem(); this.statusBarItem.addClass("local-gpt-status"); this.statusBarItem.hide(); } processText(text, selectedText) { if (!text.trim()) { return ""; } return ["\n", text.trim().replace(selectedText, "").trim(), "\n"].join( "" ); } addCommands() { this.addCommand({ id: "context-menu", name: "Show context menu", editorCallback: (editor) => { const editorView = editor.cm; const cursorPositionFrom = editor.getCursor("from"); const cursorPositionTo = editor.getCursor("to"); const contextMenu = new import_obsidian6.Menu(); this.settings.actions.forEach((action) => { contextMenu.addItem((item) => { item.setTitle(action.name).onClick( this.runAction.bind(this, action, editor) ); }); }); const fromRect = editorView.coordsAtPos( editor.posToOffset(cursorPositionFrom) ); const toRect = editorView.coordsAtPos( editor.posToOffset(cursorPositionTo) ); contextMenu.showAtPosition({ x: fromRect.left, y: toRect.top + (editorView.defaultLineHeight || 0) }); } }); this.settings.actions.forEach((action, index) => { this.addCommand({ id: `quick-access-${index + 1}`, name: `${index + 1} | ${action.name}`, editorCallback: (editor) => { this.runAction(action, editor); } }); }); } async runAction(action, editor) { const editorView = editor.cm; const selection = editor.getSelection(); let selectedText = selection || editor.getValue(); const cursorPositionFrom = editor.getCursor("from"); const cursorPositionTo = editor.getCursor("to"); const abortController = new AbortController(); this.abortControllers.push(abortController); const spinner = editorView.plugin(spinnerPlugin) || void 0; const hideSpinner = spinner == null ? void 0 : spinner.show(editor.posToOffset(cursorPositionTo)); this.app.workspace.updateOptions(); const onUpdate = (updatedString) => { spinner.updateContent( this.processText(updatedString, selectedText) ); this.app.workspace.updateOptions(); }; const getAIProvider = (providerName) => { switch (this.settings.providers[providerName].type) { case "openaiCompatible" /* OPENAI_COMPATIBLE */: { const { url, apiKey, defaultModel, embeddingModel } = this.settings.providers[providerName]; return new OpenAICompatibleAIProvider({ url, apiKey, defaultModel, embeddingModel, abortController, onUpdate }); } case "ollama" /* OLLAMA */: default: { const { ollamaUrl, defaultModel, embeddingModel } = this.settings.providers[providerName]; return new OllamaAIProvider({ defaultModel, ollamaUrl, embeddingModel, abortController, onUpdate }); } } }; const aiProvider = getAIProvider(this.settings.defaults.provider); const regexp = /!\[\[(.+?\.(?:png|jpe?g))]]/gi; const fileNames = Array.from( selectedText.matchAll(regexp), (match) => match[1] ); selectedText = selectedText.replace(regexp, ""); const imagesInBase64 = (await Promise.all( fileNames.map((fileName) => { const filePath = this.app.metadataCache.getFirstLinkpathDest( fileName, // @ts-ignore this.app.workspace.getActiveFile().path ); if (!filePath) { return Promise.resolve(""); } return this.app.vault.adapter.readBinary(filePath.path).then((buffer) => { const bytes = new Uint8Array(buffer); const output = []; for (const byte of bytes) { output.push(String.fromCharCode(byte)); } const binString = output.join(""); return btoa(binString); }); }) )).filter(Boolean) || []; logger.time("Processing Embeddings"); const context = await this.enhanceWithContext(selectedText, aiProvider); logger.timeEnd("Processing Embeddings"); logger.debug("Selected text", selectedText); const aiRequest = { text: selectedText, action, images: imagesInBase64, options: { temperature: CREATIVITY[this.settings.defaults.creativity].temperature }, context }; aiProvider.process(aiRequest).catch((error) => { if (this.settings.defaults.fallbackProvider) { new import_obsidian6.Notice(`Action processed with a fallback`); return getAIProvider( this.settings.defaults.fallbackProvider ).process(aiRequest); } return Promise.reject(error); }).then((data) => { hideSpinner && hideSpinner(); this.app.workspace.updateOptions(); if (action.replace) { editor.replaceRange( data.trim(), cursorPositionFrom, cursorPositionTo ); } else { const isLastLine = editor.lastLine() === cursorPositionTo.line; const text = this.processText(data, selectedText); editor.replaceRange(isLastLine ? "\n" + text : text, { ch: 0, line: cursorPositionTo.line + 1 }); } }).catch((error) => { if (!abortController.signal.aborted) { new import_obsidian6.Notice(`Error while generating text: ${error.message}`); } hideSpinner && hideSpinner(); this.app.workspace.updateOptions(); }).finally(() => { logger.separator(); }); } async enhanceWithContext(selectedText, aiProvider) { var _a2, _b, _c, _d; const activeFile = this.app.workspace.getActiveFile(); if (!activeFile) { return ""; } if (!this.settings.providers[this.settings.defaults.provider].embeddingModel) { return ""; } const linkedFiles = getLinkedFiles( selectedText, this.app.vault, this.app.metadataCache, activeFile.path ); if (linkedFiles.length === 0) { return ""; } try { if ((_a2 = aiProvider.abortController) == null ? void 0 : _a2.signal.aborted) { return ""; } this.initializeProgress(); const processedDocs = await startProcessing( linkedFiles, this.app.vault, this.app.metadataCache, activeFile ); if (processedDocs.size === 0) { this.hideStatusBar(); return ""; } if ((_b = aiProvider.abortController) == null ? void 0 : _b.signal.aborted) { this.hideStatusBar(); return ""; } const vectorStore = await createVectorStore( Array.from(processedDocs.values()), this, activeFile.path, aiProvider, this.addTotalProgressSteps.bind(this), this.updateCompletedSteps.bind(this) ); if ((_c = aiProvider.abortController) == null ? void 0 : _c.signal.aborted) { this.hideStatusBar(); return ""; } const relevantContext = await queryVectorStore( selectedText, vectorStore ); this.hideStatusBar(); if (relevantContext.trim()) { return relevantContext; } } catch (error) { this.hideStatusBar(); if ((_d = aiProvider.abortController) == null ? void 0 : _d.signal.aborted) { return ""; } console.error("Error processing RAG:", error); new import_obsidian6.Notice( `Error processing related documents: ${error.message}. Continuing with original text.` ); } return ""; } onunload() { document.removeEventListener("keydown", this.escapeHandler); window.clearInterval(this.updatingInterval); if (this.animationFrameId !== null) { cancelAnimationFrame(this.animationFrameId); } } async loadSettings() { const loadedData = await this.loadData(); let needToSave = false; if (loadedData) { if (!loadedData._version || loadedData._version < 1) { needToSave = true; loadedData.providers = DEFAULT_SETTINGS.providers; loadedData.providers.ollama.ollamaUrl = loadedData.ollamaUrl; delete loadedData.ollamaUrl; loadedData.providers.ollama.defaultModel = // @ts-ignore loadedData.defaultModel; delete loadedData.defaultModel; loadedData.providers.openaiCompatible && // @ts-ignore (loadedData.providers.openaiCompatible.apiKey = ""); loadedData._version = 2; } if (loadedData._version < 3) { needToSave = true; loadedData.defaultProvider = // @ts-ignore loadedData.selectedProvider || // @ts-ignore DEFAULT_SETTINGS.defaultProvider; delete loadedData.selectedProvider; Object.keys(loadedData.providers).forEach((key) => { loadedData.providers[key].type = key; }); loadedData._version = 3; } if (loadedData._version < 4) { needToSave = true; loadedData.defaults = { provider: ( // @ts-ignore loadedData.defaultProvider || DEFAULT_SETTINGS.defaults.provider ), fallbackProvider: ( // @ts-ignore loadedData.fallbackProvider || DEFAULT_SETTINGS.defaults.fallbackProvider ), creativity: DEFAULT_SETTINGS.defaults.creativity }; delete loadedData.defaultProvider; delete loadedData.fallbackProvider; loadedData._version = 4; } if (loadedData._version < 5) { needToSave = true; Object.keys(DEFAULT_SETTINGS.providers).forEach((provider) => { if (loadedData.providers[provider]) { loadedData.providers[provider].embeddingModel = DEFAULT_SETTINGS.providers[provider].embeddingModel; } }); loadedData._version = 5; setTimeout(() => { new import_obsidian6.Notice( `\u{1F389} LocalGPT can finally use context from links! Check the Settings!`, 0 ); }, 1e4); } Object.keys(DEFAULT_SETTINGS.providers).forEach((key) => { if (loadedData.providers[key]) { return; } loadedData.providers[key] = DEFAULT_SETTINGS.providers[key]; needToSave = true; }); } this.settings = Object.assign({}, DEFAULT_SETTINGS, loadedData); if (needToSave) { await this.saveData(this.settings); } } async checkUpdates() { try { const { json: response } = await (0, import_obsidian6.requestUrl)({ url: "https://api.github.com/repos/pfrankov/obsidian-local-gpt/releases/latest", method: "GET", headers: { "Content-Type": "application/json" }, contentType: "application/json" }); if (response.tag_name !== this.manifest.version) { new import_obsidian6.Notice(`\u2B06\uFE0F Local GPT: a new version is available`); } } catch (error) { console.error("Error checking for updates:", error); } } reload() { this.onunload(); this.addCommands(); this.abortControllers = []; this.updatingInterval = window.setInterval( this.checkUpdates.bind(this), 108e5 ); document.addEventListener("keydown", this.escapeHandler); } async saveSettings() { await this.saveData(this.settings); this.reload(); } initializeProgress() { this.totalProgressSteps = 0; this.completedProgressSteps = 0; this.currentPercentage = 0; this.targetPercentage = 0; this.statusBarItem.show(); this.updateStatusBar(); } addTotalProgressSteps(steps) { this.totalProgressSteps += steps; this.updateProgressBar(); } updateCompletedSteps(steps) { this.completedProgressSteps += steps; this.updateProgressBar(); } updateProgressBar() { const newTargetPercentage = this.totalProgressSteps > 0 ? Math.round( this.completedProgressSteps / this.totalProgressSteps * 100 ) : 0; if (this.targetPercentage !== newTargetPercentage) { this.targetPercentage = newTargetPercentage; if (this.animationFrameId === null) { this.animatePercentage(); } } } updateStatusBar() { this.statusBarItem.setAttr( "data-text", this.currentPercentage ? `\u2728 Enhancing ${this.currentPercentage}%` : "\u2728 Enhancing" ); this.statusBarItem.setText(` `); } animatePercentage() { const startTime = performance.now(); const duration = 300; const animate = (currentTime) => { const elapsedTime = currentTime - startTime; const progress = Math.min(elapsedTime / duration, 1); this.currentPercentage = Math.round( this.currentPercentage + (this.targetPercentage - this.currentPercentage) * progress ); this.updateStatusBar(); if (progress < 1) { this.animationFrameId = requestAnimationFrame(animate); } else { this.animationFrameId = null; } }; this.animationFrameId = requestAnimationFrame(animate); } hideStatusBar() { this.statusBarItem.hide(); this.totalProgressSteps = 0; this.completedProgressSteps = 0; this.currentPercentage = 0; this.targetPercentage = 0; } }; /*! Bundled license information: @langchain/core/dist/utils/fast-json-patch/src/helpers.js: (*! * https://github.com/Starcounter-Jack/JSON-Patch * (c) 2017-2022 Joachim Wester * MIT licensed *) @langchain/core/dist/utils/fast-json-patch/src/duplex.js: (*! * https://github.com/Starcounter-Jack/JSON-Patch * (c) 2013-2021 Joachim Wester * MIT license *) */ /* nosourcemap */