UNPKG

obsidian-dev-utils

Version:

This is the collection of useful functions that you can use for your Obsidian plugin development

222 lines (208 loc) 15.7 kB
/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ (function initCjs() { const globalThisRecord = globalThis; globalThisRecord['__name'] ??= name; const originalRequire = require; if (originalRequire && !originalRequire.__isPatched) { // eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function. require = Object.assign( (id) => requirePatched(id), originalRequire, { __isPatched: true } ); } const newFuncs = { __extractDefault() { return extractDefault; }, process() { const browserProcess = { browser: true, cwd() { return '/'; }, env: {}, platform: 'android' }; return browserProcess; } }; for (const key of Object.keys(newFuncs)) { globalThisRecord[key] ??= newFuncs[key]?.(); } function name(obj) { return obj; } function extractDefault(module) { return module && module.__esModule && 'default' in module ? module.default : module; } const OBSIDIAN_BUILT_IN_MODULE_NAMES = [ 'obsidian', '@codemirror/autocomplete', '@codemirror/collab', '@codemirror/commands', '@codemirror/language', '@codemirror/lint', '@codemirror/search', '@codemirror/state', '@codemirror/text', '@codemirror/view', '@lezer/common', '@lezer/lr', '@lezer/highlight']; const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [ '@codemirror/closebrackets', '@codemirror/comment', '@codemirror/fold', '@codemirror/gutter', '@codemirror/highlight', '@codemirror/history', '@codemirror/matchbrackets', '@codemirror/panel', '@codemirror/rangeset', '@codemirror/rectangular-selection', '@codemirror/stream-parser', '@codemirror/tooltip']; function requirePatched(id) { if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) { return originalRequire?.(id); } // eslint-disable-next-line @typescript-eslint/no-deprecated, @typescript-eslint/no-unnecessary-condition -- We need access to app here which might not be available yet. if (globalThis?.app?.isMobile) { if (id === 'process' || id === 'node:process') { console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`); return globalThis.process; } } else { const module = originalRequire?.(id); if (module) { return extractDefault(module); } } console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`); return {}; } })(); "use strict"; 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 __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 Path_exports = {}; __export(Path_exports, { basename: () => basename, delimiter: () => delimiter, dirname: () => dirname, extname: () => extname, format: () => format, getFileName: () => getFileName, getFolderName: () => getFolderName, isAbsolute: () => isAbsolute, join: () => join, makeFileName: () => makeFileName, normalize: () => normalize, normalizeIfRelative: () => normalizeIfRelative, parse: () => parse, posix: () => posix, relative: () => relative, resolve: () => resolve, sep: () => sep, toPosixBuffer: () => toPosixBuffer, toPosixPath: () => toPosixPath }); module.exports = __toCommonJS(Path_exports); var import_path_browserify = __toESM(__extractDefault(require('path-browserify')), 1); var import_String = require('./String.cjs'); const WINDOWS_POSIX_LIKE_PATH_REG_EXP = /[a-zA-Z]:\/[^:]*$/; const posix = import_path_browserify.default.posix; const delimiter = posix.delimiter; const sep = import_path_browserify.default.posix.sep; const basename = posix.basename; const dirname = posix.dirname; const extname = posix.extname; const format = posix.format; function isAbsolute(path) { return posix.isAbsolute(path) || WINDOWS_POSIX_LIKE_PATH_REG_EXP.exec(path)?.[0] === path; } const join = posix.join; const normalize = posix.normalize; const parse = posix.parse; const relative = posix.relative; function getFileName(importMetaUrl) { return resolve(decodeURI(new URL(importMetaUrl).pathname)); } function getFolderName(importMetaUrl) { return dirname(getFileName(importMetaUrl)); } function makeFileName(fileBaseName, fileExtension) { return fileExtension ? `${fileBaseName}.${fileExtension}` : fileBaseName; } function normalizeIfRelative(path) { if (path.startsWith("/") || path.includes(":")) { return path; } return (0, import_String.ensureStartsWith)(path, "./"); } function resolve(...pathSegments) { let path = posix.resolve(...pathSegments); path = toPosixPath(path); const match = WINDOWS_POSIX_LIKE_PATH_REG_EXP.exec(path); return match?.[0] ?? path; } function toPosixBuffer(buffer) { return Buffer.from(toPosixPath(String(buffer))); } function toPosixPath(path) { return (0, import_String.replaceAll)(path, "\\", "/"); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { basename, delimiter, dirname, extname, format, getFileName, getFolderName, isAbsolute, join, makeFileName, normalize, normalizeIfRelative, parse, posix, relative, resolve, sep, toPosixBuffer, toPosixPath }); //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL1BhdGgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIHBhdGhzLlxuICovXG5cbmltcG9ydCBwYXRoQnJvd3NlcmlmeSBmcm9tICdwYXRoLWJyb3dzZXJpZnknO1xuXG5pbXBvcnQge1xuICBlbnN1cmVTdGFydHNXaXRoLFxuICByZXBsYWNlQWxsXG59IGZyb20gJy4vU3RyaW5nLnRzJztcblxuY29uc3QgV0lORE9XU19QT1NJWF9MSUtFX1BBVEhfUkVHX0VYUCA9IC9bYS16QS1aXTpcXC9bXjpdKiQvO1xuXG4vKipcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGhhbmRsaW5nIFBPU0lYIHBhdGhzLlxuICovXG5leHBvcnQgY29uc3QgcG9zaXggPSBwYXRoQnJvd3NlcmlmeS5wb3NpeDtcblxuLyoqXG4gKiBBIFBPU0lYIHBhdGggZGVsaW1pdGVyLlxuICovXG5leHBvcnQgY29uc3QgZGVsaW1pdGVyID0gcG9zaXguZGVsaW1pdGVyO1xuXG4vKipcbiAqIEEgUE9TSVggc2VnbWVudCBzZXBhcmF0b3IuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXAgPSBwYXRoQnJvd3NlcmlmeS5wb3NpeC5zZXA7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmFzZSBuYW1lIG9mIGEgZmlsZSwgb3B0aW9uYWxseSByZW1vdmluZyB0aGUgZmlsZSBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byBnZXQgdGhlIGJhc2UgbmFtZSBmcm9tLlxuICogQHBhcmFtIGV4dCAtIEFuIG9wdGlvbmFsIGV4dGVuc2lvbiB0byByZW1vdmUgZnJvbSB0aGUgYmFzZSBuYW1lLlxuICogQHJldHVybnMgVGhlIGJhc2UgbmFtZSBvZiB0aGUgZmlsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGJhc2VuYW1lID0gcG9zaXguYmFzZW5hbWU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgYSBwYXRoLlxuICpcbiAqIGBkaXJlY3RvcnlgIGlzIHVzZWQgaW5zdGVhZCBvZiBgZm9sZGVyYCB0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggYG5vZGU6cGF0aGAgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gZ2V0IHRoZSBkaXJlY3RvcnkgbmFtZSBmcm9tLlxuICogQHJldHVybnMgVGhlIGRpcmVjdG9yeSBuYW1lIG9mIHRoZSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgZGlybmFtZSA9IHBvc2l4LmRpcm5hbWU7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmlsZSBleHRlbnNpb24gb2YgYSBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gZ2V0IHRoZSBleHRlbnNpb24gZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIGV4dGVuc2lvbiBvZiB0aGUgcGF0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dG5hbWUgPSBwb3NpeC5leHRuYW1lO1xuXG4vKipcbiAqIEZvcm1hdHMgYSBwYXRoIG9iamVjdCBpbnRvIGEgcGF0aCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHBhdGhPYmplY3QgLSBUaGUgcGF0aCBvYmplY3QgdG8gZm9ybWF0LlxuICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBwYXRoIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGZvcm1hdCA9IHBvc2l4LmZvcm1hdDtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIGEgcGF0aCBpcyBhYnNvbHV0ZS5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBwb3NpeC5pc0Fic29sdXRlKHBhdGgpIHx8IFdJTkRPV1NfUE9TSVhfTElLRV9QQVRIX1JFR19FWFAuZXhlYyhwYXRoKT8uWzBdID09PSBwYXRoO1xufVxuXG4vKipcbiAqIEpvaW5zIG11bHRpcGxlIHBhdGggc2VnbWVudHMgaW50byBhIHNpbmdsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRocyAtIFRoZSBwYXRoIHNlZ21lbnRzIHRvIGpvaW4uXG4gKiBAcmV0dXJucyBUaGUgam9pbmVkIHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBqb2luID0gcG9zaXguam9pbjtcblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgcGF0aCwgcmVzb2x2aW5nICcuLicgYW5kICcuJyBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemUgPSBwb3NpeC5ub3JtYWxpemU7XG5cbi8qKlxuICogUGFyc2VzIGEgcGF0aCBzdHJpbmcgaW50byBhIHBhdGggb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggc3RyaW5nIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBwYXRoIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlID0gcG9zaXgucGFyc2U7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIG9uZSBwYXRoIHRvIGFub3RoZXIuXG4gKlxuICogQHBhcmFtIGZyb20gLSBUaGUgc3RhcnRpbmcgcGF0aC5cbiAqIEBwYXJhbSB0byAtIFRoZSBkZXN0aW5hdGlvbiBwYXRoLlxuICogQHJldHVybnMgVGhlIHJlbGF0aXZlIHBhdGggZnJvbSBgZnJvbWAgdG8gYHRvYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbGF0aXZlID0gcG9zaXgucmVsYXRpdmU7XG5cbi8qKlxuICogR2V0cyB0aGUgZmlsZSBuYW1lIGZyb20gdGhlIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAsIGNvbnZlcnRpbmcgaXQgdG8gYSBQT1NJWC1zdHlsZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBpbXBvcnRNZXRhVXJsIC0gVGhlIGBpbXBvcnQoZG90KW1ldGEoZG90KXVybGAgZnJvbSB3aGljaCB0byBleHRyYWN0IHRoZSBmaWxlIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgUE9TSVgtc3R5bGUgZmlsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUoaW1wb3J0TWV0YVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmUoZGVjb2RlVVJJKG5ldyBVUkwoaW1wb3J0TWV0YVVybCkucGF0aG5hbWUpKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBmb2xkZXIgbmFtZSBmcm9tIHRoZSBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgLCBjb252ZXJ0aW5nIGl0IHRvIGEgUE9TSVgtc3R5bGUgcGF0aC5cbiAqXG4gKiBAcGFyYW0gaW1wb3J0TWV0YVVybCAtIFRoZSBgaW1wb3J0KGRvdCltZXRhKGRvdCl1cmxgIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgZm9sZGVyIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgUE9TSVgtc3R5bGUgZm9sZGVyIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb2xkZXJOYW1lKGltcG9ydE1ldGFVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBkaXJuYW1lKGdldEZpbGVOYW1lKGltcG9ydE1ldGFVcmwpKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGZpbGUgbmFtZSBieSBhcHBlbmRpbmcgYW4gZXh0ZW5zaW9uIHRvIGEgZ2l2ZW4gZmlsZSBuYW1lLlxuICogSWYgdGhlIGV4dGVuc2lvbiBpcyBlbXB0eSwgdGhlIGZpbGUgbmFtZSBpcyByZXR1cm5lZCBhcyBpcy5cbiAqXG4gKiBAcGFyYW0gZmlsZUJhc2VOYW1lIC0gVGhlIGZpbGUgbmFtZSB0byBhcHBlbmQgdGhlIGV4dGVuc2lvbiB0by5cbiAqIEBwYXJhbSBmaWxlRXh0ZW5zaW9uIC0gVGhlIGV4dGVuc2lvbiB0byBhcHBlbmQgdG8gdGhlIGZpbGUgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIG5hbWUgd2l0aCB0aGUgZXh0ZW5zaW9uIGFwcGVuZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUZpbGVOYW1lKGZpbGVCYXNlTmFtZTogc3RyaW5nLCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZmlsZUV4dGVuc2lvbiA/IGAke2ZpbGVCYXNlTmFtZX0uJHtmaWxlRXh0ZW5zaW9ufWAgOiBmaWxlQmFzZU5hbWU7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGdpdmVuIHBhdGggYnkgZW5zdXJpbmcgaXQgaXMgcmVsYXRpdmUsIGFkZGluZyBcIi4vXCIgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aCwgc3RhcnRpbmcgd2l0aCBcIi4vXCIgaWYgaXQgd2FzIHJlbGF0aXZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSWZSZWxhdGl2ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykgfHwgcGF0aC5pbmNsdWRlcygnOicpKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICByZXR1cm4gZW5zdXJlU3RhcnRzV2l0aChwYXRoLCAnLi8nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyBhIHNlcXVlbmNlIG9mIHBhdGhzIG9yIHBhdGggc2VnbWVudHMgaW50byBhbiBhYnNvbHV0ZSBwYXRoLlxuICpcbiAqIEBwYXJhbSBwYXRoU2VnbWVudHMgLSBUaGUgc2VxdWVuY2Ugb2YgcGF0aCBzZWdtZW50cyB0byByZXNvbHZlLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGFic29sdXRlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLnBhdGhTZWdtZW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBsZXQgcGF0aCA9IHBvc2l4LnJlc29sdmUoLi4ucGF0aFNlZ21lbnRzKTtcbiAgcGF0aCA9IHRvUG9zaXhQYXRoKHBhdGgpO1xuICBjb25zdCBtYXRjaCA9IFdJTkRPV1NfUE9TSVhfTElLRV9QQVRIX1JFR19FWFAuZXhlYyhwYXRoKTtcbiAgcmV0dXJuIG1hdGNoPy5bMF0gPz8gcGF0aDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJ1ZmZlciBjb250YWluaW5nIGEgcGF0aCB0byBhIFBPU0lYLXN0eWxlIGJ1ZmZlciBieSByZXBsYWNpbmcgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtIGJ1ZmZlciAtIFRoZSBidWZmZXIgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgbmV3IGJ1ZmZlciBjb250YWluaW5nIHRoZSBQT1NJWC1zdHlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Qb3NpeEJ1ZmZlcihidWZmZXI6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIHJldHVybiBCdWZmZXIuZnJvbSh0b1Bvc2l4UGF0aChTdHJpbmcoYnVmZmVyKSkpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgZ2l2ZW4gcGF0aCB0byBhIFBPU0lYLXN0eWxlIHBhdGggYnkgcmVwbGFjaW5nIGJhY2tzbGFzaGVzIHdpdGggZm9yd2FyZCBzbGFzaGVzLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSBQT1NJWC1zdHlsZSBwYXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Qb3NpeFBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwocGF0aCwgJ1xcXFwnLCAnLycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsNkJBQTJCO0FBRTNCLG9CQUdPO0FBRVAsTUFBTSxrQ0FBa0M7QUFLakMsTUFBTSxRQUFRLHVCQUFBQSxRQUFlO0FBSzdCLE1BQU0sWUFBWSxNQUFNO0FBS3hCLE1BQU0sTUFBTSx1QkFBQUEsUUFBZSxNQUFNO0FBU2pDLE1BQU0sV0FBVyxNQUFNO0FBVXZCLE1BQU0sVUFBVSxNQUFNO0FBUXRCLE1BQU0sVUFBVSxNQUFNO0FBUXRCLE1BQU0sU0FBUyxNQUFNO0FBUXJCLFNBQVMsV0FBVyxNQUF1QjtBQUNoRCxTQUFPLE1BQU0sV0FBVyxJQUFJLEtBQUssZ0NBQWdDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtBQUN2RjtBQVFPLE1BQU0sT0FBTyxNQUFNO0FBUW5CLE1BQU0sWUFBWSxNQUFNO0FBUXhCLE1BQU0sUUFBUSxNQUFNO0FBU3BCLE1BQU0sV0FBVyxNQUFNO0FBUXZCLFNBQVMsWUFBWSxlQUErQjtBQUN6RCxTQUFPLFFBQVEsVUFBVSxJQUFJLElBQUksYUFBYSxFQUFFLFFBQVEsQ0FBQztBQUMzRDtBQVFPLFNBQVMsY0FBYyxlQUErQjtBQUMzRCxTQUFPLFFBQVEsWUFBWSxhQUFhLENBQUM7QUFDM0M7QUFVTyxTQUFTLGFBQWEsY0FBc0IsZUFBK0I7QUFDaEYsU0FBTyxnQkFBZ0IsR0FBRyxZQUFZLElBQUksYUFBYSxLQUFLO0FBQzlEO0FBUU8sU0FBUyxvQkFBb0IsTUFBc0I7QUFDeEQsTUFBSSxLQUFLLFdBQVcsR0FBRyxLQUFLLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDOUMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxhQUFPLGdDQUFpQixNQUFNLElBQUk7QUFDcEM7QUFRTyxTQUFTLFdBQVcsY0FBZ0M7QUFDekQsTUFBSSxPQUFPLE1BQU0sUUFBUSxHQUFHLFlBQVk7QUFDeEMsU0FBTyxZQUFZLElBQUk7QUFDdkIsUUFBTSxRQUFRLGdDQUFnQyxLQUFLLElBQUk7QUFDdkQsU0FBTyxRQUFRLENBQUMsS0FBSztBQUN2QjtBQVFPLFNBQVMsY0FBYyxRQUF3QjtBQUNwRCxTQUFPLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxDQUFDLENBQUM7QUFDaEQ7QUFRTyxTQUFTLFlBQVksTUFBc0I7QUFDaEQsYUFBTywwQkFBVyxNQUFNLE1BQU0sR0FBRztBQUNuQzsiLAogICJuYW1lcyI6IFsicGF0aEJyb3dzZXJpZnkiXQp9Cg==